{"version":3,"file":"ej2.min.js","sources":["../../../../node_modules/@syncfusion/ej2-base/src/util.js","../../../../node_modules/@syncfusion/ej2-base/src/dom.js","../../../../node_modules/@syncfusion/ej2-base/src/notify-property-change.js","../../../../node_modules/@syncfusion/ej2-base/src/animation.js","../../../../node_modules/@syncfusion/ej2-base/src/internationalization.js","../../../../node_modules/@syncfusion/ej2-base/src/template.js","../../../../node_modules/@syncfusion/ej2-base/src/template-engine.js","../../../../node_modules/@syncfusion/ej2-buttons/src/common/common.js","../../../../node_modules/@syncfusion/ej2-popups/src/common/position.js","../../../../node_modules/@syncfusion/ej2-popups/src/common/collision.js","../../../../node_modules/@syncfusion/ej2-popups/src/popup/popup.js","../../../../node_modules/@syncfusion/ej2-popups/src/common/resize.js","../../../../node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js","../../../../node_modules/@syncfusion/ej2-lists/src/common/list-base.js","../../../../node_modules/@syncfusion/ej2-inputs/src/maskedtextbox/base/mask-base.js","../../../../node_modules/@syncfusion/ej2-splitbuttons/src/common/common.js","../../../../node_modules/@syncfusion/ej2-dropdowns/src/common/incremental-search.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/print.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/base/util.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/aria-service.js","../../../../node_modules/@syncfusion/ej2-dropdowns/src/common/highlight-search.js","../../../../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/float-label.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/aggregate.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/datepicker-edit-cell.js","../../../../node_modules/@syncfusion/ej2-file-utils/src/encoding.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/utils.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/util.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-attributes.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/rich-text-editor.js","../../../src/ej2-1548490740246/script.js","../../../../node_modules/@syncfusion/ej2-base/src/ajax.js","../../../../node_modules/@syncfusion/ej2-base/src/event-handler.js","../../../../node_modules/@syncfusion/ej2-base/src/observer.js","../../../../node_modules/@syncfusion/ej2-base/src/base.js","../../../../node_modules/@syncfusion/ej2-base/src/browser.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","../../../../node_modules/@syncfusion/ej2-base/src/canvas-renderer.js","../../../../node_modules/@syncfusion/ej2-base/src/module-loader.js","../../../../node_modules/@syncfusion/ej2-base/src/child-property.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","../../../../node_modules/@syncfusion/ej2-base/src/hijri-parser.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","../../../../node_modules/@syncfusion/ej2-base/src/component.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","../../../../node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","../../../../node_modules/@syncfusion/ej2-base/src/draggable.js","../../../../node_modules/@syncfusion/ej2-popups/src/dialog/dialog.js","../../../../node_modules/@syncfusion/ej2-base/src/droppable.js","../../../../node_modules/@syncfusion/ej2-base/src/keyboard.js","../../../../node_modules/@syncfusion/ej2-base/src/l10n.js","../../../../node_modules/@syncfusion/ej2-base/src/svg-renderer.js","../../../../node_modules/@syncfusion/ej2-base/src/touch.js","../../../../node_modules/@syncfusion/ej2-buttons/src/button/button.js","../../../../node_modules/@syncfusion/ej2-buttons/src/check-box/check-box.js","../../../../node_modules/@syncfusion/ej2-buttons/src/radio-button/radio-button.js","../../../../node_modules/@syncfusion/ej2-buttons/src/switch/switch.js","../../../../node_modules/@syncfusion/ej2-buttons/src/chips/chip-list.js","../../../../node_modules/@syncfusion/ej2-buttons/src/chips/chip.js","../../../../node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","../../../../node_modules/@syncfusion/ej2-data/src/query.js","../../../../node_modules/@syncfusion/ej2-data/src/util.js","../../../../node_modules/@syncfusion/ej2-data/src/adaptors.js","../../../../node_modules/@syncfusion/ej2-data/src/manager.js","../../../../node_modules/@syncfusion/ej2-lists/src/list-view/list-view.js","../../../../node_modules/@syncfusion/ej2-inputs/src/input/input.js","../../../../node_modules/@syncfusion/ej2-lists/src/list-view/virtualization.js","../../../../node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","../../../../node_modules/@syncfusion/ej2-navigations/src/common/v-scroll.js","../../../../node_modules/@syncfusion/ej2-navigations/src/common/menu-base.js","../../../../node_modules/@syncfusion/ej2-navigations/src/context-menu/context-menu.js","../../../../node_modules/@syncfusion/ej2-inputs/src/numerictextbox/numerictextbox.js","../../../../node_modules/@syncfusion/ej2-inputs/src/form-validator/form-validator.js","../../../../node_modules/@syncfusion/ej2-inputs/src/maskedtextbox/maskedtextbox/maskedtextbox.js","../../../../node_modules/@syncfusion/ej2-inputs/src/slider/slider.js","../../../../node_modules/@syncfusion/ej2-calendars/src/timepicker/timepicker.js","../../../../node_modules/@syncfusion/ej2-inputs/src/uploader/uploader.js","../../../../node_modules/@syncfusion/ej2-splitbuttons/src/drop-down-button/drop-down-button.js","../../../../node_modules/@syncfusion/ej2-splitbuttons/src/split-button/split-button.js","../../../../node_modules/@syncfusion/ej2-splitbuttons/src/progress-button/progress-button.js","../../../../node_modules/@syncfusion/ej2-splitbuttons/src/button-group/button-group.js","../../../../node_modules/@syncfusion/ej2-inputs/src/color-picker/color-picker.js","../../../../node_modules/@syncfusion/ej2-inputs/src/textbox/textbox.js","../../../../node_modules/@syncfusion/ej2-calendars/src/calendar/calendar.js","../../../../node_modules/@syncfusion/ej2-calendars/src/datepicker/datepicker.js","../../../../node_modules/@syncfusion/ej2-calendars/src/calendar/islamic.js","../../../../node_modules/@syncfusion/ej2-calendars/src/daterangepicker/daterangepicker.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/base/enum.js","../../../../node_modules/@syncfusion/ej2-calendars/src/datetimepicker/datetimepicker.js","../../../../node_modules/@syncfusion/ej2-dropdowns/src/drop-down-base/drop-down-base.js","../../../../node_modules/@syncfusion/ej2-dropdowns/src/drop-down-list/drop-down-list.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/value-formatter.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/models/column.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/base/constant.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/checkbox-filter.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/data.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/models/row.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/models/cell.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-merge-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/row-model-generator.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/summary-model-generator.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/group-model-generator.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/content-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-cell-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/stacked-cell-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/indent-cell-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/caption-cell-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/expand-cell-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-indent-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-header-indent-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-expand-cell-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-drop-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-header-indent-render.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/render.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/cell-render-factory.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/service-locator.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/renderer-factory.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/width-controller.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/focus-strategy.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/models/page-settings.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/selection.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/search.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/show-hide.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/scroll.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/models/aggregate.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/clipboard.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/base/grid.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/sort.js","../../../../node_modules/@syncfusion/ej2-grids/src/pager/numeric-container.js","../../../../node_modules/@syncfusion/ej2-grids/src/pager/pager-message.js","../../../../node_modules/@syncfusion/ej2-grids/src/pager/pager.js","../../../../node_modules/@syncfusion/ej2-dropdowns/src/combo-box/combo-box.js","../../../../node_modules/@syncfusion/ej2-dropdowns/src/auto-complete/auto-complete.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/edit.js","../../../../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/multi-select.js","../../../../node_modules/@syncfusion/ej2-grids/src/pager/pager-dropdown.js","../../../../node_modules/@syncfusion/ej2-grids/src/pager/external-message.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/page.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-cell-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-operator.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/string-filter-ui.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/number-filter-ui.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-filter-ui.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/date-filter-ui.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-renderer.js","../../../../node_modules/@syncfusion/ej2-navigations/src/toolbar/toolbar.js","../../../../node_modules/@syncfusion/ej2-navigations/src/accordion/accordion.js","../../../../node_modules/@syncfusion/ej2-navigations/src/menu/menu.js","../../../../node_modules/@syncfusion/ej2-navigations/src/tab/tab.js","../../../../node_modules/@syncfusion/ej2-navigations/src/treeview/treeview.js","../../../../node_modules/@syncfusion/ej2-navigations/src/sidebar/sidebar.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-filter.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/filter.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/resize.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/reorder.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/row-reorder.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/group.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/detail-row.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/toolbar.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/footer-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/summary-cell-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/intersection-observer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/virtual-row-model-generator.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/virtual-content-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/virtual-scroll.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/inline-edit-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/batch-edit-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/dialog-edit-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/edit-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-edit-cell.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/dropdown-edit-cell.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/numeric-edit-cell.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/default-edit-cell.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/normal-edit.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/inline-edit.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/batch-edit.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/dialog-edit.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/template-edit-cell.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/column-chooser.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-string.js","../../../../node_modules/@syncfusion/ej2-excel-export/src/cell-style.js","../../../../node_modules/@syncfusion/ej2-excel-export/src/cell.js","../../../../node_modules/@syncfusion/ej2-excel-export/src/column.js","../../../../node_modules/@syncfusion/ej2-excel-export/src/row.js","../../../../node_modules/@syncfusion/ej2-excel-export/src/worksheets.js","../../../../node_modules/@syncfusion/ej2-excel-export/src/worksheet.js","../../../../node_modules/@syncfusion/ej2-file-utils/src/save.js","../../../../node_modules/@syncfusion/ej2-file-utils/src/xml-writer.js","../../../../node_modules/@syncfusion/ej2-file-utils/src/stream-writer.js","../../../../node_modules/@syncfusion/ej2-compression/src/compression-writer.js","../../../../node_modules/@syncfusion/ej2-compression/src/zip-archive.js","../../../../node_modules/@syncfusion/ej2-excel-export/src/value-formatter.js","../../../../node_modules/@syncfusion/ej2-excel-export/src/csv-helper.js","../../../../node_modules/@syncfusion/ej2-excel-export/src/blob-helper.js","../../../../node_modules/@syncfusion/ej2-excel-export/src/workbook.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/export-helper.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-export.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/dictionary.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-name.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-operators.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-dictionary-properties.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-dictionary.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-number.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-array.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-stream.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/enum.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-reference.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/actions/action.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/actions/uri-action.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-color.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/enum.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/drawing/pdf-drawing.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-brush.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-solid-brush.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-string-format.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/string-layouter.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/string-tokenizer.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-font.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/enum.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-writer.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-main-object-collection.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/cross-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document-base.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-catalog.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/enum.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-cross-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-size.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-margins.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/image-decoder.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-settings.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-stream-writer.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-pen.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-transformation-matrix.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/constants.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/object-object-pair/dictionary.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-transparency.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field-info-collection.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/graphics-element.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field-info.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/byte-array.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-boolean.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/enum.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/unit-convertor.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/pdf-image.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/pdf-bitmap.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-table-info.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-name-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-name-record.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-head-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-metrics.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-horizontal-header-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-OS2-Table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-post-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-long-hor-metric.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-cmap-sub-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-cmap-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-glyph-info.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-loca-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-apple-cmap-sub-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-glyph-header.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/big-endian-writer.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-reader.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-font-metrics.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/unicode-true-type-font.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl/rtl-text-shape.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl/rtl-bidirectional.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl-renderer.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-graphics.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-layer.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-collection.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-layer-collection.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/pdf-template.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-resources.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-base.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/annotation-collection.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/page-added-event-arguments.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-page-collection.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document-template.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-templates.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-collection.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-document-page-collection.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-cache-collection.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-standard-font-metrics-factory.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-standard-font.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/annotation.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/link-annotation.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/action-link-annotation.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/document-link-annotation.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/element-layouter.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/layout-element.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/text-layouter.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/enum.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/text-element.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/uri-annotation.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/pdf-text-web-link.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-numbers-convertor.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-template-value-pair.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/multiple-value-field.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-page-number-field.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/composite-field.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/single-value-field.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/page-count-field.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-destination.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/tables/light-tables/enum.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-true-type-font.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-template-element.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/styles/pdf-borders.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/styles/style.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-cell.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/enum.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-column.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-row.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid.js","../../../../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/layout/grid-layouter.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/pdf-export.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/command-column-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/command-column.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/context-menu.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/services/freeze-row-model-generator.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/renderer/freeze-renderer.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/freeze.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/column-menu.js","../../../../node_modules/@syncfusion/ej2-grids/src/grid/actions/foreign-key.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/constant.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/classes.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/items.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/default-locale.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/toolbar-renderer.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-toolbar.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/dropdown-buttons.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/service-locator.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/renderer-factory.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar-action.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/keyboard.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/color-picker.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-quick-toolbar.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/popup-renderer.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/quick-toolbar.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/count.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/markdown-selection.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/markdown-toolbar-status.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/execute-command-callback.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/common/constant.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/formatter.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/base/constant.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/lists.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/formats.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/md-selection-formats.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/common/config.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/undo.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/link.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/table.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/clearformat.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/base/markdown-parser.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/markdown-formatter.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/markdown-renderer.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/markdown-editor.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/constant.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/selection/selection.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/dom-node.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/lists.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/formats.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/insert-methods.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/nodecutter.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/link.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/alignments.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/indents.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/classes.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/image.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/table.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/isformatted.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-commands.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-exec.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml-exec.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat-exec.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/undo.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/editor-manager.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/html-formatter.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/toolbar-status.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-toolbar-status.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/content-renderer.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/iframe-content-renderer.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-editor.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/render.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/link-module.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/image-module.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/view-source.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/table-module.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/interface.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/toolbar-settings.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/iframe-settings.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/inline-mode.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/full-screen.js","../../../../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/rich-text-editor.js"],"sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\nexport function getValue(nameSpace, obj) {\n /* tslint:disable no-any */\n var value = obj;\n var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @return {void}\n * @private\n */\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} params - String value to the get the inner object\n * @return {void}\n * @private\n */\nexport function deleteObject(obj, key) {\n delete obj[key];\n}\n/**\n * Check weather the given argument is only object.\n * @param {any} obj - Object which is need to check.\n * @return {boolean}\n * @private\n */\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @return {any}\n * @private\n */\nexport function getEnumValue(enumObject, enumValue) {\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @return {void}\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[deepmerge]) && (temrObj[deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {\n extend(temrObj[key], temrObj[key], tempProp[key], true);\n }\n else {\n temrObj[key] = tempProp[key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @return {Object}\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied || {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n if (deep && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n result[key] = extend({}, clone, copy, deep);\n }\n else {\n clone = src ? src : [];\n result[key] = extend([], clone, copy, deep);\n }\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @return {Function}\n * @private\n */\nexport function debounce(eventFunction, delay) {\n var out;\n // tslint:disable-next-line\n return function () {\n var _this = this;\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n// Added since lint ignored after added '//tslint:disable-next-line' \n/* tslint:disable:no-any */\n/**\n * To convert the object to string for query url\n * @param {Object} data\n * @returns string\n * @private\n */\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('link, style'));\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[i].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + '');\n printWindow.document.close();\n printWindow.focus();\n // tslint:disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n * @param {number|string} value\n * @return {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result === 'auto' || result.indexOf('%') !== -1 || result.indexOf('px') !== -1) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\nexport function getInstance(element, component) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\nexport function addInstance(element, instance) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n elem[instances].push(instance);\n }\n else {\n elem[instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n * @return {any}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function uniqueID() {\n // tslint:disable-next-line:no-any\n if ((typeof window) === 'undefined') {\n return;\n }\n // tslint:disable-next-line:no-any\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[i];\n }\n return ret;\n}\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n * @param tagName - Name of the tag, id and class names.\n * @param properties - Object to set properties in the element.\n * @param properties.id - To set the id to the created element.\n * @param properties.className - To add classes to the element.\n * @param properties.innerHTML - To set the innerHTML to element.\n * @param properties.styles - To set the some custom styles to element.\n * @param properties.attrs - To set the attributes to element.\n * @private\n */\nexport function createElement(tagName, properties) {\n //tslint:disable-next-line\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n if (ele.className !== '') {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n ele.classList.remove(className);\n }\n }\n }\n return elements;\n}\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n * @param {Element|Node} element - An element the need to check visibility\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function prepend(fromElements, toElement) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function append(fromElements, toElement) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.appendChild(docFrag);\n return fromElements;\n}\n/**\n * The function used to remove the element from the\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\nexport function detach(element) {\n var parentNode = element.parentNode;\n return parentNode.removeChild(element);\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, attributes[key]);\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function select(selector, context) {\n if (context === void 0) { context = document; }\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function selectAll(selector, context) {\n if (context === void 0) { context = document; }\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * Returns single closest parent element based on class selector.\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param {Element|Node} element - An element that need to get siblings.\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal = element.getAttribute(property);\n if (isNullOrUndefined(attrVal)) {\n element.setAttribute(property, value.toString());\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n // tslint:disable-next-line:no-any\n element.style[key] = attrs[key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @return {void}\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\nexport function matches(element, selector) {\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue.length;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[i], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[i], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[i], true]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[curKey] = defaultValue;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[curKey] !== newValue) {\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Method used to create property. General syntax below.\n * @param {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n * @param {T} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n * @param {Function} defaultType - Specifies the default value of property.\n * @param {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n * @param {T[]} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n * @param {T[]} defaultType - Specifies the default type of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n * @param {Function} defaultValue? - Specifies the default value of property.\n * @param {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n /* tslint:disable no-any */\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\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 { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @return {void}\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n };\n /**\n * Triggers animation\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var startTime = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element \n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame \n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n * @param {AnimationModel} options\n * @returns {AnimationModel}\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n */\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n * @private\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n * @private\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n var Animation_1;\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n *
\n * \n * ```\n * @private\n * @param HTMLElement element - Target element\n * @param RippleOptions rippleOptions - Ripple options .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return Function;\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n * @private\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberParser = function (options) {\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date}\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number}\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData);\n };\n /**\n * Returns the First Day of the Week\n * @returns {number}\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n /* tslint:disable no-any */\n var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(\\/if|\\/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\n/**\n * The function to set regular expression for template expression string.\n * @param {RegExp} value - Value expression.\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper? - Helper functions as an object.\n * @private\n */\nexport function compile(template, helper) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper);\n var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\";\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n// function used to evaluate the function expression\nfunction evalExp(str, nameSpace, helper) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORD, function (strs) {\n strs = strs.trim();\n return addNameSpace(strs, !(QUOTES.test(strs)) && (localKeys.indexOf(strs) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(',', nameSpace + '.'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys)) +\n '+\"';\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n //handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition \n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else {\n // evaluate normal expression\n cnt = '\"+' + addNameSpace(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '+\"';\n }\n return cnt;\n });\n}\nfunction addNameSpace(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nvar HAS_ROW = /^[\\n\\r.]+\\ containerWidth) {\n if (overLeft > 0 && overRight <= 0) {\n position.left = containerRight - elemData.width;\n }\n else if (overRight > 0 && overLeft <= 0) {\n position.left = containerLeft;\n }\n else {\n position.left = overLeft > overRight ? (containerRight - elemData.width) : containerLeft;\n }\n }\n else if (overLeft > 0) {\n position.left += overLeft;\n }\n else if (overRight > 0) {\n position.left -= overRight;\n }\n }\n if (axis.Y) {\n var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n var containerTop = ContainerTop();\n var containerBottom = ContainerBottom();\n var overTop = containerTop - position.top;\n var overBottom = position.top + elemData.height - containerBottom;\n if (elemData.height > containerHeight) {\n if (overTop > 0 && overBottom <= 0) {\n position.top = containerBottom - elemData.height;\n }\n else if (overBottom > 0 && overTop <= 0) {\n position.top = containerTop;\n }\n else {\n position.top = overTop > overBottom ? (containerBottom - elemData.height) : containerTop;\n }\n }\n else if (overTop > 0) {\n position.top += overTop;\n }\n else if (overBottom > 0) {\n position.top -= overBottom;\n }\n }\n return position;\n}\nexport function isCollide(element, viewPortElement, x, y) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n var elemOffset = calculatePosition(element, 'left', 'top');\n if (x) {\n elemOffset.left = x;\n }\n if (y) {\n elemOffset.top = y;\n }\n var data = [];\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n var elementRect = element.getBoundingClientRect();\n var top = elemOffset.top;\n var left = elemOffset.left;\n var right = elemOffset.left + elementRect.width;\n var bottom = elemOffset.top + elementRect.height;\n var topData = '';\n var leftData = '';\n var yAxis = topCollideCheck(top, bottom);\n var xAxis = leftCollideCheck(left, right);\n if (yAxis.topSide) {\n data.push('top');\n }\n if (xAxis.rightSide) {\n data.push('right');\n }\n if (xAxis.leftSide) {\n data.push('left');\n }\n if (yAxis.bottomSide) {\n data.push('bottom');\n }\n return data;\n}\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, axis, fixedParent) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: true, Y: true }; }\n if (!target || !element || !positionX || !positionY || (!axis.X && !axis.Y)) {\n return;\n }\n var tEdge = { TL: null,\n TR: null,\n BL: null,\n BR: null };\n var eEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n };\n var elementRect = element.getBoundingClientRect();\n var pos = {\n posX: positionX, posY: positionY, offsetX: offsetX, offsetY: offsetY, position: { left: 0, top: 0 }\n };\n targetContainer = viewPortElement;\n parentDocument = target.ownerDocument;\n updateElementData(target, tEdge, pos, fixedParent, elementRect);\n setPosition(eEdge, pos, elementRect);\n if (axis.X) {\n leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n if (axis.Y && tEdge.TL.top > -1) {\n topFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n setPopup(element, pos, elementRect);\n}\nfunction setPopup(element, pos, elementRect) {\n var left = 0;\n var top = 0;\n if (element.offsetParent != null\n && (getComputedStyle(element.offsetParent).position === 'absolute' ||\n getComputedStyle(element.offsetParent).position === 'relative')) {\n var data = calculatePosition(element.offsetParent, 'left', 'top', false, elementRect);\n left = data.left;\n top = data.top;\n }\n element.style.top = (pos.position.top + pos.offsetY - (top)) + 'px';\n element.style.left = (pos.position.left + pos.offsetX - (left)) + 'px';\n}\nfunction updateElementData(target, edge, pos, fixedParent, elementRect) {\n pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent, elementRect);\n edge.TL = calculatePosition(target, 'left', 'top', fixedParent, elementRect);\n edge.TR = calculatePosition(target, 'right', 'top', fixedParent, elementRect);\n edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent, elementRect);\n edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent, elementRect);\n}\nfunction setPosition(eStatus, pos, elementRect) {\n eStatus.TL = { top: pos.position.top + pos.offsetY, left: pos.position.left + pos.offsetX };\n eStatus.TR = { top: eStatus.TL.top, left: eStatus.TL.left + elementRect.width };\n eStatus.BL = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left };\n eStatus.BR = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left + elementRect.width };\n}\nfunction leftCollideCheck(left, right) {\n var leftSide = false;\n var rightSide = false;\n if (((left - getBodyScrollLeft()) < ContainerLeft())) {\n leftSide = true;\n }\n if (right > ContainerRight()) {\n rightSide = true;\n }\n return { leftSide: leftSide, rightSide: rightSide };\n}\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n if ((tEdge.TL.left - getBodyScrollLeft()) <= ContainerLeft()) {\n collideSide.leftSide = false;\n }\n if (tEdge.TR.left >= ContainerRight()) {\n collideSide.rightSide = false;\n }\n if ((collideSide.leftSide && !collideSide.rightSide) || (!collideSide.leftSide && collideSide.rightSide)) {\n if (pos.posX === 'right') {\n pos.posX = 'left';\n }\n else {\n pos.posX = 'right';\n }\n pos.offsetX = pos.offsetX + elementRect.width;\n pos.offsetX = -1 * pos.offsetX;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n leftFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n if ((tEdge.TL.top - getBodyScrollTop()) <= ContainerTop()) {\n collideSide.topSide = false;\n }\n if (tEdge.BL.top >= ContainerBottom()) {\n collideSide.bottomSide = false;\n }\n if ((collideSide.topSide && !collideSide.bottomSide) || (!collideSide.topSide && collideSide.bottomSide)) {\n if (pos.posY === 'top') {\n pos.posY = 'bottom';\n }\n else {\n pos.posY = 'top';\n }\n pos.offsetY = pos.offsetY + elementRect.height;\n pos.offsetY = -1 * pos.offsetY;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false, elementRect);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n topFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topCollideCheck(top, bottom) {\n var topSide = false;\n var bottomSide = false;\n if ((top - getBodyScrollTop()) < ContainerTop()) {\n topSide = true;\n }\n if (bottom > ContainerBottom()) {\n bottomSide = true;\n }\n return { topSide: topSide, bottomSide: bottomSide };\n}\nfunction getTargetContainerWidth() {\n return targetContainer.getBoundingClientRect().width;\n}\nfunction getTargetContainerHeight() {\n return targetContainer.getBoundingClientRect().height;\n}\nfunction getTargetContainerLeft() {\n return targetContainer.getBoundingClientRect().left;\n}\nfunction getTargetContainerTop() {\n return targetContainer.getBoundingClientRect().top;\n}\nfunction ContainerTop() {\n if (targetContainer) {\n return getTargetContainerTop();\n }\n return 0;\n}\nfunction ContainerLeft() {\n if (targetContainer) {\n return getTargetContainerLeft();\n }\n return 0;\n}\nfunction ContainerRight() {\n if (targetContainer) {\n return (getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth());\n }\n return (getBodyScrollLeft() + getViewPortWidth());\n}\nfunction ContainerBottom() {\n if (targetContainer) {\n return (getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight());\n }\n return (getBodyScrollTop() + getViewPortHeight());\n}\nfunction getBodyScrollTop() {\n // if(targetContainer)\n // return targetContainer.scrollTop;\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\nfunction getBodyScrollLeft() {\n // if(targetContainer)\n // return targetContainer.scrollLeft;\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\nfunction getViewPortHeight() {\n return window.innerHeight;\n}\nfunction getViewPortWidth() {\n return window.innerWidth;\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 { setStyleAttribute, addClass, removeClass, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { calculatePosition, calculateRelativeBasedPosition } from '../common/position';\nimport { Animation, Property, Event, Component } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { flip, fit, isCollide } from '../common/collision';\n/**\n * Specifies the offset position values.\n */\nvar PositionData = /** @class */ (function (_super) {\n __extends(PositionData, _super);\n function PositionData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('left')\n ], PositionData.prototype, \"X\", void 0);\n __decorate([\n Property('top')\n ], PositionData.prototype, \"Y\", void 0);\n return PositionData;\n}(ChildProperty));\nexport { PositionData };\n// don't use space in classNames\nvar CLASSNAMES = {\n ROOT: 'e-popup',\n RTL: 'e-rtl',\n OPEN: 'e-popup-open',\n CLOSE: 'e-popup-close'\n};\n/**\n * Represents the Popup Component\n * ```html\n *
\n *
Popup Content
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup(element, options) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Popup.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 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'zIndex':\n setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'position':\n case 'relateTo':\n this.refreshPosition();\n break;\n case 'offsetX':\n var x = newProp.offsetX - oldProp.offsetX;\n this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n break;\n case 'offsetY':\n var y = newProp.offsetY - oldProp.offsetY;\n this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n break;\n case 'content':\n this.setContent();\n break;\n case 'actionOnScroll':\n if (newProp.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n else {\n this.unwireScrollEvents();\n }\n break;\n }\n }\n };\n /**\n * gets the Component module name.\n * @private\n */\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * gets the persisted state properties of the Component.\n */\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\n */\n Popup.prototype.destroy = function () {\n this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL);\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Popup.prototype.render = function () {\n this.element.classList.add(CLASSNAMES.ROOT);\n var styles = {};\n if (this.zIndex !== 1000) {\n styles.zIndex = this.zIndex;\n }\n if (this.width !== 'auto') {\n styles.width = formatUnit(this.width);\n }\n if (this.height !== 'auto') {\n styles.height = formatUnit(this.height);\n }\n setStyleAttribute(this.element, styles);\n this.fixedParent = false;\n this.setEnableRtl();\n this.setContent();\n this.wireEvents();\n };\n Popup.prototype.wireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n }\n if (this.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n };\n Popup.prototype.wireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n }\n }\n };\n Popup.prototype.unwireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n }\n if (this.actionOnScroll !== 'none') {\n this.unwireScrollEvents();\n }\n };\n Popup.prototype.unwireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n }\n }\n };\n Popup.prototype.getRelateToElement = function () {\n var relateToElement = this.relateTo === '' || isNullOrUndefined(this.relateTo) ?\n document.body : this.relateTo;\n this.setProperties({ relateTo: relateToElement }, true);\n return ((typeof this.relateTo) === 'string') ?\n document.querySelector(this.relateTo) : this.relateTo;\n };\n Popup.prototype.scrollRefresh = function (e) {\n if (this.actionOnScroll === 'reposition') {\n if (!(this.element.offsetParent === e.target ||\n (this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' &&\n e.target.parentElement == null))) {\n this.refreshPosition();\n }\n }\n else if (this.actionOnScroll === 'hide') {\n this.hide();\n }\n if (this.actionOnScroll !== 'none') {\n if (this.getRelateToElement()) {\n var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n if (!targetVisible && !this.targetInvisibleStatus) {\n this.trigger('targetExitViewport');\n this.targetInvisibleStatus = true;\n }\n else if (targetVisible) {\n this.targetInvisibleStatus = false;\n }\n }\n }\n };\n /**\n * This method is to get the element visibility on viewport when scroll\n * the page. This method will returns true even though 1 px of element\n * part is in visible.\n */\n Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n var scrollParents = this.getScrollableParent(relateToElement);\n for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n continue;\n }\n else {\n return false;\n }\n }\n return true;\n };\n Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n var rect = this.checkGetBoundingClientRect(relateToElement);\n if (!rect.height || !rect.width) {\n return false;\n }\n if (!isNullOrUndefined(this.checkGetBoundingClientRect(scrollElement))) {\n var parent_4 = scrollElement.getBoundingClientRect();\n return !(rect.bottom < parent_4.top) &&\n (!(rect.bottom > parent_4.bottom) &&\n (!(rect.right > parent_4.right) &&\n !(rect.left < parent_4.left)));\n }\n else {\n var win = window;\n var windowView = {\n top: win.scrollY,\n left: win.scrollX,\n right: win.scrollX + win.outerWidth,\n bottom: win.scrollY + win.outerHeight\n };\n var off = calculatePosition(relateToElement);\n var ele = {\n top: off.top,\n left: off.left,\n right: off.left + rect.width,\n bottom: off.top + rect.height\n };\n var elementView = {\n top: windowView.bottom - ele.top,\n left: windowView.right - ele.left,\n bottom: ele.bottom - windowView.top,\n right: ele.right - windowView.left\n };\n return elementView.top > 0\n && elementView.left > 0\n && elementView.right > 0\n && elementView.bottom > 0;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Popup.prototype.preRender = function () {\n //There is no event handler\n };\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\n this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n };\n Popup.prototype.setContent = function () {\n if (!isNullOrUndefined(this.content)) {\n this.element.innerHTML = '';\n if (typeof (this.content) === 'string') {\n this.element.textContent = this.content;\n }\n else {\n this.element.appendChild(this.content);\n }\n }\n };\n Popup.prototype.orientationOnChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.refreshPosition();\n }, 200);\n };\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n */\n Popup.prototype.refreshPosition = function (target, collision) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n if (!collision) {\n this.checkCollision();\n }\n };\n Popup.prototype.reposition = function () {\n var pos;\n var position;\n var relateToElement = this.getRelateToElement();\n if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n pos = { left: this.position.X, top: this.position.Y };\n }\n else if ((typeof this.position.X === 'string' && typeof this.position.Y === 'number') ||\n (typeof this.position.X === 'number' && typeof this.position.Y === 'string')) {\n var display = this.element.style.display;\n var parentDisplay = void 0;\n this.element.style.display = 'block';\n if (this.element.classList.contains('e-dlg-modal')) {\n parentDisplay = this.element.parentElement.style.display;\n this.element.parentElement.style.display = 'block';\n }\n position = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n if (typeof this.position.X === 'string') {\n pos = { left: position.left, top: this.position.Y };\n }\n else {\n pos = { left: this.position.X, top: position.top };\n }\n this.element.style.display = display;\n if (this.element.classList.contains('e-dlg-modal')) {\n this.element.parentElement.style.display = parentDisplay;\n }\n }\n else if (relateToElement) {\n var display = this.element.style.display;\n this.element.style.display = 'block';\n pos = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n this.element.style.display = display;\n }\n else {\n pos = { left: 0, top: 0 };\n }\n if (!isNullOrUndefined(pos)) {\n this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n }\n };\n Popup.prototype.checkGetBoundingClientRect = function (ele) {\n var eleRect;\n try {\n eleRect = ele.getBoundingClientRect();\n return eleRect;\n }\n catch (error) {\n return null;\n }\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n var eleRect = this.checkGetBoundingClientRect(ele);\n var anchorRect = this.checkGetBoundingClientRect(anchorEle);\n if (isNullOrUndefined(eleRect) || isNullOrUndefined(anchorRect)) {\n return null;\n }\n var anchor = anchorEle;\n var anchorPos = { left: 0, top: 0 };\n if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n anchorPos = calculatePosition(anchorEle);\n }\n else {\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName !== 'BODY')) {\n ele = ele.parentElement;\n }\n anchorPos = calculateRelativeBasedPosition(anchor, ele);\n }\n switch (position.X) {\n default:\n case 'left':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth / 2 - eleRect.width / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width / 2 - eleRect.width / 2);\n }\n else {\n anchorPos.left += (anchorRect.width / 2);\n }\n break;\n case 'right':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth - eleRect.width);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width - eleRect.width);\n }\n else {\n anchorPos.left += (anchorRect.width);\n }\n break;\n }\n switch (position.Y) {\n default:\n case 'top':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight / 2 - eleRect.height / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height / 2 - eleRect.height / 2);\n }\n else {\n anchorPos.top += (anchorRect.height / 2);\n }\n break;\n case 'bottom':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight - eleRect.height);\n }\n else if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height - eleRect.height);\n }\n else {\n anchorPos.top += (anchorRect.height);\n }\n break;\n }\n anchorPos.left += offsetX;\n anchorPos.top += offsetY;\n return anchorPos;\n };\n Popup.prototype.callFlip = function (param) {\n var relateToElement = this.getRelateToElement();\n flip(this.element, relateToElement, this.offsetX, this.offsetY, this.position.X, this.position.Y, this.viewPortElement, param, this.fixedParent);\n };\n Popup.prototype.callFit = function (param) {\n if (isCollide(this.element, this.viewPortElement).length !== 0) {\n if (isNullOrUndefined(this.viewPortElement)) {\n var data = fit(this.element, this.viewPortElement, param);\n this.element.style.left = data.left + 'px';\n this.element.style.top = data.top + 'px';\n }\n else {\n var elementRect = this.checkGetBoundingClientRect(this.element);\n var viewPortRect = this.checkGetBoundingClientRect(this.viewPortElement);\n if (isNullOrUndefined(elementRect) || isNullOrUndefined(viewPortRect)) {\n return null;\n }\n if (param && param.Y === true) {\n if (viewPortRect.top > elementRect.top) {\n this.element.style.top = '0px';\n }\n else if (viewPortRect.bottom < elementRect.bottom) {\n this.element.style.top = parseInt(this.element.style.top, 10) - (elementRect.bottom - viewPortRect.bottom) + 'px';\n }\n }\n if (param && param.X === true) {\n if (viewPortRect.right < elementRect.right) {\n this.element.style.left = parseInt(this.element.style.left, 10) - (elementRect.right - viewPortRect.right) + 'px';\n }\n else if (viewPortRect.left > elementRect.left) {\n this.element.style.left = parseInt(this.element.style.left, 10) + (viewPortRect.left - elementRect.left) + 'px';\n }\n }\n }\n }\n };\n Popup.prototype.checkCollision = function () {\n var horz = this.collision.X;\n var vert = this.collision.Y;\n if (horz === 'none' && vert === 'none') {\n return;\n }\n if (horz === 'flip' && vert === 'flip') {\n this.callFlip({ X: true, Y: true });\n }\n else if (horz === 'fit' && vert === 'fit') {\n this.callFit({ X: true, Y: true });\n }\n else {\n if (horz === 'flip') {\n this.callFlip({ X: true, Y: false });\n }\n else if (vert === 'flip') {\n this.callFlip({ Y: true, X: false });\n }\n if (horz === 'fit') {\n this.callFit({ X: true, Y: false });\n }\n else if (vert === 'fit') {\n this.callFit({ X: false, Y: true });\n }\n }\n };\n /**\n * Shows the popup element from screen.\n * @param { AnimationModel | Function } collisionOrAnimationOptions? - To pass animation options or collision function.\n * @param { Function } collision? - To pass the collision function.\n * @param { HTMLElement } relativeElement? - To calculate the zIndex value dynamically.\n */\n Popup.prototype.show = function (animationOptions, relativeElement) {\n var _this = this;\n if (this.zIndex === 1000 || !isNullOrUndefined(relativeElement)) {\n var zIndexElement = (isNullOrUndefined(relativeElement)) ? this.element : relativeElement;\n this.zIndex = getZindexPartial(zIndexElement);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n }\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.showAnimation;\n if (this.collision.X !== 'none' || this.collision.Y !== 'none') {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.checkCollision();\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n }\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.begin = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.CLOSE);\n addClass([_this.element], CLASSNAMES.OPEN);\n }\n };\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n _this.trigger('open');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.trigger('open');\n }\n };\n /**\n * Hides the popup element from screen.\n * @param { AnimationModel } animationOptions? - To give the animation options.\n */\n Popup.prototype.hide = function (animationOptions) {\n var _this = this;\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.hideAnimation;\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.OPEN);\n addClass([_this.element], CLASSNAMES.CLOSE);\n _this.trigger('close');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n this.trigger('close');\n }\n };\n /**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n */\n Popup.prototype.getScrollableParent = function (element) {\n this.checkFixedParent(element);\n return getScrollableParent(element, this.fixedParent);\n };\n Popup.prototype.checkFixedParent = function (element) {\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (parentStyle.position === 'fixed' && this.element.offsetParent && this.element.offsetParent.tagName === 'BODY') {\n this.element.style.position = 'fixed';\n this.fixedParent = true;\n }\n parent = parent.parentElement;\n if (isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed'\n && this.element.style.position === 'fixed') {\n this.fixedParent = true;\n }\n }\n };\n __decorate([\n Property('auto')\n ], Popup.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Popup.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"content\", void 0);\n __decorate([\n Property('container')\n ], Popup.prototype, \"targetType\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"viewPortElement\", void 0);\n __decorate([\n Property({ X: 'none', Y: 'none' })\n ], Popup.prototype, \"collision\", void 0);\n __decorate([\n Property('')\n ], Popup.prototype, \"relateTo\", void 0);\n __decorate([\n Complex({}, PositionData)\n ], Popup.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetY\", void 0);\n __decorate([\n Property(1000)\n ], Popup.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Popup.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('reposition')\n ], Popup.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"showAnimation\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"hideAnimation\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"targetExitViewport\", void 0);\n Popup = __decorate([\n NotifyPropertyChanges\n ], Popup);\n return Popup;\n}(Component));\nexport { Popup };\n/**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @private\n */\nexport function getScrollableParent(element, fixedParent) {\n var eleStyle = getComputedStyle(element);\n var scrollParents = [];\n var overflowRegex = /(auto|scroll)/;\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static')\n && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n if (!fixedParent) {\n scrollParents.push(document);\n }\n return scrollParents;\n}\n/**\n * Gets the maximum z-index of the given element.\n * @param { HTMLElement } element - Specify the element to get the maximum z-index of it.\n * @private\n */\nexport function getZindexPartial(element) {\n // upto body traversal\n var parent = element.parentElement;\n var parentZindex = [];\n while (parent) {\n if (parent.tagName !== 'BODY') {\n var index = document.defaultView.getComputedStyle(parent, null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(parent, null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n parentZindex.push(index);\n }\n parent = parent.parentElement;\n }\n else {\n break;\n }\n }\n //Body direct children element traversal\n var childrenZindex = [];\n for (var i = 0; i < document.body.children.length; i++) {\n if (!element.isEqualNode(document.body.children[i])) {\n var index = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n childrenZindex.push(index);\n }\n }\n }\n childrenZindex.push('999');\n var siblingsZindex = [];\n if (!isNullOrUndefined(element.parentElement) && element.parentElement.tagName !== 'BODY') {\n var childNodes = [].slice.call(element.parentElement.children);\n for (var i = 0; i < childNodes.length; i++) {\n var index = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n siblingsZindex.push(index);\n }\n }\n }\n var finalValue = parentZindex.concat(childrenZindex, siblingsZindex);\n var currentZindexValue = Math.max.apply(Math, finalValue) + 1;\n // Checking the max-zindex value\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n/**\n * Gets the maximum z-index of the page.\n * @param { HTMLElement } tagName - Specify the tagName to get the maximum z-index of it.\n * @private\n */\nexport function getMaxZindex(tagName) {\n if (tagName === void 0) { tagName = ['*']; }\n var maxZindex = [];\n for (var i = 0; i < tagName.length; i++) {\n var elements = document.getElementsByTagName(tagName[i]);\n for (var i_1 = 0; i_1 < elements.length; i_1++) {\n var index = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n maxZindex.push(index);\n }\n }\n }\n var currentZindexValue = Math.max.apply(Math, maxZindex) + 1;\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n","/**\n * Resize library\n */\nimport { isNullOrUndefined, createElement, EventHandler, detach, Browser } from '@syncfusion/ej2-base';\nvar elementClass = ['north-west', 'north', 'north-east', 'west', 'east', 'south-west', 'south', 'south-east'];\nvar targetElement;\nvar selectedHandler;\nvar originalWidth = 0;\nvar originalHeight = 0;\nvar originalX = 0;\nvar originalY = 0;\nvar originalMouseX = 0;\nvar originalMouseY = 0;\nvar RESIZE_HANDLER = 'e-resize-handle';\nvar FOCUSED_HANDLER = 'e-focused-handle';\nvar RESTRICT_LEFT = ['e-restrict-left'];\nvar RESIZE_WITHIN_VIEWPORT = 'e-resize-viewport';\nvar minHeight;\nvar maxHeight;\nvar minWidth;\nvar maxWidth;\nvar containerElement;\nvar resizeStart = null;\nvar resize = null;\nvar resizeEnd = null;\nvar resizeWestWidth;\nvar setLeft = true;\nvar previousWidth = 0;\nvar setWidth = true;\nexport function createResize(args) {\n resizeStart = args.resizeBegin;\n resize = args.resizing;\n resizeEnd = args.resizeComplete;\n targetElement = getDOMElement(args.element);\n containerElement = getDOMElement(args.boundary);\n var directions = args.direction.split(' ');\n for (var i = 0; i < directions.length; i++) {\n var resizeHandler = createElement('div', { className: 'e-icons ' + RESIZE_HANDLER + ' ' + 'e-' + directions[i] });\n targetElement.appendChild(resizeHandler);\n }\n minHeight = args.minHeight;\n minWidth = args.minWidth;\n maxWidth = args.maxWidth;\n maxHeight = args.maxHeight;\n wireEvents();\n}\nfunction getDOMElement(element) {\n var domElement;\n if (!isNullOrUndefined(element)) {\n if (typeof (element) === 'string') {\n domElement = document.querySelector(element);\n }\n else {\n domElement = element;\n }\n }\n return domElement;\n}\nfunction wireEvents() {\n var resizers = targetElement.querySelectorAll('.' + RESIZE_HANDLER);\n for (var i = 0; i < resizers.length; i++) {\n selectedHandler = resizers[i];\n EventHandler.add(selectedHandler, 'mousedown', onMouseDown, this);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(selectedHandler, eventName, onTouchStart, this);\n }\n}\n/* istanbul ignore next */\nfunction getEventType(e) {\n return (e.indexOf('mouse') > -1) ? 'mouse' : 'touch';\n}\n/* istanbul ignore next */\nfunction onMouseDown(e) {\n e.preventDefault();\n targetElement = e.target.parentElement;\n calculateValues();\n originalMouseX = e.pageX;\n originalMouseY = e.pageY;\n e.target.classList.add(FOCUSED_HANDLER);\n if (!isNullOrUndefined(resizeStart)) {\n resizeStart(e);\n }\n var target = (isNullOrUndefined(containerElement)) ? document : containerElement;\n EventHandler.add(target, 'mousemove', onMouseMove, this);\n EventHandler.add(document, 'mouseup', onMouseUp, this);\n for (var i = 0; i < RESTRICT_LEFT.length; i++) {\n if (targetElement.classList.contains(RESTRICT_LEFT[i])) {\n setLeft = false;\n }\n else {\n setLeft = true;\n }\n }\n}\n/* istanbul ignore next */\nfunction onMouseUp(e) {\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n var target = (isNullOrUndefined(containerElement)) ? document : containerElement;\n EventHandler.remove(target, 'mousemove', onMouseMove);\n EventHandler.remove(target, touchMoveEvent, onMouseMove);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.remove(target, eventName, onMouseMove);\n if (!isNullOrUndefined(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n document.body.querySelector('.' + FOCUSED_HANDLER).classList.remove(FOCUSED_HANDLER);\n }\n if (!isNullOrUndefined(resizeEnd)) {\n resizeEnd(e);\n }\n EventHandler.remove(document, 'mouseup', onMouseUp);\n EventHandler.remove(document, touchEndEvent, onMouseUp);\n}\n/* istanbul ignore next */\nfunction calculateValues() {\n originalWidth = parseFloat(getComputedStyle(targetElement, null).getPropertyValue('width').replace('px', ''));\n originalHeight = parseFloat(getComputedStyle(targetElement, null).getPropertyValue('height').replace('px', ''));\n originalX = targetElement.getBoundingClientRect().left;\n originalY = targetElement.getBoundingClientRect().top;\n}\n/* istanbul ignore next */\nfunction onTouchStart(e) {\n targetElement = e.target.parentElement;\n calculateValues();\n originalMouseX = e.touches[0].pageX;\n originalMouseY = e.touches[0].pageY;\n if (!isNullOrUndefined(resizeStart)) {\n resizeStart(e);\n }\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n var target = (isNullOrUndefined(containerElement)) ? document : containerElement;\n EventHandler.add(target, touchMoveEvent, onMouseMove, this);\n EventHandler.add(document, touchEndEvent, onMouseUp);\n}\n/* istanbul ignore next */\nfunction onMouseMove(e) {\n if (e.target.classList.contains(RESIZE_HANDLER) && e.target.classList.contains(FOCUSED_HANDLER)) {\n selectedHandler = e.target;\n }\n else if (!isNullOrUndefined(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n selectedHandler = document.body.querySelector('.' + FOCUSED_HANDLER);\n }\n if (!isNullOrUndefined(selectedHandler)) {\n var resizeTowards = '';\n for (var i = 0; i < elementClass.length; i++) {\n if (selectedHandler.classList.contains('e-' + elementClass[i])) {\n resizeTowards = elementClass[i];\n }\n }\n if (!isNullOrUndefined(resize)) {\n resize(e);\n }\n switch (resizeTowards) {\n case 'south':\n resizeSouth(e);\n break;\n case 'north':\n resizeNorth(e);\n break;\n case 'west':\n resizeWest(e);\n break;\n case 'east':\n resizeEast(e);\n break;\n case 'south-east':\n resizeSouth(e);\n resizeEast(e);\n break;\n case 'south-west':\n resizeSouth(e);\n resizeWest(e);\n break;\n case 'north-east':\n resizeNorth(e);\n resizeEast(e);\n break;\n case 'north-west':\n resizeNorth(e);\n resizeWest(e);\n break;\n default: break;\n }\n }\n}\n/* istanbul ignore next */\nfunction getClientRectValues(element) {\n return element.getBoundingClientRect();\n}\n/* istanbul ignore next */\n// tslint:disable-next-line\nfunction resizeSouth(e) {\n var documentHeight = document.documentElement.clientHeight;\n var calculateValue = false;\n var containerRectValues;\n var currentpageY = (getEventType(e.type) === 'mouse') ? e.pageY : e.touches[0].pageY;\n var targetRectValues = getClientRectValues(targetElement);\n if (!isNullOrUndefined(containerElement)) {\n containerRectValues = getClientRectValues(containerElement);\n }\n if (!isNullOrUndefined(containerElement)) {\n calculateValue = true;\n }\n else if (isNullOrUndefined(containerElement) && ((documentHeight - currentpageY) >= 0 || (targetRectValues.top < 0))) {\n calculateValue = true;\n }\n var calculatedHeight = originalHeight + (currentpageY - originalMouseY);\n calculatedHeight = (calculatedHeight > minHeight) ? calculatedHeight : minHeight;\n var containerTop = 0;\n if (!isNullOrUndefined(containerElement)) {\n containerTop = containerRectValues.top;\n }\n var borderValue = isNullOrUndefined(containerElement) ? 0 : containerElement.offsetHeight - containerElement.clientHeight;\n var topWithoutborder = (targetRectValues.top - containerTop) - (borderValue / 2);\n topWithoutborder = (topWithoutborder < 0) ? 0 : topWithoutborder;\n if (targetRectValues.top > 0 && (topWithoutborder + calculatedHeight) > maxHeight) {\n calculateValue = false;\n if (targetElement.classList.contains(RESIZE_WITHIN_VIEWPORT)) {\n return;\n }\n targetElement.style.height = (maxHeight - parseInt(topWithoutborder.toString(), 10)) + 'px';\n return;\n }\n var targetTop = 0;\n if (calculateValue) {\n if (targetRectValues.top < 0 && (documentHeight + (targetRectValues.height + targetRectValues.top) > 0)) {\n targetTop = targetRectValues.top;\n if ((calculatedHeight + targetTop) <= 30) {\n calculatedHeight = (targetRectValues.height - (targetRectValues.height + targetRectValues.top)) + 30;\n }\n }\n if (((calculatedHeight + targetRectValues.top) >= maxHeight)) {\n targetElement.style.height = targetRectValues.height +\n (documentHeight - (targetRectValues.height + targetRectValues.top)) + 'px';\n }\n var calculatedTop = (isNullOrUndefined(containerElement)) ? targetTop : topWithoutborder;\n if (calculatedHeight >= minHeight && ((calculatedHeight + calculatedTop) <= maxHeight)) {\n targetElement.style.height = calculatedHeight + 'px';\n }\n }\n}\n/* istanbul ignore next */\n// tslint:disable-next-line\nfunction resizeNorth(e) {\n var calculateValue = false;\n var boundaryRectValues;\n var pageY = (getEventType(e.type) === 'mouse') ? e.pageY : e.touches[0].pageY;\n var targetRectValues = getClientRectValues(targetElement);\n if (!isNullOrUndefined(containerElement)) {\n boundaryRectValues = getClientRectValues(containerElement);\n }\n if (!isNullOrUndefined(containerElement) && (targetRectValues.top - boundaryRectValues.top) > 0) {\n calculateValue = true;\n }\n else if (isNullOrUndefined(containerElement) && pageY > 0) {\n calculateValue = true;\n }\n var currentHeight = originalHeight - (pageY - originalMouseY);\n if ((getClientRectValues(targetElement).bottom + currentHeight) > maxHeight) {\n calculateValue = false;\n targetElement.style.height = maxHeight - getClientRectValues(targetElement).bottom + 'px';\n }\n if (calculateValue) {\n if (currentHeight >= minHeight && currentHeight <= maxHeight) {\n var containerTop = 0;\n if (!isNullOrUndefined(containerElement)) {\n containerTop = boundaryRectValues.top;\n }\n var top_1 = (originalY - containerTop) + (pageY - originalMouseY);\n top_1 = top_1 > 0 ? top_1 : 1;\n targetElement.style.height = currentHeight + 'px';\n targetElement.style.top = top_1 + 'px';\n }\n }\n}\n/* istanbul ignore next */\n// tslint:disable-next-line\nfunction resizeWest(e) {\n var documentWidth = document.documentElement.clientWidth;\n var calculateValue = false;\n var rectValues;\n if (!isNullOrUndefined(containerElement)) {\n rectValues = getClientRectValues(containerElement);\n }\n var pageX = (getEventType(e.type) === 'mouse') ? e.pageX : e.touches[0].pageX;\n var targetRectValues = getClientRectValues(targetElement);\n var borderValue = isNullOrUndefined(containerElement) ? 0 : containerElement.offsetWidth - containerElement.clientWidth;\n var left = isNullOrUndefined(containerElement) ? 0 : rectValues.left;\n var containerWidth = isNullOrUndefined(containerElement) ? 0 : rectValues.width;\n if (isNullOrUndefined(resizeWestWidth)) {\n if (!isNullOrUndefined(containerElement)) {\n resizeWestWidth = (((targetRectValues.left - left) - borderValue / 2)) + targetRectValues.width;\n resizeWestWidth = resizeWestWidth + (containerWidth - borderValue - resizeWestWidth);\n }\n else {\n resizeWestWidth = documentWidth;\n }\n }\n if (!isNullOrUndefined(containerElement) &&\n (((targetRectValues.left - rectValues.left) + targetRectValues.width +\n (rectValues.right - targetRectValues.right)) - borderValue) <= maxWidth) {\n calculateValue = true;\n }\n else if (isNullOrUndefined(containerElement) && pageX >= 0) {\n calculateValue = true;\n }\n var calculatedWidth = originalWidth - (pageX - originalMouseX);\n if (setLeft) {\n calculatedWidth = (calculatedWidth > resizeWestWidth) ? resizeWestWidth : calculatedWidth;\n }\n if (calculateValue) {\n if (calculatedWidth >= minWidth && calculatedWidth <= maxWidth) {\n var containerLeft = 0;\n if (!isNullOrUndefined(containerElement)) {\n containerLeft = rectValues.left;\n }\n var left_1 = (originalX - containerLeft) + (pageX - originalMouseX);\n left_1 = (left_1 > 0) ? left_1 : 1;\n if (calculatedWidth !== previousWidth && setWidth) {\n targetElement.style.width = calculatedWidth + 'px';\n }\n if (setLeft) {\n targetElement.style.left = left_1 + 'px';\n if (left_1 === 1) {\n setWidth = false;\n }\n else {\n setWidth = true;\n }\n }\n }\n }\n previousWidth = calculatedWidth;\n}\n/* istanbul ignore next */\n// tslint:disable-next-line\nfunction resizeEast(e) {\n var documentWidth = document.documentElement.clientWidth;\n var calculateValue = false;\n var containerRectValues;\n if (!isNullOrUndefined(containerElement)) {\n containerRectValues = getClientRectValues(containerElement);\n }\n var pageX = (getEventType(e.type) === 'mouse') ? e.pageX : e.touches[0].pageX;\n var targetRectValues = getClientRectValues(targetElement);\n if (!isNullOrUndefined(containerElement) && (((targetRectValues.left - containerRectValues.left) + targetRectValues.width) < maxWidth\n || (targetRectValues.right - containerRectValues.left) > targetRectValues.width)) {\n calculateValue = true;\n }\n else if (isNullOrUndefined(containerElement) && (documentWidth - pageX) > 0) {\n calculateValue = true;\n }\n var calculatedWidth = originalWidth + (pageX - originalMouseX);\n var containerLeft = 0;\n if (!isNullOrUndefined(containerElement)) {\n containerLeft = containerRectValues.left;\n }\n if (((targetRectValues.left - containerLeft) + calculatedWidth) > maxWidth) {\n calculateValue = false;\n if (targetElement.classList.contains(RESIZE_WITHIN_VIEWPORT)) {\n return;\n }\n targetElement.style.width = maxWidth - (targetRectValues.left - containerLeft) + 'px';\n }\n if (calculateValue) {\n if (calculatedWidth >= minWidth && calculatedWidth <= maxWidth) {\n targetElement.style.width = calculatedWidth + 'px';\n }\n }\n}\n/* istanbul ignore next */\nexport function setMinHeight(minimumHeight) {\n minHeight = minimumHeight;\n}\nexport function removeResize() {\n var handlers = targetElement.querySelectorAll('.' + RESIZE_HANDLER);\n for (var i = 0; i < handlers.length; i++) {\n detach(handlers[i]);\n }\n}\n","import { isNullOrUndefined, classList, createElement } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar spinTemplate = null;\nvar spinCSSClass = null;\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_HIGHCONTRASTSPIN = 'e-spin-high-contrast';\nvar CLS_SPINWRAP = 'e-spinner-pane';\nvar CLS_SPININWRAP = 'e-spinner-inner';\nvar CLS_SPINCIRCLE = 'e-path-circle';\nvar CLS_SPINARC = 'e-path-arc';\nvar CLS_SPINLABEL = 'e-spin-label';\nvar CLS_SPINTEMPLATE = 'e-spin-template';\n/**\n * Create a spinner for the specified target element.\n * ```\n * E.g : createSpinner({ target: targetElement, width: '34px', label: 'Loading..' });\n * ```\n * @param args\n * @private\n */\nexport function createSpinner(args, internalCreateElement) {\n var radius;\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = create_spinner_container(args.target, makeElement);\n if (!isNullOrUndefined(args.cssClass)) {\n container.wrap.classList.add(args.cssClass);\n }\n if (!isNullOrUndefined(args.template) || !isNullOrUndefined(spinTemplate)) {\n var template = !isNullOrUndefined(args.template) ? args.template : spinTemplate;\n container.wrap.classList.add(CLS_SPINTEMPLATE);\n replaceContent(container.wrap, template, spinCSSClass);\n }\n else {\n var theme = !isNullOrUndefined(args.type) ? args.type : getTheme(container.wrap);\n var width = !isNullOrUndefined(args.width) ? args.width : undefined;\n radius = calculateRadius(width, theme);\n setTheme(theme, container.wrap, radius, makeElement);\n if (!isNullOrUndefined(args.label)) {\n createLabel(container.inner_wrap, args.label, makeElement);\n }\n }\n container.wrap.classList.add(CLS_HIDESPIN);\n container = null;\n}\nfunction createLabel(container, label, makeElement) {\n var labelEle = makeElement('div', {});\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.textContent = label;\n container.appendChild(labelEle);\n return labelEle;\n}\nfunction createMaterialSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n create_material_element(container, uniqueID, makeElement);\n mat_calculate_attributes(radius, container);\n}\nfunction startMatAnimate(container, uniqueID, radius) {\n var globalObject = {};\n var timeOutVar = 0;\n globalTimeOut[uniqueID].timeOut = 0;\n globalObject[uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n var spinnerInfo = { uniqueID: uniqueID, container: container, globalInfo: globalObject, timeOutVar: timeOutVar };\n animateMaterial(spinnerInfo);\n}\nfunction createFabricSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FABRICSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\nfunction createHighContrastSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_HIGHCONTRASTSPIN);\n}\nfunction getTheme(container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n}\nfunction setTheme(theme, container, radius, makeElement) {\n var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n var svg = innerContainer.querySelector('svg');\n if (!isNullOrUndefined(svg)) {\n innerContainer.removeChild(svg);\n }\n switch (theme) {\n case 'Material':\n createMaterialSpinner(innerContainer, radius, makeElement);\n break;\n case 'Fabric':\n createFabricSpinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap':\n createBootstrapSpinner(innerContainer, radius, makeElement);\n break;\n case 'HighContrast':\n createHighContrastSpinner(innerContainer, radius, makeElement);\n break;\n }\n}\nfunction createBootstrapSpinner(innerContainer, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n create_bootstrap_element(innerContainer, uniqueID, makeElement);\n boot_calculate_attributes(innerContainer, radius);\n}\nfunction create_bootstrap_element(innerContainer, uniqueID, makeElement) {\n var svgBoot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var viewBoxValue = 64;\n var trans = 32;\n var defaultRadius = 2;\n svgBoot.setAttribute('id', uniqueID);\n svgBoot.setAttribute('class', CLS_BOOTSPIN);\n svgBoot.setAttribute('viewBox', '0 0 ' + viewBoxValue + ' ' + viewBoxValue);\n innerContainer.insertBefore(svgBoot, innerContainer.firstChild);\n for (var item = 0; item <= 7; item++) {\n var bootCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n bootCircle.setAttribute('class', CLS_SPINCIRCLE + '_' + item);\n bootCircle.setAttribute('r', defaultRadius + '');\n bootCircle.setAttribute('transform', 'translate(' + trans + ',' + trans + ')');\n svgBoot.appendChild(bootCircle);\n }\n}\nfunction boot_calculate_attributes(innerContainer, radius) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n svg.style.width = svg.style.height = radius + 'px';\n var x = 0;\n var y = 0;\n var rad = 24;\n var startArc = 90;\n for (var item = 0; item <= 7; item++) {\n var start = defineArcPoints(x, y, rad, startArc);\n var circleEle = svg.querySelector('.' + CLS_SPINCIRCLE + '_' + item);\n circleEle.setAttribute('cx', start.x + '');\n circleEle.setAttribute('cy', start.y + '');\n startArc = startArc >= 360 ? 0 : startArc;\n startArc = startArc + 45;\n }\n}\nfunction generateSeries(begin, stop) {\n var series = [];\n var start = begin;\n var end = stop;\n var increment = false;\n var count = 1;\n formSeries(start);\n function formSeries(i) {\n series.push(i);\n if (i !== end || count === 1) {\n if (i <= start && i > 1 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n else if (i === 1) {\n i = 7;\n i = parseFloat((i + 0.2).toFixed(2));\n increment = true;\n }\n else if (i < 8 && increment) {\n i = parseFloat((i + 0.2).toFixed(2));\n if (i === 8) {\n increment = false;\n }\n }\n else if (i <= 8 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n ++count;\n formSeries(i);\n }\n }\n return series;\n}\nfunction animateBootstrap(innerContainer) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var id = svg.getAttribute('id');\n for (var i = 1; i <= 8; i++) {\n var circleEle = (innerContainer.getElementsByClassName('e-path-circle_' +\n (i === 8 ? 0 : i))[0]);\n rotation(circleEle, i, i, generateSeries(i, i), id);\n }\n function rotation(circle, start, end, series, id) {\n var count = 0;\n boot_animate(start);\n function boot_animate(radius) {\n if (globalTimeOut[id].isAnimate) {\n ++count;\n circle.setAttribute('r', radius + '');\n if (count >= series.length) {\n count = 0;\n }\n globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n }\n }\n }\n}\nfunction replaceContent(container, template, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var inner = container.querySelector('.e-spinner-inner');\n inner.innerHTML = template;\n}\nfunction calculateRadius(width, theme) {\n var defaultSize = theme === 'Material' ? DEFT_MAT_WIDTH : theme === 'Fabric' ? DEFT_FAB_WIDTH : DEFT_BOOT_WIDTH;\n width = width ? parseFloat(width + '') : defaultSize;\n return theme === 'Bootstrap' ? width : width / 2;\n}\nfunction globalVariables(id, radius, count, previousId) {\n return {\n radius: radius,\n count: count,\n previousId: previousId\n };\n}\nfunction random_generator() {\n var random = '';\n var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 5; i++) {\n random += combine.charAt(Math.floor(Math.random() * combine.length));\n }\n return random;\n}\nfunction create_fabric_element(innerCon, uniqueID, themeClass, makeElement) {\n var svgFabric = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFabric.setAttribute('id', uniqueID);\n svgFabric.setAttribute('class', themeClass);\n var fabricCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n var fabricCircleArc = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCircleArc.setAttribute('class', CLS_SPINARC);\n innerCon.insertBefore(svgFabric, innerCon.firstChild);\n svgFabric.appendChild(fabricCirclePath);\n svgFabric.appendChild(fabricCircleArc);\n}\nfunction create_material_element(innerContainer, uniqueID, makeElement) {\n var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgMaterial.setAttribute('class', CLS_MATERIALSPIN);\n svgMaterial.setAttribute('id', uniqueID);\n var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n svgMaterial.appendChild(matCirclePath);\n}\nfunction create_spinner_container(target, makeElement) {\n var spinnerContainer = makeElement('div', {});\n spinnerContainer.classList.add(CLS_SPINWRAP);\n var spinnerInnerContainer = makeElement('div', {});\n spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n target.appendChild(spinnerContainer);\n spinnerContainer.appendChild(spinnerInnerContainer);\n return { wrap: spinnerContainer, inner_wrap: spinnerInnerContainer };\n}\nfunction animateMaterial(spinnerInfo) {\n var start = 1;\n var end = 149;\n var duration = 1333;\n var max = 75;\n createCircle(start, end, easeAnimation, duration, spinnerInfo.globalInfo[spinnerInfo.uniqueID].count, max, spinnerInfo);\n spinnerInfo.globalInfo[spinnerInfo.uniqueID].count = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].count % 4;\n}\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n var startTime = new Date().getTime();\n var change = end - start;\n var diameter = getSize((spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2) + '');\n var strokeSize = getStrokeSize(diameter);\n var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n mat_animation(spinnerInfo);\n function mat_animation(spinnerInfo) {\n var currentTime = Math.max(0, Math.min(new Date().getTime() - startTime, duration));\n updatePath(easing(currentTime, start, change, duration), spinnerInfo.container);\n if (id === spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId && currentTime < duration) {\n globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n }\n else {\n animateMaterial(spinnerInfo);\n }\n }\n function updatePath(value, container) {\n if ((!isNullOrUndefined(container.querySelector('svg.e-spin-material')))\n && (!isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle')))) {\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, value, max) + '');\n path.setAttribute('transform', 'rotate(' + (rotate) + ' ' + diameter / 2 + ' ' + diameter / 2 + ')');\n }\n }\n}\nfunction mat_calculate_attributes(radius, container) {\n var diameter = radius * 2;\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n var strokeSize = getStrokeSize(diameter);\n var transformOrigin = (diameter / 2) + 'px';\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.width = svg.style.height = diameter + 'px';\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n path.setAttribute('stroke-width', strokeSize + '');\n path.setAttribute('d', drawArc(diameter, strokeSize));\n path.setAttribute('stroke-dasharray', ((diameter - strokeSize) * Math.PI * 0.75) + '');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, 1, 75) + '');\n}\nfunction getSize(value) {\n var parsed = parseFloat(value);\n return parsed;\n}\nfunction drawArc(diameter, strokeSize) {\n var radius = diameter / 2;\n var offset = strokeSize / 2;\n return 'M' + radius + ',' + offset\n + 'A' + (radius - offset) + ',' + (radius - offset) + ' 0 1 1 ' + offset + ',' + radius;\n}\nfunction getStrokeSize(diameter) {\n return 10 / 100 * diameter;\n}\nfunction getDashOffset(diameter, strokeSize, value, max) {\n return (diameter - strokeSize) * Math.PI * ((3 * (max) / 100) - (value / 100));\n}\nfunction easeAnimation(current, start, change, duration) {\n var timestamp = (current /= duration) * current;\n var timecount = timestamp * current;\n return start + change * (6 * timecount * timestamp + -15 * timestamp * timestamp + 10 * timecount);\n}\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n var centerX = radius;\n var centerY = radius;\n var diameter = radius * 2;\n var startArc = 315;\n var endArc = 45;\n var svg = innerConainer.querySelector('.' + trgClass);\n var circle = svg.querySelector('.e-path-circle');\n var path = svg.querySelector('.e-path-arc');\n var transformOrigin = (diameter / 2) + 'px';\n circle.setAttribute('d', defineCircle(centerX, centerY, radius));\n path.setAttribute('d', defineArc(centerX, centerY, radius, startArc, endArc));\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n svg.style.width = svg.style.height = diameter + 'px';\n}\nfunction defineArcPoints(centerX, centerY, radius, angle) {\n var radians = (angle - 90) * Math.PI / 180.0;\n return {\n x: centerX + (radius * Math.cos(radians)),\n y: centerY + (radius * Math.sin(radians))\n };\n}\nfunction defineArc(x, y, radius, startArc, endArc) {\n var start = defineArcPoints(x, y, radius, endArc);\n var end = defineArcPoints(x, y, radius, startArc);\n var d = [\n 'M', start.x, start.y,\n 'A', radius, radius, 0, 0, 0, end.x, end.y\n ].join(' ');\n return d;\n}\nfunction defineCircle(x, y, radius) {\n var d = [\n 'M', x, y,\n 'm', -radius, 0,\n 'a', radius, radius, 0, 1, 0, radius * 2, 0,\n 'a', radius, radius, 0, 1, 0, -radius * 2, 0,\n ].join(' ');\n return d;\n}\n/**\n * Function to show the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function showSpinner(container) {\n showHideSpinner(container, false);\n container = null;\n}\nfunction showHideSpinner(container, isHide) {\n var spinnerWrap = container.classList.contains(CLS_SPINWRAP) ? container :\n container.querySelector('.' + CLS_SPINWRAP);\n var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n var spinCheck;\n spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_HIDESPIN) :\n !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n if (spinCheck) {\n var svgEle = spinnerWrap.querySelector('svg');\n if (isNullOrUndefined(svgEle)) {\n return;\n }\n var id = svgEle.getAttribute('id');\n globalTimeOut[id].isAnimate = !isHide;\n switch (globalTimeOut[id].type) {\n case 'Material':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n break;\n case 'Bootstrap':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n break;\n }\n }\n isHide ? classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]) : classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n container = null;\n}\n/**\n * Function to hide the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function hideSpinner(container) {\n showHideSpinner(container, true);\n container = null;\n}\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : setSpinner({ cssClass: 'custom-css'; type: 'Material' });\n * ```\n * @param args\n * @private\n */\nexport function setSpinner(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.template !== undefined) {\n spinTemplate = args.template;\n if (args.template !== undefined) {\n spinCSSClass = args.cssClass;\n }\n }\n var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n for (var index = 0; index < container.length; index++) {\n ensureTemplate(args.template, container[index], args.type, args.cssClass, makeElement);\n }\n}\nfunction ensureTemplate(template, container, theme, cssClass, makeEle) {\n if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n replaceTheme(container, theme, cssClass, makeEle);\n if (container.classList.contains(CLS_SHOWSPIN)) {\n container.classList.remove(CLS_SHOWSPIN);\n showSpinner(container);\n }\n else {\n container.classList.remove(CLS_HIDESPIN);\n hideSpinner(container);\n }\n }\n else {\n spinTemplate = template;\n if (!isNullOrUndefined(cssClass)) {\n spinCSSClass = cssClass;\n }\n }\n}\nfunction replaceTheme(container, theme, cssClass, makeEle) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var svgElement = container.querySelector('svg');\n var radius = theme === 'Bootstrap' ? parseFloat(svgElement.style.height) : parseFloat(svgElement.style.height) / 2;\n var classNames = svgElement.getAttribute('class');\n var svgClassList = classNames.split(/\\s/);\n if (svgClassList.indexOf('e-spin-material') >= 0) {\n var id = svgElement.getAttribute('id');\n clearTimeout(globalTimeOut[id].timeOut);\n }\n setTheme(theme, container, radius, makeEle);\n}\n","import { extend, merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper'\n};\n/**\n * Base List Generator\n */\nexport var ListBase;\n(function (ListBase) {\n /**\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right'\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n * @param {{[key:string]:Object}[]|string[]} dataSource - Specifies an array of JSON or String data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, options, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options);\n }\n else {\n return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListFromArray(createElement, dataSource, isSingleLevel, options) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListItemFromArray(createElement, dataSource, isSingleLevel, options) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n // tslint:disable-next-line:max-func-body-length\n function createListItemFromJson(createElement, dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n if (fieldData.hasOwnProperty(fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData.id;\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n if (isSingleLevel === true) {\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n && !curOpt.template) {\n var attr = { src: fieldData[fields.imageUrl] };\n merge(attr, fieldData[fields.imageAttributes]);\n prepend([createElement('img', { className: cssClass.image, attrs: attr })], li.firstElementChild);\n }\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) &&\n !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n prepend([createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] })], li.firstElementChild);\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createListFromJson(createElement, dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel);\n return generateUL(createElement, li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]|NodeList} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n * @param {{[key:string]:Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder='None'} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var cusQuery = new Query().group(curFields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[curFields.text] = ds[j].key;\n grpItem[hdr] = true;\n grpItem.id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query=new Query()} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // tslint:disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n var attributes_1 = getAllAttributes(li);\n if (attributes_1.id) {\n json[fields.id] = attributes_1.id;\n delete attributes_1.id;\n }\n else {\n json[fields.id] = generateId();\n }\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function renderContentTemplate(createElement, template, dataSource, fields, options) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var compiledString = compile(template);\n var liCollection = [];\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], curFields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n var value = fieldData[curFields.value];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], curFields);\n value = fieldData[curFields.value];\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n li.innerText = fieldData[curFields.text];\n }\n else {\n append(compiledString(curItem), li);\n li.setAttribute('data-value', value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, headerItems) {\n var compiledString = compile(groupTemplate);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var category = curFields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[category] = header.textContent;\n header.innerHTML = '';\n append(compiledString(headerData), header);\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n // Get SubList\n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(createElement, subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n if (!isNullOrUndefined(value)) {\n li.setAttribute('data-value', value);\n }\n li.setAttribute('role', 'option');\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length) {\n append(innerElements, li);\n }\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n li.appendChild(anchorTag(createElement, dataSource, fields, text));\n }\n else {\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper'\n };\n }\n function anchorTag(createElement, dataSource, fields, text) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n attr.href = fieldData[fields.url] ? fieldData[fields.url] :\n fieldData[fields.urlAttributes].href;\n }\n var anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n /* tslint:disable:align */\n function generateLI(createElement, item, fieldData, fields, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = fieldData[fields.text] || '';\n uID = fieldData[fields.id];\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n !isNullOrUndefined(uID) ? li.setAttribute('data-uid', uID) : li.setAttribute('data-uid', generateId());\n if (grpLI && options && options.groupTemplate) {\n var compiledString = compile(options.groupTemplate);\n append(compiledString(item), li);\n }\n else if (!grpLI && options && options.template) {\n var compiledString = compile(options.template);\n append(compiledString(item), li);\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text));\n }\n else {\n innerDiv.appendChild(createElement('span', {\n className: cssClass.text, innerHTML: text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n }));\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n * @param {string} className? - Specifies class name that need to be added in UL element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n * @param {liElement} liElement - Specifies LI element.\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n * @param {{[key:string]:Object}|string[]|string} dataSource - Specifies an JSON or String data.\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[dataField] = value;\n }\n }\n }\n return fieldData;\n}\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 * @hidden\n * Generate required masking elements to the MaskedTextBox from user mask input.\n */\nexport function createMask() {\n attributes(this.element, {\n 'role': 'textbox', 'autocomplete': 'off', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': ''\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 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 >= 2) {\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 * @hidden\n * Apply mask ability with masking elements to the MaskedTextBox.\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * @hidden\n * To wire required events to the MaskedTextBox.\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 if (this.enabled) {\n bindClearEvent.call(this);\n }\n}\n/**\n * @hidden\n * To unwire events attached to the MaskedTextBox.\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}\n/**\n * @hidden\n * To bind required events to the MaskedTextBox clearButton.\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')) {\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}\n/**\n * @hidden\n * To get masked value from the MaskedTextBox.\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * @hidden\n * To extract raw value from the MaskedTextBox.\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 ((!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 maskInputFocusHandler(event) {\n var _this = this;\n if (this.promptMask.length > 0) {\n this.focusEventArgs = { selectionStart: 0, selectionEnd: this.promptMask.length };\n }\n else {\n this.focusEventArgs = { selectionStart: 0, selectionEnd: this.element.value.length };\n }\n var eventArgs = {};\n merge(eventArgs, this.focusEventArgs);\n this.trigger('focus', eventArgs);\n this.focusEventArgs = eventArgs;\n if (this.mask) {\n this.isFocus = true;\n if (this.element.value === '') {\n setElementValue.call(this, this.promptMask);\n }\n else {\n setElementValue.call(this, this.element.value);\n }\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(this.focusEventArgs.selectionStart, this.focusEventArgs.selectionEnd);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 450 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(_this.focusEventArgs.selectionStart, _this.focusEventArgs.selectionEnd);\n }, delay);\n }\n }\n}\nexport function maskInputBlurHandler(event) {\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) {\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) {\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 // tslint:disable-next-line\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) {\n var value = this;\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 parentElement = this.element.parentNode;\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 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 (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) {\n var oldValue = this.element.value;\n if ((!event.ctrlKey) || (event.ctrlKey && 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}\nfunction triggerMaskChangeEvent(event, oldValue) {\n if (!isNullOrUndefined(this.changeEventArgs) && !this.isInitial) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n merge(eventArgs, this.changeEventArgs);\n this.trigger('change', eventArgs);\n }\n this.preEleVal = this.element.value;\n this.prevValue = strippedValue.call(this, this.element);\n attributes(this.element, { 'aria-valuenow': this.element.value });\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask) {\n var collec = void 0;\n var key = event.key;\n if (key && key.length === 1 && this.floatLabelType === 'Never' && this.undoCollec.length > 0) {\n if (this.undoCollec[this.undoCollec.length - 1].value === this.element.value) {\n validateValue.call(this, key, event.ctrlKey, event);\n }\n }\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 this.value = this.element.value;\n }\n if (this.element.selectionStart === 0 && this.element.selectionEnd === 0) {\n // tslint:disable-next-line\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 endIndex = this.element.selectionEnd;\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 endIndex = this.element.selectionEnd;\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 if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\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 && 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 eventOldVal = void 0;\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 eventOldVal = this.element.value;\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 removeClass([parentElement], ERROR);\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * @hidden\n * Validates user input using masking elements '<' , '>' and '|'.\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var j = 0;\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 var val = this.element.value;\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 * @hidden\n * To set updated values in the MaskedTextBox.\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (this.prevValue === undefined || this.prevValue !== val)) {\n this.maskKeyPress = true;\n if (val === null && this.floatLabelType === 'Never' && this.placeholder) {\n setElementValue.call(this, this.promptMask);\n }\n else if (val !== '') {\n setElementValue.call(this, this.promptMask);\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 * @hidden\n * To set updated values in the input element.\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 * @hidden\n * Provide mask support to input textbox through utility method.\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 * @hidden\n * Gets raw value of the textbox which has been masked through utility method.\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * @hidden\n * Gets masked value of the textbox which has been masked through utility method.\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var value = '';\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * @hidden\n * Arguments to perform undo and redo functionalities.\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\nvar maskUndo = new MaskUndo();\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 } from '@syncfusion/ej2-base';\n/**\n * @param props\n * @param 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}\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 return Item;\n}(ChildProperty));\nexport { Item };\n","/**\n * IncrementalSearch module file\n */\nvar queryString = '';\nvar prevString = '';\nvar matches = [];\nvar activeClass = 'e-active';\n/**\n * Search and focus the list item based on key code matches with list text content\n * @param { number } keyCode - Specifies the key code which pressed on keyboard events.\n * @param { HTMLElement[]] } items - Specifies an array of HTMLElement, from which matches find has done.\n * @param { number } selectedIndex - Specifies the selected item in list item, so that search will happen\n * after selected item otherwise it will do from initial.\n * @param { boolean } ignoreCase - Specifies the case consideration when search has done.\n */\nexport function incrementalSearch(keyCode, items, selectedIndex, ignoreCase) {\n queryString += String.fromCharCode(keyCode);\n setTimeout(function () { queryString = ''; }, 1000);\n var index;\n queryString = ignoreCase ? queryString.toLowerCase() : queryString;\n if (prevString === queryString) {\n for (var i = 0; i < matches.length; i++) {\n if (matches[i].classList.contains(activeClass)) {\n index = i;\n break;\n }\n }\n index = index + 1;\n return matches[index];\n }\n else {\n var listItems = items;\n var strLength = queryString.length;\n var text = void 0;\n var item = void 0;\n selectedIndex = selectedIndex ? selectedIndex + 1 : 0;\n var i = selectedIndex;\n matches = [];\n do {\n if (i === listItems.length) {\n i = -1;\n }\n i === -1 ? index = 0 : index = i;\n item = listItems[index];\n text = ignoreCase ? item.innerText.toLowerCase() : item.innerText;\n if (text.substr(0, strLength) === queryString) {\n matches.push(listItems[index]);\n }\n i++;\n } while (i !== selectedIndex);\n prevString = queryString;\n return matches[0];\n }\n}\nexport function Search(inputVal, items, searchType, ignoreCase) {\n var listItems = items;\n ignoreCase = ignoreCase !== undefined && ignoreCase !== null ? ignoreCase : true;\n var itemData = { item: null, index: null };\n if (inputVal.length) {\n var strLength = inputVal.length;\n var queryStr = ignoreCase ? inputVal.toLocaleLowerCase() : inputVal;\n for (var i = 0, itemsData = listItems; i < itemsData.length; i++) {\n var item = itemsData[i];\n var text = (ignoreCase ? item.textContent.toLocaleLowerCase() : item.textContent).replace(/^\\s+|\\s+$/g, '');\n if ((searchType === 'Equal' && text === queryStr) || (searchType === 'StartsWith' && text.substr(0, strLength) === queryStr)) {\n itemData.item = item;\n itemData.index = i;\n return { item: item, index: i };\n }\n }\n return itemData;\n }\n return itemData;\n}\n","import { print as printWindow, createElement, detach, classList } 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';\n/**\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}\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 * @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.parent.addEventListener(events.actionBegin, this.actionBegin.bind(this));\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`](./api-grid.html#printmode-string).\n * @return {void}\n */\n Print.prototype.print = function () {\n this.renderPrintGrid();\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 };\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 document.body.appendChild(element);\n var printGrid = new Grid(getPrintGridModel(gObj, gObj.hierarchyPrintMode));\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 printGrid.appendTo(element);\n printGrid.registeredTemplate = this.parent.registeredTemplate;\n printGrid.trigger = gObj.trigger;\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('.e-content');\n var headerDiv = gObj.element.querySelector('.e-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.querySelectorAll('.e-content')); _i < _a.length; _i++) {\n var element = _a[_i];\n element.style.overflowX = 'hidden';\n }\n // Hide the waiting popup\n var waitingPop = gObj.element.querySelectorAll('.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 };\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 = 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 = element.querySelectorAll(id + \"captioncell.e-groupcaption\");\n var colSpan = groupCaption[depth - 1].getAttribute('colspan');\n for (var i = 0; i < groupCaption.length; i++) {\n groupCaption[i].setAttribute('colspan', colSpan);\n }\n var colGroups = element.querySelectorAll(\"colgroup\" + id + \"colGroup\");\n for (var i = 0; i < colGroups.length; i++) {\n for (var j = 0; j < depth; j++) {\n colGroups[i].childNodes[j].style.display = 'none';\n }\n }\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 * @return {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.actionBegin.bind(this));\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 * @private\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n Print.printGridProp = getCloneProperties().concat([events.beforePrint, events.printComplete]);\n return Print;\n}());\nexport { Print };\n","import { ChildProperty, compile as baseTemplateComplier, setValue, Internationalization } 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 } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Column } from '../models/column';\nimport { calculateRelativeBasedPosition, calculatePosition } from '@syncfusion/ej2-popups';\nimport { Print } from '../actions/print';\n//https://typescript.codeplex.com/discussions/401501\n/**\n * Function to check whether target object implement specific interface\n * @param {Object} target\n * @param {string} checkFor\n * @returns no\n * @hidden\n */\nexport function doesImplementInterface(target, checkFor) {\n /* tslint:disable:no-any */\n return target.prototype && checkFor in target.prototype;\n}\n/**\n * Function to get value from provided data\n * @param {string} field\n * @param {Object} data\n * @param {IColumn} column\n * @hidden\n */\nexport function valueAccessor(field, data, column) {\n field = isNullOrUndefined(field) ? '' : field;\n return DataUtil.getObject(field, data);\n}\n/**\n * The function used to update Dom using requestAnimationFrame.\n * @param {Function} fn - Function that contains the actual action\n * @return {Promise}\n * @hidden\n */\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 */\nexport function iterateArrayOrObject(collection, predicate) {\n var result = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n var pred = predicate(collection[i], i);\n if (!isNullOrUndefined(pred)) {\n result.push(pred);\n }\n }\n return result;\n}\n/** @hidden */\nexport function iterateExtend(array) {\n var obj = [];\n for (var i = 0; i < array.length; i++) {\n obj.push(baseExtend({}, getActualProperties(array[i]), {}, true));\n }\n return obj;\n}\n/** @hidden */\nexport function templateCompiler(template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return baseTemplateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return baseTemplateComplier(template);\n }\n }\n return undefined;\n}\n/** @hidden */\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/** @hidden */\nexport function extend(copied, first, second, exclude) {\n var moved = baseExtend(copied, first, second);\n Object.keys(moved).forEach(function (value, index) {\n if (exclude.indexOf(value) !== -1) {\n delete moved[value];\n }\n });\n return moved;\n}\n/** @hidden */\nexport function prepareColumns(columns, autoWidth) {\n for (var c = 0, len = columns.length; c < len; c++) {\n var column = void 0;\n if (typeof columns[c] === 'string') {\n column = new Column({ field: columns[c] });\n }\n else if (!(columns[c] instanceof Column)) {\n if (!columns[c].columns) {\n column = new Column(columns[c]);\n }\n else {\n columns[c].columns = prepareColumns(columns[c].columns);\n column = new Column(columns[c]);\n }\n }\n else {\n column = columns[c];\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[c] = column;\n }\n return columns;\n}\n/** @hidden */\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 var isBottomTail;\n popUpSpan.className = className;\n popUp.style.display = '';\n 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/** @hidden */\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/** @hidden */\nexport function getActualProperties(obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n}\n/** @hidden */\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/** @hidden */\nexport function getElementIndex(element, elements) {\n var index = -1;\n for (var i = 0, len = elements.length; i < len; i++) {\n if (elements[i].isEqualNode(element)) {\n index = i;\n break;\n }\n }\n return index;\n}\n/** @hidden */\nexport function inArray(value, collection) {\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[i] === value) {\n return i;\n }\n }\n return -1;\n}\n/** @hidden */\nexport function getActualPropFromColl(collection) {\n var coll = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[i].hasOwnProperty('properties')) {\n coll.push(collection[i].properties);\n }\n else {\n coll.push(collection[i]);\n }\n }\n return coll;\n}\n/** @hidden */\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[i]);\n }\n}\n/** @hidden */\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/** @hidden */\nexport function getUid(prefix) {\n return prefix + uid++;\n}\n/** @hidden */\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[i]);\n }\n else {\n elem.appendChild(children[0]);\n }\n }\n return elem;\n}\n/** @hidden */\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/** @hidden */\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 */\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/** @hidden */\nexport function getRowHeight(element) {\n if (rowHeight !== undefined) {\n return rowHeight;\n }\n var table = createElement('table', { className: 'e-table', styles: 'visibility: hidden' });\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 */\nexport function isComplexField(field) {\n return field.split('.').length > 1;\n}\n/** @hidden */\nexport function getComplexFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/\\./g, '_');\n}\n/** @hidden */\nexport function setComplexFieldID(field) {\n if (field === void 0) { field = ''; }\n return field.replace(/_/g, '.');\n}\n/** @hidden */\nexport function isEditable(col, type, elem) {\n var row = parentsUntil(elem, 'e-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 && col.isPrimaryKey) {\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/** @hidden */\nexport function isActionPrevent(inst) {\n var dlg = inst.element.querySelector('#' + inst.element.id + 'EditConfirm');\n return inst.editSettings.mode === 'Batch' &&\n (inst.element.querySelectorAll('.e-updatedtd').length) && inst.editSettings.showConfirmDialog &&\n (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/** @hidden */\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 action ? elem[i].classList.add(clName) : elem[i].classList.remove(clName);\n }\n}\n/** @hidden */\nexport function setFormatter(serviceLocator, column) {\n var fmtr = serviceLocator.getService('valueFormatter');\n switch (column.type) {\n case 'date':\n column.setFormatter(fmtr.getFormatFunction({ type: 'date', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'date', skeleton: column.format }));\n break;\n case 'datetime':\n column.setFormatter(fmtr.getFormatFunction({ type: 'dateTime', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'dateTime', skeleton: column.format }));\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/** @hidden */\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[i], args.slice(), []);\n cells[i].setAttribute('aria-selected', 'true');\n }\n else {\n classList(cells[i], [], args.slice());\n cells[i].removeAttribute('aria-selected');\n }\n }\n}\n/** @hidden */\nexport function distinctStringValues(result) {\n var temp = {};\n var res = [];\n for (var i = 0; i < result.length; i++) {\n if (!(result[i] in temp)) {\n res.push(result[i].toString());\n temp[result[i]] = 1;\n }\n }\n return res;\n}\n/** @hidden */\nexport function getFilterMenuPostion(target, dialogObj, grid) {\n var elementVisible = dialogObj.element.style.display;\n dialogObj.element.style.display = 'block';\n var dlgWidth = dialogObj.width;\n var newpos;\n if (!grid.enableRtl) {\n 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 else {\n newpos = calculatePosition(target, 'left', 'bottom');\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 35 + 'px';\n dialogObj.element.style.display = elementVisible;\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) + -16 + 'px';\n }\n else {\n dialogObj.element.style.left = leftPos - 16 + 'px';\n }\n }\n}\n/** @hidden */\nexport function getZIndexCalcualtion(args, dialogObj) {\n args.popup.element.style.zIndex = (dialogObj.zIndex + 1).toString();\n}\n/** @hidden */\nexport function toogleCheckbox(elem) {\n var span = elem.querySelector('.e-frame');\n span.classList.contains('e-check') ? classList(span, ['e-uncheck'], ['e-check']) :\n classList(span, ['e-check'], ['e-uncheck']);\n}\n/** @hidden */\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/** @hidden */\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 * @param row - Grid Row model object.\n * @param columns - Foreign columns array.\n * @param data - Updated Row data.\n * @hidden\n */\nexport function refreshForeignData(row, columns, data) {\n columns.forEach(function (col) {\n setValue(col.field, getForeignData(col, data), row.foreignKeyData);\n });\n row.cells.forEach(function (cell) {\n if (cell.isForeignKey) {\n setValue('foreignKeyData', getValue(cell.column.field, row.foreignKeyData), cell);\n }\n });\n}\n/**\n * Get the foreign data for the corresponding cell value.\n * @param column - Foreign Key column\n * @param data - Row data.\n * @param lValue - cell value.\n * @param foreignData - foreign data source.\n * @hidden\n */\nexport function getForeignData(column, data, lValue, foreignKeyData) {\n var fField = column.foreignKeyField;\n var key = (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 * @param foreignKeyValue - Defines ForeignKeyValue.\n * @param columns - Array of column object.\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 * @hidden\n * @param filterObject - Defines predicate model object\n */\nexport function getDatePredicate(filterObject, type) {\n var datePredicate;\n var prevDate;\n var nextDate;\n var prevObj = baseExtend({}, getActualProperties(filterObject));\n var nextObj = baseExtend({}, getActualProperties(filterObject));\n var value = new Date(filterObject.value);\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 (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 if (filterObject.setProperties) {\n filterObject.setProperties({ ejpredicate: datePredicate }, true);\n }\n else {\n filterObject.ejpredicate = datePredicate;\n }\n return datePredicate;\n}\n/**\n * @hidden\n */\nexport function renderMovable(ele, 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 * @hidden\n */\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[i]];\n }\n return value;\n }\n}\n/**\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: 'date', 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 * @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[index] = {};\n obj[index].isExpand = true;\n obj[index].gridModel = getPrintGridModel(row.childGrid, hierarchyPrintMode);\n obj[index].gridModel.query = gObj.childGrid.query;\n }\n }\n return obj;\n}\n/**\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 for (var _i = 0, _a = Print.printGridProp; _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'columns') {\n printGridModel[key] = getActualPropFromColl(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 if (gObj.childGrid && hierarchyPrintMode !== 'None') {\n printGridModel.expandedRows = getExpandedState(gObj, hierarchyPrintMode);\n }\n return printGridModel;\n}\n/**\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 var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n var keys = Object.keys(Object.getPrototypeOf(obj1)).length ?\n Object.keys(obj1).concat(getPrototypesOfObj(obj1)) : Object.keys(obj1);\n keys.forEach(function (key) {\n var source = res[key];\n var cpy = obj1[key];\n var cln;\n if (deep && (isObject(cpy) || Array.isArray(cpy))) {\n if (isObject(cpy)) {\n cln = source ? source : {};\n res[key] = baseExtend({}, cln, cpy, deep);\n }\n else {\n cln = source ? source : [];\n res[key] = baseExtend([], cln, cpy, deep);\n }\n }\n else {\n res[key] = cpy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < len; i++) {\n _loop_1(i);\n }\n return res;\n}\n/**\n * @hidden\n */\nfunction getPrototypesOfObj(obj) {\n var keys = [];\n while (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 * @hidden\n */\nexport function measureColumnDepth(column) {\n var max = 0;\n for (var i = 0; i < column.length; i++) {\n var depth = checkDepth(column[i], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n}\n/**\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[i] = checkDepth(col.columns[i], index);\n }\n for (var j = 0; j < indices.length; j++) {\n if (max < indices[j]) {\n max = indices[j];\n }\n }\n index = max;\n }\n return index;\n}\n","/**\n * AriaService\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 props.forEach(function (name) { return setStateAndProperties(target, config[name], options[name]); });\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 * @hidden\n */\nfunction setStateAndProperties(target, attribute, value, remove) {\n if (remove) {\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 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};\n","/**\n * Function helps to find which highlightSearch is to call based on your data.\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 */\nexport function highlightSearch(element, query, ignoreCase, type) {\n if (query === '') {\n return;\n }\n else {\n var ignoreRegex = ignoreCase ? 'gim' : 'gm';\n query = /^[a-zA-Z0-9- ]*$/.test(query) ? query : query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n var replaceQuery = type === 'StartsWith' ? '^(' + query + ')' : type === 'EndsWith' ? '(' + query + ')$' : '(' + query + ')';\n findTextNode(element, new RegExp(replaceQuery, ignoreRegex));\n }\n}\nfunction findTextNode(element, pattern) {\n for (var index = 0; element.childNodes && (index < element.childNodes.length); index++) {\n if (element.childNodes[index].nodeType === 3) {\n element.innerHTML = element.innerHTML.replace(pattern, '$1');\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 * @param {HTMLElement} content - Specifies an content element.\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","/**\n * FloatLable Moduel\n * Specifies whether to display the floating label above the input element.\n */\nimport { removeClass, addClass, detach } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nvar FLOATLINE = 'e-float-line';\nvar FLOATTEXT = 'e-float-text';\nvar LABELTOP = 'e-label-top';\nvar LABELBOTTOM = 'e-label-bottom';\n/**\n * Function to create Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param element - the given html element.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function createFloatLabel(overAllWrapper, searchWrapper, element, inputElement, value, floatLabelType, placeholder) {\n var floatLinelement;\n var floatLabelElement;\n floatLinelement = createElement('span', { className: FLOATLINE });\n floatLabelElement = createElement('label', { className: FLOATTEXT });\n if (!isNullOrUndefined(element.id) && element.id !== '') {\n floatLabelElement.id = 'label_' + element.id.replace(/ /g, '_');\n attributes(element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(inputElement.placeholder) && inputElement.placeholder !== '') {\n floatLabelElement.innerHTML = inputElement.placeholder;\n inputElement.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n floatLabelElement.innerHTML = placeholder;\n }\n searchWrapper.appendChild(floatLinelement);\n searchWrapper.appendChild(floatLabelElement);\n overAllWrapper.classList.add('e-float-input');\n updateFloatLabelState(value, floatLabelElement);\n if (floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(LABELBOTTOM)) {\n removeClass([floatLabelElement], LABELBOTTOM);\n }\n addClass([floatLabelElement], LABELTOP);\n }\n}\n/**\n * Function to update status of the Float Label element.\n * @param value - Value of the MultiSelect.\n * @param label - float label element.\n */\nexport function updateFloatLabelState(value, label) {\n if (value && value.length > 0) {\n addClass([label], LABELTOP);\n removeClass([label], LABELBOTTOM);\n }\n else {\n removeClass([label], LABELTOP);\n addClass([label], LABELBOTTOM);\n }\n}\n/**\n * Function to remove Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param searchWrapper - search wrapper of multiselect.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function removeFloating(overAllWrapper, componentWrapper, searchWrapper, inputElement, value, floatLabelType, placeholder) {\n var placeholderElement = componentWrapper.querySelector('.' + FLOATTEXT);\n var floatLine = componentWrapper.querySelector('.' + FLOATLINE);\n var placeholderText;\n if (!isNullOrUndefined(placeholderElement)) {\n placeholderText = placeholderElement.innerText;\n detach(searchWrapper.querySelector('.' + FLOATTEXT));\n setPlaceHolder(value, inputElement, placeholderText);\n if (!isNullOrUndefined(floatLine)) {\n detach(searchWrapper.querySelector('.' + FLOATLINE));\n }\n }\n else {\n placeholderText = (placeholder !== null) ? placeholder : '';\n setPlaceHolder(value, inputElement, placeholderText);\n }\n overAllWrapper.classList.remove('e-float-input');\n}\n/**\n * Function to set the placeholder to the element.\n * @param value - Value of the MultiSelect.\n * @param inputElement - specify the input wrapper.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function setPlaceHolder(value, inputElement, placeholder) {\n if (value && value.length) {\n inputElement.placeholder = '';\n }\n else {\n inputElement.placeholder = placeholder;\n }\n}\n/**\n * Function for focusing the Float Element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n */\nexport function floatLabelFocus(overAllWrapper, componentWrapper) {\n overAllWrapper.classList.add('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (!isNullOrUndefined(label)) {\n addClass([label], LABELTOP);\n if (label.classList.contains(LABELBOTTOM)) {\n removeClass([label], LABELBOTTOM);\n }\n }\n}\n/**\n * Function to focus the Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function floatLabelBlur(overAllWrapper, componentWrapper, value, floatLabelType, placeholder) {\n overAllWrapper.classList.remove('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (value && value.length <= 0 && floatLabelType === 'Auto' && !isNullOrUndefined(label)) {\n if (label.classList.contains(LABELTOP)) {\n removeClass([label], LABELTOP);\n }\n addClass([label], LABELBOTTOM);\n }\n}\n","import { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { uiUpdate, initialEnd, dataReady, modelChanged, refreshAggregates, refreshFooterRenderer, groupAggregates } from '../base/constant';\nimport { FooterRenderer } from '../renderer/footer-renderer';\nimport { SummaryCellRenderer } from '../renderer/summary-cell-renderer';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\n/**\n * Summary Action controller.\n */\nvar Aggregate = /** @class */ (function () {\n function Aggregate(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n Aggregate.prototype.getModuleName = function () {\n return 'aggregate';\n };\n Aggregate.prototype.initiateRender = function () {\n var _this = this;\n var cellFac = this.locator.getService('cellRendererFactory');\n var instance = new SummaryCellRenderer(this.parent, this.locator);\n [CellType.Summary, CellType.CaptionSummary, CellType.GroupSummary].forEach(function (type) {\n return cellFac.addCellRenderer(type, instance);\n });\n this.footerRenderer = new FooterRenderer(this.parent, this.locator);\n this.footerRenderer.renderPanel();\n this.footerRenderer.renderTable();\n this.locator.register('footerRenderer', this.footerRenderer);\n var fn = function () {\n _this.prepareSummaryInfo();\n _this.parent.off(dataReady, fn);\n };\n this.parent.on(dataReady, fn, this);\n this.parent.on(dataReady, this.footerRenderer.refresh, this.footerRenderer);\n };\n Aggregate.prototype.prepareSummaryInfo = function () {\n var _this = this;\n summaryIterator(this.parent.aggregates, function (column) {\n var dataColumn = _this.parent.getColumnByField(column.field) || {};\n var type = dataColumn.type;\n column.setPropertiesSilent({ format: _this.getFormatFromType(column.format, type) });\n column.setFormatter(_this.parent.locale);\n column.setPropertiesSilent({ columnName: column.columnName || column.field });\n });\n };\n Aggregate.prototype.getFormatFromType = function (format, type) {\n if (isNullOrUndefined(type) || typeof format !== 'string') {\n return format;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: format };\n break;\n case 'date':\n obj = { type: type, skeleton: format };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: format };\n break;\n }\n return obj;\n };\n Aggregate.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (isNullOrUndefined(this.footerRenderer)) {\n this.initiateRender();\n }\n this.prepareSummaryInfo();\n this.footerRenderer.refresh();\n var cModel = new CaptionSummaryModelGenerator(this.parent);\n var gModel = new GroupSummaryModelGenerator(this.parent);\n if (gModel.getData().length !== 0 || !cModel.isEmpty()) {\n this.parent.notify(modelChanged, {});\n }\n };\n Aggregate.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initialEnd, this.initiateRender, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n this.parent.on(refreshAggregates, this.refresh, this);\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.footerRenderer.removeEventListener();\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(dataReady, this.footerRenderer.refresh);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n this.parent.off(refreshAggregates, this.refresh);\n };\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n remove(this.parent.element.querySelector('.e-gridfooter'));\n };\n Aggregate.prototype.refresh = function (data) {\n var editedData = data instanceof Array ? data : [data];\n this.parent.notify(refreshFooterRenderer, editedData);\n if (this.parent.groupSettings.columns.length > 0) {\n this.parent.notify(groupAggregates, editedData);\n }\n };\n return Aggregate;\n}());\nexport { Aggregate };\n/**\n * @private\n */\nexport function summaryIterator(aggregates, callback) {\n aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n callback(column, row);\n });\n });\n}\n","import { extend } from '@syncfusion/ej2-base';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { isEditable, getComplexFieldID, getObject, getCustomDateFormat } from '../base/util';\n/**\n * `DatePickerEditCell` is used to handle datepicker cell type editing.\n * @hidden\n */\nvar DatePickerEditCell = /** @class */ (function () {\n function DatePickerEditCell(parent) {\n this.parent = parent;\n }\n DatePickerEditCell.prototype.create = function (args) {\n /* tslint:disable-next-line:no-any */\n var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName, type: 'text', 'e-mappinguid': args.column.uid\n }\n });\n };\n DatePickerEditCell.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DatePickerEditCell.prototype.write = function (args) {\n if (args.column.editType === 'datepickeredit') {\n this.obj = new DatePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl), 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), args.column.edit.params));\n }\n this.obj.appendTo(args.element);\n };\n DatePickerEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return DatePickerEditCell;\n}());\nexport { DatePickerEditCell };\nfunction dateanddatetimerender(args, mode, rtl) {\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.type, args.element),\n };\n}\n","/**\n * Encoding class: Contains the details about encoding type, whether to write a Unicode byte order mark (BOM).\n * ```typescript\n * let encoding : Encoding = new Encoding();\n * encoding.type = 'Utf8';\n * encoding.getBytes('Encoding', 0, 5);\n * ```\n */\nvar Encoding = /** @class */ (function () {\n /**\n * Initializes a new instance of the Encoding class. A parameter specifies whether to write a Unicode byte order mark\n * @param {boolean} includeBom?-true to specify that a Unicode byte order mark is written; otherwise, false.\n */\n function Encoding(includeBom) {\n this.emitBOM = true;\n this.encodingType = 'Ansi';\n this.initBOM(includeBom);\n }\n Object.defineProperty(Encoding.prototype, \"includeBom\", {\n /**\n * Gets a value indicating whether to write a Unicode byte order mark\n * @returns boolean- true to specify that a Unicode byte order mark is written; otherwise, false\n */\n get: function () {\n return this.emitBOM;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Encoding.prototype, \"type\", {\n /**\n * Gets the encoding type.\n * @returns EncodingType\n */\n get: function () {\n return this.encodingType;\n },\n /**\n * Sets the encoding type.\n * @param {EncodingType} value\n */\n set: function (value) {\n this.encodingType = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Initialize the includeBom to emit BOM or Not\n * @param {boolean} includeBom\n */\n Encoding.prototype.initBOM = function (includeBom) {\n if (includeBom === undefined || includeBom === null) {\n this.emitBOM = true;\n }\n else {\n this.emitBOM = includeBom;\n }\n };\n /**\n * Calculates the number of bytes produced by encoding the characters in the specified string\n * @param {string} chars - The string containing the set of characters to encode\n * @returns {number} - The number of bytes produced by encoding the specified characters\n */\n Encoding.prototype.getByteCount = function (chars) {\n var byteCount = 0;\n validateNullOrUndefined(chars, 'string');\n if (chars === '') {\n var byte = this.utf8Len(chars.charCodeAt(0));\n return byte;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n return this.getByteCountInternal(chars, 0, chars.length);\n };\n /**\n * Return the Byte of character\n * @param {number} codePoint\n * @returns {number}\n */\n Encoding.prototype.utf8Len = function (codePoint) {\n var bytes = codePoint <= 0x7F ? 1 :\n codePoint <= 0x7FF ? 2 :\n codePoint <= 0xFFFF ? 3 :\n codePoint <= 0x1FFFFF ? 4 : 0;\n return bytes;\n };\n /**\n * for 4 byte character return surrogate pair true, otherwise false\n * @param {number} codeUnit\n * @returns {boolean}\n */\n Encoding.prototype.isHighSurrogate = function (codeUnit) {\n return codeUnit >= 0xD800 && codeUnit <= 0xDBFF;\n };\n /**\n * for 4byte character generate the surrogate pair\n * @param {number} highCodeUnit\n * @param {number} lowCodeUnit\n */\n Encoding.prototype.toCodepoint = function (highCodeUnit, lowCodeUnit) {\n highCodeUnit = (0x3FF & highCodeUnit) << 10;\n var u = highCodeUnit | (0x3FF & lowCodeUnit);\n return u + 0x10000;\n };\n /**\n * private method to get the byte count for specific charindex and count\n * @param {string} chars\n * @param {number} charIndex\n * @param {number} charCount\n */\n Encoding.prototype.getByteCountInternal = function (chars, charIndex, charCount) {\n var byteCount = 0;\n if (this.encodingType === 'Utf8' || this.encodingType === 'Unicode') {\n var isUtf8 = this.encodingType === 'Utf8';\n for (var i = 0; i < charCount; i++) {\n var charCode = chars.charCodeAt(isUtf8 ? charIndex : charIndex++);\n if (this.isHighSurrogate(charCode)) {\n if (isUtf8) {\n var high = charCode;\n var low = chars.charCodeAt(++charIndex);\n byteCount += this.utf8Len(this.toCodepoint(high, low));\n }\n else {\n byteCount += 4;\n ++i;\n }\n }\n else {\n if (isUtf8) {\n byteCount += this.utf8Len(charCode);\n }\n else {\n byteCount += 2;\n }\n }\n if (isUtf8) {\n charIndex++;\n }\n }\n return byteCount;\n }\n else {\n byteCount = charCount;\n return byteCount;\n }\n };\n /**\n * Encodes a set of characters from the specified string into the ArrayBuffer.\n * @param {string} s- The string containing the set of characters to encode\n * @param {number} charIndex-The index of the first character to encode.\n * @param {number} charCount- The number of characters to encode.\n * @returns {ArrayBuffer} - The ArrayBuffer that contains the resulting sequence of bytes.\n */\n Encoding.prototype.getBytes = function (s, charIndex, charCount) {\n validateNullOrUndefined(s, 'string');\n validateNullOrUndefined(charIndex, 'charIndex');\n validateNullOrUndefined(charCount, 'charCount');\n if (charIndex < 0 || charCount < 0) {\n throw new RangeError('Argument Out Of Range Exception: charIndex or charCount is less than zero');\n }\n if (s.length - charIndex < charCount) {\n throw new RangeError('Argument Out Of Range Exception: charIndex and charCount do not denote a valid range in string');\n }\n var bytes;\n if (s === '') {\n bytes = new ArrayBuffer(0);\n return bytes;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var byteCount = this.getByteCountInternal(s, charIndex, charCount);\n switch (this.type) {\n case 'Utf8':\n bytes = this.getBytesOfUtf8Encoding(byteCount, s, charIndex, charCount);\n return bytes;\n case 'Unicode':\n bytes = this.getBytesOfUnicodeEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n default:\n bytes = this.getBytesOfAnsiEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n }\n };\n /**\n * Decodes a sequence of bytes from the specified ArrayBuffer into the string.\n * @param {ArrayBuffer} bytes- The ArrayBuffer containing the sequence of bytes to decode.\n * @param {number} index- The index of the first byte to decode.\n * @param {number} count- The number of bytes to decode.\n * @returns {string} - The string that contains the resulting set of characters.\n */\n Encoding.prototype.getString = function (bytes, index, count) {\n validateNullOrUndefined(bytes, 'bytes');\n validateNullOrUndefined(index, 'index');\n validateNullOrUndefined(count, 'count');\n if (index < 0 || count < 0) {\n throw new RangeError('Argument Out Of Range Exception: index or count is less than zero');\n }\n if (bytes.byteLength - index < count) {\n throw new RangeError('Argument Out Of Range Exception: index and count do not denote a valid range in bytes');\n }\n if (bytes.byteLength === 0 || count === 0) {\n return '';\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var out = '';\n var byteCal = new Uint8Array(bytes);\n switch (this.type) {\n case 'Utf8':\n var s = this.getStringOfUtf8Encoding(byteCal, index, count);\n return s;\n case 'Unicode':\n var byteUnicode = new Uint16Array(bytes);\n out = this.getStringofUnicodeEncoding(byteUnicode, index, count);\n return out;\n default:\n var j = index;\n for (var i = 0; i < count; i++) {\n var c = byteCal[j];\n out += String.fromCharCode(c); // 1 byte(ASCII) character \n j++;\n }\n return out;\n }\n };\n Encoding.prototype.getBytesOfAnsiEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var bufview = new Uint8Array(bytes);\n var k = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(charIndex++);\n if (charcode < 0x800) {\n bufview[k] = charcode;\n }\n else {\n bufview[k] = 63; //replacement character '?'\n }\n k++;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUtf8Encoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint = new Uint8Array(bytes);\n var index = charIndex;\n var j = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(index);\n if (charcode <= 0x7F) { // 1 byte character 2^7\n uint[j] = charcode;\n }\n else if (charcode < 0x800) { // 2 byte character 2^11\n uint[j] = 0xc0 | (charcode >> 6);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else if ((charcode < 0xd800 || charcode >= 0xe000)) { // 3 byte character 2^16 \n uint[j] = 0xe0 | (charcode >> 12);\n uint[++j] = 0x80 | ((charcode >> 6) & 0x3f);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else {\n uint[j] = 0xef;\n uint[++j] = 0xbf;\n uint[++j] = 0xbd; // U+FFFE \"replacement character\"\n }\n ++j;\n ++index;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUnicodeEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint16 = new Uint16Array(bytes);\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(i);\n uint16[i] = charcode;\n }\n return bytes;\n };\n Encoding.prototype.getStringOfUtf8Encoding = function (byteCal, index, count) {\n var j = 0;\n var i = index;\n var s = '';\n for (j; j < count; j++) {\n var c = byteCal[i++];\n while (i > byteCal.length) {\n return s;\n }\n if (c > 127) {\n if (c > 191 && c < 224 && i < count) {\n c = (c & 31) << 6 | byteCal[i] & 63;\n }\n else if (c > 223 && c < 240 && i < byteCal.byteLength) {\n c = (c & 15) << 12 | (byteCal[i] & 63) << 6 | byteCal[++i] & 63;\n }\n else if (c > 239 && c < 248 && i < byteCal.byteLength) {\n c = (c & 7) << 18 | (byteCal[i] & 63) << 12 | (byteCal[++i] & 63) << 6 | byteCal[++i] & 63;\n }\n ++i;\n }\n s += String.fromCharCode(c); // 1 byte(ASCII) character \n }\n return s;\n };\n Encoding.prototype.getStringofUnicodeEncoding = function (byteUni, index, count) {\n if (count > byteUni.length) {\n throw new RangeError('ArgumentOutOfRange_Count');\n }\n var byte16 = new Uint16Array(count);\n var out = '';\n for (var i = 0; i < count && i < byteUni.length; i++) {\n byte16[i] = byteUni[index++];\n }\n out = String.fromCharCode.apply(null, byte16);\n return out;\n };\n /**\n * To clear the encoding instance\n * @return {void}\n */\n Encoding.prototype.destroy = function () {\n this.emitBOM = undefined;\n this.encodingType = undefined;\n };\n return Encoding;\n}());\nexport { Encoding };\n/**\n * To check the object is null or undefined and throw error if it is null or undefined\n * @param {Object} value - object to check is null or undefined\n * @return {boolean}\n * @throws {ArgumentException} - if the value is null or undefined\n * @private\n */\nexport function validateNullOrUndefined(value, message) {\n if (value === null || value === undefined) {\n throw new Error('ArgumentException: ' + message + ' cannot be null or undefined');\n }\n}\n","/**\n * @private\n * @hidden\n */\nexport function defaultToString(item) {\n // if (item === null) {\n // return 'COLLECTION_NULL';\n // } else if (typeof item === 'undefined') {\n // return 'COLLECTION_UNDEFINED';\n // } else if (Object.prototype.toString.call(item) === '[object String]') {\n if (Object.prototype.toString.call(item) === '[object String]') {\n return '$s' + item;\n }\n else {\n return '$o' + item.toString();\n }\n}\n","/**\n * Exports util methods used by RichTextEditor.\n */\nimport { isNullOrUndefined as isNOU, addClass, removeClass, selectAll, createElement } from '@syncfusion/ej2-base';\nimport * as classes from '../base/classes';\nimport * as model from '../models/items';\nimport { toolsLocale } from '../models/default-locale';\nvar undoRedoItems = ['Undo', 'Redo'];\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}\nexport function hasClass(element, className) {\n var hasClass = false;\n if (element.classList.contains(className)) {\n hasClass = true;\n }\n return hasClass;\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}\nexport function isIDevice() {\n var result = false;\n var iosDevices = ['iphone', 'ipad', 'ipod'];\n for (var i = 0; i < iosDevices.length; i++) {\n if (navigator.platform.toLocaleLowerCase().indexOf(iosDevices[i]) > -1) {\n result = true;\n break;\n }\n }\n return result;\n}\nexport function getFormattedFontSize(value) {\n if (isNOU(value)) {\n return '';\n }\n var result = value.split('pt');\n return result[0] + ' pt';\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}\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}\nexport function setToolbarStatus(e, isPopToolbar) {\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 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 return;\n }\n var formatItems = e.parent.format.types;\n result = getDropDownValue(formatItems, value, 'subCommand', 'text');\n dropDown.formatDropDown.content = ('' +\n ''\n + (isNOU(result) ? 'Paragraph' : result) +\n '');\n dropDown.formatDropDown.dataBind();\n break;\n case 'alignments':\n if (isNOU(dropDown.alignDropDown)) {\n return;\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 case 'fontname':\n if (isNOU(dropDown.fontNameDropDown) || isPopToolbar) {\n return;\n }\n var fontNameItems = e.parent.fontFamily.items;\n result = getDropDownValue(fontNameItems, value, 'value', 'text');\n var name_1 = (isNOU(result) ? 'Segoe UI' : result);\n e.tbElements[j].title = name_1;\n dropDown.fontNameDropDown.content = ('' +\n ''\n + name_1 + '');\n dropDown.fontNameDropDown.dataBind();\n break;\n case 'fontsize':\n if (isNOU(dropDown.fontSizeDropDown)) {\n return;\n }\n var fontSizeItems = e.parent.fontSize.items;\n result = getDropDownValue(fontSizeItems, value, 'value', 'value');\n dropDown.fontSizeDropDown.content = ('' +\n ''\n + (isNOU(result) ? '10 pt' : getFormattedFontSize(result)) +\n '');\n dropDown.fontSizeDropDown.dataBind();\n break;\n }\n }\n }\n }\n }\n}\nexport function getCollection(items) {\n if (typeof items === 'object') {\n return items;\n }\n else {\n return [items];\n }\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] === toolbarItems[j].subCommand) {\n itemsIndex.push(j);\n break;\n }\n }\n }\n }\n return itemsIndex;\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 */\nexport function dispatchEvent(element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\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}\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","export 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 === '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","/**\n * rich-text-editor\n */\nexport * from './src/rich-text-editor/index';\n","import * as __button from '@syncfusion/ej2-buttons/button';\nimport * as _base from '@syncfusion/ej2-base';\nimport * as __checkbox from '@syncfusion/ej2-buttons/check-box';\nimport * as __contextmenu from '@syncfusion/ej2-navigations/context-menu';\nimport * as _lists from '@syncfusion/ej2-lists';\nimport * as _popups from '@syncfusion/ej2-popups';\nimport * as __datamanager from '@syncfusion/ej2-data/index';\nimport * as __datepicker from '@syncfusion/ej2-calendars/datepicker';\nimport * as _inputs from '@syncfusion/ej2-inputs';\nimport * as __calendar from '@syncfusion/ej2-calendars/calendar';\nimport * as __daterangepicker from '@syncfusion/ej2-calendars/daterangepicker';\nimport * as __datetimepicker from '@syncfusion/ej2-calendars/datetimepicker';\nimport * as __timepicker from '@syncfusion/ej2-calendars/timepicker';\nimport * as __dropdownbutton from '@syncfusion/ej2-splitbuttons/drop-down-button';\nimport * as __dropdownlist from '@syncfusion/ej2-dropdowns/drop-down-list';\nimport * as _data from '@syncfusion/ej2-data';\nimport * as __progressbutton from '@syncfusion/ej2-splitbuttons/progress-button';\nimport * as __tooltip from '@syncfusion/ej2-popups/tooltip';\nimport * as __uploader from '@syncfusion/ej2-inputs/uploader';\nimport * as __grid from '@syncfusion/ej2-grids/grid';\nimport * as __toolbar from '@syncfusion/ej2-navigations/toolbar';\nimport * as __autocomplete from '@syncfusion/ej2-dropdowns/auto-complete';\nimport * as _buttons from '@syncfusion/ej2-buttons';\nimport * as _excelexport from '@syncfusion/ej2-excel-export';\nimport * as _pdfexport from '@syncfusion/ej2-pdf-export';\nimport * as _fileutils from '@syncfusion/ej2-file-utils';\nimport * as _compression from '@syncfusion/ej2-compression';\nimport * as _splitbuttons from '@syncfusion/ej2-splitbuttons';\nimport * as __richtexteditor from '@syncfusion/ej2-richtexteditor/rich-text-editor';\n\nfunction copy(copied, first, second, deep) {\n var result = copied || {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n if (deep && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n result[key] = copy({}, clone, copy, deep);\n }\n else {\n clone = src ? src : [];\n result[key] = copy([], clone, copy, deep);\n }\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n\nvar buttons = {};\ncopy(buttons, __button);\ncopy(buttons, __checkbox);\n\nvar navigations = {};\ncopy(navigations, __contextmenu);\n\nvar popups = {};\n\nvar data = {};\ncopy(data, __datamanager);\n\nvar calendars = {};\ncopy(calendars, __datepicker);\n\nvar inputs = {};\ncopy(calendars, __calendar);\ncopy(calendars, __daterangepicker);\ncopy(calendars, __datetimepicker);\ncopy(calendars, __timepicker);\n\nvar splitbuttons = {};\ncopy(splitbuttons, __dropdownbutton);\n\nvar dropdowns = {};\ncopy(dropdowns, __dropdownlist);\ncopy(splitbuttons, __progressbutton);\ncopy(popups, __tooltip);\ncopy(inputs, __uploader);\n\n__grid.Grid.Inject(__grid.Filter,__grid.Page,__grid.Selection,__grid.Sort,__grid.Group,__grid.Reorder,__grid.RowDD,__grid.DetailRow,__grid.Toolbar,__grid.Aggregate,__grid.Search,__grid.VirtualScroll,__grid.Edit,__grid.Resize,__grid.ExcelExport,__grid.PdfExport,__grid.CommandColumn,__grid.ContextMenu,__grid.Freeze,__grid.ColumnMenu,__grid.ColumnChooser,__grid.ForeignKey);\n\nvar grids = {};\ncopy(grids, __grid);\ncopy(navigations, __toolbar);\ncopy(dropdowns, __autocomplete);\n\n__richtexteditor.RichTextEditor.Inject(__richtexteditor.Toolbar,__richtexteditor.Link,__richtexteditor.Image,__richtexteditor.Count,__richtexteditor.QuickToolbar,__richtexteditor.HtmlEditor,__richtexteditor.MarkdownEditor);\n\nvar richtexteditor = {};\ncopy(richtexteditor, __richtexteditor);\n\nvar base = _base;\nvar lists = _lists;\nvar data = _data;\nvar inputs = _inputs;\nvar popups = _popups;\nvar buttons = _buttons;\nvar excelexport = _excelexport;\nvar pdfexport = _pdfexport;\nvar fileutils = _fileutils;\nvar compression = _compression;\nvar splitbuttons = _splitbuttons;\n\nexport { buttons,base,navigations,lists,popups,data,calendars,inputs,splitbuttons,dropdowns,grids,excelexport,pdfexport,fileutils,compression,richtexteditor };","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n * var ajax = new Ajax(\"index.html\", \"GET\", true);\n * ajax.send().then(\n * function (value) {\n * console.log(value);\n * },\n * function (reason) {\n * console.log(reason);\n * });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n /**\n * Constructor for Ajax class\n * @param {string|Object} options?\n * @param {string} type?\n * @param {boolean} async?\n * @returns defaultType\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n * Send the request to server.\n * @param {any} data - To send the user data\n * @return {Promise}\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false\n };\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n if (!isNullOrUndefined(_this.onLoad)) {\n _this.httpRequest.onload = _this.onLoad;\n }\n if (!isNullOrUndefined(_this.onProgress)) {\n _this.httpRequest.onprogress = _this.onProgress;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onAbort)) {\n _this.httpRequest.onabort = _this.onAbort;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onError)) {\n _this.httpRequest.onerror = _this.onError;\n }\n //** Upload Events **/\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onUploadProgress)) {\n _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n }\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n _this.beforeSend(eventArgs);\n }\n if (!eventArgs.cancel) {\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n }\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n //success range should be 200 to 299\n if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n if (this.emitError) {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n else {\n resolve();\n }\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n * @param {string} key Key to search in the response header\n * @returns {string}\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { debounce, extend } from './util';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * @private\n * ```html\n *
\n * \n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} debounce - Specifies at what interval given event listener should be triggered.\n * @return {Function}\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[i],\n listener: listener,\n debounce: debounceListener\n });\n element.addEventListener(event[i], debounceListener);\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[j] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[j], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n * @param {any} element - Specifies the target html element to clear the events\n * @return {void}\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n eventData = EventHandler.addOrGetEventData(element);\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[i].name, copyData[i].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n var fn = null;\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","import { isNullOrUndefined, getValue } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n ;\n /**\n * To attach handler for given property in current context.\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n this.boundedEvents[property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n * @param {string} eventName - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @return {void}\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n if (curObject[i].id === id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n }\n else if (handler === curObject[i].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} args - Additional parameters to pass while calling the handler.\n * @return {void}\n */\n Observer.prototype.notify = function (property, argument) {\n if (this.notExist(property)) {\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var curObject = getValue(property, this.boundedEvents).slice(0);\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n };\n /**\n * To destroy handlers in the event\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n */\n Observer.prototype.notExist = function (prop) {\n return this.boundedEvents.hasOwnProperty(prop) === false;\n };\n /**\n * Returns if the handler is present.\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, getValue } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp('\\]');\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n */\n function Base(options, element) {\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.refreshing = false;\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange? - Specifies to true when we set properties.\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n ;\n /**\n * Calls for child element data bind\n * @param {Object} obj\n * @param {Object} parent\n * @returns {void}\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[key] instanceof Array) {\n for (var _a = 0, _b = parent[key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n ;\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n ;\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} listener - Specifies the call to run when the event occurs.\n * @return {void}\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n Base.prototype.trigger = function (eventName, eventProp) {\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n this.modelObserver.notify(eventName, eventProp);\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n handler.call(this, eventProp);\n }\n }\n this.isProtectedOnChange = prevDetection;\n }\n };\n /**\n * To maintain instance in base class\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-lib', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n */\n Base.prototype.destroy = function () {\n var _this = this;\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-lib']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n * @param elem Specifies the HTMLElement or element id string.\n * @param comp Specifies the component module name or Component.\n */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < elem.ej2_instances.length; i++) {\n instance = elem.ej2_instances[i];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n // tslint:disable-next-line:no-any\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ \\/]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ \\/]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ \\/]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ \\/]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ \\/]([\\w.]+)/i,\n SAFARI: /(safari)[ \\/]([\\w.]+)/i,\n WEBKIT: /(webkit)[ \\/]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n * @param {string} event - type of event triggered.\n * @returns {Boolean}\n */\n Browser.getEvent = function (event) {\n // tslint:disable-next-line:no-any\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer ? events[event].isPointer :\n (Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '')\n : events[event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * To get the value based on provided key and regX\n * @param {string} key\n * @param {RegExp} regX\n * @returns {Object}\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = window.browserDetails;\n if ('undefined' === typeof browserDetails[key]) {\n return browserDetails[key] = regX.test(Browser.userAgent);\n }\n return browserDetails[key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties \n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n * @returns BrowserInfo\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return window.browserDetails.isTouch = ('ontouchstart' in window);\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\nimport { isUndefined } from '../util';\n/**\n * Date base common constants and function for date parser and formatter.\n */\nexport var IntlBase;\n(function (IntlBase) {\n // tslint:disable-next-line:max-line-length\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n var defaultFirstDay = 'sun';\n IntlBase.islamicRegex = /^islamic/;\n var firstDayMapper = {\n 'sun': 0,\n 'mon': 1,\n 'tue': 2,\n 'wed': 3,\n 'thu': 4,\n 'fri': 5,\n 'sat': 6\n };\n IntlBase.formatRegex = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.currencyFormatRegex = /(^[ca]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n \"1-alt-variant\": \"Common Era\"\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': \"{1} 'at' {0}\",\n 'long': \"{1} 'at' {0}\",\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y',\n },\n }\n },\n \"islamic\": {\n \"months\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"1\": \"Muh.\",\n \"2\": \"Saf.\",\n \"3\": \"Rab. I\",\n \"4\": \"Rab. II\",\n \"5\": \"Jum. I\",\n \"6\": \"Jum. II\",\n \"7\": \"Raj.\",\n \"8\": \"Sha.\",\n \"9\": \"Ram.\",\n \"10\": \"Shaw.\",\n \"11\": \"Dhuʻl-Q.\",\n \"12\": \"Dhuʻl-H.\"\n },\n \"narrow\": {\n \"1\": \"1\",\n \"2\": \"2\",\n \"3\": \"3\",\n \"4\": \"4\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"8\": \"8\",\n \"9\": \"9\",\n \"10\": \"10\",\n \"11\": \"11\",\n \"12\": \"12\"\n },\n \"wide\": {\n \"1\": \"Muharram\",\n \"2\": \"Safar\",\n \"3\": \"Rabiʻ I\",\n \"4\": \"Rabiʻ II\",\n \"5\": \"Jumada I\",\n \"6\": \"Jumada II\",\n \"7\": \"Rajab\",\n \"8\": \"Shaʻban\",\n \"9\": \"Ramadan\",\n \"10\": \"Shawwal\",\n \"11\": \"Dhuʻl-Qiʻdah\",\n \"12\": \"Dhuʻl-Hijjah\"\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n \"eras\": {\n \"eraNames\": {\n \"0\": \"AH\"\n },\n \"eraAbbr\": {\n \"0\": \"AH\"\n },\n \"eraNarrow\": {\n \"0\": \"AH\"\n }\n },\n \"dateFormats\": {\n \"full\": \"EEEE, MMMM d, y G\",\n \"long\": \"MMMM d, y G\",\n \"medium\": \"MMM d, y G\",\n \"short\": \"M/d/y GGGGG\"\n },\n \"timeFormats\": {\n \"full\": \"h:mm:ss a zzzz\",\n \"long\": \"h:mm:ss a z\",\n \"medium\": \"h:mm:ss a\",\n \"short\": \"h:mm a\"\n },\n \"dateTimeFormats\": {\n \"full\": \"{1} 'at' {0}\",\n \"long\": \"{1} 'at' {0}\",\n \"medium\": \"{1}, {0}\",\n \"short\": \"{1}, {0}\",\n \"availableFormats\": {\n \"d\": \"d\",\n \"E\": \"ccc\",\n \"Ed\": \"d E\",\n \"Ehm\": \"E h:mm a\",\n \"EHm\": \"E HH:mm\",\n \"Ehms\": \"E h:mm:ss a\",\n \"EHms\": \"E HH:mm:ss\",\n \"Gy\": \"y G\",\n \"GyMMM\": \"MMM y G\",\n \"GyMMMd\": \"MMM d, y G\",\n \"GyMMMEd\": \"E, MMM d, y G\",\n \"h\": \"h a\",\n \"H\": \"HH\",\n \"hm\": \"h:mm a\",\n \"Hm\": \"HH:mm\",\n \"hms\": \"h:mm:ss a\",\n \"Hms\": \"HH:mm:ss\",\n \"M\": \"L\",\n \"Md\": \"M/d\",\n \"MEd\": \"E, M/d\",\n \"MMM\": \"LLL\",\n \"MMMd\": \"MMM d\",\n \"MMMEd\": \"E, MMM d\",\n \"MMMMd\": \"MMMM d\",\n \"ms\": \"mm:ss\",\n \"y\": \"y G\",\n \"yyyy\": \"y G\",\n \"yyyyM\": \"M/y GGGGG\",\n \"yyyyMd\": \"M/d/y GGGGG\",\n \"yyyyMEd\": \"E, M/d/y GGGGG\",\n \"yyyyMMM\": \"MMM y G\",\n \"yyyyMMMd\": \"MMM d, y G\",\n \"yyyyMMMEd\": \"E, MMM d, y G\",\n \"yyyyMMMM\": \"MMMM y G\",\n \"yyyyQQQ\": \"QQQ y G\",\n \"yyyyQQQQ\": \"QQQQ y G\"\n }\n }\n }\n },\n 'timeZoneNames': {\n \"hourFormat\": \"+HH:mm;-HH:mm\",\n \"gmtFormat\": \"GMT{0}\",\n \"gmtZeroFormat\": \"GMT\",\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n },\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###',\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n * @private\n * @param {string} skeleton\n * @param {Object} dateObject\n * @param {string} type\n * @returns {string}\n */\n function getResultantPattern(skeleton, dateObject, type, isIslamic) {\n var resPattern;\n var iType = type || 'date';\n if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n if (iType === 'dateTime') {\n var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n }\n }\n else {\n resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n }\n if (isUndefined(resPattern) && skeleton === 'yMd') {\n resPattern = 'M/d/y';\n }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n * @private\n * @param {Object} cldr\n * @param {string} culture\n * @param {boolean} isNumber\n * @returns {Dependables}\n */\n function getDependables(cldr, culture, mode, isNumber) {\n var ret = {};\n var calendartype = mode || 'gregorian';\n ret.parserObject = parser.getMainObject(cldr, culture) || IntlBase.defaultObject;\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n ret.dateObject = getValue('dates.calendars.' + calendartype, ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n * @private\n * @param {string} type\n * @param {string} numSystem\n * @param {Object} obj\n * @param {boolean} isAccount\n * @returns {string}\n */\n function getSymbolPattern(type, numSystem, obj, isAccount) {\n return getValue(type + 'Formats-numberSystem-' +\n numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n numSystem + '.standard', obj) : '');\n }\n IntlBase.getSymbolPattern = getSymbolPattern;\n /**\n * Returns proper numeric skeleton\n * @private\n * @param {string} skeleton\n * @returns {NumericSkeleton}\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n /* tslint:disable no-any */\n ret.type = IntlBase.patternMatcher[pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n * @private\n * @param {string} pattern\n * @param {boolean} needFraction\n * @param {string} cSymbol\n * @param {boolean} fractionOnly\n * @returns {NegativeData}\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n * @private\n * @param {string} val\n * @param {string} sym\n * @returns {string}\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n return val.replace(IntlBase.defaultCurrency, sym);\n }\n return '';\n }\n /**\n * Returns currency symbol based on currency code\n * @private\n * @param {Object} numericObject\n * @param {string} currencyCode\n * @returns {string}\n */\n function getCurrencySymbol(numericObject, currencyCode) {\n return getValue('currencies.' + currencyCode + '.symbol', numericObject) || '$';\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Dependables} obj\n * @returns {GenericFormatOptions}\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Object} numObject\n * @returns {NegativeData}\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n cOptions.useGrouping = integerPart.indexOf(',') !== -1;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n cOptions.groupSeparator = dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/\\'/g, '');\n cOptions.nend = cOptions.nend.replace(/\\'/g, '');\n }\n return cOptions;\n }\n /**\n * Returns formatting options for currency or percent type\n * @private\n * @param {string[]} parts\n * @param {string} actual\n * @param {string} symbol\n * @returns {NegativeData}\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[i];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n * @private\n * @param {Object} dateObj\n * @returns {string}\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[d‏M‏]([^d‏M])[d‏M‏]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n * @private\n * @param {string} culture\n * @param {DateFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture, options.calendar);\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n /**\n * Returns Native Number pattern\n * @private\n * @param {string} culture\n * @param {NumberFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualNumberFormat(culture, options, cldr) {\n var dependable = getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n if (curMatch) {\n var dOptions = {};\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = (split.length > 1);\n curObj.nData = getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency') {\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent') {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/\\'/g, '\"');\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n function getWeekData(culture, cldr) {\n var firstDay = defaultFirstDay;\n var mapper = getValue('supplemental.weekData.firstDay', cldr);\n var iCulture = culture;\n if ((/en-/).test(iCulture)) {\n iCulture = iCulture.slice(3);\n }\n iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n if (mapper) {\n firstDay = mapper[iCulture] || defaultFirstDay;\n }\n return firstDayMapper[firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n})(IntlBase || (IntlBase = {}));\n","/**\n * To import utils\n */\nimport { isNullOrUndefined } from './util';\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 */\n CanvasRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n /* tslint:enable */\n /**\n * To create a Html5 canvas element\n * @param {BaseAttibutes} options - Options to create canvas\n * @return {HTMLCanvasElement}\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 * @param {number} width - width of the canvas\n * @param {number} height - height of the canvas\n * @return {void}\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 * @param {LineAttributes} options - required options to draw a line on the canvas\n * @return {void}\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 this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a rectangle\n * @param {RectAttributes} options - required options to draw a rectangle on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawRectangle = function (options) {\n var canvasCtx = this.ctx;\n var cornerRadius = options.rx;\n this.ctx.save();\n this.ctx.beginPath();\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 this.dataUrl = this.canvasObj.toDataURL();\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 this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a path on the canvas\n * @param {PathAttributes} options - options needed to draw path\n * @param {Int32Array} canvasTranslate - Array of numbers to translate the canvas\n * @return {void}\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 '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 this.ctx.closePath();\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 this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a text\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 * @return {void}\n */\n CanvasRenderer.prototype.drawText = function (options, label) {\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 var txtlngth = 0;\n this.ctx.translate(options.x + (txtlngth / 2), options.y);\n this.ctx.rotate(options.labelRotation * Math.PI / 180);\n this.ctx.fillText(label, 0, 0);\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw circle on the canvas\n * @param {CircleAttributes} options - required options to draw the circle\n * @return {void}\n */\n CanvasRenderer.prototype.drawCircle = function (options) {\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 this.setAttributes(options);\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw polyline\n * @param {PolylineAttributes} options - options needed to draw polyline\n * @return {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 this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an ellipse on the canvas\n * @param {EllipseAttributes} options - options needed to draw ellipse\n * @return {void}\n */\n CanvasRenderer.prototype.drawEllipse = function (options) {\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 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 this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an image\n * @param {ImageAttributes} options - options required to draw an image on the canvas\n * @return {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 this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To create a linear gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\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 * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\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 this.dataUrl = this.canvasObj.toDataURL();\n return colorName;\n };\n /**\n * To set the attributes to the element\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 * @return {HTMLElement}\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 element;\n };\n /**\n * To update the values of the canvas element attributes\n * @param {SVGCanvasAttributes} options - Specifies the colors required to create gradient\n * @return {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 return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n ;\n /**\n * Inject required modules in component library\n * @return {void}\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[i];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n * @return {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n * @param {ModuleDeclaration[]} moduleList\n * @returns {void}\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n * @param {string} name\n * @returns {string}\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n * @param {string} modName\n * @returns {boolean}\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { getValue, setValue, merge } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.setProperties(defaultValue, true);\n this.isParentArray = isArray;\n }\n /**\n * Updates the property changes\n * @param {boolean} val\n * @param {string} propName\n * @returns {void}\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n * @param {Object} prop\n * @param {boolean} muteOnChange\n * {void}\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n * @param {string} key\n * @param {Object} newValue\n * @param {Object} oldValue\n * @returns {void}\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue } from '../util';\nvar latnRegex = /^[0-9]*$/;\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object}\n */\n ParserBase.getMainObject = function (obj, cName) {\n return getValue('main.' + cName, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object}\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object}\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n /* tslint:disable no-any */\n if (!res.hasOwnProperty(prop[key])) {\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp}\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n }).join('|');\n return new RegExp(regexStr, 'g');\n };\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n * @param {string} val\n * @returns {string}\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[i] + '|';\n }\n else {\n ret += val[i];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string}\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n * @param {Object} obj\n * @returns {NumericObject}\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n ret.numberParseRegex = new RegExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n * @param {Object} curObj\n * @param {Object} numberSystem\n * @param {boolean} isNumber\n * @returns {NumberMapper}\n */\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n","import { isUndefined, throwError, isNullOrUndefined, extend } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits',\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} object- Specifies the global cldr data collection.\n * @return Function.\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, '', true);\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode);\n /* tslint:disable no-any */\n dOptions.percentSymbol = dOptions.numberMapper.numberSymbols[percentSign];\n dOptions.minusSymbol = dOptions.numberMapper.numberSymbols[minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n * @param {string} pattern\n * @returns {GroupDetails}\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n * @param {number} val1\n * @param {number} val2\n * @param {boolean} checkbothExist\n * @param {boolean} isFraction\n * @returns {boolean}\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n * @param {number} val\n * @param {string} text\n * @param {boolean} isFraction\n * @returns {void}\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n * @param {number} value\n * @param {base.GenericFormatOptions} fOptions\n * @param {CommonOptions} dOptions\n * @returns {string}\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n * @param {string} val\n * @param {number} level1\n * @param {string} sep\n * @param {string} decimalSymbol\n * @param {number} level2\n * @returns {string}\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n * @param {string} value\n * @param {number} min\n * @returns {string}\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","/***\n * Hijri parser\n */\nexport var HijriParser;\n(function (HijriParser) {\n /* tslint:disable */\n var dateCorrection = [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990, 29019, 29049, 29078, 29108, 29137, 29167,\n 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522, 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759,\n 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053, 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348,\n 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585, 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939,\n 30968, 30998, 31027, 31057, 31086, 31116, 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530,\n 31559, 31589, 31618, 31648, 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120,\n 32150, 32180, 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711,\n 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243, 33272, 33302,\n 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775, 33804, 33834, 33863, 33893,\n 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306, 34336, 34365, 34395, 34424, 34454, 34483,\n 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837, 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074,\n 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370, 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665,\n 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901, 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254,\n 36284, 36314, 36343, 36373, 36403, 36433, 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845,\n 36875, 36904, 36934, 36963, 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436,\n 37465, 37495, 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027,\n 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558, 38587, 38617,\n 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089, 39118, 39148, 39178, 39208,\n 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621, 39650, 39680, 39709, 39739, 39768, 39798,\n 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153, 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389,\n 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685, 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980,\n 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216, 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570,\n 41599, 41629, 41658, 41688, 41718, 41748, 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161,\n 42190, 42220, 42249, 42279, 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751,\n 42780, 42810, 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342,\n 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873, 43903, 43932,\n 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405, 44434, 44464, 44493, 44523,\n 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936, 44966, 44996, 45025, 45055, 45084, 45114,\n 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468, 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704,\n 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999, 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295,\n 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531, 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885,\n 46915, 46944, 46974, 47003, 47033, 47063, 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476,\n 47506, 47535, 47565, 47594, 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066,\n 48096, 48125, 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,\n 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189, 49218, 49248,\n 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720, 49749, 49779, 49809, 49838,\n 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252, 50281, 50311, 50340, 50370, 50400, 50429,\n 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784, 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019,\n 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315, 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611,\n 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846, 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200,\n 52230, 52260, 52290, 52319, 52349, 52379, 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792,\n 52822, 52851, 52881, 52910, 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383,\n 53412, 53441, 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973,\n 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505, 54535, 54564,\n 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036, 55066, 55095, 55125, 55154,\n 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567, 55597, 55627, 55657, 55686, 55716, 55745,\n 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100, 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335,\n 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631, 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926,\n 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162, 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517,\n 57546, 57576, 57605, 57634, 57664, 57694, 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107,\n 58137, 58167, 58196, 58226, 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698,\n 58727, 58757, 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288,\n 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820, 59850, 59879,\n 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352, 60381, 60411, 60440, 60469,\n 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883, 60912, 60942, 60972, 61002, 61031, 61061,\n 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415, 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651,\n 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947, 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242,\n 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478, 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832,\n 62862, 62891, 62921, 62950, 62980, 63009, 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423,\n 63453, 63482, 63512, 63541, 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014,\n 64043, 64073, 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603,\n 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136, 65166, 65195,\n 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667, 65697, 65726, 65755, 65785,\n 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199, 66228, 66258, 66287, 66317, 66346, 66376,\n 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730, 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967,\n 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262, 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557,\n 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793, 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148,\n 68177, 68207, 68236, 68266, 68295, 68325, 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738,\n 68768, 68797, 68827, 68857, 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330,\n 69359, 69388, 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919,\n 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451, 70481, 70510,\n 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983, 71013, 71042, 71071, 71101,\n 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514, 71543, 71573, 71602, 71632, 71662, 71691,\n 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046, 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282,\n 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577, 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872,\n 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109, 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464,\n 73493, 73523, 73552, 73581, 73611, 73640, 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053,\n 74083, 74113, 74142, 74172, 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645,\n 74675, 74704, 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235,\n 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766, 75796, 75826,\n 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299, 76328, 76358, 76387, 76416,\n 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830, 76859, 76889, 76918, 76948, 76977, 77007,\n 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361, 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598,\n 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893, 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188,\n 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425, 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779,\n 78808, 78838, 78867, 78897, 78926, 78956, 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369,\n 79399, 79428, 79458, 79487, 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960,\n 79990];\n /* tslint:enable */\n function getHijriDate(gDate) {\n var day = gDate.getDate();\n var month = gDate.getMonth();\n var year = gDate.getFullYear();\n var tMonth = month + 1;\n var tYear = year;\n if (tMonth < 3) {\n tYear -= 1;\n tMonth += 12;\n }\n var yPrefix = Math.floor(tYear / 100.);\n var julilanOffset = yPrefix - Math.floor(yPrefix / 4.) - 2;\n var julianNumber = Math.floor(365.25 * (tYear + 4716)) + Math.floor(30.6001 * (tMonth + 1)) + day - julilanOffset - 1524;\n yPrefix = Math.floor((julianNumber - 1867216.25) / 36524.25);\n julilanOffset = yPrefix - Math.floor(yPrefix / 4.) + 1;\n var b = julianNumber + julilanOffset + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var tempMonth = Math.floor((b - d) / 30.6001);\n day = (b - d) - Math.floor(30.6001 * tempMonth);\n month = Math.floor((b - d) / 20.6001);\n if (month > 13) {\n c += 1;\n month -= 12;\n }\n month -= 1;\n year = c - 4716;\n var modifiedJulianDate = julianNumber - 2400000;\n // date calculation for year after 2077\n var iyear = 10631. / 30.;\n var z = julianNumber - 1948084;\n var cyc = Math.floor(z / 10631.);\n z = z - 10631 * cyc;\n var j = Math.floor((z - 0.1335) / iyear);\n var iy = 30 * cyc + j;\n z = z - Math.floor(j * iyear + 0.1335);\n var im = Math.floor((z + 28.5001) / 29.5);\n /* istanbul ignore next */\n if (im === 13) {\n im = 12;\n }\n var tempDay = z - Math.floor(29.5001 * im - 29);\n var i = 0;\n for (; i < dateCorrection.length; i++) {\n if (dateCorrection[i] > modifiedJulianDate) {\n break;\n }\n }\n var iln = i + 16260;\n var ii = Math.floor((iln - 1) / 12);\n var hYear = ii + 1;\n var hmonth = iln - 12 * ii;\n var hDate = modifiedJulianDate - dateCorrection[i - 1] + 1;\n if ((hDate + '').length > 2) {\n hDate = tempDay;\n hmonth = im;\n hYear = iy;\n }\n return { year: hYear, month: hmonth, date: hDate };\n }\n HijriParser.getHijriDate = getHijriDate;\n function toGregorian(year, month, day) {\n var iy = year;\n var im = month;\n var id = day;\n var ii = iy - 1;\n var iln = (ii * 12) + 1 + (im - 1);\n var i = iln - 16260;\n var mcjdn = id + dateCorrection[i - 1] - 1;\n var julianDate = mcjdn + 2400000;\n var z = Math.floor(julianDate + 0.5);\n var a = Math.floor((z - 1867216.25) / 36524.25);\n a = z + 1 + a - Math.floor(a / 4);\n var b = a + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var e = Math.floor((b - d) / 30.6001);\n var gDay = b - d - Math.floor(e * 30.6001);\n var gMonth = e - (e > 13.5 ? 13 : 1);\n var gYear = c - (gMonth > 2.5 ? 4716 : 4715);\n /* istanbul ignore next */\n if (gYear <= 0) {\n gMonth--;\n } // No year zero\n return new Date(gYear + '/' + (gMonth) + '/' + gDay);\n }\n HijriParser.toGregorian = toGregorian;\n})(HijriParser || (HijriParser = {}));\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue } from '../util';\nimport { HijriParser } from '../hijri-parser';\nimport { isNullOrUndefined } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|K|ccc|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n m: 'getMinutes',\n h: 'getHours',\n H: 'getHours',\n s: 'getSeconds',\n d: 'getDate',\n};\nexport var datePartMatcher = {\n 'M': 'month',\n 'd': 'day',\n 'E': 'weekday',\n 'c': 'weekday',\n 'y': 'year',\n 'm': 'minute',\n 'h': 'hour',\n 'H': 'hour',\n 's': 'second',\n 'L': 'month',\n 'a': 'designator',\n 'z': 'timeZone',\n 'Z': 'timeZone',\n 'G': 'era'\n};\nvar timeSeparator = 'timeSeparator';\n/**\n * Date Format is a framework provides support for date formatting.\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which date will format.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var formatOptions = { isIslamic: base.islamicRegex.test(option.calendar) };\n var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type);\n formatOptions.dateSeperator = base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n var str = patternMatch_1[_i];\n var len = str.length;\n var char = str[0];\n if (char === 'K') {\n char = 'h';\n }\n /* tslint:disable no-any */\n var charKey = datePartMatcher[char];\n switch (char) {\n case 'E':\n case 'c':\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n break;\n case 'M':\n case 'L':\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n break;\n case 'a':\n formatOptions.designator = getValue('dayPeriods.format.wide', dependable.dateObject);\n break;\n case 'G':\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = getValue('eras.' + eText, dependable.dateObject);\n break;\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n * @param {Date} value\n * @param {FormatOptions} options\n */\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n var dObject = this.getCurrentDateValue(value, options.isIslamic);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = dObject.month;\n if (length_1 > 2) {\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n ret += options.weekday[weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n isNumber = true;\n if (char === 'd') {\n curval = dObject.date;\n }\n else {\n curval = value[timeSetter[char]]();\n }\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += dObject.year;\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a':\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n ret += options.designator[desig];\n break;\n case 'G':\n var dec = value.getFullYear() < 0 ? 0 : 1;\n var retu = options.era[dec];\n if (isNullOrUndefined(retu)) {\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/\\'/g, '');\n break;\n case 'z':\n var timezone = value.getTimezoneOffset();\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n ret += options.numMapper.numberSymbols[timeSeparator];\n /* tslint:enable no-any */\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n default:\n ret += match;\n }\n if (isNumber) {\n processNumber = true;\n curstr = this.checkTwodigitNumber(curval, length_1);\n }\n if (processNumber) {\n ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n }\n }\n return ret;\n };\n DateFormat.getCurrentDateValue = function (value, isIslamic) {\n if (isIslamic) {\n return HijriParser.getHijriDate(value);\n }\n return { year: value.getFullYear(), month: value.getMonth() + 1, date: value.getDate() };\n };\n /**\n * Returns two digit numbers for given value and length\n */\n DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n * @param {number} tVal\n * @param {string} pattern\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\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 { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nimport { createElement, addClass, removeClass } from './dom';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n _this.needsID = false;\n /**\n * This is a instance method to create an element.\n * @private\n */\n _this.createElement = createElement;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n _this.detectFunction = new Function('args', 'var prop = Object.keys(args); if(prop.length){this[prop[0]] = args[prop[0]];}');\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n ;\n /**\n * Destroys the sub modules while destroying the widget\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n removeClass([this.element], ['e-control']);\n if (this.refreshing) {\n return;\n }\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n /**\n * Appends the control within the given HTML element\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = document.querySelector(selector);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-control', moduleClass]);\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n this.render();\n this.trigger('created');\n }\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n ;\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @return {void}\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @return {void}\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @return {void}\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n ;\n /**\n * Dynamically injects the required modules to the component.\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {\n this.prototype.injectedModules.push(moduleList[i]);\n }\n }\n };\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.mergePersistData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n };\n //tslint:disable-next-line\n Component.prototype.clearTemplate = function (templateName, index) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // tslint:disable-next-line:no-any\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n return new RegExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection \n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined } from '../util';\nimport { datePartMatcher } from './date-formatter';\nimport { HijriParser } from '../hijri-parser';\nvar number = 'numbers';\nvar defNoSystem = 'defaultNumberingSystem';\nvar noSystem = 'numberingSystem';\nvar standalone = 'stand-alone';\nvar curWeekDay = 'curWeekDay';\nvar latnRegex = /^[0-9]*$/;\nvar abbreviateRegex = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|ccc/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth'\n};\nvar month = 'months';\n/* tslint:disable no-any */\n/**\n * Date Parser.\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which string date will be parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n // tslint:disable-next-line:max-func-body-length\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr));\n var parseOptions = {};\n var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type);\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n parseOptions = { isIslamic: base.islamicRegex.test(option.calendar), pattern: resPattern, evalposition: {} };\n var patternMatch = resPattern.match(base.dateParseRegex) || [];\n var length_1 = patternMatch.length;\n var gmtCorrection = 0;\n var zCorrectTemp = 0;\n var isgmtTraversed = false;\n var nRegx = numOptions.numericRegex;\n var numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[i];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // tslint:disable-next-line\n var weekObject = parser.reverseObject(dependable.dateObject[base.days][standalone][base.monthIndex[len]]);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n // tslint:disable-next-line\n parseOptions[charKey] = parser.reverseObject(dependable.dateObject[month][standalone][base.monthIndex[len]]);\n /* tslint:disable no-any */\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n parseOptions[charKey] = parser.reverseObject(getValue('dayPeriods.format.wide', dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[charKey] = parser.reverseObject(getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n var iString = str.replace(/\\'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n parseOptions.parserRegex = new RegExp('^' + regexString + '$');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n if (parseOptions.isIslamic) {\n var dobj = {};\n var tYear = parsedDateParts.year;\n var tDate = parsedDateParts.day;\n var tMonth = parsedDateParts.month;\n var ystrig = tYear ? (tYear + '') : '';\n var is2DigitYear = (ystrig.length === 2);\n if (!tYear || !tMonth || !tDate || is2DigitYear) {\n dobj = HijriParser.getHijriDate(new Date());\n }\n if (is2DigitYear) {\n tYear = parseInt((dobj.year + '').slice(0, 2) + ystrig, 10);\n }\n // tslint:disable-next-line\n var dateObject = HijriParser.toGregorian(tYear || dobj.year, tMonth || dobj.month, tDate || dobj.date);\n parsedDateParts.year = dateObject.getFullYear();\n parsedDateParts.month = dateObject.getMonth() + 1;\n parsedDateParts.day = dateObject.getDate();\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /* tslint:disable */\n /**\n * Returns date object for provided date options\n * @param {DateParts} options\n * @param {Date} value\n * @returns {Date}\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n var tValue = options[key];\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n res[timeSetter[key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n res[timeSetter[key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n * @param {string} value\n * @param {ParseOptions} parseOptions\n * @param {NumericOptions} num\n * @returns {DateParts}\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n var nRegx = num.numericRegex;\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n retOptions[prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[prop] = val;\n }\n }\n else {\n retOptions[prop] = parseOptions[prop][matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n * @param {string} value\n * @param {NumericOptions} option\n * @returns {number}\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n * @param {string} hourFormat\n * @param {base.TimeZoneOptions} tZone\n * @param {string} nRegex\n * @returns {string}\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var result;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n * @param {boolean} flag\n * @param {string} val1\n * @param {string} val2\n * @param {NumericOptions} num\n * @returns {number}\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n/* tslint:enable */\n","import { extend, isNullOrUndefined } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar formatRegex = /(^[ncpa]{1})([0-1]?[0-9]|20)?$/i;\nvar parseRegex = /^([^0-9]*)(([0-9,]*[0-9]+)(\\.[0-9]+)?)([Ee][+-]?[0-9]+)?([^0-9]*)$/;\nvar groupRegex = /,/g;\nvar latnDecimalRegex = /^[0-9]*(\\.[0-9]+)?$/;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} - Specific the format in which number will parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numOptions;\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // tslint:disable-next-line:no-any\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n if (symbolpattern) {\n symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n var split = symbolpattern.split(';');\n parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n parseOptions.pData = base.getFormatData(split[0], true, '');\n }\n return function (value) {\n return _this.getParsedNumber(value, parseOptions, numOptions);\n };\n };\n /**\n * Returns parsed number for the provided formatting options\n * @param {string} value\n * @param {NumericParts} options\n * @param {NumericOptions} numOptions\n * @returns {number}\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n return NumberParser;\n}());\nexport { NumberParser };\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 { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n __extends(Position, _super);\n function Position() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Position.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Position.prototype, \"top\", void 0);\n return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n *
Draggable
\n * \n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.dragLimit = Draggable_1.getDefaultPosition();\n _this.borderWidth = Draggable_1.getDefaultPosition();\n _this.padding = Draggable_1.getDefaultPosition();\n _this.diffX = 0;\n _this.prevLeft = 0;\n _this.prevTop = 0;\n _this.dragProcessStarted = false;\n /* tslint:disable no-any */\n _this.tapHoldTimer = 0;\n _this.externalInitialize = false;\n _this.diffY = 0;\n _this.droppables = {};\n _this.bind();\n return _this;\n }\n Draggable_1 = Draggable;\n Draggable.prototype.bind = function () {\n this.toggleEvents();\n if (Browser.isIE) {\n addClass([this.element], 'e-block-touch');\n }\n this.droppables[this.scope] = {};\n };\n Draggable.getDefaultPosition = function () {\n return extend({}, defaultPosition);\n };\n Draggable.prototype.toggleEvents = function (isUnWire) {\n var ele;\n if (!isUndefined(this.handle)) {\n ele = select(this.handle, this.element);\n }\n var handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;\n if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.touchStartEvent, handler);\n }\n else {\n EventHandler.add(ele || this.element, Browser.touchStartEvent, handler, this);\n }\n };\n /* istanbul ignore next */\n Draggable.prototype.mobileInitialize = function (evt) {\n var _this = this;\n var target = evt.currentTarget;\n this.tapHoldTimer = setTimeout(function () {\n _this.externalInitialize = true;\n _this.removeTapholdTimer();\n _this.initialize(evt, target);\n }, this.tapHoldThreshold);\n EventHandler.add(document, Browser.touchMoveEvent, this.removeTapholdTimer, this);\n };\n /* istanbul ignore next */\n Draggable.prototype.removeTapholdTimer = function () {\n clearTimeout(this.tapHoldTimer);\n EventHandler.remove(document, Browser.touchMoveEvent, this.removeTapholdTimer);\n };\n Draggable.prototype.initialize = function (evt, curTarget) {\n this.target = (evt.currentTarget || curTarget);\n this.dragProcessStarted = false;\n if (this.abort) {\n if (!isNullOrUndefined(closest(evt.target, this.abort))) {\n return;\n }\n }\n if (this.preventDefault && !isUndefined(evt.changedTouches)) {\n evt.preventDefault();\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.relativeXPosition = intCoord.pageX - pos.left;\n this.relativeYPosition = intCoord.pageY - pos.top;\n }\n if (this.externalInitialize) {\n this.intDragStart(evt);\n }\n else {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDestroy, this);\n }\n this.toggleEvents(true);\n document.body.classList.add('e-prevent-select');\n this.externalInitialize = false;\n EventHandler.trigger(document.documentElement, Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n this.removeTapholdTimer();\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n if (isChangeTouch) {\n evt.preventDefault();\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10),\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if ((distance >= this.distance || this.externalInitialize)) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStart', { event: evt, element: element, target: curTarget });\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n }\n };\n Draggable.prototype.elementInViewport = function (el) {\n this.top = el.offsetTop;\n this.left = el.offsetLeft;\n this.width = el.offsetWidth;\n this.height = el.offsetHeight;\n while (el.offsetParent) {\n el = el.offsetParent;\n this.top += el.offsetTop;\n this.left += el.offsetLeft;\n }\n return (this.top >= window.pageYOffset &&\n this.left >= window.pageXOffset &&\n (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n /* tslint:disable no-any */\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n else if (this.hoverObject) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n if (this.dragArea) {\n var styles = getComputedStyle(helperElement);\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right < dLeft + helperWidth) {\n left = this.dragLimit.right - helperWidth;\n }\n else {\n left = dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top > dTop) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom < dTop + helperHeight) {\n top = this.dragLimit.bottom - helperHeight;\n }\n else {\n top = dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n if (this.dragProcessStarted) {\n if (isNullOrUndefined(top)) {\n top = this.prevTop;\n }\n if (isNullOrUndefined(left)) {\n left = this.prevLeft;\n }\n }\n var dragValue = this.getProcessedPositionValue({ top: (top - iTop) + 'px', left: (left - iLeft) + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll) {\n this.helperElement.scrollIntoView();\n }\n this.dragProcessStarted = true;\n this.prevLeft = left;\n this.prevTop = top;\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n Draggable.prototype.getDragPosition = function (dragValue) {\n var temp = extend({}, dragValue);\n if (this.axis) {\n if (this.axis === 'x') {\n delete temp.top;\n }\n else if (this.axis === 'y') {\n delete temp.left;\n }\n }\n return temp;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n this.dragProcessStarted = false;\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var type = ['touchend', 'pointerup', 'mouseup'];\n if (type.indexOf(evt.type) !== -1) {\n if (this.dragStop) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n }\n this.intDestroy(evt);\n }\n else {\n this.element.setAttribute('aria-grabbed', 'false');\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.dragStopCalled = true;\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intDrop(evt, eleObj.target);\n }\n this.setGlobalDroppables(true);\n document.body.classList.remove('e-prevent-select');\n };\n Draggable.prototype.intDestroy = function (evt) {\n this.dragProcessStarted = false;\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n this.element.setAttribute('aria-grabbed', 'false');\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDrag);\n };\n // triggers when property changed\n Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Draggable.prototype.getModuleName = function () {\n return 'draggable';\n };\n Draggable.prototype.setDragArea = function () {\n var eleWidthBound;\n var eleHeightBound;\n var top = 0;\n var left = 0;\n var ele;\n var type = typeof this.dragArea;\n if (type === 'string') {\n ele = select(this.dragArea);\n }\n else {\n ele = this.dragArea;\n }\n if (ele) {\n var elementArea = ele.getBoundingClientRect();\n eleWidthBound = elementArea.width ? elementArea.width : elementArea.right - elementArea.left;\n eleHeightBound = elementArea.height ? elementArea.height : elementArea.bottom - elementArea.top;\n var keys = ['Top', 'Left', 'Bottom', 'Right'];\n var styles = getComputedStyle(ele);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n top = elementArea.top;\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = top + this.borderWidth.top + this.padding.top;\n this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n }\n };\n Draggable.prototype.getProperTargetElement = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var ele;\n var prevStyle = this.helperElement.style.display || '';\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1) {\n this.helperElement.style.display = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.display = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n Draggable.prototype.getMousePosition = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var pageX = this.clone ? intCoord.pageX : (intCoord.pageX + window.scrollX) - this.relativeXPosition;\n var pageY = this.clone ? intCoord.pageY : (intCoord.pageY + window.scrollY) - this.relativeYPosition;\n return {\n left: pageX - (this.margin.left + this.cursorAt.left),\n top: pageY - (this.margin.top + this.cursorAt.top)\n };\n };\n Draggable.prototype.getCoordinates = function (evt) {\n if (evt.type.indexOf('touch') > -1) {\n return evt.changedTouches[0];\n }\n return evt;\n };\n Draggable.prototype.getHelperElement = function (evt) {\n var element;\n if (this.clone) {\n if (this.helper) {\n element = this.helper({ sender: evt, element: this.target });\n }\n else {\n element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n document.body.appendChild(element);\n }\n }\n else {\n element = this.element;\n }\n return element;\n };\n Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n this.droppables[this.scope] = reset ? null : {\n draggable: drag,\n helper: helper,\n draggedElement: this.element\n };\n };\n Draggable.prototype.checkTargetElement = function (evt) {\n var target = this.getProperTargetElement(evt);\n var dropIns = this.getDropInstance(target);\n if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n if (parent_1) {\n dropIns = this.getDropInstance(parent_1);\n }\n }\n return { target: target, instance: dropIns };\n };\n Draggable.prototype.getDropInstance = function (ele) {\n var name = 'getModuleName';\n var drop;\n var eleInst = ele && ele.ej2_instances;\n if (eleInst) {\n for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n var inst = eleInst_1[_i];\n if (inst[name]() === 'droppable') {\n drop = inst;\n break;\n }\n }\n }\n return drop;\n };\n Draggable.prototype.destroy = function () {\n this.toggleEvents(true);\n _super.prototype.destroy.call(this);\n };\n var Draggable_1;\n __decorate([\n Complex({}, Position)\n ], Draggable.prototype, \"cursorAt\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"clone\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"dragArea\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStop\", void 0);\n __decorate([\n Property(1)\n ], Draggable.prototype, \"distance\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"handle\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"abort\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"helper\", void 0);\n __decorate([\n Property('default')\n ], Draggable.prototype, \"scope\", void 0);\n __decorate([\n Property('')\n ], Draggable.prototype, \"dragTarget\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"axis\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"queryPositionInfo\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTailMode\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"preventDefault\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableAutoScroll\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTapHold\", void 0);\n __decorate([\n Property(750)\n ], Draggable.prototype, \"tapHoldThreshold\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n}(Base));\nexport { Draggable };\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, Collection, L10n, Browser, Complex, compile, createElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, detach, attributes, prepend, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, append } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { Draggable } from '@syncfusion/ej2-base';\nimport { Popup, PositionData, getZindexPartial } from '../popup/popup';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createResize, removeResize, setMinHeight } from '../common/resize';\nvar ButtonProps = /** @class */ (function (_super) {\n __extends(ButtonProps, _super);\n function ButtonProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ButtonProps.prototype, \"buttonModel\", void 0);\n __decorate([\n Property('Button')\n ], ButtonProps.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], ButtonProps.prototype, \"click\", void 0);\n return ButtonProps;\n}(ChildProperty));\nexport { ButtonProps };\n/**\n * Configures the animation properties for both open and close the dialog.\n */\nvar AnimationSettings = /** @class */ (function (_super) {\n __extends(AnimationSettings, _super);\n function AnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Fade')\n ], AnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], AnimationSettings.prototype, \"delay\", void 0);\n return AnimationSettings;\n}(ChildProperty));\nexport { AnimationSettings };\nvar ROOT = 'e-dialog';\nvar RTL = 'e-rtl';\nvar DLG_HEADER_CONTENT = 'e-dlg-header-content';\nvar DLG_HEADER = 'e-dlg-header';\nvar DLG_FOOTER_CONTENT = 'e-footer-content';\nvar MODAL_DLG = 'e-dlg-modal';\nvar DLG_CONTENT = 'e-dlg-content';\nvar DLG_CLOSE_ICON = 'e-icon-dlg-close';\nvar DLG_OVERLAY = 'e-dlg-overlay';\nvar DLG_CONTAINER = 'e-dlg-container';\nvar SCROLL_DISABLED = 'e-scroll-disabled';\nvar DLG_PRIMARY_BUTTON = 'e-primary';\nvar ICON = 'e-icons';\nvar POPUP_ROOT = 'e-popup';\nvar DEVICE = 'e-device';\nvar FULLSCREEN = 'e-dlg-fullscreen';\nvar DLG_CLOSE_ICON_BTN = 'e-dlg-closeicon-btn';\nvar DLG_HIDE = 'e-popup-close';\nvar DLG_SHOW = 'e-popup-open';\nvar DLG_UTIL_DEFAULT_TITLE = 'Information';\nvar DLG_UTIL_ROOT = 'e-scroll-disabled';\nvar DLG_UTIL_ALERT = 'e-alert-dialog';\nvar DLG_UTIL_CONFIRM = 'e-confirm-dialog';\nvar DLG_RESIZABLE = 'e-dlg-resizable';\nvar DLG_RESTRICT_LEFT_VALUE = 'e-restrict-left';\nvar DLG_RESTRICT_WIDTH_VALUE = 'e-resize-viewport';\n/**\n * Represents the dialog component that displays the information and get input from the user.\n * Two types of dialog components are `Modal and Modeless (non-modal)` depending on its interaction with parent application.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Dialog = /** @class */ (function (_super) {\n __extends(Dialog, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Dialog(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n if (this.width === '100%') {\n this.element.style.width = '';\n }\n if (this.enableResize) {\n this.setResize();\n if (this.animationSettings.effect === 'None') {\n this.getMinHeight();\n }\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Dialog.prototype.preRender = function () {\n var _this = this;\n this.headerContent = null;\n var classArray = [];\n for (var j = 0; j < this.element.classList.length; j++) {\n if (!isNullOrUndefined(this.element.classList[j].match('e-control')) ||\n !isNullOrUndefined(this.element.classList[j].match(ROOT))) {\n classArray.push(this.element.classList[j]);\n }\n }\n removeClass([this.element], classArray);\n this.clonedEle = this.element.cloneNode(true);\n this.closeIconClickEventHandler = function (event) {\n _this.hide(event);\n };\n this.dlgOverlayClickEventHandler = function (event) {\n _this.trigger('overlayClick', event);\n };\n var localeText = { close: 'Close' };\n this.l10n = new L10n('dialog', localeText, this.locale);\n this.checkPositionData();\n if (isNullOrUndefined(this.target)) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.target = document.body;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n ;\n Dialog.prototype.isNumberValue = function (value) {\n var isNumber = /^[-+]?\\d*\\.?\\d+$/.test(value);\n return isNumber;\n };\n Dialog.prototype.checkPositionData = function () {\n if (!isNullOrUndefined(this.position)) {\n if (!isNullOrUndefined(this.position.X) && (typeof (this.position.X) !== 'number')) {\n var isNumber = this.isNumberValue(this.position.X);\n if (isNumber) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.position.X = parseFloat(this.position.X);\n this.isProtectedOnChange = prevOnChange;\n }\n }\n if (!isNullOrUndefined(this.position.Y) && (typeof (this.position.Y) !== 'number')) {\n var isNumber = this.isNumberValue(this.position.Y);\n if (isNumber) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.position.Y = parseFloat(this.position.Y);\n this.isProtectedOnChange = prevOnChange;\n }\n }\n }\n };\n /* istanbul ignore next */\n Dialog.prototype.getMinHeight = function () {\n var computedHeaderHeight = '0px';\n var computedFooterHeight = '0px';\n if (!isNullOrUndefined(this.element.querySelector('.' + DLG_HEADER_CONTENT))) {\n computedHeaderHeight = getComputedStyle(this.headerContent).height;\n }\n if (!isNullOrUndefined(this.element.querySelector('.' + DLG_FOOTER_CONTENT))) {\n computedFooterHeight = getComputedStyle(this.element.querySelector('.' + DLG_FOOTER_CONTENT)).height;\n }\n var headerHeight = parseInt(computedHeaderHeight.slice(0, computedHeaderHeight.indexOf('p')), 10);\n var footerHeight = parseInt(computedFooterHeight.slice(0, computedFooterHeight.indexOf('p')), 10);\n setMinHeight(headerHeight + 30 + footerHeight);\n };\n Dialog.prototype.onResizeStart = function (args) {\n this.trigger('resizeStart', args);\n };\n Dialog.prototype.onResizing = function (args) {\n this.trigger('resizing', args);\n };\n Dialog.prototype.onResizeComplete = function (args) {\n this.trigger('resizeStop', args);\n };\n Dialog.prototype.setResize = function () {\n if (this.enableResize) {\n this.element.classList.add(DLG_RESIZABLE);\n var computedHeight = getComputedStyle(this.element).minHeight;\n var computedWidth = getComputedStyle(this.element).minWidth;\n var direction = this.enableRtl ? 'south-west' : 'south-east';\n if (this.isModal && this.enableRtl) {\n this.element.classList.add(DLG_RESTRICT_LEFT_VALUE);\n }\n else if (this.isModal && this.target === document.body) {\n this.element.classList.add(DLG_RESTRICT_WIDTH_VALUE);\n }\n createResize({\n element: this.element,\n direction: direction,\n minHeight: parseInt(computedHeight.slice(0, computedWidth.indexOf('p')), 10),\n maxHeight: this.targetEle.clientHeight,\n minWidth: parseInt(computedWidth.slice(0, computedWidth.indexOf('p')), 10),\n maxWidth: this.targetEle.clientWidth,\n boundary: this.target === document.body ? null : this.targetEle,\n resizeBegin: this.onResizeStart.bind(this),\n resizeComplete: this.onResizeComplete.bind(this),\n resizing: this.onResizing.bind(this)\n });\n }\n else {\n removeResize();\n if (this.isModal) {\n this.element.classList.remove(DLG_RESTRICT_LEFT_VALUE);\n }\n else {\n this.element.classList.remove(DLG_RESTRICT_WIDTH_VALUE);\n }\n this.element.classList.remove(DLG_RESIZABLE);\n }\n };\n /* istanbul ignore next */\n Dialog.prototype.keyDown = function (event) {\n var _this = this;\n if (event.keyCode === 9) {\n if (this.isModal) {\n var buttonObj = void 0;\n if (!isNullOrUndefined(this.btnObj)) {\n buttonObj = this.btnObj[this.btnObj.length - 1];\n }\n if (!isNullOrUndefined(buttonObj) && document.activeElement === buttonObj.element && !event.shiftKey) {\n event.preventDefault();\n this.focusableElements(this.element).focus();\n }\n if (document.activeElement === this.focusableElements(this.element) && event.shiftKey) {\n event.preventDefault();\n if (!isNullOrUndefined(buttonObj)) {\n buttonObj.element.focus();\n }\n }\n }\n }\n var element = document.activeElement;\n var isTagName = (['input', 'textarea'].indexOf(element.tagName.toLowerCase()) > -1);\n var isContentEdit = false;\n if (!isTagName) {\n isContentEdit = element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') === 'true';\n }\n if (event.keyCode === 27 && this.closeOnEscape) {\n this.hide(event);\n }\n if ((event.keyCode === 13 && !event.ctrlKey && element.tagName.toLowerCase() !== 'textarea' &&\n isTagName && !isNullOrUndefined(this.primaryButtonEle)) ||\n (event.keyCode === 13 && event.ctrlKey && (element.tagName.toLowerCase() === 'textarea' ||\n isContentEdit)) && !isNullOrUndefined(this.primaryButtonEle)) {\n var buttonIndex_1;\n var firstPrimary = this.buttons.some(function (data, index) {\n buttonIndex_1 = index;\n var buttonModel = data.buttonModel;\n return !isNullOrUndefined(buttonModel) && buttonModel.isPrimary === true;\n });\n if (firstPrimary && typeof (this.buttons[buttonIndex_1].click) === 'function') {\n setTimeout(function () {\n _this.buttons[buttonIndex_1].click.call(_this, event);\n });\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.initialize = function () {\n if (!isNullOrUndefined(this.target)) {\n this.targetEle = ((typeof this.target) === 'string') ?\n document.querySelector(this.target) : this.target;\n }\n addClass([this.element], ROOT);\n if (Browser.isDevice) {\n addClass([this.element], DEVICE);\n }\n this.setCSSClass();\n this.setMaxHeight();\n };\n /**\n * Initialize the rendering\n * @private\n */\n Dialog.prototype.initRender = function () {\n var _this = this;\n this.initialRender = true;\n attributes(this.element, { role: 'dialog' });\n if (this.zIndex === 1000) {\n this.setzIndex(this.element, false);\n this.calculatezIndex = true;\n }\n else {\n this.calculatezIndex = false;\n }\n this.setTargetContent();\n if (this.header !== '' && !isNullOrUndefined(this.header)) {\n this.setHeader();\n }\n if (this.showCloseIcon) {\n this.renderCloseIcon();\n }\n this.setContent();\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setFooterTemplate();\n }\n else if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n this.setButton();\n }\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n attributes(this.element, { 'aria-modal': (this.isModal ? 'true' : 'false') });\n if (this.isModal) {\n this.setIsModal();\n }\n if (!isNullOrUndefined(this.targetEle)) {\n this.isModal ? this.targetEle.appendChild(this.dlgContainer) : this.targetEle.appendChild(this.element);\n }\n this.popupObj = new Popup(this.element, {\n height: this.height,\n width: this.width,\n zIndex: this.zIndex,\n relateTo: this.target,\n actionOnScroll: 'none',\n open: function (event) {\n _this.focusContent();\n var eventArgs = {\n container: _this.isModal ? _this.dlgContainer : _this.element,\n element: _this.element,\n target: _this.target\n };\n if (_this.enableResize && _this.animationSettings.effect !== 'None') {\n _this.getMinHeight();\n }\n _this.trigger('open', eventArgs);\n },\n close: function (event) {\n if (_this.isModal) {\n addClass([_this.dlgOverlay], 'e-fade');\n }\n _this.unBindEvent(_this.element);\n if (_this.isModal) {\n _this.dlgContainer.style.display = 'none';\n }\n _this.trigger('close', _this.closeArgs);\n if (!isNullOrUndefined(document.activeElement.blur)) {\n document.activeElement.blur();\n }\n if (!isNullOrUndefined(_this.storeActiveElement)) {\n document.activeElement.blur();\n _this.storeActiveElement.focus();\n }\n }\n });\n this.positionChange();\n this.setEnableRTL();\n addClass([this.element], DLG_HIDE);\n if (this.isModal) {\n this.setOverlayZindex();\n }\n if (this.visible) {\n this.show();\n }\n else {\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n }\n }\n this.initialRender = false;\n };\n Dialog.prototype.setOverlayZindex = function (zIndexValue) {\n var zIndex;\n if (isNullOrUndefined(zIndexValue)) {\n zIndex = parseInt(this.element.style.zIndex, 10) ? parseInt(this.element.style.zIndex, 10) : this.zIndex;\n }\n else {\n zIndex = zIndexValue;\n }\n this.dlgOverlay.style.zIndex = (zIndex - 1).toString();\n this.dlgContainer.style.zIndex = zIndex.toString();\n };\n Dialog.prototype.positionChange = function () {\n if (this.isModal) {\n if (typeof (this.position.X) === 'number' && typeof (this.position.Y) === 'number') {\n this.setPopupPosition();\n }\n else if ((typeof this.position.X === 'string' && typeof this.position.Y === 'number') ||\n (typeof this.position.X === 'number' && typeof this.position.Y === 'string')) {\n this.setPopupPosition();\n }\n else {\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\n }\n }\n else {\n this.setPopupPosition();\n }\n };\n Dialog.prototype.setPopupPosition = function () {\n this.popupObj.setProperties({\n position: {\n X: this.position.X, Y: this.position.Y\n }\n });\n };\n Dialog.prototype.setAllowDragging = function () {\n var _this = this;\n var handleContent = '.' + DLG_HEADER_CONTENT;\n this.dragObj = new Draggable(this.element, {\n clone: false,\n abort: '.e-dlg-closeicon-btn',\n handle: handleContent,\n dragStart: function (event) {\n _this.trigger('dragStart', event);\n },\n dragStop: function (event) {\n if (_this.isModal) {\n if (!isNullOrUndefined(_this.position)) {\n _this.dlgContainer.classList.remove('e-dlg-' + _this.position.X + '-' + _this.position.Y);\n }\n // Reset the dialog position after drag completion.\n _this.element.style.position = 'relative';\n }\n _this.trigger('dragStop', event);\n _this.element.classList.remove(DLG_RESTRICT_LEFT_VALUE);\n },\n drag: function (event) {\n _this.trigger('drag', event);\n }\n });\n if (!isNullOrUndefined(this.targetEle)) {\n this.dragObj.dragArea = this.targetEle;\n }\n };\n Dialog.prototype.setButton = function () {\n this.buttonContent = [];\n this.btnObj = [];\n var primaryBtnFlag = true;\n for (var i = 0; i < this.buttons.length; i++) {\n var buttonType = !isNullOrUndefined(this.buttons[i].type) ? this.buttons[i].type.toLowerCase() : 'button';\n var btn = this.createElement('button', { attrs: { type: buttonType } });\n this.buttonContent.push(btn.outerHTML);\n }\n this.setFooterTemplate();\n for (var i = 0; i < this.buttons.length; i++) {\n this.btnObj[i] = new Button(this.buttons[i].buttonModel);\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.add(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click, this);\n }\n this.btnObj[i].appendTo(this.ftrTemplateContent.children[i]);\n this.btnObj[i].element.classList.add('e-flat');\n this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n }\n };\n Dialog.prototype.setContent = function () {\n attributes(this.element, { 'aria-describedby': this.element.id + '_dialog-content' });\n this.contentEle = this.createElement('div', { className: DLG_CONTENT, id: this.element.id + '_dialog-content' });\n if (this.innerContentElement) {\n this.contentEle.appendChild(this.innerContentElement);\n }\n else if (!isNullOrUndefined(this.content) && this.content !== '' || !this.initialRender) {\n if (typeof (this.content) === 'string') {\n this.contentEle.innerHTML = this.content;\n }\n else if (this.content instanceof HTMLElement) {\n this.contentEle.appendChild(this.content);\n }\n else {\n this.setTemplate(this.content, this.contentEle);\n }\n }\n if (!isNullOrUndefined(this.headerContent)) {\n this.element.insertBefore(this.contentEle, this.element.children[1]);\n }\n else {\n this.element.insertBefore(this.contentEle, this.element.children[0]);\n }\n if (this.height === 'auto') {\n this.setMaxHeight();\n }\n };\n Dialog.prototype.setTemplate = function (template, toElement) {\n var templateFn = compile(template);\n var fromElements = [];\n for (var _i = 0, _a = templateFn({}); _i < _a.length; _i++) {\n var item = _a[_i];\n fromElements.push(item);\n }\n append([].slice.call(fromElements), toElement);\n };\n Dialog.prototype.setMaxHeight = function () {\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) && (this.targetEle.offsetHeight < window.innerHeight) ?\n (this.targetEle.offsetHeight - 20) + 'px' : (window.innerHeight - 20) + 'px';\n this.element.style.display = display;\n };\n Dialog.prototype.setEnableRTL = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n if (!isNullOrUndefined(this.element.querySelector('.e-resize-handle'))) {\n removeResize();\n this.setResize();\n }\n };\n Dialog.prototype.setTargetContent = function () {\n if (isNullOrUndefined(this.content) || this.content === '') {\n var isContent = this.element.innerHTML.replace(/\\s/g, '') !== '';\n if (this.element.children.length > 0 || isContent) {\n this.innerContentElement = document.createDocumentFragment();\n while (this.element.childNodes.length !== 0) {\n this.innerContentElement.appendChild(this.element.childNodes[0]);\n }\n }\n }\n };\n Dialog.prototype.setHeader = function () {\n if (this.headerEle) {\n this.headerEle.innerHTML = '';\n }\n else {\n this.headerEle = this.createElement('div', { id: this.element.id + '_title', className: DLG_HEADER });\n }\n this.createHeaderContent();\n this.headerContent.appendChild(this.headerEle);\n this.setTemplate(this.header, this.headerEle);\n attributes(this.element, { 'aria-labelledby': this.element.id + '_title' });\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n };\n Dialog.prototype.setFooterTemplate = function () {\n if (this.ftrTemplateContent) {\n this.ftrTemplateContent.innerHTML = '';\n }\n else {\n this.ftrTemplateContent = this.createElement('div', {\n className: DLG_FOOTER_CONTENT\n });\n }\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setTemplate(this.footerTemplate, this.ftrTemplateContent);\n }\n else {\n this.ftrTemplateContent.innerHTML = this.buttonContent.join('');\n }\n this.element.appendChild(this.ftrTemplateContent);\n };\n Dialog.prototype.createHeaderContent = function () {\n if (isNullOrUndefined(this.headerContent)) {\n this.headerContent = this.createElement('div', { className: DLG_HEADER_CONTENT });\n }\n };\n Dialog.prototype.renderCloseIcon = function () {\n this.closeIcon = this.createElement('button', { className: DLG_CLOSE_ICON_BTN, attrs: { type: 'button' } });\n this.closeIconBtnObj = new Button({ cssClass: 'e-flat', iconCss: DLG_CLOSE_ICON + ' ' + ICON });\n this.closeIconTitle();\n if (!isNullOrUndefined(this.headerContent)) {\n prepend([this.closeIcon], this.headerContent);\n }\n else {\n this.createHeaderContent();\n prepend([this.closeIcon], this.headerContent);\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n }\n this.closeIconBtnObj.appendTo(this.closeIcon);\n };\n Dialog.prototype.closeIconTitle = function () {\n this.l10n.setLocale(this.locale);\n var closeIconTitle = this.l10n.getConstant('close');\n this.closeIcon.setAttribute('title', closeIconTitle);\n };\n Dialog.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 Dialog.prototype.setIsModal = function () {\n this.dlgContainer = this.createElement('div', { className: DLG_CONTAINER });\n this.element.classList.remove(DLG_SHOW);\n this.element.parentNode.insertBefore(this.dlgContainer, this.element);\n this.dlgContainer.appendChild(this.element);\n addClass([this.element], MODAL_DLG);\n this.dlgOverlay = this.createElement('div', { className: DLG_OVERLAY });\n this.dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.dlgContainer.appendChild(this.dlgOverlay);\n };\n Dialog.prototype.getValidFocusNode = function (items) {\n var node;\n for (var u = 0; u < items.length; u++) {\n node = items[u];\n if ((node.clientHeight > 0 || (node.tagName.toLowerCase() === 'a' && node.hasAttribute('href'))) && node.tabIndex > -1 &&\n !node.disabled && !this.disableElement(node, '[disabled],[aria-disabled=\"true\"],[type=\"hidden\"]')) {\n return node;\n }\n }\n return node;\n };\n Dialog.prototype.focusableElements = function (content) {\n if (!isNullOrUndefined(content)) {\n var value = 'input,select,textarea,button,a,[contenteditable=\"true\"],[tabindex]';\n var items = content.querySelectorAll(value);\n return this.getValidFocusNode(items);\n }\n return null;\n };\n Dialog.prototype.getAutoFocusNode = function (container) {\n var node = container.querySelector('.' + DLG_CLOSE_ICON_BTN);\n var value = '[autofocus]';\n var items = container.querySelectorAll(value);\n var validNode = this.getValidFocusNode(items);\n if (!isNullOrUndefined(validNode)) {\n node = validNode;\n }\n else {\n validNode = this.focusableElements(this.contentEle);\n if (!isNullOrUndefined(validNode)) {\n return node = validNode;\n }\n else if (!isNullOrUndefined(this.primaryButtonEle)) {\n return this.element.querySelector('.' + DLG_PRIMARY_BUTTON);\n }\n }\n return node;\n };\n Dialog.prototype.disableElement = function (element, t) {\n var elementMatch = element ? element.matches || element.webkitMatchesSelector || element.msMatchesSelector : null;\n if (elementMatch) {\n for (; element; element = element.parentNode) {\n if (element instanceof Element && elementMatch.call(element, t)) {\n /* istanbul ignore next */\n return element;\n }\n }\n }\n return null;\n };\n Dialog.prototype.focusContent = function () {\n var element = this.getAutoFocusNode(this.element);\n var node = !isNullOrUndefined(element) ? element : this.element;\n node.focus();\n this.bindEvent(this.element);\n };\n Dialog.prototype.bindEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyDown, this);\n };\n Dialog.prototype.unBindEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyDown);\n };\n /**\n * Module required function\n * @private\n */\n Dialog.prototype.getModuleName = function () {\n return 'dialog';\n };\n /**\n * Called internally if any of the property value changed\n * @private\n */\n Dialog.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 'content':\n if (!isNullOrUndefined(this.content) && this.content !== '') {\n if (!isNullOrUndefined(this.contentEle) && this.contentEle.getAttribute('role') !== 'dialog') {\n this.contentEle.innerHTML = '';\n typeof (this.content) === 'string' ?\n this.contentEle.innerHTML = this.content : this.contentEle.appendChild(this.content);\n this.setMaxHeight();\n }\n else {\n this.setContent();\n }\n }\n else if (!isNullOrUndefined(this.contentEle)) {\n detach(this.contentEle);\n this.contentEle = null;\n }\n break;\n case 'header':\n if (this.header === '' || isNullOrUndefined(this.header)) {\n if (this.headerEle) {\n detach(this.headerEle);\n this.headerEle = null;\n }\n }\n else {\n this.setHeader();\n }\n break;\n case 'footerTemplate':\n if (this.footerTemplate === '' || isNullOrUndefined(this.footerTemplate)) {\n if (!this.ftrTemplateContent) {\n return;\n }\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n this.buttons = [{}];\n }\n else {\n this.setFooterTemplate();\n this.buttons = [{}];\n }\n break;\n case 'showCloseIcon':\n if (this.element.getElementsByClassName(DLG_CLOSE_ICON).length > 0) {\n if (!this.showCloseIcon && (this.header === '' || isNullOrUndefined(this.header))) {\n detach(this.headerContent);\n this.headerContent = null;\n }\n else if (!this.showCloseIcon) {\n detach(this.closeIcon);\n }\n }\n else {\n this.renderCloseIcon();\n this.wireEvents();\n }\n break;\n case 'locale':\n if (this.showCloseIcon) {\n this.closeIconTitle();\n }\n break;\n case 'visible':\n this.visible ? this.show() : this.hide();\n break;\n case 'isModal':\n this.updateIsModal();\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'zIndex':\n this.popupObj.zIndex = this.zIndex;\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n this.calculatezIndex = false;\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'buttons':\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n if (!isNullOrUndefined(this.ftrTemplateContent)) {\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n }\n this.footerTemplate = '';\n this.setButton();\n }\n break;\n case 'allowDragging':\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n else {\n this.dragObj.destroy();\n }\n break;\n case 'target':\n this.popupObj.relateTo = newProp.target;\n break;\n case 'position':\n this.checkPositionData();\n if (this.isModal) {\n var positionX = isNullOrUndefined(oldProp.position.X) ? this.position.X : oldProp.position.X;\n var positionY = isNullOrUndefined(oldProp.position.Y) ? this.position.Y : oldProp.position.Y;\n if (this.dlgContainer.classList.contains('e-dlg-' + positionX + '-' + positionY)) {\n this.dlgContainer.classList.remove('e-dlg-' + positionX + '-' + positionY);\n }\n }\n this.positionChange();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'enableResize':\n this.setResize();\n break;\n }\n }\n };\n Dialog.prototype.updateIsModal = function () {\n this.element.setAttribute('aria-modal', this.isModal ? 'true' : 'false');\n if (this.isModal) {\n this.setIsModal();\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n if (!isNullOrUndefined(this.targetEle)) {\n this.targetEle.appendChild(this.dlgContainer);\n }\n }\n else {\n removeClass([this.element], MODAL_DLG);\n removeClass([document.body], SCROLL_DISABLED);\n detach(this.dlgOverlay);\n while (this.dlgContainer.firstChild) {\n this.dlgContainer.parentElement.insertBefore(this.dlgContainer.firstChild, this.dlgContainer);\n }\n this.dlgContainer.parentElement.removeChild(this.dlgContainer);\n }\n if (this.visible) {\n this.show();\n }\n this.positionChange();\n };\n Dialog.prototype.setzIndex = function (zIndexElement, setPopupZindex) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.zIndex = getZindexPartial(zIndexElement);\n this.isProtectedOnChange = prevOnChange;\n if (setPopupZindex) {\n this.popupObj.zIndex = this.zIndex;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Dialog.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @memberof dialog\n */\n Dialog.prototype.destroy = function () {\n if (this.element.classList.contains(ROOT)) {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n var classArray = [\n ROOT, RTL, MODAL_DLG\n ];\n removeClass([this.element, this.element], classArray);\n if (this.popupObj.element.classList.contains(POPUP_ROOT)) {\n this.popupObj.destroy();\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(this.btnObj)) {\n for (var i = void 0; i < this.btnObj.length; i++) {\n this.btnObj[i].destroy();\n }\n }\n if (this.isModal) {\n detach(this.dlgOverlay);\n this.dlgContainer.parentNode.insertBefore(this.element, this.dlgContainer);\n detach(this.dlgContainer);\n }\n this.element.innerHTML = '';\n while (this.element.attributes.length > 0) {\n this.element.removeAttribute(this.element.attributes[0].name);\n }\n for (var k = 0; k < this.clonedEle.attributes.length; k++) {\n this.element.setAttribute(this.clonedEle.attributes[k].name, this.clonedEle.attributes[k].value);\n }\n }\n };\n /**\n * Binding event to the element while widget creation\n * @hidden\n */\n Dialog.prototype.wireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.add(this.closeIcon, 'click', this.closeIconClickEventHandler, this);\n }\n if (this.isModal) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n /**\n * Unbinding event to the element while widget destroy\n * @hidden\n */\n Dialog.prototype.unWireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.remove(this.closeIcon, 'click', this.closeIconClickEventHandler);\n }\n if (this.isModal) {\n EventHandler.remove(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler);\n }\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n for (var i = 0; i < this.buttons.length; i++) {\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.remove(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click);\n }\n }\n }\n };\n /**\n * Refreshes the dialog's position when the user changes its header and footer height/width dynamically.\n * @return {void}\n */\n Dialog.prototype.refreshPosition = function () {\n this.popupObj.refreshPosition();\n };\n /**\n * Opens the dialog if it is in hidden state.\n * To open the dialog with full screen width, set the parameter to true.\n * @param { boolean } isFullScreen - Enable the fullScreen Dialog.\n * @return {void}\n */\n Dialog.prototype.show = function (isFullScreen) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n if (!this.element.classList.contains(DLG_SHOW) || (!isNullOrUndefined(isFullScreen))) {\n if (!isNullOrUndefined(isFullScreen)) {\n this.fullScreen(isFullScreen);\n }\n var eventArgs = {\n cancel: false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n target: this.target\n };\n this.trigger('beforeOpen', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.storeActiveElement = document.activeElement;\n this.element.tabIndex = -1;\n if (this.isModal && (!isNullOrUndefined(this.dlgOverlay))) {\n this.dlgOverlay.style.display = 'block';\n this.dlgContainer.style.display = 'flex';\n removeClass([this.dlgOverlay], 'e-fade');\n if (!isNullOrUndefined(this.targetEle)) {\n if (this.targetEle === document.body) {\n this.dlgContainer.style.position = 'fixed';\n }\n else {\n this.dlgContainer.style.position = 'absolute';\n }\n this.dlgOverlay.style.position = 'absolute';\n this.element.style.position = 'relative';\n addClass([this.targetEle], SCROLL_DISABLED);\n }\n else {\n addClass([document.body], SCROLL_DISABLED);\n }\n }\n var openAnimation = {\n name: this.animationSettings.effect + 'In',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n var zIndexElement = (this.isModal) ? this.element.parentElement : this.element;\n if (this.calculatezIndex) {\n this.setzIndex(zIndexElement, true);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n }\n this.animationSettings.effect === 'None' ? this.popupObj.show() : this.popupObj.show(openAnimation);\n this.dialogOpen = true;\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.visible = true;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n /**\n * Closes the dialog if it is in visible state.\n * @return {void}\n */\n Dialog.prototype.hide = function (event) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n var eventArgs = {\n cancel: false,\n isInteraction: event ? true : false,\n element: this.element,\n target: this.target,\n container: this.isModal ? this.dlgContainer : this.element,\n event: event\n };\n this.trigger('beforeClose', eventArgs);\n this.closeArgs = eventArgs;\n if (eventArgs.cancel) {\n return;\n }\n if (this.isModal) {\n !isNullOrUndefined(this.targetEle) ? removeClass([this.targetEle], SCROLL_DISABLED) :\n removeClass([document.body], SCROLL_DISABLED);\n }\n var closeAnimation = {\n name: this.animationSettings.effect + 'Out',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n this.animationSettings.effect === 'None' ? this.popupObj.hide() : this.popupObj.hide(closeAnimation);\n this.dialogOpen = false;\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.visible = false;\n this.isProtectedOnChange = prevOnChange;\n };\n /**\n * Specifies to view the Full screen Dialog.\n * @private\n */\n Dialog.prototype.fullScreen = function (args) {\n var top = this.element.offsetTop;\n var left = this.element.offsetLeft;\n if (args) {\n addClass([this.element], FULLSCREEN);\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight) + 'px' : (window.innerHeight) + 'px';\n this.element.style.display = display;\n addClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && !isNullOrUndefined(this.dragObj)) {\n this.dragObj.destroy();\n }\n }\n else {\n removeClass([this.element], FULLSCREEN);\n removeClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n }\n return args;\n };\n /**\n * Returns the dialog button instances.\n * Based on that, you can dynamically change the button states.\n * @param { number } index - Index of the button.\n * @return {Button}\n */\n Dialog.prototype.getButtons = function (index) {\n if (!isNullOrUndefined(index)) {\n return this.btnObj[index];\n }\n return this.btnObj;\n };\n __decorate([\n Property('')\n ], Dialog.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"showCloseIcon\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"isModal\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"header\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"enableResize\", void 0);\n __decorate([\n Property('auto')\n ], Dialog.prototype, \"height\", void 0);\n __decorate([\n Property('100%')\n ], Dialog.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"cssClass\", void 0);\n __decorate([\n Property(1000)\n ], Dialog.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], Dialog.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"allowDragging\", void 0);\n __decorate([\n Collection([{}], ButtonProps)\n ], Dialog.prototype, \"buttons\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"closeOnEscape\", void 0);\n __decorate([\n Complex({}, AnimationSettings)\n ], Dialog.prototype, \"animationSettings\", void 0);\n __decorate([\n Complex({ X: 'center', Y: 'center' }, PositionData)\n ], Dialog.prototype, \"position\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"overlayClick\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizeStop\", void 0);\n Dialog = __decorate([\n NotifyPropertyChanges\n ], Dialog);\n return Dialog;\n}(Component));\nexport { Dialog };\n/**\n * Base for creating Alert and Confirmation Dialog through util method.\n */\nexport var DialogUtility;\n(function (DialogUtility) {\n /**\n * An alert dialog box is used to display warning like messages to the users.\n * ```\n * Eg : DialogUtility.alert('Alert message');\n *\n * ```\n */\n /* istanbul ignore next */\n function alert(args) {\n var dialogComponent;\n var dialogElement = createElement('div', { 'className': DLG_UTIL_ALERT });\n document.body.appendChild(dialogElement);\n var alertDialogObj;\n var okButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n alertDialogObj = createDialog({ content: args,\n position: { X: 'center', Y: 'top' },\n isModal: true, header: DLG_UTIL_DEFAULT_TITLE,\n buttons: okButtonModel }, dialogElement);\n }\n else {\n alertDialogObj = createDialog(alertOptions(args), dialogElement);\n }\n alertDialogObj.close = function () {\n alertDialogObj.destroy();\n if (alertDialogObj.element.classList.contains('e-dlg-modal')) {\n alertDialogObj.element.parentElement.remove();\n alertDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n alertDialogObj.element.remove();\n }\n };\n return alertDialogObj;\n }\n DialogUtility.alert = alert;\n /**\n * A confirm dialog displays a specified message along with ‘OK’ and ‘Cancel’ button.\n * ```\n * Eg : DialogUtility.confirm('Confirm dialog message');\n *\n * ```\n */\n /* istanbul ignore next */\n function confirm(args) {\n var dialogComponent;\n var dialogElement = createElement('div', { 'className': DLG_UTIL_CONFIRM });\n document.body.appendChild(dialogElement);\n var confirmDialogObj;\n var okCancelButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }, {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n confirmDialogObj = createDialog({ position: { X: 'center', Y: 'top' }, content: args, isModal: true,\n header: DLG_UTIL_DEFAULT_TITLE, buttons: okCancelButtonModel\n }, dialogElement);\n }\n else {\n confirmDialogObj = createDialog(confirmOptions(args), dialogElement);\n }\n confirmDialogObj.close = function () {\n confirmDialogObj.destroy();\n if (confirmDialogObj.element.classList.contains('e-dlg-modal')) {\n confirmDialogObj.element.parentElement.remove();\n confirmDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n confirmDialogObj.element.remove();\n }\n };\n return confirmDialogObj;\n }\n DialogUtility.confirm = confirm;\n function createDialog(options, element) {\n var dialogObject = new Dialog(options);\n dialogObject.appendTo(element);\n return dialogObject;\n }\n function alertOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setAlertButtonModel(options, option);\n return options;\n }\n function confirmOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setConfirmButtonModel(options, option);\n return options;\n }\n function formOptions(options, option) {\n options.header = !isNullOrUndefined(option.title) ? option.title : DLG_UTIL_DEFAULT_TITLE;\n options.content = !isNullOrUndefined(option.content) ? option.content : '';\n options.isModal = !isNullOrUndefined(option.isModal) ? option.isModal : true;\n options.showCloseIcon = !isNullOrUndefined(option.showCloseIcon) ? option.showCloseIcon : false;\n options.allowDragging = !isNullOrUndefined(option.isDraggable) ? option.isDraggable : false;\n options.closeOnEscape = !isNullOrUndefined(option.closeOnEscape) ? option.closeOnEscape : false;\n options.position = !isNullOrUndefined(option.position) ? option.position : { X: 'center', Y: 'top' };\n options.animationSettings = !isNullOrUndefined(option.animationSettings) ? option.animationSettings :\n { effect: 'Fade', duration: 400, delay: 0 };\n return options;\n }\n function setAlertButtonModel(options, option) {\n var alertButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, alertButtonModel[0]);\n }\n else {\n options.buttons = alertButtonModel;\n }\n return options;\n }\n function setConfirmButtonModel(options, option) {\n var okButtonModel = {\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n };\n var cancelButtonModel = {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n };\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, okButtonModel);\n }\n else {\n options.buttons[0] = okButtonModel;\n }\n if (!isNullOrUndefined(option.cancelButton)) {\n options.buttons[1] = formButtonModel(options.buttons[1], option.cancelButton, cancelButtonModel);\n }\n else {\n options.buttons[1] = cancelButtonModel;\n }\n return options;\n }\n function formButtonModel(buttonModel, option, buttonPropModel) {\n var buttonProps = buttonPropModel;\n if (!isNullOrUndefined(option.text)) {\n buttonProps.buttonModel.content = option.text;\n }\n if (!isNullOrUndefined(option.icon)) {\n buttonProps.buttonModel.iconCss = option.icon;\n }\n if (!isNullOrUndefined(option.cssClass)) {\n buttonProps.buttonModel.cssClass = option.cssClass;\n }\n if (!isNullOrUndefined(option.click)) {\n buttonProps.click = option.click;\n }\n return buttonProps;\n }\n})(DialogUtility || (DialogUtility = {}));\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 { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n *
Droppable
\n * \n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\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 './notify-property-change';\nimport { Base } from './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};\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 */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} 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 _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\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 &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {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 * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\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 { extend } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n * 'fr-BE': {\n * 'button': {\n * 'check': 'vérifié'\n * }\n * }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n * check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n /**\n * Constructor\n */\n function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n * @param {string} locale\n * @returns {void}\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n * @param {string} propertyName - specifies the property for which localize text to be returned.\n * @return string\n */\n L10n.prototype.getConstant = function (prop) {\n /* tslint:disable no-any */\n return this.currentLocale[prop] || this.localeStrings[prop] || '';\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n * @param {Object} curObject\n * @param {string} locale\n * @returns {Object}\n */\n L10n.prototype.intGetControlConstant = function (curObject, locale) {\n if (curObject[locale]) {\n return curObject[locale][this.controlName];\n }\n return null;\n };\n L10n.locale = {};\n return L10n;\n}());\nexport { L10n };\n","/**\n * To import utils\n */\nimport { isNullOrUndefined, } from './util';\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 */\n SvgRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n }; /* tslint:enable */\n /**\n * To create a Html5 SVG element\n * @param {SVGAttributes} options - Options to create SVG\n * @return {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 * @param {PathAttributes} options - Options to draw a path in SVG\n * @return {Element}\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 * @param {LineAttributes} options - Options to draw a line in SVG\n * @return {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 * @param {BaseAttibutes} options - Required options to draw a rectangle in SVG\n * @return {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 * @param {CircleAttributes} options - Required options to draw a circle in SVG\n * @return {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 * @param {PolylineAttributes} options - Options required to draw a polyline\n * @return {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 * @param {EllipseAttributes} options - Options required to draw an ellipse\n * @return {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 * @param {PolylineAttributes} options - Options needed to draw a polygon in SVG\n * @return {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 * @param {ImageAttributes} options - Required options to draw an image in SVG\n * @return {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 * @param {TextAttributes} options - Options needed to draw a text in SVG\n * @return {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 * @param {TextAttributes} options - Options to create tSpan\n * @param {string} label - The text content which is to be rendered in the tSpan\n * @return {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 * @param {string} text - The text content which is to be rendered in the title\n * @return {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 * @return {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 * @param {BaseAttibutes} options - Options needed to create clip path\n * @return {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 * @param {BaseAttibutes} options - Options needed to create foreign object\n * @return {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 * @param {BaseAttibutes} options - Options needed to create group\n * @return {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 * @param {PatternAttributes} options - Required options to create pattern in SVG\n * @param {string} type - Specifies the name of the pattern\n * @return {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 * @param {string[]} colors - Specifies the colors required to create radial gradient\n * @param {string[]} colorStop - Specifies the colorstop required to create radial gradient\n * @param {string} name - Specifies the name of the gradient\n * @param {RadialGradient} options - value for radial gradient\n * @return {string}\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 * @param {string[]} colors - Array of string specifies the values for color\n * @param {string[]} colors - Array of string specifies the values for colorStop\n * @param {string} name - Specifies the name of the gradient\n * @param {LinearGradient} options - Specifies the options for gradient\n * @return {string}\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 * @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 * @param {string[]} colorStop - Array of string specifies the values for colorStop\n * @return {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', '1');\n gradient.appendChild(stop_1);\n }\n defs.appendChild(gradient);\n return defs;\n };\n /**\n * To render a clip path\n * @param {BaseAttibutes} options - Options required to render a clip path\n * @return {Element}\n */\n SvgRenderer.prototype.drawClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\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 * @param {CircleAttributes} options - Options required to create circular clip path\n * @return {Element}\n */\n SvgRenderer.prototype.drawCircularClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\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 * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {Element} element - The element to which the attributes need to be set\n * @return {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 element.setAttribute(keys[i], options[keys[i]]);\n }\n return element;\n };\n return SvgRenderer;\n}());\nexport { SvgRenderer };\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 { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n * @private\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n __extends(SwipeSettings, _super);\n function SwipeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(50)\n ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n * let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n * element: node,\n * tap: function (e) {\n * // tap handler function code\n * }\n * tapHold: function (e) {\n * // tap hold handler function code\n * }\n * scroll: function (e) {\n * // scroll handler function code\n * }\n * swipe: function (e) {\n * // swipe handler function code\n * }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n __extends(Touch, _super);\n /* End-Properties */\n function Touch(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.touchAction = true;\n _this.tapCount = 0;\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = (evt.changedTouches ? evt.changedTouches[0] : evt);\n if (evt.changedTouches !== undefined) {\n _this.touchAction = false;\n }\n _this.isTouchMoved = false;\n _this.movedDirection = '';\n _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n _this.startEventData = point;\n _this.hScrollLocked = _this.vScrollLocked = false;\n _this.tStampStart = Date.now();\n _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n }\n };\n _this.moveEvent = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = evt;\n if (evt.changedTouches) {\n point = evt.changedTouches[0];\n }\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var eSwipeArgs = void 0;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed \n /**\n * @private\n * @param newProp\n * @param oldProp\n */\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n * @return {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n * @returns {string}\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean}\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n // tslint:disable-next-line:no-any\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\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, Component } from '@syncfusion/ej2-base';\nimport { addClass, Event, detach, removeClass, rippleEffect, EventHandler } from '@syncfusion/ej2-base';\nimport { getTextNode } from '../common/common';\nvar cssClassName = {\n RTL: 'e-rtl',\n BUTTON: 'e-btn',\n PRIMARY: 'e-primary',\n ICONBTN: 'e-icon-btn'\n};\n/**\n * The Button is a graphical user interface element that triggers an event on its click action. It can contain a text, an image, or both.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n * @param {ButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function Button(options, element) {\n return _super.call(this, options, element) || this;\n }\n Button.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n Button.prototype.render = function () {\n this.initialize();\n };\n Button.prototype.initialize = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n if (this.content) {\n this.element.innerHTML = this.content;\n }\n this.setIconCss();\n if (this.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n if (this.disabled) {\n this.controlStatus(this.disabled);\n }\n else {\n this.wireEvents();\n }\n this.removeRippleEffect = rippleEffect(this.element, { selector: '.' + cssClassName.BUTTON });\n };\n Button.prototype.controlStatus = function (disabled) {\n this.element.disabled = disabled;\n };\n Button.prototype.setIconCss = function () {\n if (this.iconCss) {\n var span = this.createElement('span', { className: 'e-btn-icon ' + this.iconCss });\n if (!this.element.textContent.trim()) {\n this.element.classList.add(cssClassName.ICONBTN);\n }\n else {\n span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n if (this.iconPosition === 'Top' || this.iconPosition === 'Bottom') {\n this.element.classList.add('e-' + this.iconPosition.toLowerCase() + '-icon-btn');\n }\n }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Button.prototype.destroy = function () {\n var span;\n var classList = [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success', 'e-info', 'e-danger',\n 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round',\n 'e-top-icon-btn', 'e-bottom-icon-btn'];\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n _super.prototype.destroy.call(this);\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n if (this.disabled) {\n this.element.removeAttribute('disabled');\n }\n if (this.content) {\n this.element.innerHTML = this.element.innerHTML.replace(this.content, '');\n }\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\n this.removeRippleEffect();\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n Button.prototype.getModuleName = function () {\n return 'btn';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n * @private\n */\n Button.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Dynamically injects the required modules to the component.\n * @private\n */\n Button.Inject = function () {\n // Inject code snippets\n };\n /**\n * Called internally if any of the property value changed.\n * @param {Button} newProp\n * @param {Button} oldProp\n * @returns void\n * @private\n */\n Button.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 'isPrimary':\n if (newProp.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n else {\n this.element.classList.remove(cssClassName.PRIMARY);\n }\n break;\n case 'disabled':\n this.controlStatus(newProp.disabled);\n this.unWireEvents();\n break;\n case 'iconCss':\n var span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n span.className = 'e-btn-icon ' + newProp.iconCss;\n if (this.element.textContent.trim()) {\n if (this.iconPosition === 'Left') {\n span.classList.add('e-icon-left');\n }\n else {\n span.classList.add('e-icon-right');\n }\n }\n }\n else {\n this.setIconCss();\n }\n break;\n case 'iconPosition':\n removeClass([this.element], ['e-top-icon-btn', 'e-bottom-icon-btn']);\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content':\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n break;\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n __decorate([\n Property()\n ], Button.prototype, \"locale\", void 0);\n __decorate([\n Event()\n ], Button.prototype, \"created\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\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, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, detach, getUniqueID, isRippleEnabled, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-checkbox-disabled';\nvar FRAME = 'e-frame';\nvar INDETERMINATE = 'e-stop';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLECHECK = 'e-ripple-check';\nvar RIPPLEINDETERMINATE = 'e-ripple-stop';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-checkbox-wrapper';\n/**\n * The CheckBox is a graphical user interface element that allows you to select one or more options from the choices.\n * It contains checked, unchecked, and indeterminate states.\n * ```html\n * \n * \n * ```\n */\nvar CheckBox = /** @class */ (function (_super) {\n __extends(CheckBox, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function CheckBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n CheckBox.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n if (isRippleEnabled) {\n rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n }\n if (state === 'check') {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLEINDETERMINATE);\n rippleSpan.classList.add(RIPPLECHECK);\n }\n ariaState = 'true';\n this.element.checked = true;\n }\n else if (state === 'uncheck') {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLECHECK, RIPPLEINDETERMINATE]);\n }\n ariaState = 'false';\n this.element.checked = false;\n }\n else {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLECHECK);\n rippleSpan.classList.add(RIPPLEINDETERMINATE);\n }\n ariaState = 'mixed';\n this.element.indeterminate = true;\n }\n this.getWrapper().setAttribute('aria-checked', ariaState);\n };\n CheckBox.prototype.clickHandler = function (event) {\n this.focusOutHandler();\n if (this.indeterminate) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n this.indeterminate = false;\n this.element.indeterminate = false;\n }\n else if (this.checked) {\n this.changeState('uncheck');\n this.checked = false;\n }\n else {\n this.changeState('check');\n this.checked = true;\n }\n var changeEventArgs = { checked: this.element.checked, event: event };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n CheckBox.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(this.element, wrapper);\n detach(wrapper);\n this.element.checked = false;\n if (this.indeterminate) {\n this.element.indeterminate = false;\n }\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n }\n };\n CheckBox.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n CheckBox.prototype.focusOutHandler = function () {\n this.getWrapper().classList.remove('e-focus');\n };\n /**\n * Gets the module name.\n * @private\n */\n CheckBox.prototype.getModuleName = function () {\n return 'checkbox';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n CheckBox.prototype.getPersistData = function () {\n return this.addOnPersist(['checked', 'indeterminate']);\n };\n CheckBox.prototype.getWrapper = function () {\n return this.element.parentElement.parentElement;\n };\n CheckBox.prototype.initialize = function () {\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.changeState('check');\n }\n if (this.indeterminate) {\n this.changeState();\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n CheckBox.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', {\n className: WRAPPER, attrs: { 'role': 'checkbox', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n var frameSpan = this.createElement('span', { className: 'e-icons ' + FRAME });\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n wrapper.appendChild(label);\n label.appendChild(this.element);\n label.appendChild(frameSpan);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n if (this.labelPosition === 'Before') {\n label.appendChild(rippleSpan);\n }\n else {\n label.insertBefore(rippleSpan, frameSpan);\n }\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n CheckBox.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n CheckBox.prototype.labelMouseHandler = function (e) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n CheckBox.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n CheckBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.indeterminate = false;\n this.element.indeterminate = false;\n this.changeState(newProp.checked ? 'check' : 'uncheck');\n break;\n case 'indeterminate':\n if (newProp.indeterminate) {\n this.changeState();\n }\n else {\n this.element.indeterminate = false;\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n var label = wrapper.getElementsByClassName(LABEL)[0];\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n detach(label);\n if (newProp.labelPosition === 'After') {\n labelWrap.appendChild(label);\n }\n else {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n * @private\n */\n CheckBox.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-CHECKBOX', 'checkbox', element, WRAPPER, 'checkbox');\n this.element = element;\n if (this.element.getAttribute('type') !== 'checkbox') {\n this.element.setAttribute('type', 'checkbox');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n CheckBox.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n CheckBox.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n CheckBox.prototype.setText = function (text) {\n var label = this.getWrapper().getElementsByClassName(LABEL)[0];\n if (label) {\n label.textContent = text;\n }\n else {\n label = this.createElement('span', { className: LABEL, innerHTML: text });\n var labelWrap = this.getWrapper().getElementsByTagName('label')[0];\n if (this.labelPosition === 'Before') {\n labelWrap.insertBefore(label, this.getWrapper().getElementsByClassName(FRAME)[0]);\n }\n else {\n labelWrap.appendChild(label);\n }\n }\n };\n CheckBox.prototype.changeHandler = function (e) {\n e.stopPropagation();\n };\n CheckBox.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(document, 'keydown', this.keyDownHandler);\n EventHandler.remove(wrapper, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.remove(label, 'mousedown', this.labelMouseHandler);\n EventHandler.remove(label, 'mouseup', this.labelMouseHandler);\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.remove(this.element, 'change', this.changeHandler);\n }\n };\n CheckBox.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(document, 'keydown', this.keyDownHandler, this);\n EventHandler.add(wrapper, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.add(label, 'mousedown', this.labelMouseHandler, this);\n EventHandler.add(label, 'mouseup', this.labelMouseHandler, this);\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n }\n };\n __decorate([\n Event()\n ], CheckBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], CheckBox.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"indeterminate\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], CheckBox.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"value\", void 0);\n CheckBox = __decorate([\n NotifyPropertyChanges\n ], CheckBox);\n return CheckBox;\n}(Component));\nexport { CheckBox };\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, rippleEffect, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { addClass, getInstance, getUniqueID, isRippleEnabled, removeClass } from '@syncfusion/ej2-base';\nimport { detach, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-radio-wrapper';\n/**\n * The RadioButton is a graphical user interface element that allows you to select one option from the choices.\n * It contains checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar RadioButton = /** @class */ (function (_super) {\n __extends(RadioButton, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function RadioButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n RadioButton_1 = RadioButton;\n RadioButton.prototype.changeHandler = function (event) {\n this.checked = true;\n this.dataBind();\n var changeEventArgs = { value: this.value, event: event };\n this.trigger('change', changeEventArgs);\n if (this.tagName === 'EJS-RADIOBUTTON') {\n event.stopPropagation();\n }\n };\n RadioButton.prototype.updateChange = function (state) {\n var input;\n var name = this.element.getAttribute('name');\n var radioGrp = document.querySelectorAll('input.e-radio[name=\"' + name + '\"]');\n for (var i = 0; i < radioGrp.length; i++) {\n input = radioGrp[i];\n if (input !== this.element) {\n getInstance(input, RadioButton_1).checked = false;\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n RadioButton.prototype.destroy = function () {\n var _this = this;\n var radioWrap = this.element.parentElement;\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n radioWrap.parentNode.insertBefore(this.element, radioWrap);\n detach(radioWrap);\n this.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n radioWrap.removeAttribute(key);\n });\n radioWrap.innerHTML = '';\n }\n };\n RadioButton.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getLabel().classList.add('e-focus');\n }\n };\n RadioButton.prototype.focusOutHandler = function () {\n this.getLabel().classList.remove('e-focus');\n };\n RadioButton.prototype.getModuleName = function () {\n return 'radio';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n RadioButton.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n RadioButton.prototype.getLabel = function () {\n return this.element.nextElementSibling;\n };\n RadioButton.prototype.initialize = function () {\n this.initWrapper();\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.element.checked = true;\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n RadioButton.prototype.initWrapper = function () {\n var rippleSpan;\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', { className: WRAPPER });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n wrapper.appendChild(this.element);\n wrapper.appendChild(label);\n if (isRippleEnabled) {\n rippleSpan = this.createElement('span', { className: (RIPPLE) });\n label.appendChild(rippleSpan);\n rippleEffect(rippleSpan, {\n duration: 400,\n isCenterRipple: true\n });\n }\n if (this.enableRtl) {\n label.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([label], this.cssClass.split(' '));\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n RadioButton.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n RadioButton.prototype.labelRippleHandler = function (e) {\n var ripple = this.getLabel().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, ripple);\n };\n RadioButton.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n RadioButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var label = this.getLabel();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n if (newProp.checked) {\n this.updateChange(newProp.checked);\n }\n this.element.checked = newProp.checked;\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([label], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([label], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n label.classList.add(RTL);\n }\n else {\n label.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n if (newProp.labelPosition === 'Before') {\n label.classList.add('e-right');\n }\n else {\n label.classList.remove('e-right');\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n }\n }\n };\n /**\n * Initialize checked Property, Angular and React and Unique ID support.\n * @private\n */\n RadioButton.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-RADIOBUTTON', 'radio', element, WRAPPER, 'radio');\n this.element = element;\n if (this.element.getAttribute('type') !== 'radio') {\n this.element.setAttribute('type', 'radio');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n RadioButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n RadioButton.prototype.setDisabled = function () {\n this.element.disabled = true;\n };\n RadioButton.prototype.setText = function (text) {\n var label = this.getLabel();\n var textLabel = label.getElementsByClassName(LABEL)[0];\n if (textLabel) {\n textLabel.textContent = text;\n }\n else {\n textLabel = this.createElement('span', { className: LABEL, innerHTML: text });\n label.appendChild(textLabel);\n }\n if (this.labelPosition === 'Before') {\n this.getLabel().classList.add('e-right');\n }\n else {\n this.getLabel().classList.remove('e-right');\n }\n };\n RadioButton.prototype.unWireEvents = function () {\n var label = this.getLabel();\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(document, 'keydown', this.keyDownHandler);\n EventHandler.remove(label, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.remove(rippleLabel, 'mousedown', this.labelRippleHandler);\n EventHandler.remove(rippleLabel, 'mouseup', this.labelRippleHandler);\n }\n };\n RadioButton.prototype.wireEvents = function () {\n var label = this.getLabel();\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(document, 'keydown', this.keyDownHandler, this);\n EventHandler.add(label, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.add(rippleLabel, 'mousedown', this.labelRippleHandler, this);\n EventHandler.add(rippleLabel, 'mouseup', this.labelRippleHandler, this);\n }\n };\n var RadioButton_1;\n __decorate([\n Event()\n ], RadioButton.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RadioButton.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RadioButton.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"value\", void 0);\n RadioButton = RadioButton_1 = __decorate([\n NotifyPropertyChanges\n ], RadioButton);\n return RadioButton;\n}(Component));\nexport { RadioButton };\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, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, isRippleEnabled, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { rippleMouseHandler, destroy, preRender } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-switch-disabled';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLE_CHECK = 'e-ripple-check';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-switch-wrapper';\nvar ACTIVE = 'e-switch-active';\n/**\n * The Switch is a graphical user interface element that allows you to toggle between checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar Switch = /** @class */ (function (_super) {\n __extends(Switch, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function Switch(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n _this.isDrag = false;\n return _this;\n }\n Switch.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var wrapper = this.getWrapper();\n var bar = wrapper.querySelector('.e-switch-inner');\n var handle = wrapper.querySelector('.e-switch-handle');\n if (isRippleEnabled) {\n rippleSpan = wrapper.getElementsByClassName(RIPPLE)[0];\n }\n if (state) {\n addClass([bar, handle], ACTIVE);\n ariaState = 'true';\n this.element.checked = true;\n this.checked = true;\n if (rippleSpan) {\n addClass([rippleSpan], [RIPPLE_CHECK]);\n }\n }\n else {\n removeClass([bar, handle], ACTIVE);\n ariaState = 'false';\n this.element.checked = false;\n this.checked = false;\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLE_CHECK]);\n }\n }\n wrapper.setAttribute('aria-checked', ariaState);\n };\n Switch.prototype.clickHandler = function (evt) {\n this.isDrag = false;\n this.focusOutHandler();\n this.changeState(!this.checked);\n this.element.focus();\n var changeEventArgs = { checked: this.element.checked, event: evt };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the Switch widget.\n * @returns void\n */\n Switch.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n destroy(this, this.getWrapper(), this.tagName);\n };\n Switch.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n Switch.prototype.focusOutHandler = function () {\n this.getWrapper().classList.remove('e-focus');\n };\n /**\n * Gets the module name.\n * @private\n */\n Switch.prototype.getModuleName = function () {\n return 'switch';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n Switch.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n Switch.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n Switch.prototype.initialize = function () {\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.changeState(true);\n }\n if (this.disabled) {\n this.setDisabled();\n }\n if (this.onLabel || this.offLabel) {\n this.setLabel(this.onLabel, this.offLabel);\n }\n };\n Switch.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', {\n className: WRAPPER, attrs: { 'role': 'switch', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var switchInner = this.createElement('span', { className: 'e-switch-inner' });\n var onLabel = this.createElement('span', { className: 'e-switch-on' });\n var offLabel = this.createElement('span', { className: 'e-switch-off' });\n var handle = this.createElement('span', { className: 'e-switch-handle' });\n wrapper.appendChild(this.element);\n switchInner.appendChild(onLabel);\n switchInner.appendChild(offLabel);\n wrapper.appendChild(switchInner);\n wrapper.appendChild(handle);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n handle.appendChild(rippleSpan);\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n Switch.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.changeState(newProp.checked);\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'onLabel':\n case 'offLabel':\n this.setLabel(newProp.onLabel, newProp.offLabel);\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.split(' '));\n }\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n * @private\n */\n Switch.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n preRender(this, 'EJS-SWITCH', WRAPPER, element, this.getModuleName());\n };\n /**\n * Initialize control rendering.\n * @private\n */\n Switch.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n Switch.prototype.rippleHandler = function (e) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n if (e.type === 'mousedown' && e.currentTarget.classList.contains('e-switch-wrapper') && e.which === 1) {\n this.isDrag = true;\n this.isKeyPressed = false;\n }\n };\n Switch.prototype.rippleTouchHandler = function (eventType) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(eventType, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n };\n Switch.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n Switch.prototype.setLabel = function (onText, offText) {\n var wrapper = this.getWrapper();\n if (onText) {\n wrapper.querySelector('.e-switch-on').textContent = onText;\n }\n if (offText) {\n wrapper.querySelector('.e-switch-off').textContent = offText;\n }\n };\n Switch.prototype.switchFocusHandler = function () {\n this.isKeyPressed = true;\n };\n Switch.prototype.switchMouseUp = function (e) {\n var target = e.target;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (e.type === 'touchmove') {\n e.preventDefault();\n }\n if (e.type === 'touchstart') {\n this.isDrag = true;\n this.rippleTouchHandler('mousedown');\n }\n if (this.isDrag) {\n if ((e.type === 'mouseup' && target.className.indexOf('e-switch') < 0) || e.type === 'touchend') {\n this.clickHandler(e);\n this.rippleTouchHandler('mouseup');\n e.preventDefault();\n }\n }\n };\n /**\n * Toggle the Switch component state into checked/unchecked.\n * @returns void\n */\n Switch.prototype.toggle = function () {\n this.clickHandler();\n };\n Switch.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n var handle = wrapper.querySelector('.e-switch-handle');\n this.delegateMouseUpHandler = this.switchMouseUp.bind(this);\n this.delegateKeyDownHandler = this.switchFocusHandler.bind(this);\n EventHandler.add(wrapper, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(document, 'mouseup', this.delegateMouseUpHandler, this);\n EventHandler.add(document, 'keydown', this.delegateKeyDownHandler, this);\n EventHandler.add(wrapper, 'mousedown mouseup', this.rippleHandler, this);\n EventHandler.add(wrapper, 'touchstart touchmove touchend', this.switchMouseUp, this);\n };\n Switch.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n var handle = wrapper.querySelector('.e-switch-handle');\n EventHandler.remove(wrapper, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(document, 'mouseup', this.delegateMouseUpHandler);\n EventHandler.remove(document, 'keydown', this.delegateKeyDownHandler);\n EventHandler.remove(wrapper, 'mousedown mouseup', this.rippleHandler);\n EventHandler.remove(wrapper, 'touchstart touchmove touchend', this.switchMouseUp);\n };\n __decorate([\n Event()\n ], Switch.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Switch.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], Switch.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Switch.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"onLabel\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"offLabel\", void 0);\n __decorate([\n Property('')\n ], Switch.prototype, \"value\", void 0);\n Switch = __decorate([\n NotifyPropertyChanges\n ], Switch);\n return Switch;\n}(Component));\nexport { Switch };\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, NotifyPropertyChanges, Property, append, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { removeClass, rippleEffect, closest } from '@syncfusion/ej2-base';\nimport { EventHandler, detach, Event, addClass } from '@syncfusion/ej2-base';\nexport var classNames = {\n chipSet: 'e-chip-set',\n chip: 'e-chip',\n avatar: 'e-chip-avatar',\n text: 'e-chip-text',\n icon: 'e-chip-icon',\n delete: 'e-chip-delete',\n deleteIcon: 'e-dlt-btn',\n multiSelection: 'e-multi-selection',\n singleSelection: 'e-selection',\n active: 'e-active',\n chipWrapper: 'e-chip-avatar-wrap',\n iconWrapper: 'e-chip-icon-wrap',\n focused: 'e-focused',\n disabled: 'e-disabled',\n rtl: 'e-rtl',\n};\n/**\n * A chip component is a small block of essential information, mostly used on contacts or filter tags.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar ChipList = /** @class */ (function (_super) {\n __extends(ChipList, _super);\n function ChipList(options, element) {\n return _super.call(this, options, element) || this;\n }\n ChipList.prototype.preRender = function () {\n //prerender\n };\n ChipList.prototype.render = function () {\n this.type = this.chips.length ? 'chipset' : (this.text || this.element.innerText ? 'chip' : 'chipset');\n this.setAttributes();\n this.createChip();\n this.setRtl();\n this.wireEvent(false);\n this.select(this.selectedChips);\n this.rippleFunctin = rippleEffect(this.element, {\n selector: '.e-chip'\n });\n };\n ChipList.prototype.createChip = function () {\n this.innerText = this.element.innerText.trim();\n this.element.innerHTML = '';\n this.chipCreation(this.type === 'chip' ? [this.innerText ? this.innerText : this.text] : this.chips);\n };\n ChipList.prototype.setAttributes = function () {\n if (this.type === 'chip') {\n this.element.tabIndex = 0;\n this.element.setAttribute('role', 'option');\n }\n else {\n this.element.classList.add(classNames.chipSet);\n this.element.setAttribute('role', 'listbox');\n if (this.selection === 'Multiple') {\n this.element.classList.add(classNames.multiSelection);\n this.element.setAttribute('aria-multiselectable', 'true');\n }\n else if (this.selection === 'Single') {\n this.element.classList.add(classNames.singleSelection);\n this.element.setAttribute('aria-multiselectable', 'false');\n }\n else {\n this.element.setAttribute('aria-multiselectable', 'false');\n }\n }\n };\n ChipList.prototype.setRtl = function () {\n this.element.classList[this.enableRtl ? 'add' : 'remove'](classNames.rtl);\n };\n ChipList.prototype.chipCreation = function (data) {\n var chipListArray = [];\n for (var i = 0; i < data.length; i++) {\n var fieldsData = this.getFieldValues(data[i]);\n var chipArray = this.elementCreation(fieldsData);\n var className = (classNames.chip + ' ' + (fieldsData.enabled ? ' ' : classNames.disabled) + ' ' +\n (fieldsData.avatarIconCss || fieldsData.avatarText ? classNames.chipWrapper : (fieldsData.leadingIconCss ?\n classNames.iconWrapper : ' ')) + ' ' + fieldsData.cssClass).split(' ').filter(function (css) { return css; });\n if (this.type === 'chip') {\n chipListArray = chipArray;\n addClass([this.element], className);\n this.element.setAttribute('aria-label', fieldsData.text);\n }\n else {\n var wrapper = this.createElement('DIV', {\n className: className.join(' '), attrs: {\n tabIndex: '0', role: 'option',\n 'aria-label': fieldsData.text, 'aria-selected': 'false'\n }\n });\n append(chipArray, wrapper);\n chipListArray.push(wrapper);\n }\n }\n append(chipListArray, this.element);\n };\n ChipList.prototype.getFieldValues = function (data) {\n var chipEnabled = this.enabled.toString() === 'false' ? false : true;\n var fields = {\n text: typeof data === 'object' ? (data.text ? data.text.toString() : this.text.toString()) :\n (this.type === 'chip' ? (this.innerText ? this.innerText : this.text.toString()) : data.toString()),\n cssClass: typeof data === 'object' ? (data.cssClass ? data.cssClass.toString() : this.cssClass.toString()) :\n (this.cssClass.toString()),\n leadingIconCss: typeof data === 'object' ? (data.leadingIconCss ? data.leadingIconCss.toString() :\n this.leadingIconCss.toString()) : (this.leadingIconCss.toString()),\n avatarIconCss: typeof data === 'object' ? (data.avatarIconCss ? data.avatarIconCss.toString() :\n this.avatarIconCss.toString()) : (this.avatarIconCss.toString()),\n avatarText: typeof data === 'object' ? (data.avatarText ? data.avatarText.toString() : this.avatarText.toString()) :\n (this.avatarText.toString()),\n trailingIconCss: typeof data === 'object' ? (data.trailingIconCss ? data.trailingIconCss.toString() :\n this.trailingIconCss.toString()) : (this.trailingIconCss.toString()),\n enabled: typeof data === 'object' ? (!isNullOrUndefined(data.enabled) ? (data.enabled.toString() === 'false' ? false : true) :\n chipEnabled) : (chipEnabled)\n };\n return fields;\n };\n ChipList.prototype.elementCreation = function (fields) {\n var chipArray = [];\n if (fields.avatarText || fields.avatarIconCss) {\n var className = (classNames.avatar + ' ' + fields.avatarIconCss).trim();\n var chipAvatarElement = this.createElement('span', { className: className });\n chipAvatarElement.innerText = fields.avatarText;\n chipArray.push(chipAvatarElement);\n }\n else if (fields.leadingIconCss) {\n var className = (classNames.icon + ' ' + fields.leadingIconCss).trim();\n var chipIconElement = this.createElement('span', { className: className });\n chipArray.push(chipIconElement);\n }\n var chipTextElement = this.createElement('span', { className: classNames.text });\n chipTextElement.innerText = fields.text;\n chipArray.push(chipTextElement);\n if (fields.trailingIconCss || (this.type !== 'chip' && this.enableDelete)) {\n var className = (classNames.delete + ' ' +\n (fields.trailingIconCss ? fields.trailingIconCss : classNames.deleteIcon)).trim();\n var chipdeleteElement = this.createElement('span', { className: className });\n chipArray.push(chipdeleteElement);\n }\n return chipArray;\n };\n /**\n * A function that finds chip based on given input.\n * @param {number | HTMLElement } fields - We can pass index number or element of chip.\n */\n ChipList.prototype.find = function (fields) {\n var chipData;\n var chipElement = fields instanceof HTMLElement ?\n fields : this.element.querySelectorAll('.' + classNames.chip)[fields];\n if (chipElement && this.type !== 'chip') {\n chipData = { text: undefined, index: undefined, element: undefined, data: undefined };\n chipData.index = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.chip)).indexOf(chipElement);\n chipData.text = typeof this.chips[chipData.index] === 'object' ?\n (this.chips[chipData.index].text ?\n this.chips[chipData.index].text.toString() : '') :\n this.chips[chipData.index].toString();\n chipData.data = this.chips[chipData.index];\n chipData.element = chipElement;\n }\n return chipData;\n };\n /**\n * A function that adds chip items based on given input.\n * @param {string[] | number[] | ChipModel[] | string | number | ChipModel} chipsData - We can pass array of string or\n * array of number or array of chip model or string data or number data or chip model.\n */\n ChipList.prototype.add = function (chipsData) {\n var _a;\n if (this.type !== 'chip') {\n var fieldData = chipsData instanceof Array ?\n chipsData : [chipsData];\n (_a = this.chips).push.apply(_a, fieldData);\n this.chipCreation(fieldData);\n }\n };\n /**\n * A function that selects chip items based on given input.\n * @param {number | number[] | HTMLElement | HTMLElement[]} fields - We can pass number or array of number\n * or chip element or array of chip element.\n */\n ChipList.prototype.select = function (fields) {\n if (this.type !== 'chip' && this.selection !== 'None') {\n var fieldData = fields instanceof Array ? fields : [fields];\n for (var i = 0; i < fieldData.length; i++) {\n var chipElement = fieldData[i] instanceof HTMLElement ? fieldData[i]\n : this.element.querySelectorAll('.' + classNames.chip)[fieldData[i]];\n if (chipElement instanceof HTMLElement) {\n this.selectionHandler(chipElement);\n }\n }\n }\n };\n /**\n * A function that removes chip items based on given input.\n * @param {number | number[] | HTMLElement | HTMLElement[]} fields - We can pass number or array of number\n * or chip element or array of chip element.\n */\n ChipList.prototype.remove = function (fields) {\n var _this = this;\n if (this.type !== 'chip') {\n var fieldData = fields instanceof Array ? fields : [fields];\n var chipElements_1 = [];\n var chipCollection_1 = this.element.querySelectorAll('.' + classNames.chip);\n fieldData.forEach(function (data) {\n var chipElement = data instanceof HTMLElement ? data\n : chipCollection_1[data];\n if (chipElement instanceof HTMLElement) {\n chipElements_1.push(chipElement);\n }\n });\n chipElements_1.forEach(function (element) {\n var chips = _this.element.querySelectorAll('.' + classNames.chip);\n var index = Array.prototype.slice.call(chips).indexOf(element);\n _this.deleteHandler(element, index);\n });\n }\n };\n /**\n * A function that returns selected chips data.\n */\n ChipList.prototype.getSelectedChips = function () {\n var _this = this;\n var slectedChips;\n if (this.type !== 'chip' && this.selection !== 'None') {\n var selectedItems_1 = { texts: [], Indexes: [], data: [], elements: [] };\n this.element.querySelectorAll('.' + classNames.active).forEach(function (chip) {\n selectedItems_1.elements.push(chip);\n var index = Array.prototype.slice.call(_this.element.querySelectorAll('.' + classNames.chip)).indexOf(chip);\n selectedItems_1.Indexes.push(index);\n selectedItems_1.data.push(_this.chips[index]);\n var text = typeof _this.chips[index] === 'object' ?\n _this.chips[index].text.toString() : _this.chips[index].toString();\n selectedItems_1.texts.push(text);\n });\n var selectedItem = {\n text: selectedItems_1.texts[0], index: selectedItems_1.Indexes[0],\n data: selectedItems_1.data[0], element: selectedItems_1.elements[0]\n };\n slectedChips = !isNullOrUndefined(selectedItem.index) ?\n (this.selection === 'Multiple' ? selectedItems_1 : selectedItem) : undefined;\n }\n return slectedChips;\n };\n ChipList.prototype.wireEvent = function (unWireEvent) {\n if (!unWireEvent) {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.element, 'keydown', this.keyHandler);\n EventHandler.remove(this.element, 'keyup', this.keyHandler);\n }\n };\n ChipList.prototype.keyHandler = function (e) {\n if (e.target.classList.contains(classNames.chip)) {\n if (e.type === 'keydown') {\n if (e.keyCode === 13) {\n this.clickHandler(e);\n }\n else if (e.keyCode === 46 && this.enableDelete) {\n this.clickHandler(e, true);\n }\n }\n else if (e.keyCode === 9) {\n this.focusInHandler(e.target);\n }\n }\n };\n ChipList.prototype.focusInHandler = function (chipWrapper) {\n if (!chipWrapper.classList.contains(classNames.focused)) {\n chipWrapper.classList.add(classNames.focused);\n }\n };\n ChipList.prototype.focusOutHandler = function (e) {\n var chipWrapper = closest(e.target, '.' + classNames.chip);\n var focusedElement = this.type === 'chip' ? (this.element.classList.contains(classNames.focused) ?\n this.element : null) : this.element.querySelector('.' + classNames.focused);\n if (chipWrapper && focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n }\n };\n ChipList.prototype.clickHandler = function (e, del) {\n if (del === void 0) { del = false; }\n var chipWrapper = closest(e.target, '.' + classNames.chip);\n if (chipWrapper) {\n if (this.type !== 'chip') {\n var chipData = this.find(chipWrapper);\n chipData.event = e;\n var deleteElement = e.target.classList.contains(classNames.delete) ?\n e.target : (del ? chipWrapper.querySelector('.' + classNames.delete) : undefined);\n if (deleteElement && this.enableDelete) {\n chipData.cancel = false;\n var deletedItemArgs = chipData;\n this.trigger('delete', deletedItemArgs);\n if (!deletedItemArgs.cancel) {\n this.deleteHandler(chipData.element, chipData.index);\n }\n }\n else if (this.selection !== 'None') {\n this.selectionHandler(chipWrapper);\n chipData.selected = chipWrapper.classList.contains(classNames.active);\n var selectedItemArgs = chipData;\n this.trigger('click', selectedItemArgs);\n }\n else {\n this.focusInHandler(chipWrapper);\n var clickedItemArgs = chipData;\n this.trigger('click', clickedItemArgs);\n }\n }\n else {\n this.focusInHandler(chipWrapper);\n var clickedItemArgs = {\n text: this.innerText ? this.innerText : this.text,\n element: chipWrapper, data: this.text, event: e\n };\n this.trigger('click', clickedItemArgs);\n }\n }\n };\n ChipList.prototype.selectionHandler = function (chipWrapper) {\n if (this.selection === 'Single') {\n var activeElement = this.element.querySelector('.' + classNames.active);\n if (activeElement && activeElement !== chipWrapper) {\n activeElement.classList.remove(classNames.active);\n chipWrapper.setAttribute('aria-selected', 'false');\n }\n }\n if (chipWrapper.classList.contains(classNames.active)) {\n chipWrapper.classList.remove(classNames.active);\n chipWrapper.setAttribute('aria-selected', 'false');\n }\n else {\n chipWrapper.classList.add(classNames.active);\n chipWrapper.setAttribute('aria-selected', 'true');\n }\n };\n ChipList.prototype.deleteHandler = function (chipWrapper, index) {\n this.chips.splice(index, 1);\n detach(chipWrapper);\n };\n /**\n * It is used to destroy the ChipList component.\n */\n ChipList.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], [classNames.chipSet, classNames.chip, classNames.rtl,\n classNames.multiSelection, classNames.singleSelection, classNames.disabled, classNames.chipWrapper, classNames.iconWrapper,\n classNames.active, classNames.focused].concat(this.cssClass.toString().split(' ').filter(function (css) { return css; })));\n this.removeMultipleAttributes(['tabindex', 'role', 'aria-label', 'aria-multiselectable'], this.element);\n this.wireEvent(true);\n this.rippleFunctin();\n this.element.innerHTML = '';\n this.element.innerText = this.innerText;\n };\n ChipList.prototype.removeMultipleAttributes = function (attributes, element) {\n attributes.forEach(function (attr) {\n element.removeAttribute(attr);\n });\n };\n ChipList.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n ChipList.prototype.getModuleName = function () {\n return 'chip-list';\n };\n ChipList.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 'chips':\n case 'text':\n case 'avatarText':\n case 'avatarIconCss':\n case 'leadingIconCss':\n case 'trailingIconCss':\n case 'selection':\n case 'enableDelete':\n case 'enabled':\n this.refresh();\n break;\n case 'cssClass':\n if (this.type === 'chip') {\n removeClass([this.element], oldProp.cssClass.toString().split(' ').filter(function (css) { return css; }));\n addClass([this.element], newProp.cssClass.toString().split(' ').filter(function (css) { return css; }));\n }\n else {\n this.refresh();\n }\n break;\n case 'selectedChips':\n this.select(newProp.selectedChips);\n break;\n case 'enableRtl':\n this.setRtl();\n break;\n }\n }\n };\n __decorate([\n Property([])\n ], ChipList.prototype, \"chips\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"avatarText\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"avatarIconCss\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"leadingIconCss\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"trailingIconCss\", void 0);\n __decorate([\n Property('')\n ], ChipList.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], ChipList.prototype, \"enabled\", void 0);\n __decorate([\n Property([])\n ], ChipList.prototype, \"selectedChips\", void 0);\n __decorate([\n Property('None')\n ], ChipList.prototype, \"selection\", void 0);\n __decorate([\n Property(false)\n ], ChipList.prototype, \"enableDelete\", void 0);\n __decorate([\n Event()\n ], ChipList.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ChipList.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], ChipList.prototype, \"delete\", void 0);\n ChipList = __decorate([\n NotifyPropertyChanges\n ], ChipList);\n return ChipList;\n}(Component));\nexport { ChipList };\n","/**\n * Represents ChipList `Chip` model class.\n */\nvar Chip = /** @class */ (function () {\n function Chip() {\n }\n return Chip;\n}());\nexport { Chip };\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, Event, append, compile } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n ], Animation.prototype, \"open\", void 0);\n __decorate([\n Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n ], Animation.prototype, \"close\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n *
Show Tooltip
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the Tooltip Component\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n Tooltip.prototype.initialize = function () {\n this.formatPosition();\n addClass([this.element], ROOT);\n };\n Tooltip.prototype.formatPosition = function () {\n var _a, _b;\n if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n }\n else {\n _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n }\n };\n Tooltip.prototype.renderArrow = function () {\n this.setTipClass(this.position);\n var tip = this.createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n this.tooltipEle.appendChild(tip);\n };\n Tooltip.prototype.setTipClass = function (position) {\n if (position.indexOf('Right') === 0) {\n this.tipClass = TIP_LEFT;\n }\n else if (position.indexOf('Bottom') === 0) {\n this.tipClass = TIP_TOP;\n }\n else if (position.indexOf('Left') === 0) {\n this.tipClass = TIP_RIGHT;\n }\n else {\n this.tipClass = TIP_BOTTOM;\n }\n };\n Tooltip.prototype.renderPopup = function (target) {\n var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n this.popupObj = new Popup(this.tooltipEle, {\n height: this.height,\n width: this.width,\n position: {\n X: elePos.left,\n Y: elePos.top\n },\n enableRtl: this.enableRtl,\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this)\n });\n };\n Tooltip.prototype.getTooltipPosition = function (target) {\n this.tooltipEle.style.display = 'none';\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\n this.tooltipEle.style.display = '';\n var offsetPos = this.calculateTooltipOffset(this.position);\n var elePos = this.collisionFlipFit(target, pos.left + offsetPos.left, pos.top + offsetPos.top);\n return elePos;\n };\n Tooltip.prototype.reposition = function (target) {\n var elePos = this.getTooltipPosition(target);\n this.popupObj.position = { X: elePos.left, Y: elePos.top };\n this.popupObj.dataBind();\n };\n Tooltip.prototype.openPopupHandler = function () {\n this.trigger('afterOpen', this.tooltipEventArgs);\n };\n Tooltip.prototype.closePopupHandler = function () {\n this.clear();\n this.trigger('afterClose', this.tooltipEventArgs);\n };\n Tooltip.prototype.calculateTooltipOffset = function (position) {\n var pos = { top: 0, left: 0 };\n var tooltipEleWidth = this.tooltipEle.offsetWidth;\n var tooltipEleHeight = this.tooltipEle.offsetHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n var tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n var tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n var tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n var tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n if (this.mouseTrail) {\n tipAdjust += MOUSE_TRAIL_GAP;\n }\n switch (position) {\n case 'RightTop':\n pos.left += tipWidth + tipAdjust;\n pos.top -= tooltipEleHeight - tipHeightAdjust;\n break;\n case 'RightCenter':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'RightBottom':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tipHeightAdjust);\n break;\n case 'BottomRight':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n case 'BottomCenter':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n case 'BottomLeft':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'LeftBottom':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tipHeightAdjust);\n break;\n case 'LeftCenter':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'LeftTop':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight - tipHeightAdjust);\n break;\n case 'TopLeft':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'TopRight':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n default:\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n }\n pos.left += this.offsetX;\n pos.top += this.offsetY;\n return pos;\n };\n Tooltip.prototype.updateTipPosition = function (position) {\n var selEle = this.tooltipEle.querySelectorAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER);\n var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n removeClass(selEle, removeList);\n this.setTipClass(position);\n addClass(selEle, this.tipClass);\n };\n Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n if (this.showTipPointer === false) {\n return;\n }\n this.updateTipPosition(position);\n var leftValue;\n var topValue;\n var tooltipWidth = this.tooltipEle.clientWidth;\n var tooltipHeight = this.tooltipEle.clientHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n var tipWidth = arrowEle.offsetWidth;\n var tipHeight = arrowEle.offsetHeight;\n if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n if (this.tipClass === TIP_BOTTOM) {\n topValue = '99.9%';\n // Arrow icon aligned -2px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n }\n else {\n topValue = -(tipHeight - 1) + 'px';\n // Arrow icon aligned -6px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n }\n var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n leftValue = POINTER_ADJUST + 'px';\n }\n else {\n leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n }\n }\n else {\n if (this.tipClass === TIP_RIGHT) {\n leftValue = '99.9%';\n // Arrow icon aligned -2px left from ArrowOuterTip div\n arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n }\n else {\n leftValue = -(tipWidth - 1) + 'px';\n // Arrow icon aligned -2px from ArrowOuterTip width\n arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n }\n var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n topValue = POINTER_ADJUST + 'px';\n }\n else {\n topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n }\n }\n arrowEle.style.top = topValue;\n arrowEle.style.left = leftValue;\n };\n Tooltip.prototype.renderContent = function (target) {\n var tooltipContent = this.tooltipEle.querySelector('.' + CONTENT);\n if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n target.setAttribute('data-content', target.getAttribute('title'));\n target.removeAttribute('title');\n }\n if (!isNullOrUndefined(this.content)) {\n tooltipContent.innerHTML = '';\n if (this.content instanceof HTMLElement) {\n tooltipContent.appendChild(this.content);\n }\n else if (typeof this.content === 'string') {\n tooltipContent.innerHTML = this.content;\n }\n else {\n var templateFunction = compile(this.content);\n append(templateFunction(), tooltipContent);\n }\n }\n else {\n if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n tooltipContent.innerHTML = target.getAttribute('data-content');\n }\n }\n };\n Tooltip.prototype.renderCloseIcon = function () {\n if (!this.isSticky) {\n return;\n }\n var tipClose = this.createElement('div', { className: ICON + ' ' + CLOSE });\n this.tooltipEle.appendChild(tipClose);\n EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n };\n Tooltip.prototype.addDescribedBy = function (target, id) {\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n if (describedby.indexOf(id) < 0) {\n describedby.push(id);\n }\n attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\n };\n Tooltip.prototype.removeDescribedBy = function (target) {\n var id = target.getAttribute('data-tooltip-id');\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n var index = describedby.indexOf(id);\n if (index !== -1) {\n describedby.splice(index, 1);\n }\n target.removeAttribute('data-tooltip-id');\n var orgdescribedby = describedby.join(' ').trim();\n if (orgdescribedby) {\n target.setAttribute('aria-describedby', orgdescribedby);\n }\n else {\n target.removeAttribute('aria-describedby');\n }\n };\n Tooltip.prototype.tapHoldHandler = function (evt) {\n clearTimeout(this.autoCloseTimer);\n this.targetHover(evt.originalEvent);\n };\n Tooltip.prototype.touchEndHandler = function (e) {\n var _this = this;\n if (this.isSticky) {\n return;\n }\n var close = function () {\n _this.close();\n };\n this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n };\n Tooltip.prototype.targetClick = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n if (target.getAttribute('data-tooltip-id') === null) {\n this.targetHover(e);\n }\n else if (!this.isSticky) {\n this.hideTooltip(this.animation.close, e, target);\n }\n };\n Tooltip.prototype.targetHover = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target) || target.getAttribute('data-tooltip-id') !== null) {\n return;\n }\n var targetList = [].slice.call(document.querySelectorAll('[data-tooltip-id= ' + this.ctrlId + '_content]'));\n for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n var target_1 = targetList_1[_i];\n this.restoreElement(target_1);\n }\n this.showTooltip(target, this.animation.open, e);\n this.wireMouseEvents(e, target);\n };\n Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n var _this = this;\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeRender', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n this.isHidden = false;\n if (isNullOrUndefined(this.tooltipEle)) {\n this.ctrlId = this.element.getAttribute('id') ? getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n this.tooltipEle = this.createElement('div', {\n className: TOOLTIP_WRAP + ' ' + POPUP_ROOT, attrs: {\n role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n }, styles: 'width:' + formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n });\n if (this.cssClass) {\n addClass([this.tooltipEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n addClass([this.tooltipEle], DEVICE);\n }\n if (this.width !== 'auto') {\n this.tooltipEle.style.maxWidth = formatUnit(this.width);\n }\n this.tooltipEle.appendChild(this.createElement('div', { className: CONTENT }));\n document.body.appendChild(this.tooltipEle);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n addClass([this.tooltipEle], POPUP_OPEN);\n if (this.showTipPointer) {\n this.renderArrow();\n }\n this.renderCloseIcon();\n this.renderPopup(target);\n }\n else {\n this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n PopupAnimation.stop(this.tooltipEle);\n this.reposition(target);\n }\n removeClass([this.tooltipEle], POPUP_OPEN);\n addClass([this.tooltipEle], POPUP_CLOSE);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeOpen', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n var openAnimation = {\n name: showAnimation.effect, duration: showAnimation.duration, delay: showAnimation.delay, timingFunction: 'easeOut'\n };\n if (showAnimation.effect === 'None') {\n openAnimation = undefined;\n }\n if (this.openDelay > 0) {\n var show = function () {\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation, target);\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n this.popupObj.show(openAnimation, target);\n }\n };\n Tooltip.prototype.checkCollision = function (target, x, y) {\n var elePos = {\n left: x, top: y, position: this.position,\n horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n };\n var affectedPos = isCollide(this.tooltipEle, (this.target ? this.element : null), x, y);\n if (affectedPos.length > 0) {\n elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n this.tooltipPositionX;\n elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n this.tooltipPositionY;\n }\n return elePos;\n };\n Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n var elePos = this.checkCollision(target, x, y);\n var newpos = elePos.position;\n if (this.tooltipPositionY !== elePos.vertical) {\n newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n }\n if (this.tooltipPositionX !== elePos.horizontal) {\n if (newpos.indexOf('Left') === 0) {\n elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Left');\n }\n if (newpos.indexOf('Right') === 0) {\n elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Right');\n }\n elePos.horizontal = this.tooltipPositionX;\n }\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null,\n element: this.tooltipEle, collidedPosition: newpos\n };\n this.trigger('beforeCollision', this.tooltipEventArgs);\n if (elePos.position !== newpos) {\n var pos = calculatePosition(target, this.tooltipPositionX, elePos.vertical);\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n var offsetPos = this.calculateTooltipOffset(newpos);\n elePos.position = newpos;\n elePos.left = pos.left + offsetPos.left;\n elePos.top = pos.top + offsetPos.top;\n }\n else {\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n }\n var eleOffset = { left: elePos.left, top: elePos.top };\n var left = fit(this.tooltipEle, (this.target ? this.element : null), { X: true, Y: false }, eleOffset).left;\n if (this.showTipPointer && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowleft = parseInt(arrowEle.style.left, 10) - (left - elePos.left);\n if (arrowleft < 0) {\n arrowleft = 0;\n }\n else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n }\n arrowEle.style.left = arrowleft.toString() + 'px';\n }\n eleOffset.left = left;\n return eleOffset;\n };\n Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n var _this = this;\n var target;\n if (e) {\n target = this.target ? (targetElement || e.target) : this.element;\n this.tooltipEventArgs = {\n type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle\n };\n }\n else {\n target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null, element: this.tooltipEle\n };\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n this.trigger('beforeClose', this.tooltipEventArgs);\n if (!this.tooltipEventArgs.cancel) {\n this.restoreElement(target);\n this.isHidden = true;\n var closeAnimation_1 = {\n name: hideAnimation.effect, duration: hideAnimation.duration, delay: hideAnimation.delay, timingFunction: 'easeIn'\n };\n if (hideAnimation.effect === 'None') {\n closeAnimation_1 = undefined;\n }\n if (this.closeDelay > 0) {\n var hide = function () {\n if (_this.popupObj) {\n _this.popupObj.hide(closeAnimation_1);\n }\n };\n this.hideTimer = setTimeout(hide, this.closeDelay);\n }\n else {\n this.popupObj.hide(closeAnimation_1);\n }\n }\n else {\n this.isHidden = false;\n }\n };\n Tooltip.prototype.restoreElement = function (target) {\n this.unwireMouseEvents(target);\n if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n target.setAttribute('title', target.getAttribute('data-content'));\n target.removeAttribute('data-content');\n }\n this.removeDescribedBy(target);\n };\n Tooltip.prototype.clear = function () {\n if (this.tooltipEle) {\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n }\n if (this.isHidden) {\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n }\n };\n Tooltip.prototype.onMouseOut = function (e) {\n this.hideTooltip(this.animation.close, e);\n };\n Tooltip.prototype.onStickyClose = function (e) {\n this.close();\n };\n Tooltip.prototype.onMouseMove = function (event) {\n var eventPageX = 0;\n var eventPageY = 0;\n if (event.type.indexOf('touch') > -1) {\n event.preventDefault();\n eventPageX = event.touches[0].pageX;\n eventPageY = event.touches[0].pageY;\n }\n else {\n eventPageX = event.pageX;\n eventPageY = event.pageY;\n }\n PopupAnimation.stop(this.tooltipEle);\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n var pos = this.calculateTooltipOffset(this.position);\n var x = eventPageX + pos.left + this.offsetX;\n var y = eventPageY + pos.top + this.offsetY;\n var elePos = this.checkCollision(event.target, x, y);\n if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n elePos.position = newpos;\n this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n var colpos = this.calculateTooltipOffset(elePos.position);\n elePos.left = eventPageX + colpos.left - this.offsetX;\n elePos.top = eventPageY + colpos.top - this.offsetY;\n }\n this.tooltipEle.style.left = elePos.left + 'px';\n this.tooltipEle.style.top = elePos.top + 'px';\n };\n Tooltip.prototype.keyDown = function (event) {\n if (this.tooltipEle && event.keyCode === 27) {\n this.close();\n }\n };\n Tooltip.prototype.touchEnd = function (e) {\n if (this.tooltipEle && closest(e.target, '.' + ROOT) === null) {\n this.close();\n }\n };\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle) {\n this.close();\n }\n };\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Tooltip.prototype.render = function () {\n this.initialize();\n this.wireEvents(this.opensOn);\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Tooltip.prototype.preRender = function () {\n this.tipClass = TIP_BOTTOM;\n this.tooltipPositionX = 'Center';\n this.tooltipPositionY = 'Top';\n this.isHidden = true;\n };\n /**\n * Binding events to the Tooltip element.\n * @hidden\n */\n Tooltip.prototype.wireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n var opensOn = triggerList_1[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.wireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n this.touchModule = new Touch(this.element, {\n tapHoldThreshold: TAPHOLD_THRESHOLD,\n tapHold: this.tapHoldHandler.bind(this)\n });\n EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n }\n else {\n EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n }\n }\n }\n EventHandler.add(document, 'touchend', this.touchEnd, this);\n EventHandler.add(document, 'scroll', this.scrollHandler, this);\n EventHandler.add(document, 'keydown', this.keyDown, this);\n };\n Tooltip.prototype.getTriggerList = function (trigger) {\n if (trigger === 'Auto') {\n trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n }\n return trigger.split(' ');\n };\n Tooltip.prototype.wireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n var target = targetList_2[_i];\n EventHandler.add(target, 'focus', this.targetHover, this);\n }\n }\n else {\n EventHandler.add(this.element, 'focus', this.targetHover, this);\n }\n };\n Tooltip.prototype.wireMouseEvents = function (e, target) {\n if (this.tooltipEle) {\n if (!this.isSticky) {\n if (e.type === 'focus') {\n EventHandler.add(target, 'blur', this.onMouseOut, this);\n }\n if (e.type === 'mouseover') {\n EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n }\n if (this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Tooltip.prototype.unwireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n var opensOn = triggerList_2[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.unwireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n if (this.touchModule) {\n this.touchModule.destroy();\n }\n EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n }\n else {\n EventHandler.remove(this.element, 'mouseover', this.targetHover);\n }\n }\n }\n EventHandler.remove(document, 'touchend', this.touchEnd);\n EventHandler.remove(document, 'scroll', this.scrollHandler);\n EventHandler.remove(document, 'keydown', this.keyDown);\n };\n Tooltip.prototype.unwireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n var target = targetList_3[_i];\n EventHandler.remove(target, 'focus', this.targetHover);\n }\n }\n else {\n EventHandler.remove(this.element, 'focus', this.targetHover);\n }\n };\n Tooltip.prototype.unwireMouseEvents = function (target) {\n if (!this.isSticky) {\n var triggerList = this.getTriggerList(this.opensOn);\n for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n var opensOn = triggerList_3[_i];\n if (opensOn === 'Focus') {\n EventHandler.remove(target, 'blur', this.onMouseOut);\n }\n if (opensOn === 'Hover' && !Browser.isDevice) {\n EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\n }\n }\n if (this.mouseTrail) {\n EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n }\n };\n Tooltip.prototype.findTarget = function () {\n var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n return target;\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n var targetElement = this.findTarget();\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 if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.width = formatUnit(newProp.width);\n this.reposition(targetElement);\n }\n break;\n case 'height':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n this.reposition(targetElement);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n this.renderContent();\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n if (this.tooltipEle && targetElement) {\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n this.reposition(targetElement);\n }\n break;\n case 'tipPointerPosition':\n if (this.tooltipEle && targetElement) {\n this.reposition(targetElement);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n * @param element Target element where the Tooltip is to be displayed.\n * @param animation Sets the specific animation, while showing the Tooltip on the screen.\n * @return {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (animation === void 0) { animation = this.animation.open; }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n * @param animation Sets the specific animation when hiding Tooltip from the screen.\n * @return {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (animation === void 0) { animation = this.animation.close; }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n * @param target Target element where the Tooltip content or position needs to be refreshed.\n * @return {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n };\n /**\n * It is used to destroy the Tooltip component.\n * @method destroy\n * @return {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","import { DataUtil } from './util';\n/**\n * Query class is used to build query which is used by the DataManager to communicate with datasource.\n */\nvar Query = /** @class */ (function () {\n /**\n * Constructor for Query class.\n * @param {string|string[]} from?\n * @hidden\n */\n function Query(from) {\n /** @hidden */\n this.subQuery = null;\n /** @hidden */\n this.isChild = false;\n /** @hidden */\n this.distincts = [];\n this.queries = [];\n this.key = '';\n this.fKey = '';\n if (typeof from === 'string') {\n this.fromTable = from;\n }\n else if (from && from instanceof Array) {\n this.lookups = from;\n }\n this.expands = [];\n this.sortedColumns = [];\n this.groupedColumns = [];\n this.subQuery = null;\n this.isChild = false;\n this.params = [];\n return this;\n }\n /**\n * Sets the primary key.\n * @param {string} field - Defines the column field.\n */\n Query.prototype.setKey = function (field) {\n this.key = field;\n return this;\n };\n /**\n * Sets default DataManager to execute query.\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.using = function (dataManager) {\n this.dataManager = dataManager;\n return this;\n };\n /**\n * Executes query with the given DataManager.\n * @param {DataManager} dataManager - Defines the DataManager.\n * @param {Function} done - Defines the success callback.\n * @param {Function} fail - Defines the failure callback.\n * @param {Function} always - Defines the callback which will be invoked on either success or failure.\n *\n *
\n     * let dataManager: DataManager = new DataManager([{ ID: '10' }, { ID: '2' }, { ID: '1' }, { ID: '20' }]);\n     * let query: Query = new Query();\n     * query.sortBy('ID', (x: string, y: string): number => { return parseInt(x, 10) - parseInt(y, 10) });\n     * let promise: Promise< Object > = query.execute(dataManager);\n     * promise.then((e: { result: Object }) => { });\n     * 
\n */\n Query.prototype.execute = function (dataManager, done, fail, always) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeQuery(this, done, fail, always);\n }\n return DataUtil.throwError('Query - execute() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Executes query with the local datasource.\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.executeLocal = function (dataManager) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeLocal(this);\n }\n return DataUtil.throwError('Query - executeLocal() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Creates deep copy of the Query object.\n */\n Query.prototype.clone = function () {\n var cloned = new Query();\n cloned.queries = this.queries.slice(0);\n cloned.key = this.key;\n cloned.isChild = this.isChild;\n cloned.dataManager = this.dataManager;\n cloned.fromTable = this.fromTable;\n cloned.params = this.params.slice(0);\n cloned.expands = this.expands.slice(0);\n cloned.sortedColumns = this.sortedColumns.slice(0);\n cloned.groupedColumns = this.groupedColumns.slice(0);\n cloned.subQuerySelector = this.subQuerySelector;\n cloned.subQuery = this.subQuery;\n cloned.fKey = this.fKey;\n cloned.isCountRequired = this.isCountRequired;\n cloned.distincts = this.distincts.slice(0);\n return cloned;\n };\n /**\n * Specifies the name of table to retrieve data in query execution.\n * @param {string} tableName - Defines the table name.\n */\n Query.prototype.from = function (tableName) {\n this.fromTable = tableName;\n return this;\n };\n /**\n * Adds additional parameter which will be sent along with the request which will be generated while DataManager execute.\n * @param {string} key - Defines the key of additional parameter.\n * @param {Function|string} value - Defines the value for the key.\n */\n Query.prototype.addParams = function (key, value) {\n if (typeof value === 'function') {\n this.params.push({ key: key, fn: value });\n }\n else {\n this.params.push({ key: key, value: value });\n }\n return this;\n };\n /**\n * @hidden\n */\n Query.prototype.distinct = function (fields) {\n if (typeof fields === 'string') {\n this.distincts = [].slice.call([fields], 0);\n }\n else {\n this.distincts = fields.slice(0);\n }\n return this;\n };\n /**\n * Expands the related table.\n * @param {string|Object[]} tables\n */\n Query.prototype.expand = function (tables) {\n if (typeof tables === 'string') {\n this.expands = [].slice.call([tables], 0);\n }\n else {\n this.expands = tables.slice(0);\n }\n return this;\n };\n /**\n * Filter data with given filter criteria.\n * @param {string|Predicate} fieldName - Defines the column field or Predicate.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string|number|boolean} value - Defines the values to match with data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Query.prototype.where = function (fieldName, operator, value, ignoreCase, ignoreAccent) {\n operator = operator ? (operator).toLowerCase() : null;\n var predicate = null;\n if (typeof fieldName === 'string') {\n predicate = new Predicate(fieldName, operator, value, ignoreCase, ignoreAccent);\n }\n else if (fieldName instanceof Predicate) {\n predicate = fieldName;\n }\n this.queries.push({\n fn: 'onWhere',\n e: predicate\n });\n return this;\n };\n /**\n * Search data with given search criteria.\n * @param {string|number|boolean} searchKey - Defines the search key.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n * @param {string} operator - Defines the operator how to search data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Query.prototype.search = function (searchKey, fieldNames, operator, ignoreCase, ignoreAccent) {\n if (typeof fieldNames === 'string') {\n fieldNames = [fieldNames];\n }\n operator = operator || 'contains';\n var comparer = DataUtil.fnOperators[operator];\n this.queries.push({\n fn: 'onSearch',\n e: {\n fieldNames: fieldNames,\n operator: operator,\n searchKey: searchKey,\n ignoreCase: ignoreCase,\n ignoreAccent: ignoreAccent,\n comparer: comparer\n }\n });\n return this;\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n */\n Query.prototype.sortBy = function (fieldName, comparer, isFromGroup) {\n var order = 'ascending';\n var sorts;\n var temp;\n if (typeof fieldName === 'string' && DataUtil.endsWith(fieldName.toLowerCase(), ' desc')) {\n fieldName = fieldName.replace(/ desc$/i, '');\n comparer = 'descending';\n }\n if (!comparer || typeof comparer === 'string') {\n order = comparer ? comparer.toLowerCase() : 'ascending';\n comparer = DataUtil.fnSort(comparer);\n }\n if (isFromGroup) {\n sorts = Query.filterQueries(this.queries, 'onSortBy');\n for (var i = 0; i < sorts.length; i++) {\n temp = sorts[i].e.fieldName;\n if (typeof temp === 'string') {\n if (temp === fieldName) {\n return this;\n }\n }\n else if (temp instanceof Array) {\n for (var j = 0; j < temp.length; j++) {\n if (temp[j] === fieldName || fieldName.toLowerCase() === temp[j] + ' desc') {\n return this;\n }\n }\n }\n }\n }\n this.queries.push({\n fn: 'onSortBy',\n e: {\n fieldName: fieldName,\n comparer: comparer,\n direction: order\n }\n });\n return this;\n };\n /**\n * Sorts data in descending order.\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.sortByDesc = function (fieldName) {\n return this.sortBy(fieldName, 'descending');\n };\n /**\n * Groups data with the given field name.\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.group = function (fieldName, fn, format) {\n this.sortBy(fieldName, null, true);\n this.queries.push({\n fn: 'onGroup',\n e: {\n fieldName: fieldName,\n comparer: fn ? fn : null,\n format: format ? format : null\n }\n });\n return this;\n };\n /**\n * Gets data based on the given page index and size.\n * @param {number} pageIndex - Defines the current page index.\n * @param {number} pageSize - Defines the no of records per page.\n */\n Query.prototype.page = function (pageIndex, pageSize) {\n this.queries.push({\n fn: 'onPage',\n e: {\n pageIndex: pageIndex,\n pageSize: pageSize\n }\n });\n return this;\n };\n /**\n * Gets data based on the given start and end index.\n * @param {number} start - Defines the start index of the datasource.\n * @param {number} end - Defines the end index of the datasource.\n */\n Query.prototype.range = function (start, end) {\n this.queries.push({\n fn: 'onRange',\n e: {\n start: start,\n end: end\n }\n });\n return this;\n };\n /**\n * Gets data from the top of the data source based on given number of records count.\n * @param {number} nos - Defines the no of records to retrieve from datasource.\n */\n Query.prototype.take = function (nos) {\n this.queries.push({\n fn: 'onTake',\n e: {\n nos: nos\n }\n });\n return this;\n };\n /**\n * Skips data with given number of records count from the top of the data source.\n * @param {number} nos - Defines the no of records skip in the datasource.\n */\n Query.prototype.skip = function (nos) {\n this.queries.push({\n fn: 'onSkip',\n e: { nos: nos }\n });\n return this;\n };\n /**\n * Selects specified columns from the data source.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n */\n Query.prototype.select = function (fieldNames) {\n if (typeof fieldNames === 'string') {\n fieldNames = [].slice.call([fieldNames], 0);\n }\n this.queries.push({\n fn: 'onSelect',\n e: { fieldNames: fieldNames }\n });\n return this;\n };\n /**\n * Gets the records in hierarchical relationship from two tables. It requires the foreign key to relate two tables.\n * @param {Query} query - Defines the query to relate two tables.\n * @param {Function} selectorFn - Defines the custom function to select records.\n */\n Query.prototype.hierarchy = function (query, selectorFn) {\n this.subQuerySelector = selectorFn;\n this.subQuery = query;\n return this;\n };\n /**\n * Sets the foreign key which is used to get data from the related table.\n * @param {string} key - Defines the foreign key.\n */\n Query.prototype.foreignKey = function (key) {\n this.fKey = key;\n return this;\n };\n /**\n * It is used to get total number of records in the DataManager execution result.\n */\n Query.prototype.requiresCount = function () {\n this.isCountRequired = true;\n return this;\n };\n //type - sum, avg, min, max\n /**\n * Aggregate the data with given type and field name.\n * @param {string} type - Defines the aggregate type.\n * @param {string} field - Defines the column field to aggregate.\n */\n Query.prototype.aggregate = function (type, field) {\n this.queries.push({\n fn: 'onAggregates',\n e: { field: field, type: type }\n });\n return this;\n };\n /**\n * Pass array of filterColumn query for performing filter operation.\n * @param {QueryOptions[]} queries\n * @param {string} name\n * @hidden\n */\n Query.filterQueries = function (queries, name) {\n return queries.filter(function (q) {\n return q.fn === name;\n });\n };\n /**\n * To get the list of queries which is already filtered in current data source.\n * @param {Object[]} queries\n * @param {string[]} singles\n * @hidden\n */\n Query.filterQueryLists = function (queries, singles) {\n var filtered = queries.filter(function (q) {\n return singles.indexOf(q.fn) !== -1;\n });\n var res = {};\n for (var i = 0; i < filtered.length; i++) {\n if (!res[filtered[i].fn]) {\n res[filtered[i].fn] = filtered[i].e;\n }\n }\n return res;\n };\n return Query;\n}());\nexport { Query };\n/**\n * Predicate class is used to generate complex filter criteria.\n * This will be used by DataManager to perform multiple filtering operation.\n */\nvar Predicate = /** @class */ (function () {\n /**\n * Constructor for Predicate class.\n * @param {string|Predicate} field\n * @param {string} operator\n * @param {string|number|boolean|Predicate|Predicate[]} value\n * @param {boolean=false} ignoreCase\n * @hidden\n */\n function Predicate(field, operator, value, ignoreCase, ignoreAccent) {\n if (ignoreCase === void 0) { ignoreCase = false; }\n /** @hidden */\n this.ignoreAccent = false;\n /** @hidden */\n this.isComplex = false;\n if (typeof field === 'string') {\n this.field = field;\n this.operator = operator.toLowerCase();\n this.value = value;\n this.ignoreCase = ignoreCase;\n this.ignoreAccent = ignoreAccent;\n this.isComplex = false;\n this.comparer = DataUtil.fnOperators.processOperator(this.operator);\n }\n else if (field instanceof Predicate && value instanceof Predicate || value instanceof Array) {\n this.isComplex = true;\n this.condition = operator.toLowerCase();\n this.predicates = [field];\n if (value instanceof Array) {\n [].push.apply(this.predicates, value);\n }\n else {\n this.predicates.push(value);\n }\n }\n return this;\n }\n /**\n * Adds n-number of new predicates on existing predicate with “and” condition.\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and');\n };\n /**\n * Adds new predicate on existing predicate with “and” condition.\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Predicate.prototype.and = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'and', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “or” condition.\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or');\n };\n /**\n * Adds new predicate on existing predicate with “or” condition.\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Predicate.prototype.or = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'or', ignoreCase, ignoreAccent);\n };\n /**\n * Converts plain JavaScript object to Predicate object.\n * @param {Predicate[]|Predicate} json - Defines single or collection of Predicate.\n */\n Predicate.fromJson = function (json) {\n if (json instanceof Array) {\n var res = [];\n for (var i = 0, len = json.length; i < len; i++) {\n res.push(this.fromJSONData(json[i]));\n }\n return res;\n }\n var pred = json;\n return this.fromJSONData(pred);\n };\n /**\n * Validate the record based on the predicates.\n * @param {Object} record - Defines the datasource record.\n */\n Predicate.prototype.validate = function (record) {\n var predicate = this.predicates ? this.predicates : [];\n var isAnd;\n var ret;\n if (!this.isComplex && this.comparer) {\n return this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n isAnd = this.condition === 'and';\n for (var i = 0; i < predicate.length; i++) {\n ret = predicate[i].validate(record);\n if (isAnd) {\n if (!ret) {\n return false;\n }\n }\n else {\n if (ret) {\n return true;\n }\n }\n }\n return isAnd;\n };\n /**\n * Converts predicates to plain JavaScript.\n * This method is uses Json stringify when serializing Predicate object.\n */\n Predicate.prototype.toJson = function () {\n var predicates;\n var p;\n if (this.isComplex) {\n predicates = [];\n p = this.predicates;\n for (var i = 0; i < p.length; i++) {\n predicates.push(p[i].toJson());\n }\n }\n return {\n isComplex: this.isComplex,\n field: this.field,\n operator: this.operator,\n value: this.value,\n ignoreCase: this.ignoreCase,\n ignoreAccent: this.ignoreAccent,\n condition: this.condition,\n predicates: predicates\n };\n };\n Predicate.combinePredicates = function (predicates, operator) {\n if (predicates.length === 1) {\n if (!(predicates[0] instanceof Array)) {\n return predicates[0];\n }\n predicates = predicates[0];\n }\n return new Predicate(predicates[0], operator, predicates.slice(1));\n };\n Predicate.combine = function (pred, field, operator, value, condition, ignoreCase, ignoreAccent) {\n if (field instanceof Predicate) {\n return Predicate[condition](pred, field);\n }\n if (typeof field === 'string') {\n return Predicate[condition](pred, new Predicate(field, operator, value, ignoreCase, ignoreAccent));\n }\n return DataUtil.throwError('Predicate - ' + condition + ' : invalid arguments');\n };\n Predicate.fromJSONData = function (json) {\n var preds = json.predicates || [];\n var len = preds.length;\n var predicates = [];\n var result;\n for (var i = 0; i < len; i++) {\n predicates.push(this.fromJSONData(preds[i]));\n }\n if (!json.isComplex) {\n result = new Predicate(json.field, json.operator, json.value, json.ignoreCase, json.ignoreAccent);\n }\n else {\n result = new Predicate(predicates[0], json.condition, predicates.slice(1));\n }\n return result;\n };\n return Predicate;\n}());\nexport { Predicate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from './manager';\nimport { Query } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Data manager common utility methods.\n * @hidden\n */\nvar DataUtil = /** @class */ (function () {\n function DataUtil() {\n }\n /**\n * Returns the value by invoking the provided parameter function.\n * If the paramater is not of type function then it will be returned as it is.\n * @param {Function|string|string[]|number} value\n * @param {Object} inst?\n * @hidden\n */\n DataUtil.getValue = function (value, inst) {\n if (typeof value === 'function') {\n return value.call(inst || {});\n }\n return value;\n };\n /**\n * Returns true if the input string ends with given string.\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.endsWith = function (input, substr) {\n return input.slice(-substr.length) === substr;\n };\n /**\n * Returns true if the input string starts with given string.\n * @param {string} str\n * @param {string} startstr\n */\n DataUtil.startsWith = function (input, start) {\n return input.slice(0, start.length) === start;\n };\n /**\n * To return the sorting function based on the string.\n * @param {string} order\n * @hidden\n */\n DataUtil.fnSort = function (order) {\n order = order ? DataUtil.toLowerCase(order) : 'ascending';\n if (order === 'ascending') {\n return this.fnAscending;\n }\n return this.fnDescending;\n };\n /**\n * Comparer function which is used to sort the data in ascending order.\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnAscending = function (x, y) {\n if (y === null || y === undefined) {\n return -1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y);\n }\n if (x === null || x === undefined) {\n return 1;\n }\n return x - y;\n };\n /**\n * Comparer function which is used to sort the data in descending order.\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnDescending = function (x, y) {\n if (y === null || y === undefined) {\n return 1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y) * -1;\n }\n if (x === null || x === undefined) {\n return -1;\n }\n return y - x;\n };\n DataUtil.extractFields = function (obj, fields) {\n var newObj = {};\n for (var i = 0; i < fields.length; i++) {\n newObj = this.setValue(fields[i], this.getObject(fields[i], obj), newObj);\n }\n return newObj;\n };\n /**\n * Select objects by given fields from jsonArray.\n * @param {Object[]} jsonArray\n * @param {string[]} fields\n */\n DataUtil.select = function (jsonArray, fields) {\n var newData = [];\n for (var i = 0; i < jsonArray.length; i++) {\n newData.push(this.extractFields(jsonArray[i], fields));\n }\n return newData;\n };\n /**\n * Group the input data based on the field name.\n * It also performs aggregation of the grouped records based on the aggregates paramater.\n * @param {Object[]} jsonArray\n * @param {string} field?\n * @param {Object[]} agg?\n * @param {number} level?\n * @param {Object[]} groupDs?\n */\n DataUtil.group = function (jsonArray, field, aggregates, level, groupDs, format) {\n level = level || 1;\n var jsonData = jsonArray;\n var guid = 'GroupGuid';\n if (jsonData.GroupGuid === consts[guid]) {\n var _loop_1 = function (j) {\n if (!isNullOrUndefined(groupDs)) {\n var indx = -1;\n var temp = groupDs.filter(function (e) { return e.key === jsonData[j].key; });\n indx = groupDs.indexOf(temp[0]);\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, groupDs[indx].items, format);\n jsonData[j].count = groupDs[indx].count;\n }\n else {\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, null, format);\n jsonData[j].count = jsonData[j].items.length;\n }\n };\n var this_1 = this;\n for (var j = 0; j < jsonData.length; j++) {\n _loop_1(j);\n }\n jsonData.childLevels += 1;\n return jsonData;\n }\n var grouped = {};\n var groupedArray = [];\n groupedArray.GroupGuid = consts[guid];\n groupedArray.level = level;\n groupedArray.childLevels = 0;\n groupedArray.records = jsonData;\n var _loop_2 = function (i) {\n var val = this_2.getVal(jsonData, i, field);\n if (!isNullOrUndefined(format)) {\n val = format(val, field);\n }\n if (!grouped[val]) {\n grouped[val] = {\n key: val,\n count: 0,\n items: [],\n aggregates: {},\n field: field\n };\n groupedArray.push(grouped[val]);\n if (!isNullOrUndefined(groupDs)) {\n var tempObj = groupDs.filter(function (e) { return e.key === grouped[val].key; });\n grouped[val].count = tempObj[0].count;\n }\n }\n grouped[val].count = !isNullOrUndefined(groupDs) ? grouped[val].count : grouped[val].count += 1;\n grouped[val].items.push(jsonData[i]);\n };\n var this_2 = this;\n for (var i = 0; i < jsonData.length; i++) {\n _loop_2(i);\n }\n if (aggregates && aggregates.length) {\n var _loop_3 = function (i) {\n var res = {};\n var fn = void 0;\n var aggs = aggregates;\n for (var j = 0; j < aggregates.length; j++) {\n fn = DataUtil.aggregates[aggregates[j].type];\n if (!isNullOrUndefined(groupDs)) {\n var temp = groupDs.filter(function (e) { return e.key === groupedArray[i].key; });\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(temp[0].items, aggs[j].field);\n }\n }\n else {\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(groupedArray[i].items, aggs[j].field);\n }\n }\n }\n groupedArray[i].aggregates = res;\n };\n for (var i = 0; i < groupedArray.length; i++) {\n _loop_3(i);\n }\n }\n return jsonData.length && groupedArray || jsonData;\n };\n /**\n * It is used to categorize the multiple items based on a specific field in jsonArray.\n * The hierarchical queries are commonly required when you use foreign key binding.\n * @param {string} fKey\n * @param {string} from\n * @param {Object[]} source\n * @param {Group} lookup?\n * @param {string} pKey?\n * @hidden\n */\n DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n var i;\n var grp = {};\n var temp;\n if (lookup.result) {\n lookup = lookup.result;\n }\n if (lookup.GroupGuid) {\n this.throwError('DataManager: Do not have support Grouping in hierarchy');\n }\n for (i = 0; i < lookup.length; i++) {\n var fKeyData = this.getObject(fKey, lookup[i]);\n temp = grp[fKeyData] || (grp[fKeyData] = []);\n temp.push(lookup[i]);\n }\n for (i = 0; i < source.length; i++) {\n var fKeyData = this.getObject(pKey || fKey, source[i]);\n source[i][from] = grp[fKeyData];\n }\n };\n /**\n * The method used to get the field names which started with specified characters.\n * @param {Object} obj\n * @param {string[]} fields?\n * @param {string} prefix?\n * @hidden\n */\n DataUtil.getFieldList = function (obj, fields, prefix) {\n if (prefix === undefined) {\n prefix = '';\n }\n if (fields === undefined || fields === null) {\n return this.getFieldList(obj, [], prefix);\n }\n var copyObj = obj;\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n }\n else {\n fields.push(prefix + prop);\n }\n }\n return fields;\n };\n /**\n * Gets the value of the property in the given object.\n * The complex object can be accessed by providing the field names concatenated with dot(.).\n * @param {string} nameSpace - The name of the property to be accessed.\n * @param {Object} from - Defines the source object.\n */\n DataUtil.getObject = function (nameSpace, from) {\n if (!nameSpace) {\n return from;\n }\n if (!from) {\n return undefined;\n }\n if (nameSpace.indexOf('.') === -1) {\n return from[nameSpace];\n }\n var value = from;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length; i++) {\n if (value == null) {\n break;\n }\n value = value[splits[i]];\n }\n return value;\n };\n /**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object.\n * @param {Object} value - Value that you need to set.\n * @param {Object} obj - Object to get the inner object value.\n * @return { [key: string]: Object; } | Object\n * @hidden\n */\n DataUtil.setValue = function (nameSpace, value, obj) {\n var keys = nameSpace.toString().split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? undefined : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n };\n /**\n * Sort the given data based on the field and comparer.\n * @param {Object[]} ds - Defines the input data.\n * @param {string} field - Defines the field to be sorted.\n * @param {Function} comparer - Defines the comparer function used to sort the records.\n */\n DataUtil.sort = function (ds, field, comparer) {\n if (ds.length <= 1) {\n return ds;\n }\n var middle = parseInt((ds.length / 2).toString(), 10);\n var left = ds.slice(0, middle);\n var right = ds.slice(middle);\n left = this.sort(left, field, comparer);\n right = this.sort(right, field, comparer);\n return this.merge(left, right, field, comparer);\n };\n DataUtil.ignoreDiacritics = function (value) {\n if (typeof value !== 'string') {\n return value;\n }\n var result = value.split('');\n var newValue = result.map(function (temp) { return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp; });\n return newValue.join('');\n };\n DataUtil.merge = function (left, right, fieldName, comparer) {\n var result = [];\n var current;\n while (left.length > 0 || right.length > 0) {\n if (left.length > 0 && right.length > 0) {\n if (comparer) {\n current = comparer(this.getVal(left, 0, fieldName), this.getVal(right, 0, fieldName)) <= 0 ? left : right;\n }\n else {\n current = left[0][fieldName] < left[0][fieldName] ? left : right;\n }\n }\n else {\n current = left.length > 0 ? left : right;\n }\n result.push(current.shift());\n }\n return result;\n };\n DataUtil.getVal = function (array, index, field) {\n return field ? this.getObject(field, array[index]) : array[index];\n };\n DataUtil.toLowerCase = function (val) {\n return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';\n };\n /**\n * To perform the filter operation with specified adaptor and returns the result.\n * @param {Object} adaptor\n * @param {string} fnName\n * @param {Object} param1?\n * @param {Object} param2?\n * @hidden\n */\n DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n if (fnName in adaptor) {\n var res = adaptor[fnName](param1, param2);\n if (!isNullOrUndefined(res)) {\n param1 = res;\n }\n }\n return param1;\n };\n DataUtil.getAddParams = function (adp, dm, query) {\n var req = {};\n DataUtil.callAdaptorFunction(adp, 'addParams', {\n dm: dm,\n query: query,\n params: query.params,\n reqParams: req\n });\n return req;\n };\n /**\n * Checks wheather the given input is a plain object or not.\n * @param {Object|Object[]} obj\n */\n DataUtil.isPlainObject = function (obj) {\n return (!!obj) && (obj.constructor === Object);\n };\n /**\n * Returns true when the browser cross origin request.\n */\n DataUtil.isCors = function () {\n var xhr = null;\n var request = 'XMLHttpRequest';\n try {\n xhr = new window[request]();\n }\n catch (e) {\n // No exception handling\n }\n return !!xhr && ('withCredentials' in xhr);\n };\n /**\n * Generate random GUID value which will be prefixed with the given value.\n * @param {string} prefix\n */\n DataUtil.getGuid = function (prefix) {\n var hexs = '0123456789abcdef';\n var rand;\n return (prefix || '') + '00000000-0000-4000-0000-000000000000'.replace(/0/g, function (val, i) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var arr = new Uint8Array(1);\n window.crypto.getRandomValues(arr);\n rand = arr[0] % 16 | 0;\n }\n else {\n rand = Math.random() * 16 | 0;\n }\n return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n });\n };\n /**\n * Checks wheather the given value is null or not.\n * @param {string|Object} val\n * @returns boolean\n */\n DataUtil.isNull = function (val) {\n return val === undefined || val === null;\n };\n /**\n * To get the required items from collection of objects.\n * @param {Object[]} array\n * @param {string} field\n * @param {Function} comparer\n * @returns Object\n * @hidden\n */\n DataUtil.getItemFromComparer = function (array, field, comparer) {\n var keyVal;\n var current;\n var key;\n var i = 0;\n var castRequired = typeof DataUtil.getVal(array, 0, field) === 'string';\n if (array.length) {\n while (isNullOrUndefined(keyVal) && i < array.length) {\n keyVal = DataUtil.getVal(array, i, field);\n key = array[i++];\n }\n }\n for (; i < array.length; i++) {\n current = DataUtil.getVal(array, i, field);\n if (isNullOrUndefined(current)) {\n continue;\n }\n if (castRequired) {\n keyVal = +keyVal;\n current = +current;\n }\n if (comparer(keyVal, current) > 0) {\n keyVal = current;\n key = array[i];\n }\n }\n return key;\n };\n /**\n * To get distinct values of Array or Array of Objects.\n * @param {Object[]} json\n * @param {string} field\n * @param {boolean} requiresCompleteRecord\n * @returns Object[]\n * * distinct array of objects is return when requiresCompleteRecord set as true.\n * @hidden\n */\n DataUtil.distinct = function (json, fieldName, requiresCompleteRecord) {\n requiresCompleteRecord = isNullOrUndefined(requiresCompleteRecord) ? false : requiresCompleteRecord;\n var result = [];\n var val;\n var tmp = {};\n json.forEach(function (data, index) {\n val = DataUtil.getVal(json, index, fieldName);\n if (!(val in tmp)) {\n result.push(!requiresCompleteRecord ? val : json[index]);\n tmp[val] = 1;\n }\n });\n return result;\n };\n /**\n * Specifies the value which will be used to adjust the date value to server timezone.\n * @default null\n */\n DataUtil.serverTimezoneOffset = null;\n /**\n * Throw error with the given string as message.\n * @param {string} er\n */\n DataUtil.throwError = function (error) {\n try {\n throw new Error(error);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n };\n DataUtil.aggregates = {\n /**\n * Calculate sum of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n sum: function (ds, field) {\n var result = 0;\n var val;\n var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n for (var i = 0; i < ds.length; i++) {\n val = DataUtil.getVal(ds, i, field);\n if (!isNaN(val) && val !== null) {\n if (castRequired) {\n val = +val;\n }\n result += val;\n }\n }\n return result;\n },\n /**\n * Calculate average value of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n average: function (ds, field) {\n return DataUtil.aggregates.sum(ds, field) / ds.length;\n },\n /**\n * Returns the min value of the data based on the field.\n * @param {Object[]} ds\n * @param {string|Function} field\n */\n min: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n },\n /**\n * Returns the max value of the data based on the field.\n * @param {Object[]} ds\n * @param {string} field\n * @returns number\n */\n max: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n },\n /**\n * Returns the total number of true value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n truecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n },\n /**\n * Returns the total number of false value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n falsecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n },\n /**\n * Returns the length of the given data.\n * @param {Object[]} ds\n * @param {string} field?\n * @returns number\n */\n count: function (ds, field) {\n return ds.length;\n }\n };\n /**\n * Specifies the Object with filter operators.\n */\n DataUtil.operatorSymbols = {\n '<': 'lessthan',\n '>': 'greaterthan',\n '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal',\n '==': 'equal',\n '!=': 'notequal',\n '*=': 'contains',\n '$=': 'endswith',\n '^=': 'startswith'\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * * It will be used for date/number type filter query.\n */\n DataUtil.odBiOperator = {\n '<': ' lt ',\n '>': ' gt ',\n '<=': ' le ',\n '>=': ' ge ',\n '==': ' eq ',\n '!=': ' ne ',\n 'lessthan': ' lt ',\n 'lessthanorequal': ' le ',\n 'greaterthan': ' gt ',\n 'greaterthanorequal': ' ge ',\n 'equal': ' eq ',\n 'notequal': ' ne '\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odUniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'substringof',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'substringof'\n };\n /**\n * Specifies the Object with filter operators which will be used for ODataV4 filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odv4UniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'contains',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'contains'\n };\n DataUtil.diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n DataUtil.fnOperators = {\n /**\n * Returns true when the actual input is equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param {boolean} ignoreAccent?\n */\n equal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n }\n return actual === expected;\n },\n /**\n * Returns true when the actual input is not equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n notequal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n },\n /**\n * Returns true when the actual input is less than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n }\n return actual < expected;\n },\n /**\n * Returns true when the actual input is greater than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n }\n return actual > expected;\n },\n /**\n * Returns true when the actual input is less than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n }\n return actual <= expected;\n },\n /**\n * Returns true when the actual input is greater than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n }\n return actual >= expected;\n },\n /**\n * Returns true when the actual input contains the given string.\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n */\n contains: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) !== -1;\n },\n /**\n * Returns true when the given input value is not null.\n * @param {string|number} actual\n * @returns boolean\n */\n notnull: function (actual) {\n return actual !== null;\n },\n /**\n * Returns true when the given input value is null.\n * @param {string|number} actual\n * @returns boolean\n */\n isnull: function (actual) {\n return actual === null;\n },\n /**\n * Returns true when the actual input starts with the given string\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n startswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.startsWith(actual, expected);\n },\n /**\n * Returns true when the actual input ends with the given string.\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n endswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.endsWith(actual, expected);\n },\n /**\n * It will return the filter operator based on the filter symbol.\n * @param {string} operator\n * @hidden\n */\n processSymbols: function (operator) {\n var fnName = DataUtil.operatorSymbols[operator];\n if (fnName) {\n var fn = DataUtil.fnOperators[fnName];\n return fn;\n }\n return DataUtil.throwError('Query - Process Operator : Invalid operator');\n },\n /**\n * It will return the valid filter operator based on the specified operators.\n * @param {string} operator\n * @hidden\n */\n processOperator: function (operator) {\n var fn = DataUtil.fnOperators[operator];\n if (fn) {\n return fn;\n }\n return DataUtil.fnOperators.processSymbols(operator);\n }\n };\n /**\n * To perform the parse operation on JSON data, like convert to string from JSON or convert to JSON from string.\n */\n DataUtil.parse = {\n /**\n * Parse the given string to the plain JavaScript object.\n * @param {string|Object|Object[]} jsonText\n */\n parseJson: function (jsonText) {\n if (typeof jsonText === 'string') {\n jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n }\n else if (jsonText instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(jsonText);\n }\n else if (typeof jsonText === 'object' && jsonText !== null) {\n DataUtil.parse.iterateAndReviveJson(jsonText);\n }\n return jsonText;\n },\n /**\n * It will perform on array of values.\n * @param {string[]|Object[]} array\n * @hidden\n */\n iterateAndReviveArray: function (array) {\n for (var i = 0; i < array.length; i++) {\n if (typeof array[i] === 'object' && array[i] !== null) {\n DataUtil.parse.iterateAndReviveJson(array[i]);\n }\n else if (typeof array[i] === 'string' && !/^[\\s]*\\[|^[\\s]*\\{(.)+:|\\\"/g.test(array[i])) {\n array[i] = DataUtil.parse.jsonReviver('', array[i]);\n }\n else {\n array[i] = DataUtil.parse.parseJson(array[i]);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {JSON} json\n * @hidden\n */\n iterateAndReviveJson: function (json) {\n var value;\n var keys = Object.keys(json);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.startsWith(prop, '__')) {\n continue;\n }\n value = json[prop];\n if (typeof value === 'object') {\n if (value instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(value);\n }\n else if (value) {\n DataUtil.parse.iterateAndReviveJson(value);\n }\n }\n else {\n json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {string} field\n * @param {string|Date} value\n * @hidden\n */\n jsonReviver: function (field, value) {\n var dupValue = value;\n if (typeof value === 'string') {\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n if (ms) {\n return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), DataUtil.serverTimezoneOffset, true);\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var arr = dupValue.split(/[^0-9]/);\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), DataUtil.serverTimezoneOffset, true);\n }\n }\n return value;\n },\n /**\n * Check wheather the given value is JSON or not.\n * @param {Object[]} jsonData\n */\n isJson: function (jsonData) {\n if (typeof jsonData[0] === 'string') {\n return jsonData;\n }\n return DataUtil.parse.parseJson(jsonData);\n },\n /**\n * Checks wheather the given value is GUID or not.\n * @param {string} value\n */\n isGuid: function (value) {\n var regex = /[A-Fa-f0-9]{8}(?:-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}/i;\n var match = regex.exec(value);\n return match != null;\n },\n /**\n * The method used to replace the value based on the type.\n * @param {Object} value\n * @param {boolean} stringify\n * @hidden\n */\n replacer: function (value, stringify) {\n if (DataUtil.isPlainObject(value)) {\n return DataUtil.parse.jsonReplacer(value, stringify);\n }\n if (value instanceof Array) {\n return DataUtil.parse.arrayReplacer(value);\n }\n if (value instanceof Date) {\n return DataUtil.parse.jsonReplacer({ val: value }, stringify).val;\n }\n return value;\n },\n /**\n * It will replace the JSON value.\n * @param {string} key\n * @param {Object} val\n * @hidden\n */\n jsonReplacer: function (val, stringify) {\n var value;\n var keys = Object.keys(val);\n for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n var prop = keys_3[_i];\n value = val[prop];\n if (!(value instanceof Date)) {\n continue;\n }\n var d = value;\n val[prop] = DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(d), DataUtil.serverTimezoneOffset).toJSON();\n }\n return val;\n },\n /**\n * It will replace the Array of value.\n * @param {string} key\n * @param {Object[]} val\n * @hidden\n */\n arrayReplacer: function (val) {\n for (var i = 0; i < val.length; i++) {\n if (DataUtil.isPlainObject(val[i])) {\n val[i] = DataUtil.parse.jsonReplacer(val[i]);\n }\n else if (val[i] instanceof Date) {\n val[i] = DataUtil.parse.jsonReplacer({ date: val[i] }).date;\n }\n }\n return val;\n }\n };\n /**\n * @hidden\n */\n DataUtil.dateParse = {\n addSelfOffset: function (input) {\n return new Date(+input - (input.getTimezoneOffset() * 60000));\n },\n toUTC: function (input) {\n return new Date(+input + (input.getTimezoneOffset() * 60000));\n },\n toTimeZone: function (input, offset, utc) {\n if (offset === null) {\n return input;\n }\n var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n return new Date(+unix - (offset * 3600000));\n },\n toLocalTime: function (input) {\n var datefn = input;\n var timeZone = -datefn.getTimezoneOffset();\n var differenceString = timeZone >= 0 ? '+' : '-';\n var localtimefn = function (num) {\n var norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n };\n var val = datefn.getFullYear() + '-' + localtimefn(datefn.getMonth() + 1) + '-' + localtimefn(datefn.getDate()) +\n 'T' + localtimefn(datefn.getHours()) +\n ':' + localtimefn(datefn.getMinutes()) +\n ':' + localtimefn(datefn.getSeconds()) +\n differenceString + localtimefn(timeZone / 60) +\n ':' + localtimefn(timeZone % 60);\n return val;\n }\n };\n return DataUtil;\n}());\nexport { DataUtil };\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 { merge, extend, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query, Predicate } from './query';\n/**\n * Adaptors are specific data source type aware interfaces that are used by DataManager to communicate with DataSource.\n * This is the base adaptor class that other adaptors can extend.\n * @hidden\n */\nvar Adaptor = /** @class */ (function () {\n /**\n * Constructor for Adaptor class\n * @param {DataOptions} ds?\n * @hidden\n * @returns aggregates\n */\n function Adaptor(ds) {\n // common options for all the adaptors \n this.options = {\n from: 'table',\n requestType: 'json',\n sortBy: 'sorted',\n select: 'select',\n skip: 'skip',\n group: 'group',\n take: 'take',\n search: 'search',\n count: 'requiresCounts',\n where: 'where',\n aggregates: 'aggregates'\n };\n /**\n * Specifies the type of adaptor.\n * @default Adaptor\n */\n this.type = Adaptor;\n this.dataSource = ds;\n this.pvt = {};\n }\n /**\n * Returns the data from the query processing.\n * @param {Object} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @returns Object\n */\n Adaptor.prototype.processResponse = function (data, ds, query, xhr) {\n return data;\n };\n return Adaptor;\n}());\nexport { Adaptor };\n/**\n * JsonAdaptor is used to process JSON data. It contains methods to process the given JSON data based on the queries.\n * @hidden\n */\nvar JsonAdaptor = /** @class */ (function (_super) {\n __extends(JsonAdaptor, _super);\n function JsonAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the JSON data based on the provided queries.\n * @param {DataManager} dataManager\n * @param {Query} query\n * @returns Object\n */\n JsonAdaptor.prototype.processQuery = function (dataManager, query) {\n var result = dataManager.dataSource.json.slice(0);\n var count = result.length;\n var countFlg = true;\n var ret;\n var key;\n var agg = {};\n for (var i = 0; i < query.queries.length; i++) {\n key = query.queries[i];\n ret = this[key.fn].call(this, result, key.e, query);\n if (key.fn === 'onAggregates') {\n agg[key.e.field + ' - ' + key.e.type] = ret;\n }\n else {\n result = ret !== undefined ? ret : result;\n }\n if (key.fn === 'onPage' || key.fn === 'onSkip' || key.fn === 'onTake' || key.fn === 'onRange') {\n countFlg = false;\n }\n if (countFlg) {\n count = result.length;\n }\n }\n if (query.isCountRequired) {\n result = {\n result: result,\n count: count,\n aggregates: agg\n };\n }\n return result;\n };\n /**\n * Performs batch update in the JSON array which add, remove and update records.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n JsonAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var i;\n var deletedRecordsLen = changes.deletedRecords.length;\n for (i = 0; i < changes.addedRecords.length; i++) {\n this.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n this.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < deletedRecordsLen; i++) {\n this.remove(dm, e.key, changes.deletedRecords[i]);\n }\n return changes;\n };\n /**\n * Performs filter operation with the given data and where query.\n * @param {Object[]} ds\n * @param {{validate:Function}} e\n */\n JsonAdaptor.prototype.onWhere = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.filter(function (obj) {\n if (e) {\n return e.validate(obj);\n }\n });\n };\n /**\n * Returns aggregate function based on the aggregate type.\n * @param {Object[]} ds\n * @param {{field:string} e\n * @param {string}} type\n */\n JsonAdaptor.prototype.onAggregates = function (ds, e) {\n var fn = DataUtil.aggregates[e.type];\n if (!ds || !fn || ds.length === 0) {\n return null;\n }\n return fn(ds, e.field);\n };\n /**\n * Performs search operation based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n */\n JsonAdaptor.prototype.onSearch = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n if (e.fieldNames.length === 0) {\n DataUtil.getFieldList(ds[0], e.fieldNames);\n }\n return ds.filter(function (obj) {\n for (var j = 0; j < e.fieldNames.length; j++) {\n if (e.comparer.call(obj, DataUtil.getObject(e.fieldNames[j], obj), e.searchKey, e.ignoreCase, e.ignoreAccent)) {\n return true;\n }\n }\n return false;\n });\n };\n /**\n * Sort the data with given direction and field.\n * @param {Object[]} ds\n * @param {{comparer:(a:Object} e\n * @param {Object} b\n */\n JsonAdaptor.prototype.onSortBy = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var fnCompare;\n var field = DataUtil.getValue(e.fieldName, query);\n if (!field) {\n return ds.sort(e.comparer);\n }\n if (field instanceof Array) {\n field = field.slice(0);\n for (var i = field.length - 1; i >= 0; i--) {\n if (!field[i]) {\n continue;\n }\n fnCompare = e.comparer;\n if (DataUtil.endsWith(field[i], ' desc')) {\n fnCompare = DataUtil.fnSort('descending');\n field[i] = field[i].replace(' desc', '');\n }\n ds = DataUtil.sort(ds, field[i], fnCompare);\n }\n return ds;\n }\n return DataUtil.sort(ds, field, e.comparer);\n };\n /**\n * Group the data based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n * @param {Query} query\n */\n JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n var agg = [];\n if (aggQuery.length) {\n var tmp = void 0;\n for (var i = 0; i < aggQuery.length; i++) {\n tmp = aggQuery[i].e;\n agg.push({ type: tmp.type, field: DataUtil.getValue(tmp.field, query) });\n }\n }\n return DataUtil.group(ds, DataUtil.getValue(e.fieldName, query), agg, null, null, e.comparer);\n };\n /**\n * Retrieves records based on the given page index and size.\n * @param {Object[]} ds\n * @param {{pageSize:number} e\n * @param {number}} pageIndex\n * @param {Query} query\n */\n JsonAdaptor.prototype.onPage = function (ds, e, query) {\n var size = DataUtil.getValue(e.pageSize, query);\n var start = (DataUtil.getValue(e.pageIndex, query) - 1) * size;\n var end = start + size;\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(start, end);\n };\n /**\n * Retrieves records based on the given start and end index from query.\n * @param {Object[]} ds\n * @param {{start:number} e\n * @param {number}} end\n */\n JsonAdaptor.prototype.onRange = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.start), DataUtil.getValue(e.end));\n };\n /**\n * Picks the given count of records from the top of the datasource.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onTake = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(0, DataUtil.getValue(e.nos));\n };\n /**\n * Skips the given count of records from the data source.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onSkip = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.nos));\n };\n /**\n * Selects specified columns from the data source.\n * @param {Object[]} ds\n * @param {{fieldNames:string}} e\n */\n JsonAdaptor.prototype.onSelect = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n };\n /**\n * Inserts new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {number} position\n */\n JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n if (isNullOrUndefined(position)) {\n return dm.dataSource.json.push(data);\n }\n else {\n return dm.dataSource.json.splice(position, 0, data);\n }\n };\n /**\n * Remove the data from the dataSource based on the key field value.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n if (typeof value === 'object') {\n value = value[keyField];\n }\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === value) {\n break;\n }\n }\n return i !== ds.length ? ds.splice(i, 1) : null;\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n var key = value[keyField];\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === key) {\n break;\n }\n }\n return i < ds.length ? merge(ds[i], value) : null;\n };\n return JsonAdaptor;\n}(Adaptor));\nexport { JsonAdaptor };\n/**\n * URL Adaptor of DataManager can be used when you are required to use remote service to retrieve data.\n * It interacts with server-side for all DataManager Queries and CRUD operations.\n * @hidden\n */\nvar UrlAdaptor = /** @class */ (function (_super) {\n __extends(UrlAdaptor, _super);\n function UrlAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the query to generate request body.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns p\n */\n UrlAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var params = query.params;\n var url = dm.dataSource.url;\n var temp;\n var skip;\n var take = null;\n var options = this.options;\n var request = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n // calc Paging & Range\n if ('onPage' in singles) {\n temp = singles.onPage;\n skip = DataUtil.getValue(temp.pageIndex, query);\n take = DataUtil.getValue(temp.pageSize, query);\n skip = (skip - 1) * take;\n }\n else if ('onRange' in singles) {\n temp = singles.onRange;\n skip = temp.start;\n take = temp.end - temp.start;\n }\n // Sorting\n for (var i = 0; i < queries.sorts.length; i++) {\n temp = DataUtil.getValue(queries.sorts[i].e.fieldName, query);\n request.sorts.push(DataUtil.callAdaptorFunction(this, 'onEachSort', { name: temp, direction: queries.sorts[i].e.direction }, query));\n }\n // hierarchy\n if (hierarchyFilters) {\n temp = this.getFiltersFrom(hierarchyFilters, query);\n if (temp) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n }\n }\n // Filters\n for (var i = 0; i < queries.filters.length; i++) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query));\n var keys_3 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n for (var _i = 0, keys_1 = keys_3; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (DataUtil.isNull((request)[prop])) {\n delete request[prop];\n }\n }\n }\n // Searches\n for (var i = 0; i < queries.searches.length; i++) {\n temp = queries.searches[i].e;\n request.searches.push(DataUtil.callAdaptorFunction(this, 'onEachSearch', {\n fields: temp.fieldNames,\n operator: temp.operator,\n key: temp.searchKey,\n ignoreCase: temp.ignoreCase\n }, query));\n }\n // Grouping\n for (var i = 0; i < queries.groups.length; i++) {\n request.groups.push(DataUtil.getValue(queries.groups[i].e.fieldName, query));\n }\n // aggregates\n for (var i = 0; i < queries.aggregates.length; i++) {\n temp = queries.aggregates[i].e;\n request.aggregates.push({ type: temp.type, field: DataUtil.getValue(temp.field, query) });\n }\n var req = {};\n this.getRequestQuery(options, query, singles, request, req);\n // Params\n DataUtil.callAdaptorFunction(this, 'addParams', { dm: dm, query: query, params: params, reqParams: req });\n // cleanup\n var keys = Object.keys(req);\n for (var _a = 0, keys_2 = keys; _a < keys_2.length; _a++) {\n var prop = keys_2[_a];\n if (DataUtil.isNull(req[prop]) || req[prop] === '' || req[prop].length === 0) {\n delete req[prop];\n }\n }\n if (!(options.skip in req && options.take in req) && take !== null) {\n req[options.skip] = DataUtil.callAdaptorFunction(this, 'onSkip', skip, query);\n req[options.take] = DataUtil.callAdaptorFunction(this, 'onTake', take, query);\n }\n var p = this.pvt;\n this.pvt = {};\n if (this.options.requestType === 'json') {\n return {\n data: JSON.stringify(req),\n url: url,\n pvtData: p,\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n }\n temp = this.convertToQueryString(req, query, dm);\n temp = (dm.dataSource.url.indexOf('?') !== -1 ? '&' : '/') + temp;\n return {\n type: 'GET', url: temp.length ? url.replace(/\\/*$/, temp) : url, pvtData: p\n };\n };\n UrlAdaptor.prototype.getRequestQuery = function (options, query, singles, request, request1) {\n var param = 'param';\n var req = request1;\n req[options.from] = query.fromTable;\n if (options.apply && query.distincts.length) {\n req[options.apply] = 'onDistinct' in this ? DataUtil.callAdaptorFunction(this, 'onDistinct', query.distincts) : '';\n }\n if (!query.distincts.length && options.expand) {\n req[options.expand] = 'onExpand' in this && 'onSelect' in singles ?\n DataUtil.callAdaptorFunction(this, 'onExpand', { selects: DataUtil.getValue(singles.onSelect.fieldNames, query), expands: query.expands }, query) : query.expands;\n }\n req[options.select] = 'onSelect' in singles && !query.distincts.length ?\n DataUtil.callAdaptorFunction(this, 'onSelect', DataUtil.getValue(singles.onSelect.fieldNames, query), query) : '';\n req[options.count] = query.isCountRequired ? DataUtil.callAdaptorFunction(this, 'onCount', query.isCountRequired, query) : '';\n req[options.search] = request.searches.length ? DataUtil.callAdaptorFunction(this, 'onSearch', request.searches, query) : '';\n req[options.skip] = 'onSkip' in singles ?\n DataUtil.callAdaptorFunction(this, 'onSkip', DataUtil.getValue(singles.onSkip.nos, query), query) : '';\n req[options.take] = 'onTake' in singles ?\n DataUtil.callAdaptorFunction(this, 'onTake', DataUtil.getValue(singles.onTake.nos, query), query) : '';\n req[options.where] = request.filters.length || request.searches.length ?\n DataUtil.callAdaptorFunction(this, 'onWhere', request.filters, query) : '';\n req[options.sortBy] = request.sorts.length ? DataUtil.callAdaptorFunction(this, 'onSortBy', request.sorts, query) : '';\n req[options.group] = request.groups.length ? DataUtil.callAdaptorFunction(this, 'onGroup', request.groups, query) : '';\n req[options.aggregates] = request.aggregates.length ?\n DataUtil.callAdaptorFunction(this, 'onAggregates', request.aggregates, query) : '';\n req[param] = [];\n };\n /**\n * Convert the object from processQuery to string which can be added query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n */\n UrlAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n return '';\n // this needs to be overridden\n };\n /**\n * Return the data from the data manager processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Object} request?\n * @param {CrudOptions} changes?\n */\n UrlAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var requests = request;\n var pvt = requests.pvtData || {};\n var groupDs = data ? data.groupDs : [];\n if (xhr && xhr.getResponseHeader('Content-Type') &&\n xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n var d = JSON.parse(requests.data);\n if (d && d.action === 'batch' && data && data.addedRecords) {\n changes.addedRecords = data.addedRecords;\n return changes;\n }\n if (data && data.d) {\n data = data.d;\n }\n var args = {};\n if (data && 'count' in data) {\n args.count = data.count;\n }\n args.result = data && data.result ? data.result : data;\n this.getAggregateResult(pvt, data, args, groupDs, query);\n return DataUtil.isNull(args.count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Add the group query to the adaptor`s option.\n * @param {Object[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return e;\n };\n /**\n * Add the aggregate query to the adaptor`s option.\n * @param {Aggregates[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n */\n UrlAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var url;\n var key;\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.removeUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify(extend({}, {\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e[url],\n key: e[key]\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @returns void\n */\n UrlAdaptor.prototype.beforeSend = function (dm, request) {\n // need to extend this method\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName\n */\n UrlAdaptor.prototype.insert = function (dm, data, tableName, query) {\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: data,\n table: tableName,\n action: 'insert'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number|string} value\n * @param {string} tableName\n */\n UrlAdaptor.prototype.remove = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n UrlAdaptor.prototype.update = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: value[keyField],\n table: tableName\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * To generate the predicate based on the filtered query.\n * @param {Object[]|string[]|number[]} data\n * @param {Query} query\n * @hidden\n */\n UrlAdaptor.prototype.getFiltersFrom = function (data, query) {\n var key = query.fKey;\n var value;\n var prop = key;\n var pKey = query.key;\n var predicats = [];\n if (typeof data[0] !== 'object') {\n prop = null;\n }\n for (var i = 0; i < data.length; i++) {\n if (typeof data[0] === 'object') {\n value = DataUtil.getObject(pKey || prop, data[i]);\n }\n else {\n value = data[i];\n }\n predicats.push(new Predicate(key, 'equal', value));\n }\n return Predicate.or(predicats);\n };\n UrlAdaptor.prototype.getAggregateResult = function (pvt, data, args, groupDs, query) {\n var pData = data;\n if (data && data.result) {\n pData = data.result;\n }\n if (pvt && pvt.aggregates && pvt.aggregates.length) {\n var agg = pvt.aggregates;\n var fn = void 0;\n var aggregateData = pData;\n var res = {};\n if (data.aggregate) {\n aggregateData = data.aggregate;\n }\n for (var i = 0; i < agg.length; i++) {\n fn = DataUtil.aggregates[agg[i].type];\n if (fn) {\n res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n }\n }\n args.aggregates = res;\n }\n if (pvt && pvt.groups && pvt.groups.length) {\n var groups = pvt.groups;\n for (var i = 0; i < groups.length; i++) {\n var level = null;\n if (!isNullOrUndefined(groupDs)) {\n groupDs = DataUtil.group(groupDs, groups[i]);\n }\n var groupQuery = Query.filterQueries(query.queries, 'onGroup')[i].e;\n pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs, groupQuery.comparer);\n }\n args.result = pData;\n }\n return args;\n };\n UrlAdaptor.prototype.getQueryRequest = function (query) {\n var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n req.sorts = Query.filterQueries(query.queries, 'onSortBy');\n req.groups = Query.filterQueries(query.queries, 'onGroup');\n req.filters = Query.filterQueries(query.queries, 'onWhere');\n req.searches = Query.filterQueries(query.queries, 'onSearch');\n req.aggregates = Query.filterQueries(query.queries, 'onAggregates');\n return req;\n };\n UrlAdaptor.prototype.addParams = function (options) {\n var req = options.reqParams;\n for (var _i = 0, _a = options.params; _i < _a.length; _i++) {\n var tmp = _a[_i];\n if (req[tmp.key]) {\n throw new Error('Query() - addParams: Custom Param is conflicting other request arguments');\n }\n req[tmp.key] = tmp.value;\n if (tmp.fn) {\n req[tmp.key] = tmp.fn.call(options.query, tmp.key, options.query, options.dm);\n }\n }\n };\n return UrlAdaptor;\n}(Adaptor));\nexport { UrlAdaptor };\n/**\n * OData Adaptor that is extended from URL Adaptor, is used for consuming data through OData Service.\n * @hidden\n */\nvar ODataAdaptor = /** @class */ (function (_super) {\n __extends(ODataAdaptor, _super);\n function ODataAdaptor(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json;odata=light;q=1,application/json;odata=verbose;q=0.5',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$inlinecount',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PUT'\n });\n _this.getModuleName = getValue('getModulename', _this);\n extend(_this.options, props || {});\n return _this;\n }\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var operator;\n var guid;\n var val = predicate.value;\n var type = typeof val;\n var field = predicate.field ? ODataAdaptor.getField(predicate.field) : null;\n if (val instanceof Date) {\n val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n }\n if (type === 'string') {\n val = encodeURIComponent(val);\n val = '\\'' + val + '\\'';\n if (requiresCast) {\n field = 'cast(' + field + ', \\'Edm.String\\')';\n }\n if (DataUtil.parse.isGuid(val)) {\n guid = 'guid';\n }\n if (predicate.ignoreCase) {\n if (!guid) {\n field = 'tolower(' + field + ')';\n }\n val = val.toLowerCase();\n }\n }\n operator = DataUtil.odBiOperator[predicate.operator];\n if (operator) {\n returnValue += field;\n returnValue += operator;\n if (guid) {\n returnValue += guid;\n }\n return returnValue + val;\n }\n if (!isNullOrUndefined(this.getModuleName)) {\n if (this.getModuleName() === 'ODataV4Adaptor') {\n operator = DataUtil.odv4UniOperator[predicate.operator];\n }\n }\n else {\n operator = DataUtil.odUniOperator[predicate.operator];\n }\n if (operator === 'substringof') {\n var temp = val;\n val = field;\n field = temp;\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += val + ')';\n return returnValue;\n };\n ODataAdaptor.prototype.addParams = function (options) {\n _super.prototype.addParams.call(this, options);\n delete options.reqParams.params;\n };\n /**\n * Generate request string based on the multiple filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n var res = [];\n for (var i = 0; i < predicate.predicates.length; i++) {\n res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n }\n return res.join(' ' + predicate.condition + ' ');\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {Predicate} filter\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onEachWhere = function (filter, query, requiresCast) {\n return filter.isComplex ? this.onComplexPredicate(filter, query, requiresCast) : this.onPredicate(filter, query, requiresCast);\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {string[]} filters\n */\n ODataAdaptor.prototype.onWhere = function (filters) {\n if (this.pvt.search) {\n filters.push(this.onEachWhere(this.pvt.search, null, true));\n }\n return filters.join(' and ');\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataAdaptor.prototype.onEachSearch = function (e) {\n if (e.fields && e.fields.length === 0) {\n DataUtil.throwError('Query() - Search : oData search requires list of field names to search');\n }\n var filter = this.pvt.search || [];\n for (var i = 0; i < e.fields.length; i++) {\n filter.push(new Predicate(e.fields[i], e.operator, e.key, e.ignoreCase));\n }\n this.pvt.search = filter;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataAdaptor.prototype.onSearch = function (e) {\n this.pvt.search = Predicate.or(this.pvt.search);\n return '';\n };\n /**\n * Generate query string based on multiple sort criteria from query.\n * @param {QueryOptions} e\n */\n ODataAdaptor.prototype.onEachSort = function (e) {\n var res = [];\n if (e.name instanceof Array) {\n for (var i = 0; i < e.name.length; i++) {\n res.push(ODataAdaptor.getField(e.name[i]) + (e.direction === 'descending' ? ' desc' : ''));\n }\n }\n else {\n res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n }\n return res.join(',');\n };\n /**\n * Returns sort query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSortBy = function (e) {\n return e.reverse().join(',');\n };\n /**\n * Adds the group query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return [];\n };\n /**\n * Returns the select query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSelect = function (e) {\n for (var i = 0; i < e.length; i++) {\n e[i] = ODataAdaptor.getField(e[i]);\n }\n return e.join(',');\n };\n /**\n * Add the aggregate query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n return '';\n };\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataAdaptor.prototype.onCount = function (e) {\n return e === true ? 'allpages' : '';\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n ODataAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.options.multipartAccept);\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.overrideMimeType('text/plain; charset=x-user-defined');\n }\n else {\n request.setRequestHeader('Accept', this.options.accept);\n }\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.setRequestHeader('MaxDataServiceVersion', '2.0');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n if (!isNullOrUndefined(data.d)) {\n var dataCopy = ((query && query.isCountRequired) ? data.d.results : data.d);\n var metaData = '__metadata';\n if (!isNullOrUndefined(dataCopy)) {\n for (var i = 0; i < dataCopy.length; i++) {\n if (!isNullOrUndefined(dataCopy[i][metaData])) {\n delete dataCopy[i][metaData];\n }\n }\n }\n }\n var pvt = request && request[pvtData];\n var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var count = null;\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n var oDataCount = '__count';\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n if (data.d) {\n data = data.d;\n }\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n }\n if (version === 3 && data.value) {\n data = data.value;\n }\n if (data.d) {\n data = data.d;\n }\n if (version < 3 && data.results) {\n data = data.results;\n }\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Converts the request object to query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n * @returns tableName\n */\n ODataAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n var res = [];\n var table = 'table';\n var tableName = request[table] || '';\n var format = '$format';\n delete request[table];\n if (dm.dataSource.requiresFormat) {\n request[format] = 'json';\n }\n var keys = Object.keys(request);\n for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\n var prop = keys_4[_i];\n res.push(prop + '=' + request[prop]);\n }\n res = res.join('&');\n if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n return res;\n }\n return res.length ? tableName + '?' + res : tableName || '';\n };\n ODataAdaptor.prototype.localTimeReplacer = function (key, convertObj) {\n for (var _i = 0, _a = !isNullOrUndefined(convertObj) ? Object.keys(convertObj) : []; _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((convertObj[prop] instanceof Date)) {\n convertObj[prop] = DataUtil.dateParse.toLocalTime(convertObj[prop]);\n }\n }\n return convertObj;\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : ''),\n data: JSON.stringify(data, this.options.localTime ? this.localTimeReplacer : null)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var url;\n if (typeof value === 'string' && !DataUtil.parse.isGuid(value)) {\n url = \"('\" + value + \"')\";\n }\n else {\n url = \"(\" + value + \")\";\n }\n return {\n type: 'DELETE',\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + url\n };\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns this\n */\n ODataAdaptor.prototype.update = function (dm, keyField, value, tableName, query, original) {\n if (this.options.updateType === 'PATCH' && !isNullOrUndefined(original)) {\n value = this.compareAndRemove(value, original, keyField);\n }\n var url;\n if (typeof value[keyField] === 'string' && !DataUtil.parse.isGuid(value[keyField])) {\n url = \"('\" + value[keyField] + \"')\";\n }\n else {\n url = \"(\" + value[keyField] + \")\";\n }\n return {\n type: this.options.updateType,\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + url,\n data: JSON.stringify(value, this.options.localTime ? this.localTimeReplacer : null),\n accept: this.options.accept\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @returns {Object}\n */\n ODataAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n var args = {\n url: e.url,\n key: e.key,\n cid: 1,\n cSet: DataUtil.getGuid(this.options.changeSet)\n };\n var req = '--' + initialGuid + '\\n';\n req += 'Content-Type: multipart/mixed; boundary=' + args.cSet.replace('--', '') + '\\n';\n this.pvt.changeSet = 0;\n req += this.generateInsertRequest(changes.addedRecords, args, dm);\n req += this.generateUpdateRequest(changes.changedRecords, args, dm, original ? original.changedRecords : []);\n req += this.generateDeleteRequest(changes.deletedRecords, args, dm);\n req += args.cSet + '--\\n';\n req += '--' + initialGuid + '--';\n return {\n type: 'POST',\n url: url,\n dataType: 'json',\n contentType: 'multipart/mixed; charset=UTF-8;boundary=' + initialGuid,\n data: req\n };\n };\n /**\n * Generate the string content from the removed records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @returns this\n */\n ODataAdaptor.prototype.generateDeleteRequest = function (arr, e, dm) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'DELETE ',\n 'url': function (data, i, key) { return '(' + data[i][key] + ')'; },\n 'data': function (data, i) { return ''; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req + '\\n';\n };\n /**\n * Generate the string content from the inserted records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n */\n ODataAdaptor.prototype.generateInsertRequest = function (arr, e, dm) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req;\n };\n /**\n * Generate the string content from the updated records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n */\n ODataAdaptor.prototype.generateUpdateRequest = function (arr, e, dm, org) {\n var _this = this;\n if (!arr) {\n return '';\n }\n var req = '';\n arr.forEach(function (change) { return change = _this.compareAndRemove(change, org.filter(function (o) { return DataUtil.getObject(e.key, o) === DataUtil.getObject(e.key, change); })[0], e.key); });\n var stat = {\n 'method': this.options.updateType + ' ',\n 'url': function (data, i, key) { return '(' + data[i][key] + ')'; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req;\n };\n ODataAdaptor.getField = function (prop) {\n return prop.replace(/\\./g, '/');\n };\n ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat, dm) {\n var req = '';\n for (var i = 0; i < arr.length; i++) {\n req += '\\n' + e.cSet + '\\n';\n req += this.options.changeSetContent + '\\n\\n';\n req += stat.method;\n if (stat.method === 'POST ') {\n req += (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n else if (stat.method === 'PUT ' || stat.method === 'PATCH ') {\n req += (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n else if (stat.method === 'DELETE ') {\n req += (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n req += 'Accept: ' + this.options.accept + '\\n';\n req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n req += this.options.batchChangeSetContentType + '\\n';\n if (!isNullOrUndefined(arr[i]['@odata.etag'])) {\n req += 'If-Match: ' + arr[i]['@odata.etag'] + '\\n\\n';\n delete arr[i]['@odata.etag'];\n }\n else {\n req += '\\n';\n }\n req += stat.data(arr, i);\n }\n return req;\n };\n ODataAdaptor.prototype.processBatchResponse = function (data, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n if (request && this.options.batch && DataUtil.endsWith(request.url, this.options.batch) && request.type.toLowerCase() === 'post') {\n var guid = xhr.getResponseHeader('Content-Type');\n var cIdx = void 0;\n var jsonObj = void 0;\n var d = data + '';\n guid = guid.substring(guid.indexOf('=batchresponse') + 1);\n d = d.split(guid);\n if (d.length < 2) {\n return {};\n }\n d = d[1];\n var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n if (exVal) {\n d.replace(exVal[0], '');\n }\n var changeGuid = exVal ? exVal[1] : '';\n d = d.split(changeGuid);\n for (var i = d.length; i > -1; i--) {\n if (!/\\bContent-ID:/i.test(d[i]) || !/\\bHTTP.+201/.test(d[i])) {\n continue;\n }\n cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n if (changes.addedRecords[cIdx]) {\n jsonObj = DataUtil.parse.parseJson(/^\\{.+\\}/m.exec(d[i])[0]);\n extend({}, changes.addedRecords[cIdx], this.processResponse(jsonObj));\n }\n }\n return changes;\n }\n return null;\n };\n ODataAdaptor.prototype.compareAndRemove = function (data, original, key) {\n var _this = this;\n if (isNullOrUndefined(original)) {\n return data;\n }\n Object.keys(data).forEach(function (prop) {\n if (prop !== key && prop !== '@odata.etag') {\n if (DataUtil.isPlainObject(data[prop])) {\n _this.compareAndRemove(data[prop], original[prop]);\n var final = Object.keys(data[prop]).filter(function (data) { return data !== '@odata.etag'; });\n if (final.length === 0) {\n delete data[prop];\n }\n }\n else if (data[prop] === original[prop]) {\n delete data[prop];\n }\n else if (data[prop] && original[prop] && data[prop].valueOf() === original[prop].valueOf()) {\n delete data[prop];\n }\n }\n });\n return data;\n };\n return ODataAdaptor;\n}(UrlAdaptor));\nexport { ODataAdaptor };\n/**\n * The OData v4 is an improved version of OData protocols.\n * The DataManager uses the ODataV4Adaptor to consume OData v4 services.\n * @hidden\n */\nvar ODataV4Adaptor = /** @class */ (function (_super) {\n __extends(ODataV4Adaptor, _super);\n function ODataV4Adaptor(props) {\n var _this = _super.call(this, props) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json, text/javascript, */*; q=0.01',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$count',\n search: '$search',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PATCH',\n localTime: false,\n apply: '$apply'\n });\n getValue('getModulename', _this.getModulename());\n extend(_this.options, props || {});\n return _this;\n }\n /**\n * @hidden\n */\n ODataV4Adaptor.prototype.getModulename = function () {\n return 'ODataV4Adaptor';\n };\n ;\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataV4Adaptor.prototype.onCount = function (e) {\n return e === true ? 'true' : '';\n };\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var val = predicate.value;\n var isDate = val instanceof Date;\n returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n if (isDate) {\n returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n }\n return returnValue;\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataV4Adaptor.prototype.onEachSearch = function (e) {\n var search = this.pvt.searches || [];\n search.push(e.key);\n this.pvt.searches = search;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataV4Adaptor.prototype.onSearch = function (e) {\n return this.pvt.searches.join(' OR ');\n };\n /**\n * Returns the expand query string.\n * @param {string} e\n */\n ODataV4Adaptor.prototype.onExpand = function (e) {\n var _this = this;\n var selected = {};\n var expanded = {};\n var expands = e.expands.slice();\n var exArr = [];\n var selects = e.selects.filter(function (item) { return item.indexOf('.') > -1; });\n selects.forEach(function (select) {\n var splits = select.split('.');\n if (!(splits[0] in selected)) {\n selected[splits[0]] = [];\n }\n selected[splits[0]].push(splits[1]);\n });\n //Auto expand from select query\n Object.keys(selected).forEach(function (expand) {\n if ((expands.indexOf(expand) === -1)) {\n expands.push(expand);\n }\n });\n expands.forEach(function (expand) {\n expanded[expand] = expand in selected ? expand + \"(\" + _this.options.select + \"=\" + selected[expand].join(',') + \")\" : expand;\n });\n Object.keys(expanded).forEach(function (ex) { return exArr.push(expanded[ex]); });\n return exArr.join(',');\n };\n /**\n * Returns the groupby query string.\n * @param {string} e\n */\n ODataV4Adaptor.prototype.onDistinct = function (distinctFields) {\n var fields = distinctFields.map(function (field) { return ODataAdaptor.getField(field); }).join(',');\n return \"groupby((\" + fields + \"))\";\n };\n /**\n * Returns the select query string.\n * @param {string[]} e\n */\n ODataV4Adaptor.prototype.onSelect = function (e) {\n return _super.prototype.onSelect.call(this, e.filter(function (item) { return item.indexOf('.') === -1; }));\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n ODataV4Adaptor.prototype.beforeSend = function (dm, request, settings) {\n if (settings.type === 'POST' || settings.type === 'PUT' || settings.type === 'PATCH') {\n request.setRequestHeader('Prefer', 'return=representation');\n }\n request.setRequestHeader('Accept', this.options.accept);\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var count = null;\n var dataCount = '@odata.count';\n if (query && query.isCountRequired) {\n if (dataCount in data) {\n count = data[dataCount];\n }\n }\n data = !isNullOrUndefined(data.value) ? data.value : data;\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: count, aggregates: args.aggregates };\n };\n return ODataV4Adaptor;\n}(ODataAdaptor));\nexport { ODataV4Adaptor };\n/**\n * The Web API is a programmatic interface to define the request and response messages system that is mostly exposed in JSON or XML.\n * The DataManager uses the WebApiAdaptor to consume Web API.\n * Since this adaptor is targeted to interact with Web API created using OData endpoint, it is extended from ODataAdaptor\n * @hidden\n */\nvar WebApiAdaptor = /** @class */ (function (_super) {\n __extends(WebApiAdaptor, _super);\n function WebApiAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.url,\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url + '/' + value,\n data: JSON.stringify(value)\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url,\n data: JSON.stringify(value)\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n WebApiAdaptor.prototype.beforeSend = function (dm, request, settings) {\n request.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n WebApiAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var count = null;\n var args = {};\n if (request && request.type.toLowerCase() !== 'post') {\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n if (!DataUtil.isNull(data.Count)) {\n count = data.Count;\n }\n }\n if (version < 3 && data.Items) {\n data = data.Items;\n }\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n }\n args.result = args.result || data;\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n return WebApiAdaptor;\n}(ODataAdaptor));\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n * @hidden\n */\nvar WebMethodAdaptor = /** @class */ (function (_super) {\n __extends(WebMethodAdaptor, _super);\n function WebMethodAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare the request body based on the query.\n * The query information can be accessed at the WebMethod using variable named `value`.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns application\n */\n WebMethodAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var obj = new UrlAdaptor().processQuery(dm, query, hierarchyFilters);\n var getData = 'data';\n var data = DataUtil.parse.parseJson(obj[getData]);\n var result = {};\n var value = 'value';\n if (data.param) {\n for (var i = 0; i < data.param.length; i++) {\n var param = data.param[i];\n var key = Object.keys(param)[0];\n result[key] = param[key];\n }\n }\n result[value] = data;\n var pvtData = 'pvtData';\n var url = 'url';\n return {\n data: JSON.stringify(result),\n url: obj[url],\n pvtData: obj[pvtData],\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n };\n return WebMethodAdaptor;\n}(UrlAdaptor));\nexport { WebMethodAdaptor };\n/**\n * RemoteSaveAdaptor, extended from JsonAdaptor and it is used for binding local data and performs all DataManager queries in client-side.\n * It interacts with server-side only for CRUD operations.\n * @hidden\n */\nvar RemoteSaveAdaptor = /** @class */ (function (_super) {\n __extends(RemoteSaveAdaptor, _super);\n /**\n * @hidden\n */\n function RemoteSaveAdaptor() {\n var _this = _super.call(this) || this;\n setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n return _this;\n }\n RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName) {\n this.updateType = 'add';\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: data,\n table: tableName,\n action: 'insert'\n })\n };\n };\n RemoteSaveAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n _super.prototype.remove.call(this, dm, keyField, value);\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n })\n };\n };\n RemoteSaveAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.updateType = 'update';\n this.updateKey = keyField;\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: value[keyField],\n table: tableName\n })\n };\n };\n RemoteSaveAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes, e) {\n var i;\n if (this.updateType === 'add') {\n _super.prototype.insert.call(this, ds, data);\n }\n if (this.updateType === 'update') {\n _super.prototype.update.call(this, ds, this.updateKey, data);\n }\n if (data.added) {\n for (i = 0; i < data.added.length; i++) {\n _super.prototype.insert.call(this, ds, data.added[i]);\n }\n }\n if (data.changed) {\n for (i = 0; i < data.changed.length; i++) {\n _super.prototype.update.call(this, ds, e.key, data.changed[i]);\n }\n }\n if (data.deleted) {\n for (i = 0; i < data.deleted.length; i++) {\n _super.prototype.remove.call(this, ds, e.key, data.deleted[i]);\n }\n }\n return data;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * Also perform the changes in the locally cached data to sync with the remote data.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n RemoteSaveAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify({\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e.url,\n key: e.key\n })\n };\n };\n return RemoteSaveAdaptor;\n}(JsonAdaptor));\nexport { RemoteSaveAdaptor };\n/**\n * Cache Adaptor is used to cache the data of the visited pages. It prevents new requests for the previously visited pages.\n * You can configure cache page size and duration of caching by using cachingPageSize and timeTillExpiration properties of the DataManager\n * @hidden\n */\nvar CacheAdaptor = /** @class */ (function (_super) {\n __extends(CacheAdaptor, _super);\n /**\n * Constructor for CacheAdaptor class.\n * @param {CacheAdaptor} adaptor?\n * @param {number} timeStamp?\n * @param {number} pageSize?\n * @hidden\n */\n function CacheAdaptor(adaptor, timeStamp, pageSize) {\n var _this = _super.call(this) || this;\n _this.isCrudAction = false;\n _this.isInsertAction = false;\n if (!isNullOrUndefined(adaptor)) {\n _this.cacheAdaptor = adaptor;\n }\n _this.pageSize = pageSize;\n _this.guidId = DataUtil.getGuid('cacheAdaptor');\n var obj = { keys: [], results: [] };\n window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n var guid = _this.guidId;\n if (!isNullOrUndefined(timeStamp)) {\n setInterval(function () {\n var data;\n data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n var forDel = [];\n for (var i = 0; i < data.results.length; i++) {\n var currentTime = +new Date();\n var requestTime = +new Date(data.results[i].timeStamp);\n data.results[i].timeStamp = currentTime - requestTime;\n if (currentTime - requestTime > timeStamp) {\n forDel.push(i);\n }\n }\n for (var i = 0; i < forDel.length; i++) {\n data.results.splice(forDel[i], 1);\n data.keys.splice(forDel[i], 1);\n }\n window.localStorage.removeItem(guid);\n window.localStorage.setItem(guid, JSON.stringify(data));\n }, timeStamp);\n }\n return _this;\n }\n /**\n * It will generate the key based on the URL when we send a request to server.\n * @param {string} url\n * @param {Query} query?\n * @hidden\n */\n CacheAdaptor.prototype.generateKey = function (url, query) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var key = url;\n var page = 'onPage';\n if (page in singles) {\n key += singles[page].pageIndex;\n }\n queries.sorts.forEach(function (obj) {\n key += obj.e.direction + obj.e.fieldName;\n });\n queries.groups.forEach(function (obj) {\n key += obj.e.fieldName;\n });\n queries.searches.forEach(function (obj) {\n key += obj.e.searchKey;\n });\n for (var filter = 0; filter < queries.filters.length; filter++) {\n var currentFilter = queries.filters[filter];\n if (currentFilter.e.isComplex) {\n var newQuery = query.clone();\n newQuery.queries = [];\n for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter });\n }\n key += currentFilter.e.condition + this.generateKey(url, newQuery);\n }\n else {\n key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n }\n }\n return key;\n };\n /**\n * Process the query to generate request body.\n * If the data is already cached, it will return the cached data.\n * @param {DataManager} dm\n * @param {Query} query?\n * @param {Object[]} hierarchyFilters?\n */\n CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var key = this.generateKey(dm.dataSource.url, query);\n var cachedItems;\n cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n if (data != null && !this.isCrudAction && !this.isInsertAction) {\n return data;\n }\n this.isCrudAction = null;\n this.isInsertAction = null;\n return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n */\n CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (this.isInsertAction || (request && this.cacheAdaptor.options.batch &&\n DataUtil.endsWith(request.url, this.cacheAdaptor.options.batch) && request.type.toLowerCase() === 'post')) {\n return this.cacheAdaptor.processResponse(data, ds, query, xhr, request, changes);\n }\n data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n var key = query ? this.generateKey(ds.dataSource.url, query) : ds.dataSource.url;\n var obj = {};\n obj = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var index = obj.keys.indexOf(key);\n if (index !== -1) {\n obj.results.splice(index, 1);\n obj.keys.splice(index, 1);\n }\n obj.results[obj.keys.push(key) - 1] = { keys: key, result: data.result, timeStamp: new Date(), count: data.count };\n while (obj.results.length > this.pageSize) {\n obj.results.splice(0, 1);\n obj.keys.splice(0, 1);\n }\n window.localStorage.setItem(this.guidId, JSON.stringify(obj));\n return data;\n };\n /**\n * Method will trigger before send the request to server side. Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.multipartAccept);\n }\n if (!dm.dataSource.crossDomain) {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.accept);\n }\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n CacheAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.update(dm, keyField, value, tableName);\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.insert = function (dm, data, tableName) {\n this.isInsertAction = true;\n return this.cacheAdaptor.insert(dm, data, tableName);\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.remove(dm, keyField, value, tableName);\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return this.cacheAdaptor.batchRequest(dm, changes, e);\n };\n return CacheAdaptor;\n}(UrlAdaptor));\nexport { CacheAdaptor };\n","import { Ajax } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\nvar DataManager = /** @class */ (function () {\n /**\n * Constructor for DataManager class\n * @param {DataOptions|JSON[]} dataSource?\n * @param {Query} query?\n * @param {AdaptorOptions|string} adaptor?\n * @hidden\n */\n function DataManager(dataSource, query, adaptor) {\n var _this = this;\n /** @hidden */\n this.dateParse = true;\n this.requests = [];\n if (!dataSource && !this.dataSource) {\n dataSource = [];\n }\n adaptor = adaptor || dataSource.adaptor;\n var data;\n if (dataSource instanceof Array) {\n data = {\n json: dataSource,\n offline: true\n };\n }\n else if (typeof dataSource === 'object') {\n if (!dataSource.json) {\n dataSource.json = [];\n }\n data = {\n url: dataSource.url,\n insertUrl: dataSource.insertUrl,\n removeUrl: dataSource.removeUrl,\n updateUrl: dataSource.updateUrl,\n crudUrl: dataSource.crudUrl,\n batchUrl: dataSource.batchUrl,\n json: dataSource.json,\n headers: dataSource.headers,\n accept: dataSource.accept,\n data: dataSource.data,\n timeTillExpiration: dataSource.timeTillExpiration,\n cachingPageSize: dataSource.cachingPageSize,\n enableCaching: dataSource.enableCaching,\n requestType: dataSource.requestType,\n key: dataSource.key,\n crossDomain: dataSource.crossDomain,\n jsonp: dataSource.jsonp,\n dataType: dataSource.dataType,\n offline: dataSource.offline !== undefined ? dataSource.offline\n : dataSource.adaptor instanceof RemoteSaveAdaptor ? false : dataSource.url ? false : true,\n requiresFormat: dataSource.requiresFormat\n };\n }\n else {\n DataUtil.throwError('DataManager: Invalid arguments');\n }\n if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n }\n if (data.dataType === undefined) {\n data.dataType = 'json';\n }\n this.dataSource = data;\n this.defaultQuery = query;\n if (data.url && data.offline && !data.json.length) {\n this.isDataAvailable = false;\n this.adaptor = adaptor || new ODataAdaptor();\n this.dataSource.offline = false;\n this.ready = this.executeQuery(query || new Query());\n this.ready.then(function (e) {\n _this.dataSource.offline = true;\n _this.isDataAvailable = true;\n data.json = e.result;\n _this.adaptor = new JsonAdaptor();\n });\n }\n else {\n this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n }\n if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n data.jsonp = 'callback';\n }\n this.adaptor = adaptor || this.adaptor;\n if (data.enableCaching) {\n this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n }\n return this;\n }\n /**\n * Overrides DataManager's default query with given query.\n * @param {Query} query - Defines the new default query.\n */\n DataManager.prototype.setDefaultQuery = function (query) {\n this.defaultQuery = query;\n return this;\n };\n /**\n * Executes the given query with local data source.\n * @param {Query} query - Defines the query to retrieve data.\n */\n DataManager.prototype.executeLocal = function (query) {\n if (!this.defaultQuery && !(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeLocal() : A query is required to execute');\n }\n if (!this.dataSource.json) {\n DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n }\n query = query || this.defaultQuery;\n var result = this.adaptor.processQuery(this, query);\n if (query.subQuery) {\n var from = query.subQuery.fromTable;\n var lookup = query.subQuery.lookups;\n var res = query.isCountRequired ? result.result :\n result;\n if (lookup && lookup instanceof Array) {\n DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n }\n for (var j = 0; j < res.length; j++) {\n if (res[j][from] instanceof Array) {\n res[j] = extend({}, {}, res[j]);\n res[j][from] = this.adaptor.processResponse(query.subQuery.using(new DataManager(res[j][from].slice(0))).executeLocal(), this, query);\n }\n }\n }\n return this.adaptor.processResponse(result, this, query);\n };\n /**\n * Executes the given query with either local or remote data source.\n * It will be executed as asynchronously and returns Promise object which will be resolved or rejected after action completed.\n * @param {Query|Function} query - Defines the query to retrieve data.\n * @param {Function} done - Defines the callback function and triggers when the Promise is resolved.\n * @param {Function} fail - Defines the callback function and triggers when the Promise is rejected.\n * @param {Function} always - Defines the callback function and triggers when the Promise is resolved or rejected.\n */\n DataManager.prototype.executeQuery = function (query, done, fail, always) {\n var _this = this;\n if (typeof query === 'function') {\n always = fail;\n fail = done;\n done = query;\n query = null;\n }\n if (!query) {\n query = this.defaultQuery;\n }\n if (!(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n }\n var deffered = new Deferred();\n var args = { query: query };\n if (!this.dataSource.offline && (this.dataSource.url !== undefined && this.dataSource.url !== '')) {\n var result = this.adaptor.processQuery(this, query);\n this.makeRequest(result, deffered, args, query);\n }\n else {\n DataManager.nextTick(function () {\n var res = _this.executeLocal(query);\n args = DataManager.getDeferedArgs(query, res, args);\n deffered.resolve(args);\n });\n }\n if (done || fail) {\n deffered.promise.then(done, fail);\n }\n if (always) {\n deffered.promise.then(always, always);\n }\n return deffered.promise;\n };\n DataManager.getDeferedArgs = function (query, result, args) {\n if (query.isCountRequired) {\n args.result = result.result;\n args.count = result.count;\n args.aggregates = result.aggregates;\n }\n else {\n args.result = result;\n }\n return args;\n };\n DataManager.nextTick = function (fn) {\n (window.setImmediate || window.setTimeout)(fn, 0);\n };\n DataManager.prototype.extendRequest = function (url, fnSuccess, fnFail) {\n return extend({}, {\n type: 'GET',\n dataType: this.dataSource.dataType,\n crossDomain: this.dataSource.crossDomain,\n jsonp: this.dataSource.jsonp,\n cache: true,\n processData: false,\n onSuccess: fnSuccess,\n onFailure: fnFail\n }, url);\n };\n DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n var _this = this;\n var isSelector = !!query.subQuerySelector;\n var fnFail = function (e) {\n args.error = e;\n deffered.reject(args);\n };\n var process = function (data, count, xhr, request, actual, aggregates, virtualSelectRecords) {\n args.xhr = xhr;\n args.count = count ? parseInt(count.toString(), 10) : 0;\n args.result = data;\n args.request = request;\n args.aggregates = aggregates;\n args.actual = actual;\n args.virtualSelectRecords = virtualSelectRecords;\n deffered.resolve(args);\n };\n var fnQueryChild = function (data, selector) {\n var subDeffer = new Deferred();\n var childArgs = { parent: args };\n query.subQuery.isChild = true;\n var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n if (!isSelector) {\n subDeffer.then(function (subData) {\n if (data) {\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, data, subData, query.subQuery.key);\n process(data, subData.count, subData.xhr);\n }\n }, fnFail);\n }\n return childReq;\n };\n var fnSuccess = function (data, request) {\n if (request.httpRequest.getResponseHeader('Content-Type').indexOf('xml') === -1 && _this.dateParse) {\n data = DataUtil.parse.parseJson(data);\n }\n var result = _this.adaptor.processResponse(data, _this, query, request.httpRequest, request);\n var count = 0;\n var aggregates = null;\n var virtualSelectRecords = 'virtualSelectRecords';\n var virtualRecords = data[virtualSelectRecords];\n if (query.isCountRequired) {\n count = result.count;\n aggregates = result.aggregates;\n result = result.result;\n }\n if (!query.subQuery) {\n process(result, count, request.httpRequest, request.type, data, aggregates, virtualRecords);\n return;\n }\n if (!isSelector) {\n fnQueryChild(result, request);\n }\n };\n var req = this.extendRequest(url, fnSuccess, fnFail);\n var ajax = new Ajax(req);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n req = ajax.send();\n req.catch(function (e) { return true; }); // to handle failure remote requests. \n this.requests.push(ajax);\n if (isSelector) {\n var promise = void 0;\n var res = query.subQuerySelector.call(this, { query: query.subQuery, parent: query });\n if (res && res.length) {\n promise = Promise.all([req, fnQueryChild(null, res)]);\n promise.then(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = args[0];\n var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].httpRequest, _this.requests[0]);\n var count = 0;\n if (query.isCountRequired) {\n count = pResult.count;\n pResult = pResult.result;\n }\n var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].httpRequest, _this.requests[1]);\n count = 0;\n if (query.subQuery.isCountRequired) {\n count = cResult.count;\n cResult = cResult.result;\n }\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, pResult, cResult, query.subQuery.key);\n isSelector = false;\n process(pResult, count, _this.requests[0].httpRequest);\n });\n }\n else {\n isSelector = false;\n }\n }\n return req;\n };\n DataManager.prototype.beforeSend = function (request, settings) {\n this.adaptor.beforeSend(this, request, settings);\n var headers = this.dataSource.headers;\n var props;\n for (var i = 0; headers && i < headers.length; i++) {\n props = [];\n var keys = Object.keys(headers[i]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n props.push(prop);\n request.setRequestHeader(prop, headers[i][prop]);\n }\n }\n };\n /**\n * Save bulk changes to the given table name.\n * User can add a new record, edit an existing record, and delete a record at the same time.\n * If the datasource from remote, then updated in a single post.\n * @param {Object} changes - Defines the CrudOptions.\n * @param {string} key - Defines the column field.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.saveChanges = function (changes, key, tableName, query, original) {\n var _this = this;\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var args = {\n url: tableName,\n key: key || this.dataSource.key\n };\n var req = this.adaptor.batchRequest(this, changes, args, query, original);\n if (this.dataSource.offline) {\n return req;\n }\n var deff = new Deferred();\n var ajax = new Ajax(req);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n ajax.onSuccess = function (data, request) {\n deff.resolve(_this.adaptor.processResponse(data, _this, null, request.httpRequest, request, changes, args));\n };\n ajax.onFailure = function (e) {\n deff.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests. \n return deff.promise;\n };\n /**\n * Inserts new record in the given table.\n * @param {Object} data - Defines the data to insert.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.insert = function (data, tableName, query, position) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var req = this.adaptor.insert(this, data, tableName, query, position);\n if (this.dataSource.offline) {\n return req;\n }\n return this.doAjaxRequest(req);\n };\n /**\n * Removes data from the table with the given key.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.remove = function (keyField, value, tableName, query) {\n if (typeof value === 'object') {\n value = value[keyField];\n }\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.remove(this, keyField, value, tableName, query);\n if (this.dataSource.offline) {\n return res;\n }\n return this.doAjaxRequest(res);\n };\n /**\n * Updates existing record in the given table.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.update = function (keyField, value, tableName, query, original) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.update(this, keyField, value, tableName, query, original);\n if (this.dataSource.offline) {\n return res;\n }\n return this.doAjaxRequest(res);\n };\n DataManager.prototype.doAjaxRequest = function (res) {\n var _this = this;\n var defer = new Deferred();\n res = extend({}, {\n type: 'POST',\n contentType: 'application/json; charset=utf-8',\n processData: false\n }, res);\n var ajax = new Ajax(res);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n ajax.onSuccess = function (record, request) {\n try {\n DataUtil.parse.parseJson(record);\n }\n catch (e) {\n record = [];\n }\n record = _this.adaptor.processResponse(DataUtil.parse.parseJson(record), _this, null, request.httpRequest, request);\n defer.resolve(record);\n };\n ajax.onFailure = function (e) {\n defer.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests.\n return defer.promise;\n };\n return DataManager;\n}());\nexport { DataManager };\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 resolved.\n */\n this.then = this.promise.then.bind(this.promise);\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 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 { merge, formatUnit, isNullOrUndefined, append, detach } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n content: 'e-content',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist'\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, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n *
\n *
    \n *
  • Favourite
  • \n *
  • Documents
  • \n *
  • Downloads
  • \n *
\n *
\n * ```\n * ```typescript\n * var lvObj = new ListView({});\n * lvObj.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n */\n function ListView(options, element) {\n return _super.call(this, options, element) || this;\n }\n ListView.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 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false);\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false);\n break;\n case 'enableVirtualization':\n detach(this.contentContainer);\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.getBoundingClientRect().height ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = 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 ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n //Suport Component Functions\n ListView.prototype.header = function (text, showBack) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText, innerHTML: this.headerTitle });\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' e-but-back',\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n append(compiledString({}), headerTemplateEle);\n append([headerTemplateEle], this.headerEle);\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'group', wrapperRole: 'presentation'\n },\n fields: this.fields.properties, sortOrder: this.sortOrder, showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this)\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = [];\n this.aniObj = new Animation(this.animateOptions);\n };\n ListView.prototype.renderCheckbox = function (args) {\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData = void 0;\n checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData = getFieldValues(args.curData, this.listBaseOption.fields);\n if (fieldData[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n args.item.setAttribute('aria-selected', 'true');\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * It is used to check the checkbox of an item.\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n checked ? liElement.classList.add(classNames.selected) : liElement.classList.remove(classNames.selected);\n liElement.setAttribute('aria-selected', checked ? 'true' : 'false');\n checked ? checkboxIcon.classList.add(classNames.checked) : checkboxIcon.classList.remove(classNames.checked);\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n }\n };\n /**\n * It is used to uncheck the checkbox of an item.\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.uncheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * It is used to check all the items in ListView.\n */\n ListView.prototype.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * It is used to un-check all the items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n }\n };\n ListView.prototype.setCheckbox = function () {\n var _this = this;\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args_1 = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n liCollection.forEach(function (element) {\n args_1.item = element;\n args_1.curData = _this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n _this.renderCheckbox(args_1);\n if (args_1.item.classList.contains(classNames.selected)) {\n _this.checkInternally(args_1, args_1.item.querySelector('.' + classNames.checkboxWrapper));\n }\n });\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n liCollection.forEach(function (element) {\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n });\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n /**\n * It is used to refresh the UI list item height\n */\n ListView.prototype.refreshItemHeight = function () {\n this.virtualizationModule.refreshItemHeight();\n };\n ListView.prototype.clickHandler = function (e) {\n var target = e.target;\n var classList = target.classList;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n li.classList.add(classNames.focused);\n }\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n var checkIcon = li.querySelector('.' + classNames.checkboxIcon);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n ListView.prototype.leaveHandler = function (e) {\n this.removeHover();\n };\n ;\n ListView.prototype.homeKeyHandler = function (e, end) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelectorAll('.' + classNames.listItem);\n var focusedElement = this.curUL.querySelector('.' + classNames.focused) ||\n this.curUL.querySelector('.' + classNames.selected);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n focusedElement.classList.remove(classNames.selected);\n }\n }\n var index = !end ? 0 : li.length - 1;\n if (li[index].classList.contains(classNames.hasChild) || this.showCheckBox) {\n li[index].classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(li[index], e);\n }\n }\n };\n ListView.prototype.onArrowKeyDown = function (e, prev) {\n var siblingLI;\n var li;\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n if (hasChild || this.showCheckBox) {\n li = this.curUL.querySelector('.' + classNames.focused) || this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n if (!isNullOrUndefined(siblingLI)) {\n if (li) {\n li.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n li.classList.remove(classNames.selected);\n }\n }\n if (siblingLI.classList.contains(classNames.hasChild) || this.showCheckBox) {\n siblingLI.classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(siblingLI, e);\n }\n }\n }\n else {\n li = this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n this.setSelectLI(siblingLI, e);\n }\n return siblingLI;\n };\n ListView.prototype.arrowKeyHandler = function (e, prev) {\n var _this = this;\n if (Object.keys(this.dataSource).length && this.curUL) {\n var siblingLI = this.onArrowKeyDown(e, prev);\n var elementTop = this.element.getBoundingClientRect().top;\n var elementHeight = this.element.getBoundingClientRect().height;\n var firstItemBounds = this.curUL.querySelector('.' + classNames.listItem).getBoundingClientRect();\n var heightDiff = void 0;\n var groupItemBounds = void 0;\n if (this.fields.groupBy) {\n groupItemBounds = this.curUL.querySelector('.' + classNames.groupListItem).getBoundingClientRect();\n }\n if (siblingLI) {\n var siblingTop = siblingLI.getBoundingClientRect().top;\n var siblingHeight = siblingLI.getBoundingClientRect().height;\n if (!prev) {\n var height = this.isWindow ? window.innerHeight : elementHeight;\n heightDiff = this.isWindow ? (siblingTop + siblingHeight) :\n ((siblingTop - elementTop) + siblingHeight);\n if (heightDiff > height) {\n this.isWindow ? window.scrollTo(0, pageYOffset + (heightDiff - height)) :\n this.element.scrollTo(0, this.element.scrollTop + (heightDiff - height));\n }\n }\n else {\n heightDiff = this.isWindow ? siblingTop : (siblingTop - elementTop);\n if (heightDiff < 0) {\n this.isWindow ? window.scrollTo(0, pageYOffset + heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop + heightDiff);\n }\n }\n }\n else if (this.enableVirtualization && prev && this.virtualizationModule.uiFirstIndex) {\n this.onUIScrolled = function () {\n _this.onArrowKeyDown(e, prev);\n _this.onUIScrolled = undefined;\n };\n heightDiff = this.virtualizationModule.listItemHeight;\n this.isWindow ? window.scrollTo(0, pageYOffset - heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop - heightDiff);\n }\n else if (prev) {\n if (this.showHeader && this.headerEle) {\n var topHeight = groupItemBounds ? groupItemBounds.top : firstItemBounds.top;\n var headerBounds = this.headerEle.getBoundingClientRect();\n heightDiff = headerBounds.top < 0 ? (headerBounds.height - topHeight) : 0;\n this.isWindow ? window.scrollTo(0, pageYOffset - heightDiff)\n : this.element.scrollTo(0, 0);\n }\n else if (this.fields.groupBy) {\n heightDiff = this.isWindow ? (groupItemBounds.top < 0 ? groupItemBounds.top : 0) :\n (elementTop - firstItemBounds.top) + groupItemBounds.height;\n this.isWindow ? window.scrollTo(0, pageYOffset + heightDiff) :\n this.element.scrollTo(0, this.element.scrollTop - heightDiff);\n }\n }\n }\n };\n ListView.prototype.enterKeyHandler = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (hasChild && li) {\n li.classList.remove(classNames.focused);\n if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n }\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n if (e.keyCode !== 9) {\n e.preventDefault();\n }\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 9:\n this.tabFocus(e);\n break;\n case 32:\n this.spaceKeyHandler(e);\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n var activeElement = this.curUL.querySelector('[aria-selected = true]');\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (activeElement && !this.showCheckBox) {\n activeElement.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n if (!this.enableVirtualization) {\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n }\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n if (!this.enableVirtualization) {\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n }\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n this.touchModule.destroy();\n };\n ListView.prototype.tabFocus = function (e) {\n if (this.curUL && ((!this.curUL.querySelector('.' + classNames.focused) && this.showCheckBox) ||\n (!this.curUL.querySelector('.' + classNames.selected) && !this.showCheckBox &&\n !this.curUL.querySelector('.' + classNames.hasChild)) ||\n (this.curUL.querySelector('.' + classNames.hasChild) &&\n !this.curUL.querySelector('.' + classNames.focused) &&\n !this.curUL.querySelector('.' + classNames.selected)))) {\n e.preventDefault();\n }\n if (Object.keys(this.dataSource).length && this.curUL) {\n var selectedList = this.curUL.querySelector('.' + classNames.selected);\n if ((!selectedList && this.curUL) || this.showCheckBox) {\n var li = selectedList || this.curUL.querySelector('.' + classNames.listItem);\n if (li.classList.contains(classNames.hasChild) || this.showCheckBox) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (isNullOrUndefined(focusedElement)) {\n li.classList.add(classNames.focused);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n }\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.setAttribute('aria-selected', 'false');\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n li.classList.add(classNames.focused);\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n li.setAttribute('aria-selected', 'true');\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (!isNullOrUndefined(data)\n && typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li && li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem = { item: li, text: fieldData && fieldData[this.listBaseOption.fields.text], data: data };\n }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, { isInteracted: true, event: e, index: Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n li.setAttribute('aria-selected', 'true');\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs);\n this.selectedLI = li;\n this.renderSubList(li);\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[column]) &&\n this.fields[column] !==\n ListBase.defaultMappedFields[column]\n && columns.indexOf(this.fields[column]) === -1) {\n columns.push(this.fields[column]);\n }\n }\n query.select(columns);\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n if (dataSource && this.fields.groupBy) {\n if (this.sortOrder !== 'None') {\n this.curViewDS = ListBase.groupDataSource(ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, this.fields.sortBy)), this.listBaseOption.fields, this.sortOrder);\n }\n else {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.fields, this.sortOrder);\n }\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, this.fields.sortBy));\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n if (this.dataSource instanceof DataManager) {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n if (_this.isDestroyed) {\n return;\n }\n _this.localData = e.result;\n _this.renderList();\n _this.trigger('actionComplete', e);\n }).catch(function (e) {\n if (_this.isDestroyed) {\n return;\n }\n _this.trigger('actionFailure', e);\n });\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.element.innerHTML = '';\n this.headerEle = this.ulElement = this.liCollection = undefined;\n this.setLocalData();\n this.header();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.createElement, this.curViewDS, this.listBaseOption);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n };\n ListView.prototype.renderSubList = function (li) {\n var uID = li.getAttribute('data-uid');\n if (li.classList.contains(classNames.hasChild) && uID) {\n var ul = closest(li.parentNode, '.' + classNames.parentItem);\n var ele = this.element.querySelector('[pid=\\'' + uID + '\\']');\n this.curDSLevel.push(uID);\n this.setViewDataSource(this.getSubDS());\n if (!ele) {\n var data = this.curViewDS;\n ele = ListBase.createListFromJson(this.createElement, data, this.listBaseOption, this.curDSLevel.length);\n ele.setAttribute('pID', uID);\n ele.style.display = 'none';\n this.renderIntoDom(ele);\n }\n this.switchView(ul, ele);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.selectedItems) {\n var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);\n this.header((fieldData[this.listBaseOption.fields.text]), true);\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization && Object.keys(this.dataSource).length) {\n if ((this.template || this.groupTemplate) && !this.virtualizationModule.isNgTemplate()) {\n this.listBaseOption.template = null;\n this.listBaseOption.groupTemplate = null;\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = this.createElement('div', { className: classNames.content });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * It is used to Initialize the control rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { role: 'list', tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n this.unWireEvents();\n var classAr = [classNames.root, classNames.disable, 'e-rtl',\n 'e-has-header', 'e-lib'].concat(this.cssClass.split(' ').filter(function (css) { return css; }));\n removeClass([this.element], classAr);\n this.rippleFn();\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.element.innerHTML = '';\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * It helps to switch back from navigated sub list.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.add(classNames.focused);\n if (this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked)) {\n li.setAttribute('aria-selected', 'true');\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false));\n };\n /**\n * It is used to select the list item from the ListView.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (obj) {\n if (this.enableVirtualization) {\n this.virtualizationModule.selectItem(obj);\n }\n else if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(obj));\n }\n else {\n isNullOrUndefined(obj) ? this.removeSelect() : this.setSelectLI(this.getLiFromObjOrElement(obj));\n }\n };\n ListView.prototype.getLiFromObjOrElement = function (obj) {\n var li;\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (!isNullOrUndefined(obj)) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n if (obj instanceof Element) {\n var uid = obj.getAttribute('data-uid').toString();\n for (var i = 0; i < this.liCollection.length; i++) {\n if (this.liCollection[i].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[i];\n break;\n }\n }\n }\n else {\n Array.prototype.some.call(this.curUL.querySelectorAll('.' + classNames.listItem), function (item) {\n if (item.innerText.trim() === obj.toString()) {\n li = item;\n return true;\n }\n else {\n return false;\n }\n });\n }\n }\n else {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n li = this.element.querySelector('[data-uid=\"'\n + fieldData[this.fields.id] + '\"]');\n if (!this.enableVirtualization && isNullOrUndefined(li)) {\n var curLi = this.element.querySelectorAll('.' + classNames.listItem);\n for (var i = 0; i < curLi.length; i++) {\n if (curLi[i].innerText.trim() === fieldData[this.fields.text]) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\n };\n /**\n * It is used to select multiple list item from the ListView.\n * @param {Fields[] | HTMLElement[] | Element[]} obj - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.selectMultipleItems = function (obj) {\n if (!isNullOrUndefined(obj)) {\n for (var i = 0; i < obj.length; i++) {\n if (!isNullOrUndefined(obj[i])) {\n this.selectItem(obj[i]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n /**\n * It is used to get the currently [here](./api-selectedItem)\n * item details from the list items.\n */\n ListView.prototype.getSelectedItems = function () {\n this.selectedId = [];\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (this.enableVirtualization) {\n return this.virtualizationModule.getSelectedItems();\n }\n else if (this.showCheckBox) {\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[i]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n if (fieldData) {\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n else {\n liTextCollection.push(undefined);\n this.selectedId.push(undefined);\n }\n }\n }\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n return { item: liCollection, data: dataSource, text: liTextCollection };\n }\n if (this.isNestedList) {\n return { item: liCollection, data: dataParent, text: liTextCollection };\n }\n else {\n return { item: liCollection, data: liDataCollection, text: liTextCollection };\n }\n }\n else {\n var liElement = this.element.getElementsByClassName(classNames.selected)[0];\n var fieldData = getFieldValues(this.getItemData(liElement), this.listBaseOption.fields);\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n return (!isNullOrUndefined(liElement)) ? {\n item: liElement, data: dataSource,\n text: liElement.innerText.trim()\n } : undefined;\n }\n else {\n if (isNullOrUndefined(fieldData) || isNullOrUndefined(liElement)) {\n return undefined;\n }\n else {\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n return {\n text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement)\n };\n }\n }\n }\n };\n /**\n * It is used to find out an item details from the current list.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (obj) {\n return this.getItemData(obj);\n };\n /**\n * A function that used to enable the disabled list items based on passed element.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.enableItem = function (obj) {\n this.setItemState(obj, true);\n if (this.enableVirtualization) {\n this.virtualizationModule.enableItem(obj);\n }\n };\n /**\n * It is used to disable the list items based on passed element.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.disableItem = function (obj) {\n this.setItemState(obj, false);\n if (this.enableVirtualization) {\n this.virtualizationModule.disableItem(obj);\n }\n };\n //A function that used to set state of the list item like enable, disable.\n ListView.prototype.setItemState = function (obj, isEnable) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (isEnable) {\n if (li) {\n li.classList.remove(classNames.disable);\n }\n delete resultJSON[this.fields.enabled];\n }\n else if (!isEnable) {\n if (li) {\n li.classList.add(classNames.disable);\n }\n resultJSON[this.fields.enabled] = false;\n }\n }\n };\n /**\n * It is used to show an list item from the ListView.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.showItem = function (obj) {\n this.showHideItem(obj, false, '');\n if (this.enableVirtualization) {\n this.virtualizationModule.showItem(obj);\n }\n };\n /**\n * It is used to hide an item from the ListView.\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.hideItem = function (obj) {\n this.showHideItem(obj, true, 'none');\n if (this.enableVirtualization) {\n this.virtualizationModule.hideItem(obj);\n }\n };\n ListView.prototype.showHideItem = function (obj, isHide, display) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (li) {\n li.style.display = display;\n }\n if (isHide) {\n resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * It adds new item to current ListView.\n * To add a new item in the list view, we need to pass ‘data’ as array or object and ‘fields’ as object.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n * @param {{[key:string]:Object}[]} data - Array JSON Data that need to add.\n * @param {Fields} fields - Fields as an Object with ID and Text fields.\n */\n ListView.prototype.addItem = function (data, fields) {\n var _this = this;\n if (fields === void 0) { fields = undefined; }\n if (!(this.dataSource instanceof DataManager)) {\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields);\n }\n else {\n var ds = this.findItemFromDS(this.dataSource, fields);\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n var child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n if (ds instanceof Array) {\n data.forEach(function (dataSource) {\n _this.dataSource.push(dataSource);\n _this.setViewDataSource(_this.dataSource);\n if (_this.ulElement) {\n var index = _this.curViewDS.indexOf(dataSource);\n _this.addListItem(dataSource, index);\n var curViewDS = _this.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n _this.addListItem(curViewDS, (index - 1));\n }\n }\n else {\n _this.reRender();\n }\n });\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n ds[this.fields.child] = child;\n this.reRender();\n }\n }\n }\n }\n };\n ListView.prototype.addListItem = function (dataSource, index) {\n var target = this.getLiFromObjOrElement(this.curViewDS[index + 1]) ||\n this.getLiFromObjOrElement(this.curViewDS[index + 2]) || null;\n var li = ListBase.createListItemFromJson(this.createElement, [dataSource], this.listBaseOption);\n this.ulElement.insertBefore(li[0], target);\n };\n /**\n * A function that removes the item from data source based on passed element like fields: { text: 'Name', tooltip: 'Name', id:'id'}\n * @param {Fields | HTMLElement | Element} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (obj) {\n if (!(this.dataSource instanceof DataManager)) {\n if (this.enableVirtualization) {\n this.virtualizationModule.removeItem(obj);\n }\n else {\n this.removeItemFromList(obj);\n }\n }\n };\n ListView.prototype.removeItemFromList = function (obj) {\n var fields = obj instanceof Element ? this.getElementUID(obj) : obj;\n var dataSource;\n dataSource = this.findItemFromDS(this.dataSource, fields, true);\n if (dataSource) {\n var data = void 0;\n data = this.findItemFromDS(dataSource, fields);\n var index = this.curViewDS.indexOf(data);\n var li = this.getLiFromObjOrElement(obj);\n var groupLi = void 0;\n if (this.fields.groupBy && this.curViewDS[index - 1] &&\n this.curViewDS[index - 1].isHeader &&\n (this.curViewDS[index - 1])\n .items.length === 1) {\n if (li && li.previousElementSibling.classList.contains(classNames.groupListItem) &&\n (isNullOrUndefined(li.nextElementSibling) || (li.nextElementSibling &&\n li.nextElementSibling.classList.contains(classNames.groupListItem)))) {\n groupLi = li.previousElementSibling;\n }\n }\n if (li) {\n detach(li);\n }\n if (groupLi) {\n detach(groupLi);\n }\n var dsIndex = dataSource.indexOf(data);\n dataSource.splice(dsIndex, 1);\n this.setViewDataSource(this.dataSource);\n this.liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n }\n };\n /**\n * A function that removes multiple item from list view based on given input.\n * @param {Fields[] | HTMLElement[] | Element[]} obj - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.removeMultipleItems = function (obj) {\n if (!(this.dataSource instanceof DataManager)) {\n if (obj.length) {\n for (var i = 0; i < obj.length; i++) {\n if (this.enableVirtualization) {\n this.removeItem(obj[i]);\n }\n else {\n this.removeItemFromList(obj[i]);\n }\n }\n }\n }\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\n };\n ListView.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualization' });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition']);\n };\n __decorate([\n Property('')\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n ListView = __decorate([\n NotifyPropertyChanges\n ], ListView);\n return ListView;\n}(Component));\nexport { ListView };\n","import { createElement, attributes, addClass, removeClass, detach, classList, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n * @param args\n */\n function createInput(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group')) {\n parent.classList.remove('e-input-focus');\n }\n });\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) && args.properties.showClearButton) {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons)) {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n inputObject = setPropertyValue(args, inputObject);\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if (parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputElement;\n var floatLinelement;\n var floatLabelElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerHTML = args.element.placeholder;\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerHTML = args.properties.placeholder;\n }\n if (!floatLabelElement.innerHTML) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = element.parentNode;\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n function wireClearBtnEvents(element, button, container) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('blur', function (event) {\n setTimeout(function () { addClass([button], CLASSNAMES.CLEARICONHIDE); }, 200);\n });\n }\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n * @param value - Specify the value of the input element.\n * @param element - The element on which the specified value is updated.\n * @param floatLabelType - Specify the float label type of the input element.\n * @param clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (element.value && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n * @param cssClass - Css class names which are needed to add.\n * @param elements - The elements which are needed to add / remove classes.\n * @param oldClass - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n * @param placeholder - Placeholder value which is need to add.\n * @param element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n var parentElement;\n parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n * @param isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n * @param isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n * @param isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n inputObject.clearButton.remove();\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n * @param attrs\n * - Array of attributes which are need to removed from the element.\n * @param element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n * @param attrs\n * - Array of attributes which is added to element.\n * @param element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton) {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type, customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n if (isNullOrUndefined(iconEle)) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n container.insertBefore(input, iconEle);\n container.insertBefore(floatLine, iconEle);\n container.insertBefore(floatText, iconEle);\n }\n }\n }\n Input.addFloating = addFloating;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n * @param isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param inputObject\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[i].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _onMouseDownRipple() {\n var ele = this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n var ele = this;\n setTimeout(function () { ele.classList.remove('e-input-btn-ripple'); }, 500);\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n * @param iconClass - 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 input.\n * @param container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n container.appendChild(button);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n})(Input || (Input = {}));\n","import { classNames } from './list-view';\nimport { EventHandler, append, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { ListBase } from '../common/list-base';\nvar Virtualization = /** @class */ (function () {\n function Virtualization(instance) {\n this.listViewInstance = instance;\n }\n /**\n * For internal use only.\n * @private\n */\n Virtualization.prototype.isNgTemplate = function () {\n return !isNullOrUndefined(this.listViewInstance.templateRef) && typeof this.listViewInstance.templateRef !== 'string'\n && isNullOrUndefined(this.listViewInstance.fields.groupBy);\n };\n /**\n * For internal use only.\n * @private\n */\n Virtualization.prototype.uiVirtualization = function () {\n var curViewDS = this.listViewInstance.curViewDS;\n var firstDs = curViewDS.slice(0, 1);\n this.listViewInstance.ulElement = this.listViewInstance.curUL = ListBase.createList(this.listViewInstance.createElement, firstDs, this.listViewInstance.listBaseOption);\n this.listViewInstance.contentContainer = this.listViewInstance.createElement('div', { className: classNames.content });\n this.listViewInstance.element.appendChild(this.listViewInstance.contentContainer);\n this.listViewInstance.contentContainer.appendChild(this.listViewInstance.ulElement);\n this.listItemHeight = this.listViewInstance.ulElement.firstElementChild.getBoundingClientRect().height;\n this.expectedDomItemCount = this.ValidateItemCount(10000);\n this.domItemCount = this.ValidateItemCount(Object.keys(this.listViewInstance.curViewDS).length);\n this.uiFirstIndex = 0;\n this.uiLastIndex = this.domItemCount - 1;\n this.wireScrollEvent(false);\n var otherDs = curViewDS.slice(1, this.domItemCount);\n var listItems = ListBase.createListItemFromJson(this.listViewInstance.createElement, otherDs, this.listViewInstance.listBaseOption);\n append(listItems, this.listViewInstance.ulElement);\n this.listViewInstance.liCollection = this.listViewInstance.curUL.querySelectorAll('li');\n this.topElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.topElement, this.listViewInstance.ulElement.firstElementChild);\n this.bottomElement = this.listViewInstance.createElement('div');\n this.listViewInstance.ulElement.insertBefore(this.bottomElement, null);\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.topElement.style.height = 0 + 'px';\n this.bottomElement.style.height = this.totalHeight + 'px';\n this.topElementHeight = 0;\n this.bottomElementHeight = this.totalHeight;\n this.listDiff = 0;\n this.uiIndicesInitialization();\n };\n Virtualization.prototype.wireScrollEvent = function (destroy) {\n if (!destroy) {\n if (this.listViewInstance.isWindow) {\n this.onVirtualScroll = this.onVirtualUiScroll.bind(this);\n window.addEventListener('scroll', this.onVirtualScroll);\n }\n else {\n EventHandler.add(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll, this);\n }\n }\n else {\n this.listViewInstance.isWindow ? window.removeEventListener('scroll', this.onVirtualScroll) :\n EventHandler.remove(this.listViewInstance.element, 'scroll', this.onVirtualUiScroll);\n }\n };\n Virtualization.prototype.ValidateItemCount = function (dataSourceLength) {\n var itemCount = this.listViewInstance.isWindow ? Math.round((window.innerHeight / this.listItemHeight) * 3) :\n Math.round((this.listViewInstance.height / this.listItemHeight) * 1.5);\n if (itemCount > dataSourceLength) {\n itemCount = dataSourceLength;\n }\n return itemCount;\n };\n Virtualization.prototype.uiIndicesInitialization = function () {\n var _this = this;\n this.uiIndices = { 'activeIndices': [], 'disabledItemIndices': [], 'hiddenItemIndices': [] };\n this.listViewInstance.curViewDS.forEach(function (ds, index) {\n if (_this.listViewInstance.showCheckBox && ds[_this.listViewInstance.fields.isChecked]) {\n _this.uiIndices.activeIndices.push(index);\n }\n if (!isNullOrUndefined(ds[_this.listViewInstance.fields.enabled]) && !ds[_this.listViewInstance.fields.enabled]) {\n _this.uiIndices.disabledItemIndices.push(index);\n }\n });\n if (this.isNgTemplate()) {\n Array.prototype.forEach.call(this.listViewInstance.element.querySelectorAll('.' + classNames.listItem), function (item, index) {\n item.context = _this.listViewInstance.viewContainerRef._embeddedViews[index].context;\n });\n }\n };\n Virtualization.prototype.refreshItemHeight = function () {\n if (this.listViewInstance.curViewDS.length) {\n var curViewDS = this.listViewInstance.curViewDS;\n this.listItemHeight = this.topElement.nextSibling.getBoundingClientRect().height;\n this.totalHeight = (Object.keys(curViewDS).length * this.listItemHeight) - (this.domItemCount * this.listItemHeight);\n this.bottomElementHeight = this.totalHeight;\n this.bottomElement.style.height = this.totalHeight + 'px';\n }\n };\n Virtualization.prototype.getscrollerHeight = function () {\n return this.listViewInstance.isWindow ? (((pageYOffset - this.startingHeight) <= 0) ? 0 :\n (pageYOffset - this.startingHeight)) : ((this.listViewInstance.element.scrollTop - this.startingHeight) <= 0) ? 0 :\n (this.listViewInstance.element.scrollTop - this.startingHeight);\n };\n Virtualization.prototype.onVirtualUiScroll = function () {\n var _a;\n if (isNullOrUndefined(this.startingHeight)) {\n if (this.listViewInstance.isWindow) {\n this.startingHeight = document.documentElement.getBoundingClientRect().height -\n this.listViewInstance.ulElement.getBoundingClientRect().height;\n }\n else {\n this.startingHeight = this.listViewInstance.headerEle ? this.listViewInstance.headerEle.getBoundingClientRect().height : 0;\n }\n this.scrollPosition = 0;\n }\n var scroll = this.getscrollerHeight();\n this.topElementHeight = this.listItemHeight * Math.floor(scroll / this.listItemHeight);\n this.bottomElementHeight = this.totalHeight - this.topElementHeight;\n _a = scroll <= this.totalHeight ?\n [this.topElementHeight, this.bottomElementHeight] : [this.totalHeight, 0], this.topElementHeight = _a[0], this.bottomElementHeight = _a[1];\n if (this.topElementHeight !== parseFloat(this.topElement.style.height)) {\n this.topElement.style.height = this.topElementHeight + 'px';\n this.bottomElement.style.height = this.bottomElementHeight + 'px';\n if (scroll > this.scrollPosition) {\n var listDiff = ((this.topElementHeight / this.listItemHeight) - this.listDiff);\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, true);\n }\n else {\n this.onNormalScroll(listDiff, true);\n }\n }\n else {\n var listDiff = (this.listDiff - (this.topElementHeight / this.listItemHeight));\n if (listDiff > (this.expectedDomItemCount + 5)) {\n this.onLongScroll(listDiff, false);\n }\n else {\n this.onNormalScroll(listDiff, false);\n }\n }\n this.listDiff = this.topElementHeight / this.listItemHeight;\n if (typeof this.listViewInstance.onUIScrolled === 'function') {\n this.listViewInstance.onUIScrolled();\n }\n }\n this.scrollPosition = scroll;\n };\n Virtualization.prototype.onLongScroll = function (listDiff, isScrollingDown) {\n var _this = this;\n var index = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n Array.prototype.forEach.call(this.listViewInstance.ulElement.querySelectorAll('li'), function (element) {\n _this.updateUI(element, index);\n index++;\n });\n this.uiLastIndex = isScrollingDown ? (this.uiLastIndex + listDiff) : (this.uiLastIndex - listDiff);\n this.uiFirstIndex = isScrollingDown ? (this.uiFirstIndex + listDiff) : (this.uiFirstIndex - listDiff);\n };\n Virtualization.prototype.onNormalScroll = function (listDiff, isScrollingDown) {\n if (isScrollingDown) {\n for (var i = 0; i < listDiff; i++) {\n var index = ++this.uiLastIndex;\n this.updateUI(this.topElement.nextElementSibling, index, this.bottomElement);\n this.uiFirstIndex++;\n }\n }\n else {\n for (var i = 0; i < listDiff; i++) {\n var index = --this.uiFirstIndex;\n var target = this.topElement.nextSibling;\n this.updateUI(this.bottomElement.previousElementSibling, index, target);\n this.uiLastIndex--;\n }\n }\n };\n Virtualization.prototype.updateUiContent = function (element, index) {\n var curViewDs = this.listViewInstance.curViewDS;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n element.dataset.uid = ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n this.listViewInstance.curViewDS[index].toString();\n }\n else {\n element.dataset.uid = curViewDs[index][this.listViewInstance.fields.id] ?\n curViewDs[index][this.listViewInstance.fields.id].toString() : ListBase.generateId();\n element.getElementsByClassName(classNames.listItemText)[0].innerHTML =\n curViewDs[index][this.listViewInstance.fields.text].toString();\n }\n if (this.listViewInstance.showIcon) {\n if (element.querySelector('.' + classNames.listIcon)) {\n detach(element.querySelector('.' + classNames.listIcon));\n }\n if (this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]) {\n var textContent = element.querySelector('.' + classNames.textContent);\n var target = this.listViewInstance.createElement('div', {\n className: classNames.listIcon + ' ' +\n this.listViewInstance.curViewDS[index][this.listViewInstance.fields.iconCss]\n });\n textContent.insertBefore(target, element.querySelector('.' + classNames.listItemText));\n }\n }\n if (this.listViewInstance.showCheckBox && this.listViewInstance.fields.groupBy) {\n if (!this.checkListWrapper) {\n this.checkListWrapper = this.listViewInstance.curUL.querySelector('.' + classNames.checkboxWrapper).cloneNode(true);\n }\n var textContent = element.querySelector('.' + classNames.textContent);\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.remove(classNames.checklist);\n textContent.classList.remove(classNames.checkbox);\n detach(element.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n else {\n if (!element.querySelector('.' + classNames.checkboxWrapper)) {\n element.classList.add(classNames.checklist);\n textContent.classList.add(classNames.checkbox);\n textContent.insertBefore(this.checkListWrapper.cloneNode(true), element.querySelector('.' + classNames.listItemText));\n }\n }\n }\n };\n Virtualization.prototype.changeElementAttributes = function (element, index) {\n element.classList.remove(classNames.disable);\n if (this.uiIndices.disabledItemIndices.length && this.uiIndices.disabledItemIndices.indexOf(index) !== -1) {\n element.classList.add(classNames.disable);\n }\n element.style.display = '';\n if (this.uiIndices.hiddenItemIndices.length && this.uiIndices.hiddenItemIndices.indexOf(index) !== -1) {\n element.style.display = 'none';\n }\n if (this.listViewInstance.showCheckBox) {\n var checklistElement = element.querySelector('.' + classNames.checkboxWrapper);\n element.classList.remove(classNames.selected);\n element.classList.remove(classNames.focused);\n if (checklistElement) {\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n }\n if (this.uiIndices.activeIndices.length && this.uiIndices.activeIndices.indexOf(index) !== -1 &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n checklistElement.firstElementChild.classList.add(classNames.checked);\n checklistElement.setAttribute('aria-checked', 'true');\n if (this.activeIndex === index) {\n element.classList.add(classNames.focused);\n }\n }\n }\n else {\n element.classList.remove(classNames.selected);\n element.removeAttribute('aria-selected');\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex === index &&\n !this.listViewInstance.curUL.querySelector(classNames.selected)) {\n element.classList.add(classNames.selected);\n element.setAttribute('aria-selected', 'true');\n }\n }\n if (this.listViewInstance.fields.groupBy) {\n if (this.listViewInstance.curViewDS[index].isHeader) {\n if (element.classList.contains(classNames.listItem)) {\n element.classList.remove(classNames.listItem);\n element.setAttribute('role', 'group');\n element.classList.add(classNames.groupListItem);\n }\n }\n else {\n if (element.classList.contains(classNames.groupListItem)) {\n element.classList.remove(classNames.groupListItem);\n element.setAttribute('role', 'listitem');\n element.classList.add(classNames.listItem);\n }\n }\n }\n };\n Virtualization.prototype.findDSAndIndexFromId = function (ds, fields) {\n var _this = this;\n var resultJSON = {};\n fields = this.listViewInstance.getElementUID(fields);\n if (!isNullOrUndefined(fields)) {\n ds.some(function (data, index) {\n if ((fields[_this.listViewInstance.fields.id] &&\n fields[_this.listViewInstance.fields.id].toString()\n === (data[_this.listViewInstance.fields.id] && data[_this.listViewInstance.fields.id].toString())) || fields === data) {\n resultJSON.index = index;\n resultJSON.data = data;\n return true;\n }\n else {\n return false;\n }\n });\n }\n return resultJSON;\n };\n Virtualization.prototype.getSelectedItems = function () {\n var _this = this;\n if (!isNullOrUndefined(this.activeIndex) || (this.listViewInstance.showCheckBox && this.uiIndices.activeIndices.length)) {\n var dataCollection_1 = [];\n var textCollection_1 = [];\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n var curViewDS_1 = this.listViewInstance.curViewDS;\n if (this.listViewInstance.showCheckBox) {\n this.uiIndices.activeIndices.forEach(function (index) {\n dataCollection_1.push(curViewDS_1[index]);\n });\n return {\n text: dataCollection_1,\n data: dataCollection_1,\n index: this.uiIndices.activeIndices.map(function (index) {\n return _this.listViewInstance.dataSource.indexOf(curViewDS_1[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_1[this.activeIndex],\n data: curViewDS_1[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_1[this.activeIndex])\n };\n }\n }\n else {\n var curViewDS_2 = this.listViewInstance.curViewDS;\n var text_1 = this.listViewInstance.fields.text;\n if (this.listViewInstance.showCheckBox) {\n this.uiIndices.activeIndices.forEach(function (index) {\n textCollection_1.push(curViewDS_2[index][text_1]);\n dataCollection_1.push(curViewDS_2[index]);\n });\n return {\n text: textCollection_1,\n data: dataCollection_1,\n index: this.uiIndices.activeIndices.map(function (index) {\n return (_this.listViewInstance.dataSource).indexOf(curViewDS_2[index]);\n })\n };\n }\n else {\n return {\n text: curViewDS_2[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS_2[this.activeIndex],\n index: this.listViewInstance.dataSource.indexOf(curViewDS_2[this.activeIndex])\n };\n }\n }\n }\n else {\n return undefined;\n }\n };\n Virtualization.prototype.selectItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n var isSelected = this.activeIndex === resutJSON.index;\n var isChecked = void 0;\n this.activeIndex = resutJSON.index;\n if (this.listViewInstance.showCheckBox) {\n if (this.uiIndices.activeIndices.indexOf(resutJSON.index) === -1) {\n isChecked = true;\n this.uiIndices.activeIndices.push(resutJSON.index);\n }\n else {\n isChecked = false;\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(resutJSON.index), 1);\n }\n if (this.listViewInstance.curUL.querySelector('.' + classNames.focused)) {\n this.listViewInstance.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n }\n if (this.listViewInstance.getLiFromObjOrElement(obj)) {\n if (this.listViewInstance.showCheckBox) {\n this.listViewInstance.setCheckboxLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n else {\n this.listViewInstance.setSelectLI(this.listViewInstance.getLiFromObjOrElement(obj));\n }\n }\n else {\n var eventArgs = void 0;\n if (typeof this.listViewInstance.dataSource[0] === 'string' ||\n typeof this.listViewInstance.dataSource[0] === 'number') {\n eventArgs = {\n text: this.listViewInstance.curViewDS[this.activeIndex],\n data: this.listViewInstance.curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n else {\n var curViewDS = this.listViewInstance.curViewDS;\n eventArgs = {\n text: curViewDS[this.activeIndex][this.listViewInstance.fields.text],\n data: curViewDS[this.activeIndex],\n index: this.activeIndex\n };\n }\n if (this.listViewInstance.showCheckBox) {\n eventArgs.isChecked = isChecked;\n this.listViewInstance.trigger('select', eventArgs);\n }\n else if (!isSelected) {\n this.listViewInstance.trigger('select', eventArgs);\n }\n }\n }\n else if (isNullOrUndefined(obj) && !this.listViewInstance.showCheckBox) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n };\n Virtualization.prototype.enableItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.disableItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.disabledItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.disabledItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.showItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index), 1);\n }\n };\n Virtualization.prototype.hideItem = function (obj) {\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length && this.uiIndices.hiddenItemIndices.indexOf(resutJSON.index) === -1) {\n this.uiIndices.hiddenItemIndices.push(resutJSON.index);\n }\n };\n Virtualization.prototype.removeItem = function (obj) {\n var dataSource;\n var resutJSON = this.findDSAndIndexFromId(this.listViewInstance.curViewDS, obj);\n if (Object.keys(resutJSON).length) {\n dataSource = resutJSON.data;\n if (this.listViewInstance.curViewDS[resutJSON.index - 1] &&\n this.listViewInstance.curViewDS[resutJSON.index - 1].isHeader &&\n (this.listViewInstance.curViewDS[resutJSON.index - 1])\n .items.length === 1) {\n this.removeUiItem(resutJSON.index - 1);\n this.removeUiItem(resutJSON.index - 1);\n }\n else {\n this.removeUiItem(resutJSON.index);\n }\n }\n var index = this.listViewInstance.dataSource.indexOf(dataSource);\n if (index !== -1) {\n this.listViewInstance.dataSource.splice(index, 1);\n this.listViewInstance.setViewDataSource(this.listViewInstance.dataSource);\n }\n };\n Virtualization.prototype.setCheckboxLI = function (li, e) {\n var index = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n if (li.classList.contains(classNames.selected)) {\n if (this.uiIndices.activeIndices.indexOf(index) === -1) {\n this.uiIndices.activeIndices.push(index);\n }\n }\n else {\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n }\n };\n Virtualization.prototype.setSelectLI = function (li, e) {\n this.activeIndex = Array.prototype.indexOf.call(this.listViewInstance.curUL.querySelectorAll('li'), li) + this.uiFirstIndex;\n };\n Virtualization.prototype.checkedItem = function (checked) {\n var _this = this;\n if (checked) {\n this.uiIndices.activeIndices = [];\n this.activeIndex = undefined;\n this.listViewInstance.curViewDS.forEach(function (ds, index) {\n if (!ds.isHeader) {\n _this.uiIndices.activeIndices.push(index);\n }\n });\n }\n else {\n this.activeIndex = undefined;\n this.uiIndices.activeIndices = [];\n }\n };\n Virtualization.prototype.addUiItem = function (index) {\n var curViewDs = this.listViewInstance.curViewDS;\n this.changeUiIndices(index, true);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex++;\n }\n if (this.listViewInstance.showCheckBox &&\n curViewDs[index][this.listViewInstance.fields.isChecked]) {\n this.uiIndices.activeIndices.push(index);\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n }\n if (parseFloat(this.bottomElement.style.height)) {\n var liItem = this.listViewInstance.curUL.lastElementChild.previousSibling;\n var target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n if (target) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) + this.listItemHeight + 'px';\n this.updateUI(liItem, index, target);\n }\n }\n else {\n var liItem = this.listViewInstance.curUL.firstElementChild.nextSibling;\n var target = void 0;\n if ((Object.keys(this.listViewInstance.curViewDS).length - 1) === index) {\n target = this.listViewInstance.curUL.lastElementChild;\n }\n else {\n target = this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 1]) ||\n this.listViewInstance.getLiFromObjOrElement(curViewDs[index + 2]);\n }\n this.topElement.style.height = parseFloat(this.topElement.style.height) + this.listItemHeight + 'px';\n this.uiFirstIndex++;\n this.uiLastIndex++;\n if (target) {\n this.updateUI(liItem, index, target);\n this.listViewInstance.isWindow ? window.scrollTo(0, (pageYOffset + this.listItemHeight)) :\n this.listViewInstance.element.scrollTop += this.listItemHeight;\n }\n }\n this.totalHeight += this.listItemHeight;\n this.listDiff = parseFloat(this.topElement.style.height) / this.listItemHeight;\n };\n Virtualization.prototype.removeUiItem = function (index) {\n this.totalHeight -= this.listItemHeight;\n var curViewDS = this.listViewInstance.curViewDS[index];\n var liItem = this.listViewInstance.getLiFromObjOrElement(curViewDS);\n this.listViewInstance.curViewDS.splice(index, 1);\n if (this.activeIndex && this.activeIndex >= index) {\n this.activeIndex--;\n }\n if (liItem) {\n if (this.domItemCount > Object.keys(this.listViewInstance.curViewDS).length) {\n detach(liItem);\n this.domItemCount--;\n this.uiLastIndex--;\n this.totalHeight = 0;\n }\n else {\n if (liItem.classList.contains(classNames.disable)) {\n liItem.classList.remove(classNames.disable);\n this.uiIndices.disabledItemIndices.splice(this.uiIndices.disabledItemIndices.indexOf(index), 1);\n }\n if (liItem.style.display === 'none') {\n liItem.style.display = '';\n this.uiIndices.hiddenItemIndices.splice(this.uiIndices.hiddenItemIndices.indexOf(index), 1);\n }\n if (this.listViewInstance.showCheckBox && liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.uiIndices.activeIndices.splice(this.uiIndices.activeIndices.indexOf(index), 1);\n var checklistElement = liItem.querySelector('.' + classNames.checkboxWrapper);\n checklistElement.removeAttribute('aria-checked');\n checklistElement.firstElementChild.classList.remove(classNames.checked);\n if (liItem.classList.contains(classNames.focused)) {\n liItem.classList.remove(classNames.focused);\n this.activeIndex = undefined;\n }\n }\n else if (liItem.classList.contains(classNames.selected)) {\n this.listViewInstance.removeSelect();\n this.activeIndex = undefined;\n }\n if (!parseFloat(this.bottomElement.style.height) && !parseFloat(this.topElement.style.height)) {\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else if (parseFloat(this.bottomElement.style.height)) {\n this.bottomElement.style.height = parseFloat(this.bottomElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, this.uiLastIndex, this.bottomElement);\n }\n else {\n this.topElement.style.height = parseFloat(this.topElement.style.height) - this.listItemHeight + 'px';\n this.updateUI(liItem, (this.uiFirstIndex - 1), this.topElement.nextSibling);\n this.uiLastIndex--;\n this.uiFirstIndex--;\n }\n }\n }\n this.changeUiIndices(index, false);\n this.listDiff = parseFloat(this.topElement.style.height) / this.listItemHeight;\n };\n Virtualization.prototype.changeUiIndices = function (index, increment) {\n var _this = this;\n Object.keys(this.uiIndices).forEach(function (key) {\n _this.uiIndices[key] = _this.uiIndices[key].map(function (i) {\n if (i >= index) {\n return increment ? ++i : --i;\n }\n else {\n return i;\n }\n });\n });\n };\n Virtualization.prototype.addItem = function (data, fields) {\n var _this = this;\n data.forEach(function (dataSource) {\n _this.listViewInstance.dataSource.push(dataSource);\n _this.listViewInstance.setViewDataSource(_this.listViewInstance.dataSource);\n if (!_this.domItemCount) {\n _this.uiVirtualization();\n }\n else if (_this.domItemCount < _this.expectedDomItemCount) {\n _this.wireScrollEvent(true);\n detach(_this.listViewInstance.contentContainer);\n _this.uiVirtualization();\n }\n else {\n var index = _this.listViewInstance.curViewDS.indexOf(dataSource);\n _this.addUiItem(index);\n var curViewDS = _this.listViewInstance.curViewDS[index - 1];\n if (curViewDS && curViewDS.isHeader && curViewDS.items.length === 1) {\n _this.addUiItem(index - 1);\n }\n }\n });\n };\n Virtualization.prototype.createUIItem = function (args) {\n var template = this.listViewInstance.createElement('div');\n var commonTemplate = '
' +\n ' ${' + this.listViewInstance.fields.text + '}
';\n template.innerHTML = this.listViewInstance.template || commonTemplate;\n var templateElements = template.getElementsByTagName('*');\n var groupTemplate = this.listViewInstance.createElement('div');\n if (this.listViewInstance.fields.groupBy) {\n groupTemplate.innerHTML = this.listViewInstance.groupTemplate || commonTemplate;\n }\n var groupTemplateElements = groupTemplate.getElementsByTagName('*');\n if (args.curData.isHeader) {\n this.headerData = args.curData;\n }\n this.templateData = args.curData.isHeader ? args.curData.items[0] :\n args.curData;\n args.item.innerHTML = '';\n args.item.context = { data: args.curData, nodes: { flatTemplateNodes: [], groupTemplateNodes: [] } };\n for (var i = 0; i < templateElements.length; i++) {\n this.compileTemplate(templateElements[i], args.item, false);\n }\n for (var i = 0; i < groupTemplateElements.length; i++) {\n this.compileTemplate(groupTemplateElements[i], args.item, true);\n }\n args.item.context.template = args.curData.isHeader ? template.firstElementChild :\n groupTemplate.firstElementChild;\n args.item.context.type = args.curData.isHeader ? 'flatList' : 'groupList';\n var element = args.curData.isHeader ? groupTemplate : template;\n args.item.insertBefore(element.firstElementChild, null);\n };\n Virtualization.prototype.compileTemplate = function (element, item, isHeader) {\n this.textProperty(element, item, isHeader);\n this.classProperty(element, item, isHeader);\n this.attributeProperty(element, item, isHeader);\n };\n Virtualization.prototype.onChange = function (newData, listElement) {\n listElement.context.data = newData;\n var groupTemplateNodes = listElement.context.nodes.groupTemplateNodes;\n var flatTemplateNodes = listElement.context.nodes.flatTemplateNodes;\n if (!isNullOrUndefined(newData.isHeader) && newData.isHeader && listElement.context.type === 'groupList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'flatList';\n groupTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else if (!newData.isHeader && listElement.context.type === 'flatList') {\n var element = listElement.firstElementChild;\n detach(listElement.firstElementChild);\n listElement.insertBefore(listElement.context.template, null);\n listElement.context.template = element;\n listElement.context.type = 'groupList';\n flatTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else if (!newData.isHeader) {\n flatTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n else {\n groupTemplateNodes.forEach(function (node) { return node.onChange(newData); });\n }\n };\n Virtualization.prototype.updateContextData = function (listElement, node, isHeader) {\n if (isHeader) {\n listElement.context.nodes.groupTemplateNodes.push(node);\n }\n else {\n listElement.context.nodes.flatTemplateNodes.push(node);\n }\n };\n Virtualization.prototype.classProperty = function (element, listElement, isHeader) {\n var _this = this;\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.className);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n if (resultantOutput && resultantOutput.length) {\n resultantOutput.forEach(function (classNameMatch) {\n var classFunction;\n if (classNameMatch[1].indexOf('?') !== -1 && classNameMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + classNameMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n classFunction = new Function('data', 'return ' + 'data.' + classNameMatch[1]);\n }\n var subNode = {};\n if (isHeader) {\n subNode.bindedvalue = classFunction(_this.headerData);\n }\n else {\n subNode.bindedvalue = classFunction(_this.templateData);\n }\n subNode.onChange = function (value) {\n element.classList.remove(subNode.bindedvalue);\n element.classList.add(classFunction(value));\n subNode.bindedvalue = classFunction(value);\n };\n classNameMatch[0].split(' ').forEach(function (className) {\n element.classList.remove(className);\n });\n element.classList.add(subNode.bindedvalue);\n _this.updateContextData(listElement, subNode, isHeader);\n });\n }\n };\n Virtualization.prototype.attributeProperty = function (element, listElement, isHeader) {\n var _this = this;\n var attributeNames = [];\n for (var i = 0; i < element.attributes.length; i++) {\n attributeNames.push(element.attributes[i].nodeName);\n }\n if (attributeNames.indexOf('class') !== -1) {\n attributeNames.splice(attributeNames.indexOf('class'), 1);\n }\n attributeNames.forEach(function (attributeName) {\n var attrNameMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(attributeName) || [];\n var attrValueMatch = new RegExp('\\\\${([^}]*)}', 'g').exec(element.getAttribute(attributeName))\n || [];\n var attributeNameFunction;\n var attributeValueFunction;\n if (attrNameMatch.length || attrValueMatch.length) {\n if (attrNameMatch[1]) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeNameFunction = new Function('data', 'return ' + 'data.' + attrNameMatch[1]);\n }\n if (attrValueMatch[1]) {\n if (attrValueMatch[1].indexOf('?') !== -1 && attrValueMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + attrValueMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n attributeValueFunction = new Function('data', 'return ' + 'data.' + attrValueMatch[1]);\n }\n }\n var subNode_1 = {};\n if (isHeader) {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(_this.headerData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(_this.headerData)];\n }\n else {\n subNode_1.bindedvalue = [attrNameMatch[1] === undefined ? undefined : attributeNameFunction(_this.templateData),\n attrValueMatch[1] === undefined ? undefined : attributeValueFunction(_this.templateData)];\n }\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ?\n attributeName : subNode_1.bindedvalue[0];\n subNode_1.onChange = function (value) {\n var bindedvalue = subNode_1.bindedvalue[1] === undefined ?\n element.getAttribute(subNode_1.attrName) : attributeValueFunction(value);\n element.removeAttribute(subNode_1.attrName);\n subNode_1.attrName = subNode_1.bindedvalue[0] === undefined ? subNode_1.attrName : attributeNameFunction(value);\n element.setAttribute(subNode_1.attrName, bindedvalue);\n subNode_1.bindedvalue = [subNode_1.bindedvalue[0] === undefined ? undefined : attributeNameFunction(value),\n subNode_1.bindedvalue[1] === undefined ? undefined : attributeValueFunction(value)];\n };\n var attributeValue = subNode_1.bindedvalue[1] === undefined ? element.getAttribute(attributeName) :\n subNode_1.bindedvalue[1];\n element.removeAttribute(attributeName);\n element.setAttribute(subNode_1.attrName, attributeValue);\n _this.updateContextData(listElement, subNode_1, isHeader);\n }\n });\n };\n Virtualization.prototype.textProperty = function (element, listElement, isHeader) {\n var _this = this;\n var regex = new RegExp('\\\\${([^}]*)}', 'g');\n var resultantOutput = [];\n var regexMatch;\n while (regexMatch !== null) {\n var match = regex.exec(element.innerText);\n resultantOutput.push(match);\n regexMatch = match;\n if (regexMatch === null) {\n resultantOutput.pop();\n }\n }\n var isChildHasTextContent = Array.prototype.some.call(element.children, function (element) {\n if (new RegExp('\\\\${([^}]*)}', 'g').exec(element.innerText)) {\n return true;\n }\n else {\n return false;\n }\n });\n if (resultantOutput && resultantOutput.length && !isChildHasTextContent) {\n resultantOutput.forEach(function (textPropertyMatch) {\n var subNode = {};\n var textFunction;\n if (textPropertyMatch[1].indexOf('?') !== -1 && textPropertyMatch[1].indexOf(':') !== -1) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + textPropertyMatch[1].replace(/\\$/g, 'data.'));\n }\n else {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n textFunction = new Function('data', 'return ' + 'data.' + textPropertyMatch[1]);\n }\n if (isHeader) {\n subNode.bindedvalue = textFunction(_this.headerData);\n }\n else {\n subNode.bindedvalue = textFunction(_this.templateData);\n }\n subNode.onChange = function (value) {\n element.innerText = element.innerText.replace(subNode.bindedvalue, textFunction(value));\n subNode.bindedvalue = textFunction(value);\n };\n element.innerText = element.innerText.replace(textPropertyMatch[0], subNode.bindedvalue);\n _this.updateContextData(listElement, subNode, isHeader);\n });\n }\n };\n Virtualization.prototype.reRenderUiVirtualization = function () {\n this.wireScrollEvent(true);\n if (this.listViewInstance.contentContainer) {\n detach(this.listViewInstance.contentContainer);\n }\n this.listViewInstance.preRender();\n this.listViewInstance.localData = this.listViewInstance.dataSource;\n this.listViewInstance.renderList();\n };\n Virtualization.prototype.updateUI = function (element, index, targetElement) {\n var onChange = this.isNgTemplate() ? this.onNgChange : this.onChange;\n if (this.listViewInstance.template || this.listViewInstance.groupTemplate) {\n var curViewDS = this.listViewInstance.curViewDS[index];\n element.dataset.uid = curViewDS[this.listViewInstance.fields.id] ?\n curViewDS[this.listViewInstance.fields.id].toString() : ListBase.generateId();\n onChange(curViewDS, element);\n }\n else {\n this.updateUiContent(element, index);\n }\n this.changeElementAttributes(element, index);\n if (targetElement) {\n this.listViewInstance.ulElement.insertBefore(element, targetElement);\n }\n };\n Virtualization.prototype.onNgChange = function (newData, listElement) {\n listElement.context.$implicit = newData;\n };\n Virtualization.prototype.getModuleName = function () {\n return 'virtualization';\n };\n Virtualization.prototype.destroy = function () {\n this.wireScrollEvent(true);\n };\n return Virtualization;\n}());\nexport { Virtualization };\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 { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_RIGHTOVERLAY = 'e-scroll-right-overlay';\nvar CLS_LEFTOVERLAY = 'e-scroll-left-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n __extends(HScroll, _super);\n /**\n * Initializes a new instance of the HScroll class.\n * @param options - Specifies HScroll model properties as options.\n * @param element - Specifies the element for which horizontal scrolling applies.\n */\n function HScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n HScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var element = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (element.id === '') {\n element.id = getUniqueID('hscroll');\n this.uniqueId = true;\n }\n element.style.display = 'block';\n if (this.enableRtl) {\n element.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the horizontal scroll rendering\n * @private\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlay(this.element);\n }\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetWidth;\n this.customStep = false;\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = this.createElement('div', { className: CLS_HSCROLLCON });\n var scrollDiv = this.createElement('div', { className: CLS_HSCROLLBAR });\n scrollDiv.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollEle.appendChild(ele_1);\n }\n scrollDiv.appendChild(scrollEle);\n ele.appendChild(scrollDiv);\n scrollDiv.style.overflowX = 'hidden';\n this.scrollEle = scrollDiv;\n this.scrollItems = scrollEle;\n };\n HScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n HScroll.prototype.getModuleName = function () {\n return 'hScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n HScroll.prototype.destroy = function () {\n var ele = this.element;\n ele.style.display = '';\n ele.classList.remove(CLS_ROOT);\n ele.classList.remove(CLS_DEVICE);\n var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n var overlay = selectAll('.' + CLS_OVERLAY, ele);\n [].slice.call(overlay).forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n ele.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (nav.length > 0) {\n detach(nav[0]);\n if (!isNullOrUndefined(nav[1])) {\n detach(nav[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the HScroll component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, HScroll will be enabled (false) or disabled (true).\n * @returns void.\n */\n HScroll.prototype.disable = function (value) {\n var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n value ? this.element.classList.add(CLS_DISABLE) : this.element.classList.remove(CLS_DISABLE);\n [].slice.call(navEles).forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n HScroll.prototype.createOverlay = function (element) {\n var id = element.id.concat('_nav');\n var rightOverlayEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_RIGHTOVERLAY });\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var rightEle = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n rightEle.appendChild(navItem);\n var leftEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_LEFTOVERLAY });\n if (this.ieCheck) {\n rightEle.classList.add('e-ie-align');\n }\n element.appendChild(rightOverlayEle);\n element.appendChild(rightEle);\n element.insertBefore(leftEle, element.firstChild);\n this.eventBinding([rightEle]);\n };\n HScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var nav = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n var navEle = this.createElement('div', { id: id.concat('_left'), className: clsLeft + ' ' + CLS_DISABLE });\n navEle.setAttribute('aria-disabled', 'true');\n var navLeftItem = this.createElement('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navEle.appendChild(navLeftItem);\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n element.insertBefore(navEle, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navEle.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navEle]);\n };\n HScroll.prototype.onKeyPress = function (e) {\n var _this = this;\n if (e.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, e.target, true);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n HScroll.prototype.onKeyUp = function (e) {\n if (e.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n e.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n HScroll.prototype.eventBinding = function (ele) {\n var _this = this;\n [].slice.call(ele).forEach(function (el) {\n new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n el.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n });\n };\n HScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n HScroll.prototype.tabHoldHandler = function (e) {\n var _this = this;\n var trgt = e.originalEvent.target;\n trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDis = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDis, trgt, true);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n HScroll.prototype.contains = function (ele, className) {\n return ele.classList.contains(className);\n };\n HScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var element = this.scrollEle;\n var rootEle = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_HSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n scrollDis = -scrollDis;\n }\n var scrlLeft = element.scrollLeft;\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n if (classList.contains(CLS_NAVRIGHTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target, false);\n };\n HScroll.prototype.swipeHandler = function (e) {\n var swipeEle = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceX / (e.velocity * 10);\n }\n else {\n distance = e.distanceX / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Left') {\n swipeEle.scrollLeft += distance * step;\n }\n else if (e.swipeDirection === 'Right') {\n swipeEle.scrollLeft -= distance * step;\n }\n start -= 0.02;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollLeft += scrollVal;\n }\n else {\n this.scrollEle.scrollLeft -= scrollVal;\n }\n };\n HScroll.prototype.frameScrollRequest = function (scrollVal, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollVal, action);\n return;\n }\n if (!this.customStep) {\n [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n scrollVal -= el.offsetWidth;\n });\n }\n var animate = function () {\n if (scrollVal < step) {\n window.cancelAnimationFrame(step);\n }\n else {\n _this.scrollUpdating(step, action);\n scrollVal -= step;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.touchHandler = function (e) {\n var ele = this.scrollEle;\n var distance;\n distance = e.distanceX;\n if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n distance = -distance;\n }\n if (e.scrollDirection === 'Left') {\n ele.scrollLeft = ele.scrollLeft + distance;\n }\n else if (e.scrollDirection === 'Right') {\n ele.scrollLeft = ele.scrollLeft - distance;\n }\n };\n HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisable) ? removeDisable : addDisable;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisable)) {\n classList(arrowIcon, [CLS_NAVRIGHTARROW], [CLS_NAVLEFTARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVLEFTARROW], [CLS_NAVRIGHTARROW]);\n }\n }\n else {\n addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n HScroll.prototype.scrollHandler = function (e) {\n var target = e.target;\n var width = target.offsetWidth;\n var rootEle = this.element;\n var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n var leftOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n var rightOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n var scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\n }\n if (this.isDevice) {\n if (this.enableRtl && !(this.browserCheck || this.ieCheck)) {\n leftOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n rightOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n }\n if (scrollLeft < OVERLAY_MAXWID) {\n leftOverlay.style.width = scrollLeft + 'px';\n }\n else {\n leftOverlay.style.width = '40px';\n }\n if ((target.scrollWidth - Math.ceil(width + scrollLeft)) < OVERLAY_MAXWID) {\n rightOverlay.style.width = (target.scrollWidth - Math.ceil(width + scrollLeft)) + 'px';\n }\n else {\n rightOverlay.style.width = '40px';\n }\n }\n if (scrollLeft === 0) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n else {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n }\n else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n else {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n * @param {HScrollModel} newProp\n * @param {HScrollModel} oldProp\n * @returns void\n * @private\n */\n HScroll.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 'scrollStep':\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], HScroll.prototype, \"scrollStep\", void 0);\n HScroll = __decorate([\n NotifyPropertyChanges\n ], HScroll);\n return HScroll;\n}(Component));\nexport { HScroll };\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 { Touch, Component, EventHandler, selectAll, getUniqueID, removeClass } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach, createElement as buildTag } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-vscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_VSCROLLBAR = 'e-vscroll-bar';\nvar CLS_VSCROLLCON = 'e-vscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVUPARROW = 'e-nav-up-arrow';\nvar CLS_NAVDOWNARROW = 'e-nav-down-arrow';\nvar CLS_VSCROLLNAV = 'e-scroll-nav';\nvar CLS_VSCROLLNAVUP = 'e-scroll-up-nav';\nvar CLS_VSCROLLNAVDOWN = 'e-scroll-down-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_UPOVERLAY = 'e-scroll-up-overlay';\nvar CLS_DOWNOVERLAY = 'e-scroll-down-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * VScroll module is introduces vertical scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs vertical scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar VScroll = /** @class */ (function (_super) {\n __extends(VScroll, _super);\n /**\n * Initializes a new instance of the VScroll class.\n * @param options - Specifies VScroll model properties as options.\n * @param element - Specifies the element for which vertical scrolling applies.\n */\n function VScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n VScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var ele = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (ele.id === '') {\n ele.id = getUniqueID('vscroll');\n this.uniqueId = true;\n }\n ele.style.display = 'block';\n if (this.enableRtl) {\n ele.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the vertical scroll rendering\n * @private\n */\n VScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollEventHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlayElement(this.element);\n }\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetHeight;\n this.customStep = false;\n }\n EventHandler.add(this.element, 'wheel', this.wheelEventHandler, this);\n };\n VScroll.prototype.initialize = function () {\n var scrollCnt = buildTag('div', { className: CLS_VSCROLLCON });\n var scrollBar = buildTag('div', { className: CLS_VSCROLLBAR });\n scrollBar.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollCnt.appendChild(ele_1);\n }\n scrollBar.appendChild(scrollCnt);\n ele.appendChild(scrollBar);\n scrollBar.style.overflowY = 'hidden';\n this.scrollEle = scrollBar;\n this.scrollItems = scrollCnt;\n };\n VScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n VScroll.prototype.getModuleName = function () {\n return 'vScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n VScroll.prototype.destroy = function () {\n var el = this.element;\n el.style.display = '';\n removeClass([this.element], [CLS_ROOT, CLS_DEVICE]);\n var navs = selectAll('.e-' + el.id + '_nav.' + CLS_VSCROLLNAV, el);\n var overlays = selectAll('.' + CLS_OVERLAY, el);\n [].slice.call(overlays).forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n el.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (navs.length > 0) {\n detach(navs[0]);\n if (!isNullOrUndefined(navs[1])) {\n detach(navs[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollEventHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the VScroll component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, VScroll will be enabled (false) or disabled (true).\n * @returns void.\n */\n VScroll.prototype.disable = function (value) {\n var navEle = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n value ? this.element.classList.add(CLS_DISABLE) : this.element.classList.remove(CLS_DISABLE);\n [].slice.call(navEle).forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n VScroll.prototype.createOverlayElement = function (element) {\n var id = element.id.concat('_nav');\n var downOverlayEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_DOWNOVERLAY });\n var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n var downEle = buildTag('div', { id: id.concat('down'), className: clsDown });\n var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n downEle.appendChild(navItem);\n var upEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_UPOVERLAY });\n if (this.ieCheck) {\n downEle.classList.add('e-ie-align');\n }\n element.appendChild(downOverlayEle);\n element.appendChild(downEle);\n element.insertBefore(upEle, element.firstChild);\n this.eventBinding([downEle]);\n };\n VScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n var nav = buildTag('div', { id: id.concat('_down'), className: clsDown });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsUp = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVUP);\n var navElement = buildTag('div', { id: id.concat('_up'), className: clsUp + ' ' + CLS_DISABLE });\n navElement.setAttribute('aria-disabled', 'true');\n var navUpItem = buildTag('div', { className: CLS_NAVUPARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navElement.appendChild(navUpItem);\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n element.insertBefore(navElement, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navElement.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navElement]);\n };\n VScroll.prototype.onKeyPress = function (ev) {\n var _this = this;\n if (ev.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, ev.target, true);\n };\n this.keyTimer = window.setTimeout(function () { timeoutFun_1(); }, 100);\n }\n };\n VScroll.prototype.onKeyUp = function (ev) {\n if (ev.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n ev.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n VScroll.prototype.eventBinding = function (element) {\n var _this = this;\n [].slice.call(element).forEach(function (ele) {\n new Touch(ele, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n ele.addEventListener('keydown', _this.onKeyPress.bind(_this));\n ele.addEventListener('keyup', _this.onKeyUp.bind(_this));\n ele.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n ele.addEventListener('touchend', _this.repeatScroll.bind(_this));\n ele.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(ele, 'click', _this.clickEventHandler, _this);\n });\n };\n VScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n VScroll.prototype.tabHoldHandler = function (ev) {\n var _this = this;\n var trgt = ev.originalEvent.target;\n trgt = this.contains(trgt, CLS_VSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDistance = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDistance, trgt, true);\n };\n this.timeout = window.setInterval(function () { timeoutFun(); }, 50);\n };\n VScroll.prototype.contains = function (element, className) {\n return element.classList.contains(className);\n };\n VScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var rootElement = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_VSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (classList.contains(CLS_NAVDOWNARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else if (classList.contains(CLS_NAVUPARROW)) {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n };\n VScroll.prototype.clickEventHandler = function (event) {\n this.eleScrolling(this.scrollStep, event.target, false);\n };\n VScroll.prototype.wheelEventHandler = function (e) {\n e.preventDefault();\n this.frameScrollRequest(this.scrollStep, (e.deltaY > 0 ? 'add' : ''), false);\n };\n VScroll.prototype.swipeHandler = function (e) {\n var swipeElement = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceY / (e.velocity * 10);\n }\n else {\n distance = e.distanceY / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Up') {\n swipeElement.scrollTop += distance * step;\n }\n else if (e.swipeDirection === 'Down') {\n swipeElement.scrollTop -= distance * step;\n }\n start -= 0.02;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n VScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollTop += scrollVal;\n }\n else {\n this.scrollEle.scrollTop -= scrollVal;\n }\n };\n VScroll.prototype.frameScrollRequest = function (scrollValue, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollValue, action);\n return;\n }\n if (!this.customStep) {\n [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n scrollValue -= el.offsetHeight;\n });\n }\n var animate = function () {\n if (scrollValue < step) {\n window.cancelAnimationFrame(step);\n }\n else {\n _this.scrollUpdating(step, action);\n scrollValue -= step;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n VScroll.prototype.touchHandler = function (e) {\n var el = this.scrollEle;\n var distance;\n distance = e.distanceY;\n if (e.scrollDirection === 'Up') {\n el.scrollTop = el.scrollTop + distance;\n }\n else if (e.scrollDirection === 'Down') {\n el.scrollTop = el.scrollTop - distance;\n }\n };\n VScroll.prototype.arrowDisabling = function (addDisableCls, removeDisableCls) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisableCls) ? removeDisableCls : addDisableCls;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisableCls)) {\n classList(arrowIcon, [CLS_NAVDOWNARROW], [CLS_NAVUPARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVUPARROW], [CLS_NAVDOWNARROW]);\n }\n }\n else {\n addDisableCls.classList.add(CLS_DISABLE);\n addDisableCls.setAttribute('aria-disabled', 'true');\n addDisableCls.removeAttribute('tabindex');\n removeDisableCls.classList.remove(CLS_DISABLE);\n removeDisableCls.setAttribute('aria-disabled', 'false');\n removeDisableCls.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n VScroll.prototype.scrollEventHandler = function (e) {\n var target = e.target;\n var height = target.offsetHeight;\n var rootEle = this.element;\n var navUpEle = this.element.querySelector('.' + CLS_VSCROLLNAVUP);\n var navDownEle = this.element.querySelector('.' + CLS_VSCROLLNAVDOWN);\n var upOverlay = this.element.querySelector('.' + CLS_UPOVERLAY);\n var downOverlay = this.element.querySelector('.' + CLS_DOWNOVERLAY);\n var scrollTop = target.scrollTop;\n if (scrollTop <= 0) {\n scrollTop = -scrollTop;\n }\n if (this.isDevice) {\n if (scrollTop < OVERLAY_MAXWID) {\n upOverlay.style.height = scrollTop + 'px';\n }\n else {\n upOverlay.style.height = '40px';\n }\n if ((target.scrollHeight - Math.ceil(height + scrollTop)) < OVERLAY_MAXWID) {\n downOverlay.style.height = (target.scrollHeight - Math.ceil(height + scrollTop)) + 'px';\n }\n else {\n downOverlay.style.height = '40px';\n }\n }\n if (scrollTop === 0) {\n this.arrowDisabling(navUpEle, navDownEle);\n }\n else if (Math.ceil(height + scrollTop + .1) >= target.scrollHeight) {\n this.arrowDisabling(navDownEle, navUpEle);\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_VSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n * @param {VScrollModel} newProp\n * @param {VScrollModel} oldProp\n * @returns void\n * @private\n */\n VScroll.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 'scrollStep':\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], VScroll.prototype, \"scrollStep\", void 0);\n VScroll = __decorate([\n NotifyPropertyChanges\n ], VScroll);\n return VScroll;\n}(Component));\nexport { VScroll };\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 } 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 { getScrollableParent } from '@syncfusion/ej2-popups';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-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 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';\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 * @private\n * Base class for Menu and ContextMenu components.\n */\nvar MenuBase = /** @class */ (function (_super) {\n __extends(MenuBase, _super);\n /**\n * Constructor for creating the widget.\n * @private\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 return _this;\n }\n /**\n * Initialized third party configuration settings.\n * @private\n */\n MenuBase.prototype.preRender = function () {\n if (this.element.tagName === 'EJS-CONTEXTMENU') {\n this.element.style.display = 'none';\n this.element.classList.remove('e-' + this.getModuleName());\n this.element.classList.remove('e-control');\n var ejInst = getValue('ej2_instances', this.element);\n var ul = this.createElement('ul');\n this.ngElement = this.element;\n this.element = ul;\n this.element.classList.add('e-control');\n this.element.classList.add('e-' + this.getModuleName());\n setValue('ej2_instances', ejInst, this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\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.ngElement = 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 * @private\n */\n MenuBase.prototype.render = function () {\n this.initialize();\n this.renderItems();\n this.wireEvents();\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.split(' '));\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n wrapper.appendChild(this.element);\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 this.element.innerHTML = '';\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 var wrapper = this.getWrapper();\n this.element.classList.contains('e-vertical') ?\n this.addScrolling(wrapper, this.element, 'vscroll', wrapper.offsetHeight, this.element.offsetHeight)\n : this.addScrolling(wrapper, this.element, 'hscroll', wrapper.offsetWidth, this.element.offsetWidth);\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 (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 this.targetElement = target;\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 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 }\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.navIdx.length, e);\n }\n };\n MenuBase.prototype.keyBoardHandler = function (e) {\n var actionName = '';\n var trgt = e.target;\n var actionNeeded = this.isMenu && !this.element.classList.contains('e-vertical') && 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 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 this.rightEnterKeyHandler(e);\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) ? 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 e.action === DOWNARROW ? fliIdx++ : fliIdx--;\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 wrapper = this.getWrapper();\n var cul = this.getUlByNavIdx();\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n ((action === DOWNARROW) || (action === RIGHTARROW)) ? index++ : index--;\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 if (navIdxLen === void 0) { navIdxLen = this.navIdx.length; }\n if (this.isMenu) {\n var popup = [this.getWrapper()].concat([].slice.call(selectAll('.' + POPUP)))[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 index = void 0;\n var item = this.getItem(navIdx);\n if (item.items.length) {\n this.navIdx.push(fliIdx);\n this.openMenu(fli, item, null, null, e);\n fli.classList.remove(FOCUSED);\n if (this.isMenu && this.navIdx.length === 1) {\n this.removeLIStateByClass([SELECTED], [this.getWrapper()]);\n }\n fli.classList.add(SELECTED);\n if (e.action === ENTER) {\n eventArgs = { element: fli, item: item };\n this.trigger('select', eventArgs);\n }\n fli.focus();\n cul = this.getUlByNavIdx();\n index = this.isValidLI(cul.children[0], 0, e.action);\n cul.children[index].classList.add(FOCUSED);\n cul.children[index].focus();\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 };\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.closeMenu(this.navIdx.length, e);\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 sli.classList.add(FOCUSED);\n sli.focus();\n }\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.closeMenu(null, e);\n if (this.canOpen(e.target)) {\n if (e.changedTouches) {\n this.openMenu(null, null, e.changedTouches[0].pageY + 1, e.changedTouches[0].pageX + 1, e);\n }\n else {\n this.openMenu(null, null, e.pageY + 1, e.pageX + 1, e);\n }\n }\n };\n MenuBase.prototype.closeMenu = function (ulIndex, e) {\n if (ulIndex === void 0) { ulIndex = 0; }\n if (e === void 0) { e = null; }\n if (this.isMenuVisible()) {\n var ul = void 0;\n var sli = void 0;\n var item = void 0;\n var items = void 0;\n var closeArgs = void 0;\n var beforeCloseArgs = void 0;\n var popupEle = void 0;\n var popupObj = void 0;\n var wrapper = this.getWrapper();\n var popups = this.getPopups();\n for (var cnt = this.isMenu ? popups.length + 1 : wrapper.childElementCount; cnt > ulIndex; cnt--) {\n ul = this.isMenu && cnt !== 1 ? select('.e-ul', popups[cnt - 2])\n : selectAll('.e-menu-parent', wrapper)[cnt - 1];\n if (this.isMenu && ul.classList.contains('e-menu')) {\n sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n break;\n }\n item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items = item ? item.items : this.items;\n beforeCloseArgs = { element: ul, parentItem: item, items: items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n if (this.isMenu) {\n popupEle = closest(ul, '.' + POPUP);\n this.unWireKeyboardEvent(popupEle);\n this.destroyScrollObj(getInstance(popupEle.children[0], VScroll), popupEle.children[0]);\n popupObj = getInstance(popupEle, Popup);\n popupObj.hide();\n popupObj.destroy();\n detach(popupEle);\n }\n else {\n this.toggleAnimation(ul, false);\n }\n this.navIdx.length = ulIndex ? ulIndex - 1 : ulIndex;\n closeArgs = { element: ul, parentItem: item, items: items };\n this.trigger('onClose', closeArgs);\n }\n }\n }\n };\n MenuBase.prototype.destroyScrollObj = function (scrollObj, scrollEle) {\n if (scrollObj) {\n scrollObj.destroy();\n scrollEle.parentElement.appendChild(select('.e-menu-parent', scrollEle));\n detach(scrollEle);\n }\n };\n MenuBase.prototype.getPopups = function () {\n return [].slice.call(document.querySelectorAll('.' + POPUP));\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 ul;\n var popupObj;\n var popupWrapper;\n var eventArgs;\n var wrapper = this.getWrapper();\n if (li) {\n ul = 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], null, data, true);\n var hli = this.createItems([hdata]).children[0];\n hli.classList.add(HEADER);\n ul.insertBefore(hli, ul.children[0]);\n }\n if (this.isMenu) {\n popupWrapper = this.createElement('div', {\n className: 'e-' + this.getModuleName() + '-wrapper ' + POPUP, id: li.id + '-menu-popup'\n });\n document.body.appendChild(popupWrapper);\n var isNestedOrVerticalMenu = this.element.classList.contains('e-vertical') || this.navIdx.length !== 1;\n popupObj = new Popup(popupWrapper, {\n relateTo: li,\n collision: { X: isNestedOrVerticalMenu || this.enableRtl ? 'none' : 'flip', Y: 'fit' },\n position: isNestedOrVerticalMenu ? { 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 if (this.cssClass) {\n addClass([popupWrapper], this.cssClass.split(' '));\n }\n popupObj.hide();\n eventArgs = this.triggerBeforeOpen(li, ul, item, e, 0, 0);\n top = eventArgs.top;\n left = eventArgs.left;\n popupWrapper.style.display = 'block';\n popupWrapper.style.maxHeight = popupWrapper.getBoundingClientRect().height + 'px';\n this.addScrolling(popupWrapper, ul, 'vscroll', popupWrapper.offsetHeight, ul.offsetHeight);\n this.checkScrollOffset(e);\n var collide = void 0;\n if (!left && !top) {\n popupObj.refreshPosition(li, true);\n left = parseInt(popupWrapper.style.left, 10);\n top = parseInt(popupWrapper.style.top, 10);\n if (this.enableRtl) {\n left = isNestedOrVerticalMenu ? left - popupWrapper.offsetWidth - li.parentElement.offsetWidth\n : left - popupWrapper.offsetWidth + li.offsetWidth;\n }\n collide = isCollide(popupWrapper, null, left, top);\n if ((isNestedOrVerticalMenu || this.enableRtl) && (collide.indexOf('right') > -1 || collide.indexOf('left') > -1)) {\n popupObj.collision.X = 'none';\n left = this.enableRtl ? calculatePosition(li, isNestedOrVerticalMenu ? 'right' : 'left', 'top').left : left -\n popupWrapper.offsetWidth - closest(li, '.e-' + this.getModuleName() + '-wrapper').offsetWidth;\n }\n collide = isCollide(popupWrapper, null, left, top);\n if (collide.indexOf('left') > -1 || collide.indexOf('right') > -1) {\n left = this.callFit(popupWrapper, true, false, top, left).left;\n }\n popupWrapper.style.left = left + 'px';\n }\n else {\n popupObj.collision = { X: 'none', Y: 'none' };\n }\n popupWrapper.style.display = '';\n }\n else {\n ul.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(ul);\n eventArgs = this.triggerBeforeOpen(li, ul, item, e, top, left);\n top = eventArgs.top;\n left = eventArgs.left;\n }\n }\n else {\n ul = this.element;\n ul.style.zIndex = getZindexPartial(target ? target : this.element).toString();\n eventArgs = this.triggerBeforeOpen(li, ul, item, e, top, left);\n top = eventArgs.top;\n left = eventArgs.left;\n }\n if (eventArgs.cancel) {\n if (this.isMenu) {\n popupObj.destroy();\n detach(popupWrapper);\n }\n this.navIdx.pop();\n }\n else {\n if (this.isMenu) {\n this.wireKeyboardEvent(popupWrapper);\n rippleEffect(popupWrapper, { selector: '.' + ITEM });\n popupWrapper.style.left = left + 'px';\n popupWrapper.style.top = 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 popupObj.show(animationOptions, li);\n }\n else {\n this.setPosition(li, ul, top, left);\n this.toggleAnimation(ul);\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) {\n var navIdx = this.getIndex(li ? li.id : null, true);\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\n };\n this.trigger('beforeOpen', eventArgs);\n return eventArgs;\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 var offsetLeft = void 0;\n var offsetRight = void 0;\n if (offsetEle.scrollLeft > trgt.offsetLeft) {\n offsetEle.scrollLeft -= (offsetEle.scrollLeft - trgt.offsetLeft);\n }\n offsetLeft = offsetEle.scrollLeft + offsetEle.offsetWidth;\n offsetRight = trgt.offsetLeft + trgt.offsetWidth;\n if (offsetLeft < offsetRight) {\n offsetEle.scrollLeft += (offsetRight - offsetLeft);\n }\n }\n };\n MenuBase.prototype.addScrolling = function (wrapper, ul, scrollType, wrapperOffset, contentOffset) {\n if (this.enableScrolling && wrapperOffset < contentOffset) {\n var scrollEle = this.createElement('div', { className: 'e-menu-' + scrollType });\n wrapper.appendChild(scrollEle);\n scrollEle.appendChild(ul);\n scrollEle.style.maxHeight = wrapper.style.maxHeight;\n var scrollObj = void 0;\n wrapper.style.overflow = 'hidden';\n if (scrollType === 'vscroll') {\n scrollObj = new VScroll({ enableRtl: this.enableRtl }, scrollEle);\n scrollObj.scrollStep = select('.e-' + scrollType + '-bar', wrapper).offsetHeight / 2;\n }\n else {\n scrollObj = new HScroll({ enableRtl: this.enableRtl }, scrollEle);\n scrollObj.scrollStep = select('.e-' + scrollType + '-bar', wrapper).offsetWidth;\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 || (!isNullOrUndefined(left) && !isNullOrUndefined(top))) {\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 }\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 showIcon = this.hasField(items, this.getField('iconCss', level));\n var id = 'id';\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n fields: this.getFields(level),\n template: this.template,\n itemCreating: function (args) {\n if (!args.curData[args.fields[id]]) {\n args.curData[args.fields[id]] = getUniqueID('menuitem');\n _this.clearChanges();\n }\n args.curData.htmlAttributes = {\n role: 'menuitem',\n 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 }\n },\n itemCreated: function (args) {\n if (args.curData[_this.getField('separator', level)]) {\n args.item.classList.add(SEPARATOR);\n args.item.removeAttribute('role');\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 if (!_this.isMenu) {\n args.item.removeAttribute('role');\n }\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 }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template);\n ul.setAttribute('tabindex', '0');\n if (this.isMenu) {\n ul.setAttribute('role', 'menu');\n }\n return ul;\n };\n MenuBase.prototype.moverHandler = function (e) {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper')) {\n this.removeLIStateByClass([FOCUSED], this.isMenu ? [wrapper].concat(this.getPopups()) : [wrapper]);\n cli.classList.add(FOCUSED);\n if (!this.showItemOnClick) {\n this.clickHandler(e);\n }\n }\n if (this.isMenu) {\n if ((trgt.parentElement !== wrapper && !closest(trgt, '.e-' + this.getModuleName() + '-popup')) && !cli) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [wrapper]);\n if (this.navIdx.length) {\n this.closeMenu(null, e);\n }\n }\n wrapper = closest(trgt, '.e-menu-vscroll');\n if (trgt.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.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.getLI(trgt);\n var cliWrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : null;\n var isInstLI = cli && cliWrapper && (wrapper.firstElementChild.id === cliWrapper.firstElementChild.id || this.isMenu);\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 };\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 var showSubMenu = true;\n var cul = cli.parentNode;\n var 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] === cliIdx) {\n showSubMenu = false;\n }\n if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || showSubMenu)) {\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n this.closeMenu(culIdx + 1, e);\n }\n }\n if (showSubMenu) {\n var idx = this.navIdx.concat(cliIdx);\n var item = this.getItem(idx);\n if (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(cli);\n }\n cli.setAttribute('aria-expanded', 'true');\n this.navIdx.push(cliIdx);\n this.openMenu(cli, item, null, null, e);\n }\n else {\n if (e.type !== 'mouseover') {\n this.closeMenu(null, e);\n }\n }\n }\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 this.removeLIStateByClass([FOCUSED, SELECTED], [popupEle]);\n }\n }\n else {\n if (trgt.tagName !== 'UL' || trgt.parentElement !== wrapper) {\n if (!cli || !cli.querySelector('.' + CARET)) {\n this.closeMenu(null, e);\n }\n }\n }\n }\n }\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 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.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 /**\n * Called internally if any of the property value changed\n * @private\n * @param {MenuBaseModel} newProp\n * @param {MenuBaseModel} oldProp\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.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_1;\n this_1.element.classList.contains('e-vertical') ?\n this_1.addScrolling(wrapper, this_1.element, 'vscroll', wrapper.offsetHeight, this_1.element.offsetHeight)\n : this_1.addScrolling(wrapper, this_1.element, 'hscroll', wrapper.offsetWidth, this_1.element.offsetWidth);\n this_1.getPopups().forEach(function (wrapper) {\n ul_1 = select('.e-ul', wrapper);\n _this.addScrolling(wrapper, ul_1, 'vscroll', wrapper.offsetHeight, ul_1.offsetHeight);\n });\n }\n else {\n var ul_2 = wrapper.children[0];\n this_1.element.classList.contains('e-vertical') ? this_1.destroyScrollObj(getInstance(ul_2, VScroll), ul_2)\n : this_1.destroyScrollObj(getInstance(ul_2, HScroll), ul_2);\n wrapper.style.overflow = '';\n wrapper.appendChild(this_1.element);\n this_1.getPopups().forEach(function (wrapper) {\n ul_2 = wrapper.children[0];\n _this.destroyScrollObj(getInstance(ul_2, VScroll), ul_2);\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 if (!Object.keys(oldProp.items).length) {\n var ul_3 = this_1.element;\n ul_3.innerHTML = '';\n var lis = [].slice.call(this_1.createItems(newProp.items).children);\n lis.forEach(function (li) {\n ul_3.appendChild(li);\n });\n for (var i = 1, count = wrapper.childElementCount; i < count; i++) {\n detach(wrapper.lastElementChild);\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 }\n navIdx.length = 0;\n }\n }\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_2(prop);\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 this.getChangedItemIndex(item, index, Number(Object.keys(item.items).pop()));\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 * @private\n */\n MenuBase.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var touchModule = 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 (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 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 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 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 options.element.style.display = 'block';\n options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n },\n end: function (options) {\n _this.end(options.element, isMenuOpen);\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 };\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 = void 0;\n ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\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 * @returns string\n */\n MenuBase.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get wrapper element.\n * @returns 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 * @param items Text items that needs to be enabled/disabled.\n * @param enable Set `true`/`false` to enable/disable the list items.\n * @param 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 for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n ul = this.getUlByNavIdx(navIdx.length);\n if (ul) {\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 * @param items Text items that needs to be shown.\n * @param 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 * @param items Text items that needs to be hidden.\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 if (ishide) {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[index + 1].classList.add(HIDE);\n }\n else {\n ul.children[index].classList.add(HIDE);\n }\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[index + 1].classList.remove(HIDE);\n }\n else {\n ul.children[index].classList.remove(HIDE);\n }\n }\n }\n }\n };\n /**\n * It is used to remove the menu items from the Menu based on the items text.\n * @param items Text items that needs to be removed.\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 this.removeItem(iitems, navIdx, idx);\n }\n };\n /**\n * It is used to insert the menu items after the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item after that the element to be inserted.\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 * @param items Items that needs to be inserted.\n * @param text Text item before that the element to be inserted.\n * @param 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 var showIcon;\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 (navIdx.length < uls.length) {\n idx = isAfter ? idx + 1 : idx;\n showIcon = this.hasField(iitems, this.getField('iconCss', navIdx.length - 1));\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 /**\n * Destroys the widget.\n * @returns void\n */\n MenuBase.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n if (wrapper) {\n _super.prototype.destroy.call(this);\n this.unWireEvents();\n if (this.ngElement && !this.isMenu) {\n this.ngElement.style.display = 'block';\n }\n else {\n this.closeMenu();\n this.element.innerHTML = '';\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 wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n if (this.isMenu && this.ngElement) {\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 }\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(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 Complex({}, FieldSettings)\n ], MenuBase.prototype, \"fields\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuBase.prototype, \"items\", void 0);\n __decorate([\n Complex({}, 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/// \nimport { attributes, 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 * @private\n */\n function ContextMenu(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * For internal use only - prerender processing.\n * @private\n */\n ContextMenu.prototype.preRender = function () {\n this.isMenu = false;\n _super.prototype.preRender.call(this);\n };\n ContextMenu.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n attributes(this.element, { 'role': 'menu', '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 * @param top - To specify ContextMenu vertical positioning.\n * @param left - To specify ContextMenu horizontal positioning.\n * @param target - To calculate z-index for ContextMenu based upon the specified target.\n * @method 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 ContextMenu.prototype.close = function () {\n _super.prototype.closeMenu.call(this);\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {ContextMenuModel} newProp\n * @param {ContextMenuModel} oldProp\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();\n this.target = newProp.target;\n this.wireEvents();\n break;\n }\n }\n };\n /**\n * Get module name.\n * @returns string\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})();\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, Browser, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n function NumericTextBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = 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 if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].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-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off', 'aria-live': 'assertive' });\n var localeText = { incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: '' };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.checkAttributes();\n this.prevValue = this.value;\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n if (!isNullOrUndefined(this.width)) {\n setStyleAttribute(this.container, { 'width': formatUnit(this.width) });\n }\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ? null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n }\n };\n NumericTextBox.prototype.checkAttributes = function () {\n var attributes = ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'readonly':\n var readonly = this.element.getAttribute(prop) === 'readonly'\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'hidden', 'validateHidden': 'true' } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide'))) {\n this.clear(e);\n }\n };\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var ignoreKeyCode = void 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function (event) {\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n };\n ;\n NumericTextBox.prototype.inputHandler = function (event) {\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n };\n ;\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n ;\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n ;\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var valueText = value.toString();\n var stepText = step.toString();\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n ;\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n ;\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = void 0;\n var decimalPart = value.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n ;\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = value;\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n ;\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals;\n var currentValue = this.value;\n var decimalPart = currentValue.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n ;\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n ;\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n ;\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n return true;\n }\n };\n ;\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n ;\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusIn = function (event) {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n ;\n NumericTextBox.prototype.focusOut = function (event) {\n var _this = this;\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n ;\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () { _this.isCalled = true; _this.action(action, event); }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target = document.elementFromPoint(event.clientX, event.clientY);\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\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 * @method destroy\n * @return {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n this.container.parentElement.appendChild(this.cloneElement);\n detach(this.container);\n _super.prototype.destroy.call(this);\n };\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var elementVal;\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 setStyleAttribute(this.container, { 'width': formatUnit(newProp.width) });\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.container], oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.updateValue(newProp.value);\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n break;\n case 'currencyCode':\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\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 { selectAll, select, createElement, Base } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event, onIntlChange } from '@syncfusion/ej2-base';\nimport { L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// tslint:disable-next-line:no-any\nexport var regex = {\n EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,5}' +\n '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n URL: new RegExp('^((ftp|http|https):\\/\\/)?www\\.([A-z]{2,})\\.([A-z]{2,})$'),\n DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n DIGITS: new RegExp('^[0-9]*$'),\n PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n CREDITCARD: new RegExp('^\\\\d{13,16}$')\n};\n/**\n * ErrorOption values\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n *
    \n * \n * \n *
    \n * \n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n // Initializes the FormValidator \n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n // tslint:disable-next-line:no-any\n _this.localyMessage = {};\n /**\n * Specifies the default messages for validation rules.\n * @default : { List of validation message };\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text',\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n _this.l10n = new L10n('formValidator', _this.defaultMessages, _this.locale);\n if (_this.locale) {\n _this.localeFunc();\n }\n onIntlChange.on('notifyExternalChange', _this.afterLocalization, _this);\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @return {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[name], rules, {});\n }\n else {\n this.rules[name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @return {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[name] && !rules) {\n delete this.rules[name];\n }\n else if (!isNullOrUndefined(this.rules[name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[name][rules[i]];\n }\n }\n else {\n return;\n }\n };\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n * @param {string} selected - Optional parameter to validate specified element.\n * @return {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n this.errorRules = [];\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /**\n * Reset the value of all the fields in form.\n * @return {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /**\n * Get input element by name.\n * @param {string} name - Input element name attribute value.\n * @return {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=' + name + ']', this.element));\n return this.inputElement;\n };\n /**\n * Destroy the form validator object and error elements.\n * @return {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n element.remove();\n }\n _super.prototype.destroy.call(this);\n onIntlChange.off('notifyExternalChange', this.afterLocalization);\n };\n /**\n * @private\n */\n FormValidator.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 'locale':\n this.localeFunc();\n break;\n }\n }\n };\n ;\n /**\n * @private\n */\n FormValidator.prototype.localeFunc = function () {\n for (var _i = 0, _a = Object.keys(this.defaultMessages); _i < _a.length; _i++) {\n var key = _a[_i];\n this.l10n.setLocale(this.locale);\n var value = this.l10n.getConstant(key);\n this.localyMessage[key] = value;\n }\n };\n /**\n * @private\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n /**\n * @private\n */\n // tslint:disable-next-line:no-any\n FormValidator.prototype.afterLocalization = function (args) {\n this.locale = args.locale;\n this.localeFunc();\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules \n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n break;\n case 'equalto':\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n ruleCon[ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[name]) {\n return;\n }\n var rules = Object.keys(this.rules[name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[name][rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[name][rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[name][rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=' + name + ']:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[rule](args);\n }\n };\n // Return default error message or custom error message \n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] :\n (Object.keys(this.localyMessage).length !== 0) ? this.localyMessage[rule] : this.defaultMessages[rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[i] : ruleValue;\n message = message.replace(formats[i], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = this.element.querySelector('#' + containerId);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = (select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element) ||\n select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]'));\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[i];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n var FormValidator_1;\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return option.value.length > 0;\n },\n email: function (option) {\n return regex.EMAIL.test(option.value);\n },\n url: function (option) {\n return regex.URL.test(option.value);\n },\n dateIso: function (option) {\n return regex.DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return regex.PHONE.test(option.value);\n },\n creditcard: function (option) {\n return regex.CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return regex.DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n return !isNaN(new Date(option.value).getTime());\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n else if ((option.value).indexOf(',') !== -1) {\n var uNum = (option.value).replace(/,/g, '');\n return parseFloat(uNum) >= option.param;\n }\n else {\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n }\n },\n regex: function (option) {\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n },\n };\n __decorate([\n Property('')\n ], FormValidator.prototype, \"locale\", void 0);\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n}(Base));\nexport { FormValidator };\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 } 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';\nimport { maskInputBlurHandler } from '../base/mask-base';\nvar ROOT = 'e-widget e-control-wrapper e-mask';\nvar INPUT = 'e-input';\nvar COMPONENT = 'e-maskedtextbox';\nvar CONTROL = 'e-control';\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 function MaskedTextBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Gets the component name\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\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.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 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 };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initializes the component rendering.\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 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 }\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 setElementValue.call(this, '');\n }\n if (this.floatLabelType === 'Never') {\n maskInputBlurHandler.call(this);\n }\n }\n };\n MaskedTextBox.prototype.setCssClass = function (cssClass, element) {\n if (cssClass) {\n addClass(element, cssClass);\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n this.element.style.width = formatUnit(width);\n this.inputObj.container.style.width = formatUnit(width);\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n this.inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n cssClass: this.cssClass,\n enabled: this.enabled,\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 * @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) {\n this.setMaskPlaceholder(false, false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'cssClass':\n this.setCssClass(newProp.cssClass, [this.inputObj.container]);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, 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 'mask':\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\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 var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\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 MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\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 * @return {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\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 * @method destroy\n * @return {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n this.inputObj.container.parentElement.appendChild(this.cloneElement);\n detach(this.inputObj.container);\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(true)\n ], MaskedTextBox.prototype, \"enabled\", 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(false)\n ], MaskedTextBox.prototype, \"enableRtl\", 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 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};\nimport { Component, EventHandler, Property, Event, Complex } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser } from '@syncfusion/ej2-base';\nimport { Tooltip } 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 limit data in slider.\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 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 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',\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 return _this;\n }\n Slider.prototype.preRender = function () {\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 };\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 ;\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 ;\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 ;\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 * @private\n */\n Slider.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\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 var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Always') {\n tooltipElement.forEach(function (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderDisabled);\n });\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Always') {\n tooltipElement.forEach(function (tooltipElement) {\n tooltipElement.classList.remove(classNames.sliderDisabled);\n });\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 * @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.element.tabIndex = -1;\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap';\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.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', 'aria-labelledby': this.element.id + '_title', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.secondMaterialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.secondMaterialHandle);\n }\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', 'aria-labelledby': this.element.id + '_title', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.firstMaterialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.firstMaterialHandle);\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 var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (pos === 0 && this.type !== 'Range') {\n this.getHandle().classList.add(classNames.sliderHandleStart);\n if (this.isMaterial && this.tooltip.isVisible && this.firstMaterialHandle) {\n this.firstMaterialHandle.classList.add(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderTooltipStart);\n }\n }\n }\n else {\n this.getHandle().classList.remove(classNames.sliderHandleStart);\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n this.handleStart();\n this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.tooltip.isVisible) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (!this.isMaterial) {\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.tooltipAnimation();\n }\n else {\n if (!tooltipElement.classList.contains(classNames.materialTooltipOpen) && e.propertyName !== 'transform') {\n this.openMaterialTooltip();\n }\n else {\n if (this.type === 'Default') {\n tooltipElement.style.transition = this.transition.handle;\n }\n this.refreshTooltip();\n }\n }\n }\n if (this.tooltip.showOn !== 'Always') {\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 if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n }\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipValue();\n var tooltipObj = e.currentTarget === this.firstHandle ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n if (e.currentTarget === this.firstHandle) {\n this.firstTooltipObj.open(this.firstHandle);\n }\n else {\n this.secondTooltipObj.open(this.secondHandle);\n }\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.tooltipValue();\n var tooltipObj = e.currentTarget === this.firstHandle ? this.firstTooltipObj : this.secondTooltipObj;\n if (e.currentTarget === this.firstHandle) {\n this.firstTooltipObj.close();\n }\n else {\n this.secondTooltipObj.close();\n }\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n }\n };\n Slider.prototype.setHandler = function () {\n if (this.min > this.max) {\n this.min = this.max;\n }\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 };\n Slider.prototype.tooltipValue = function () {\n var text;\n var value1;\n var value2;\n var args = {\n value: this.value,\n text: ''\n };\n this.setTooltipContent();\n args.text = text = this.firstTooltipObj.content;\n this.trigger('tooltipChange', args);\n this.addTooltipClass(args.text);\n if (text !== args.text) {\n this.customAriaText = args.text;\n this.firstTooltipObj.content = args.text;\n this.setAriaAttrValue(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.content = args.text;\n this.setAriaAttrValue(this.secondHandle);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n if (this.type === 'Range') {\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content;\n this.secondTooltipObj.content = content;\n }\n else {\n if (!isNullOrUndefined(this.handleVal1)) {\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content;\n }\n }\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 var _this = this;\n if (this.isMaterial && this.tooltip.isVisible) {\n var count_1 = content.toString().length;\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n tooltipElement.forEach(function (element, index) {\n if (!element) {\n var cssClass = count_1 > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n !index ? _this.firstTooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass :\n _this.secondTooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n if (count_1 > 4) {\n element.classList.remove(classNames.sliderMaterialDefault);\n if (!element.classList.contains(classNames.sliderMaterialRange)) {\n element.classList.add(classNames.sliderMaterialRange);\n element.style.transform = 'scale(1)';\n }\n }\n else {\n element.classList.remove(classNames.sliderMaterialRange);\n if (!element.classList.contains(classNames.sliderMaterialDefault)) {\n element.classList.add(classNames.sliderMaterialDefault);\n element.style.transform = _this.getTooltipTransformProperties(_this.previousTooltipClass).rotate;\n }\n }\n }\n });\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n var tooltipPosition;\n if (this.orientation === 'Horizontal') {\n this.tooltip.placement === 'Before' ? tooltipPosition = 'TopCenter' : tooltipPosition = 'BottomCenter';\n }\n else {\n this.tooltip.placement === 'Before' ? tooltipPosition = 'LeftCenter' : tooltipPosition = 'RightCenter';\n }\n this.firstTooltipObj.position = tooltipPosition;\n if (this.type === 'Range') {\n this.secondTooltipObj.position = tooltipPosition;\n }\n if (this.isMaterial) {\n this.firstTooltipObj.showTipPointer = true;\n this.setProperties({ tooltip: { showOn: 'Always' } }, true);\n this.firstTooltipObj.height = 30;\n if (this.type === 'Range') {\n this.secondTooltipObj.showTipPointer = true;\n this.secondTooltipObj.height = 30;\n }\n }\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n var tooltipElement = args.target === this.firstHandle ? this.firstTooltipElement = args.element :\n this.secondTooltipElement = args.element;\n if (this.tooltip.cssClass !== '') {\n addClass([tooltipElement], this.tooltip.cssClass.split(' '));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterial && this.tooltip.isVisible) {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n tooltipElement.firstChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n }\n if (this.isBootstrap) {\n switch (this.bootstrapCollisionArgs.collidedPosition) {\n case 'TopCenter':\n this.firstTooltipObj.setProperties({ 'offsetY': -(bootstrapTooltipOffset) }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetY': -(bootstrapTooltipOffset) }, false);\n }\n break;\n case 'BottomCenter':\n this.firstTooltipObj.setProperties({ 'offsetY': bootstrapTooltipOffset }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetY': bootstrapTooltipOffset }, false);\n }\n break;\n case 'LeftCenter':\n this.firstTooltipObj.setProperties({ 'offsetX': -(bootstrapTooltipOffset) }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetX': -(bootstrapTooltipOffset) }, false);\n }\n break;\n case 'RightCenter':\n this.firstTooltipObj.setProperties({ 'offsetX': bootstrapTooltipOffset }, false);\n if (this.type === 'Range') {\n this.secondTooltipObj.setProperties({ 'offsetX': bootstrapTooltipOffset }, false);\n }\n break;\n default:\n break;\n }\n }\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterial && this.tooltip.isVisible) {\n if (!destroy) {\n EventHandler.add(this.firstTooltipElement, 'mousedown touchstart', this.sliderDown, this);\n if (this.type === 'Range') {\n EventHandler.add(this.secondTooltipElement, 'mousedown touchstart', this.sliderDown, this);\n }\n }\n else {\n EventHandler.remove(this.firstTooltipElement, 'mousedown touchstart', this.sliderDown);\n if (this.type === 'Range') {\n EventHandler.remove(this.secondTooltipElement, 'mousedown touchstart', this.sliderDown);\n }\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 if (this.firstTooltipElement) {\n var position = void 0;\n if (this.orientation === 'Horizontal') {\n position = (this.firstTooltipElement.clientHeight + 14) - (this.firstTooltipElement.clientHeight / 2);\n }\n else {\n position = (this.firstTooltipElement.clientWidth + 14) - (this.firstTooltipElement.clientWidth / 2);\n }\n var 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 return transformProperties;\n }\n return undefined;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n this.refreshTooltip();\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n var handle = this.activeHandle === 1 ? this.firstMaterialHandle : this.secondMaterialHandle;\n if (tooltipElement.firstChild.classList.contains(classNames.materialTooltipHide)) {\n tooltipElement.firstChild.classList.remove(classNames.materialTooltipHide);\n }\n tooltipElement.firstChild.classList.add(classNames.materialTooltipShow);\n this.getHandle().style.cursor = 'default';\n tooltipElement.style.transition = this.scaleTransform;\n tooltipElement.classList.add(classNames.materialTooltipOpen);\n handle.style.transform = 'scale(0)';\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = 'scale(1)';\n }\n else {\n tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipPosition = args.target === this.firstHandle ? this.firstHandleTooltipPosition :\n this.secondHandleTooltipPosition;\n if (this.isMaterial && (tooltipPosition === undefined || tooltipPosition !== args.collidedPosition)) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\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 if (args.target === this.firstHandle) {\n this.firstHandleTooltipPosition = args.collidedPosition;\n }\n else {\n this.secondHandleTooltipPosition = args.collidedPosition;\n }\n }\n this.bootstrapCollisionArgs = args;\n };\n Slider.prototype.renderTooltip = function () {\n if (this.tooltip.showOn === 'Auto') {\n this.setProperties({ tooltip: { showOn: 'Hover' } }, true);\n }\n var tooltipPointer = this.isBootstrap ? true : false;\n this.firstTooltipObj = new Tooltip({\n showTipPointer: tooltipPointer,\n cssClass: classNames.sliderTooltip,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n afterClose: this.tooltipAfterClose.bind(this)\n });\n this.firstTooltipObj.appendTo(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj = new Tooltip({\n showTipPointer: tooltipPointer,\n cssClass: classNames.sliderTooltip,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n afterClose: this.tooltipAfterClose.bind(this)\n });\n this.secondTooltipObj.appendTo(this.secondHandle);\n }\n this.tooltipPlacement();\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n if (this.isMaterial) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.firstTooltipObj.open(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n };\n Slider.prototype.tooltipAfterClose = function (args) {\n if (args.element === this.firstTooltipElement) {\n this.firstTooltipElement = undefined;\n }\n else {\n this.secondTooltipElement = undefined;\n }\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 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 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) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var buttonElement = args.target.parentElement;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (!tooltipElement && this.tooltip.isVisible) {\n this.openTooltip();\n }\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.refreshTooltipOnMove();\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.repeatHandlerUp = function (e) {\n this.changeEvent('changed');\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\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 Slider.prototype.renderScale = function () {\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 islargeTick = ((startValue - min) % largestep === 0) ? true : false;\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);\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 start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.tickesAlignment(orien, tickWidth);\n };\n Slider.prototype.tickesAlignment = function (orien, tickWidth) {\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 this.trigger('renderedTicks', eventArgs);\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start) {\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 span.innerHTML = isNullOrUndefined(this.customValues) ? this.formatTicksValue(li, start) : start;\n };\n Slider.prototype.formatTicksValue = function (li, start) {\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);\n li.setAttribute('title', eventArgs.text.toString());\n return eventArgs.text.toString();\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 var first = this.firstChild.getBoundingClientRect();\n var firstChild;\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 var 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 (!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 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 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 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 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.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipAnimation();\n this.getHandle().focus();\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.tooltipAnimation = function () {\n if (this.tooltip.isVisible) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (this.isMaterial) {\n !tooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() : this.refreshTooltip();\n }\n else {\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.openTooltip();\n }\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (this.tooltip.isVisible) {\n if (!this.isMaterial) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'None' } };\n }\n }\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') {\n if (this.type === 'MinRange') {\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 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 if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': 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 = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + '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 = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + '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;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\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 }\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 isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\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();\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed');\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') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement && this.secondTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n this.secondTooltipElement.style.zIndex = (this.zIndex + 3) + '';\n }\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement && this.secondTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 3) + '';\n this.secondTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n }\n else if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setHandlePosition = function () {\n var _this = this;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n var val = (this.activeHandle === 1) ? this.handleVal1 : this.handleVal2;\n var handle;\n var tooltipElement;\n if (this.isMaterial && this.tooltip.isVisible) {\n tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n handle = [this.getHandle(), (this.activeHandle === 1 ? this.firstMaterialHandle : this.secondMaterialHandle)];\n }\n else {\n handle = [this.getHandle()];\n }\n if (this.tooltip.isVisible && pos === 0 && this.type !== 'Range') {\n handle[0].classList.add(classNames.sliderHandleStart);\n if (this.isMaterial) {\n handle[1].classList.add(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderTooltipStart);\n }\n }\n }\n else {\n handle[0].classList.remove(classNames.sliderHandleStart);\n if (this.tooltip.isVisible && this.isMaterial) {\n handle[1].classList.remove(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.remove(classNames.sliderTooltipStart);\n }\n }\n }\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\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');\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n var temp = this.activeHandle;\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition();\n this.activeHandle = 2;\n this.setHandlePosition();\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName) {\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) {\n this.trigger(eventName, this.changeEventArgs(eventName));\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.trigger(eventName, this.changeEventArgs(eventName));\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) {\n var eventArgs;\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.firstTooltipObj.content\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 };\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.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\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 this.min = this.max;\n }\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 * @returns void\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\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 this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.firstMaterialHandle) {\n this.enableRtl ? this.firstMaterialHandle.style.right =\n this.handlePos1 + \"px\" : this.firstMaterialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\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') {\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.secondMaterialHandle) {\n this.enableRtl ? this.secondMaterialHandle.style.right =\n this.handlePos2 + \"px\" : this.secondMaterialHandle.style.left = this.handlePos2 + \"px\";\n }\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.isMaterial && this.tooltip.isVisible && this.firstMaterialHandle) {\n this.firstMaterialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.secondMaterialHandle) {\n this.secondMaterialHandle.style.bottom = this.handlePos2 + \"px\";\n }\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': 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.renderScale();\n }\n this.handleStart();\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip();\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) {\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) {\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();\n }\n };\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 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.round = function (a) {\n var f = this.step.toString().split('.');\n return f[1] ? parseFloat(a.toFixed(f[1].length)) : Math.round(a);\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 var pos;\n if (evt.type === 'mousedown' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (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.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\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.isMaterial && this.tooltip.isVisible) {\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n 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 if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipAnimation();\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && 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();\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.refreshTooltipOnMove = function () {\n if (this.tooltip.isVisible) {\n this.tooltipValue();\n this.activeHandle === 1 ? this.firstTooltipObj.refresh(this.firstHandle) :\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n };\n Slider.prototype.sliderDown = 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.getHandle().focus();\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n else {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\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 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 this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\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 this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\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.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, this.min, 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition();\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !this.firstTooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !this.firstTooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n this.activeHandle = 2;\n this.setHandlePosition();\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !this.secondTooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !this.secondTooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function () {\n this.changeEvent('changed');\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n if (this.tooltip.isVisible) {\n if (this.tooltip.showOn !== 'Always') {\n this.closeTooltip();\n }\n if (!this.isMaterial) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'None' } };\n }\n }\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.tooltip.isVisible) {\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n 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 (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 (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();\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !tooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !tooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n this.changeEvent('changed');\n if (this.tooltip.isVisible) {\n if (this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.activeHandle = 1;\n this.firstTooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.closeTooltip();\n this.activeHandle = 2;\n this.secondTooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.closeTooltip();\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\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 () {\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n this.firstTooltipObj.refresh(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n }\n };\n Slider.prototype.openTooltip = function () {\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n if (this.isMaterial) {\n this.openMaterialTooltip();\n }\n else {\n if (this.activeHandle === 1) {\n this.firstTooltipObj.open(this.firstHandle);\n }\n else {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\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 if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\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.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, 'mousedown touchstart', this.sliderDown, this);\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 }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'mousedown touchstart', this.sliderDown);\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 };\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.tooltipAnimation();\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n }\n }\n this.changeEvent('changed');\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 }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n var _this = this;\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n if (this.isMaterial && this.tooltip.isVisible) {\n var transformProperties_1 = this.getTooltipTransformProperties(this.previousTooltipClass);\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n var hiddenHandle_1 = this.type !== 'Range' ? [this.firstHandle] : [this.firstHandle, this.secondHandle];\n var handle_1 = this.type !== 'Range' ? [this.firstMaterialHandle] :\n [this.firstMaterialHandle, this.secondMaterialHandle];\n tooltipElement.forEach(function (tooltipElement, index) {\n if (tooltipElement) {\n tooltipElement.style.transition = _this.scaleTransform;\n tooltipElement.firstChild.classList.remove(classNames.materialTooltipShow);\n tooltipElement.firstChild.classList.add(classNames.materialTooltipHide);\n hiddenHandle_1[index].style.cursor = '-webkit-grab';\n hiddenHandle_1[index].style.cursor = 'grab';\n handle_1[index].style.transform = 'scale(1)';\n tooltipElement.classList.remove(classNames.materialTooltipOpen);\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = transformProperties_1.translate + ' ' + 'scale(0.01)';\n }\n else {\n tooltipElement.style.transform = transformProperties_1.translate + ' ' +\n transformProperties_1.rotate + ' ' + 'scale(0.01)';\n }\n setTimeout(function () { tooltipElement.style.transition = 'none'; }, 2500);\n }\n });\n }\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.closeTooltip = function () {\n if (this.tooltip.isVisible) {\n this.tooltipValue();\n if (this.activeHandle === 1) {\n this.firstTooltipObj.close();\n }\n else {\n this.secondTooltipObj.close();\n }\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) {\n if (this.isMaterial && this.firstMaterialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.firstMaterialHandle);\n this.firstTooltipElement = undefined;\n this.firstHandleTooltipPosition = undefined;\n if (this.secondMaterialHandle) {\n this.removeElement(this.secondMaterialHandle);\n this.secondTooltipElement = undefined;\n this.secondHandleTooltipPosition = undefined;\n }\n }\n if (this.tooltip.isVisible && this.isMaterial) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n this.removeElement(this.firstHandle);\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n }\n this.removeElement(this.rangeBar);\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.firstTooltipObj)) {\n this.firstTooltipObj.destroy();\n if (type === 'Range' && !isNullOrUndefined(this.secondTooltipObj)) {\n this.secondTooltipObj.destroy();\n }\n }\n if (this.limits.enabled && type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n }\n }\n if (type === 'Range') {\n if (this.limits.enabled) {\n if (!isNullOrUndefined(this.limitBarFirst) && !isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarFirst);\n this.removeElement(this.limitBarSecond);\n }\n }\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.updateConfig();\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.firstTooltipObj.refresh(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.refresh(this.secondHandle);\n }\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);\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip();\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\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 * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Prepares the slider for safe removal from the DOM.\n * Detaches all event handlers, attributes, and classes to avoid memory leaks.\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.firstTooltipObj.destroy();\n if (this.type === 'Range' && !isNullOrUndefined(this.secondTooltipObj)) {\n this.secondTooltipObj.destroy();\n }\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\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 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 (oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip();\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 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();\n }\n break;\n case 'type':\n this.changeSliderType(oldProp.type);\n this.setZindex();\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.firstBtn = undefined;\n this.secondBtn = undefined;\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValue':\n this.setValue();\n this.reposition();\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();\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') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function () {\n this.changeSliderType(this.type);\n };\n /**\n * Gets the component name\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(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 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 Property(false)\n ], Slider.prototype, \"enableRtl\", 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 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};\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { remove, addClass, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar FOCUS = 'e-input-focus';\nvar DEVICE = 'e-device';\nvar LISTCLASS = ListBaseClasses.li;\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nexport var TimePickerBase;\n(function (TimePickerBase) {\n // tslint:disable-next-line\n function createListItems(createdEl, min, max, globalize, timeFormat, step) {\n var formatOptions;\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: timeFormat, type: 'time' };\n }\n else {\n formatOptions = { format: timeFormat, type: 'time', calendar: 'islamic' };\n }\n var start;\n var end;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(createdEl, listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * \n * \n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n return _this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.setTimeAllowEdit();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setValue(this.getFormattedValue(this.value));\n };\n TimePicker.prototype.setTimeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n this.popupCreation();\n this.popupObj.hide();\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.validationAttribute = function (target, input) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n input.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true);\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkAttributes(); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n }, this.createElement);\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n }\n if (this.inputWrapper.container) {\n remove(this.inputWrapper.container);\n }\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n _super.prototype.destroy.call(this);\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = this.createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.generateList();\n append([this.listWrapper], this.popupWrapper);\n }\n document.body.appendChild(this.popupWrapper);\n this.addSelection();\n this.renderPopup();\n this.setScrollPosition();\n };\n TimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n TimePicker.prototype.generateList = function () {\n this.createListItems();\n this.wireListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n TimePicker.prototype.popupCalculation = function () {\n var left = 0;\n if (Browser.isDevice) {\n var firstItem = this.isEmptyList() ? this.listTag : this.liCollections[0];\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n (this.enableRtl ? parseInt(getComputedStyle(this.inputElement).paddingRight, 10) :\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10)));\n }\n return left;\n };\n TimePicker.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0 ||\n isNullOrUndefined(this.liCollections);\n };\n TimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n var offset = Browser.isDevice ? this.setPopupPosition() : 2;\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n collision: { X: 'flip', Y: 'flip' },\n relateTo: this.inputWrapper.container,\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n offsetX: this.popupCalculation(),\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.setAttribute('aria-activedescendant', 'null');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.removeErrorClass = function () {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if (this.validateState(value)) {\n this.removeErrorClass();\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n meridian = getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.dayPeriods.format.abbreviated', cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice) {\n var firstItem = this.isEmptyList() ? this.listTag : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).textIndent, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var listHeight = this.getPopupHeight();\n var element;\n element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.format)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.compareFormatChange(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.compareFormatChange = function (value) {\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.popupHandler = function (e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n e.preventDefault();\n if (this.isPopupOpen()) {\n this.closePopup(0, e);\n }\n else {\n this.show(e);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.readonly) {\n var curPos = this.getCursorSelection();\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n this.keyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n addClass([this.inputWrapper.container], FOCUS);\n this.isNavigate = false;\n if (this.isPopupOpen()) {\n event.stopPropagation();\n }\n break;\n case 'open':\n this.show(event);\n break;\n case 'escape':\n Input.setValue(this.objToString(this.value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n addClass([this.inputWrapper.container], FOCUS);\n }\n };\n TimePicker.prototype.closePopup = function (delay, e) {\n if (this.isPopupOpen() && this.popupWrapper) {\n var args = {\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n name: 'open'\n };\n this.trigger('close', args);\n if (!args.cancel) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n this.popupObj.hide(new Animation(animModel));\n removeClass([this.inputWrapper.container], [ICONANIMATION]);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n }\n if (Browser.isDevice) {\n this.element.removeAttribute('readonly');\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.initValue = this.valueWithMinutes = this.compareFormatChange(this.inputElement.value);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(SELECTED)) {\n this.checkValue(li.getAttribute('data-value'));\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n //protected function\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n Input.setValue(this.getValue(this.initValue), this.inputElement, this.floatLabelType, this.showClearButton);\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n if (!Browser.isDevice) {\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n if (this.showClearButton) {\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n }\n }\n };\n TimePicker.prototype.formResetHandler = function () {\n if (!this.inputElement.getAttribute('value')) {\n this.value = null;\n if (this.inputElement) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.removeErrorClass();\n }\n }\n else {\n this.value = this.checkDateValue(new Date('' + this.element.getAttribute('value')));\n }\n };\n TimePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n };\n TimePicker.prototype.unBindEvents = function () {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n };\n TimePicker.prototype.clearHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n if (this.popupWrapper) {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function () {\n var attributes = ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, true);\n }\n break;\n case 'value':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n Input.setValue(inputVal, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.prevValue;\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, false);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n Input.setValue(value_1, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(time, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(this.timeCollections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ? this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n this.selectInputText();\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.setPopupPosition = function () {\n var offsetValue;\n var padding = 1;\n var popupHeight = this.getPopupHeight();\n var element = this.getActiveElement();\n var liHeight = this.liCollections[0].getBoundingClientRect().height;\n var listHeight = popupHeight / HALFPOSITION;\n var height = element.length === 0 ? this.liCollections[0].offsetTop : element[0].offsetTop;\n var lastItemOffsetValue = this.liCollections[this.liCollections.length - 1].offsetTop;\n var ulPadding = (parseInt(getComputedStyle(this.listTag).paddingTop, 10));\n if (lastItemOffsetValue - listHeight < height) {\n var count = popupHeight / liHeight;\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - ulPadding - HALFPOSITION;\n }\n else if ((height + liHeight) > listHeight) {\n offsetValue = listHeight - liHeight / HALFPOSITION;\n }\n else {\n offsetValue = height;\n }\n offsetValue = offsetValue + HALFPOSITION + ((liHeight - this.containerStyle.height) / HALFPOSITION);\n return -offsetValue;\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (e) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n event: (e || null),\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.trigger('change', eventArgs);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(date);\n }\n this.prevDate = this.valueWithMinutes = date;\n if ((this.value && +new Date(+this.value).setMilliseconds(0)) !== +date) {\n this.setProperties({ value: date }, true);\n }\n };\n TimePicker.prototype.setActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement)) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n attributes(this.inputElement, { 'aria-activedescendant': 'null' });\n }\n };\n TimePicker.prototype.removeSelection = function () {\n this.removeHover(HOVER);\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n if (items.length) {\n removeClass(items, SELECTED);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.removeHover = function (className) {\n var hoveredItem = this.getHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n if (className === NAVIGATION) {\n hoveredItem[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.getHoverItem = function (className) {\n var hoveredItem;\n if (!isNullOrUndefined(this.popupWrapper)) {\n hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n TimePicker.prototype.setActiveClass = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n };\n TimePicker.prototype.addSelection = function () {\n this.selectedElement = null;\n this.removeSelection();\n this.setActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n TimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n TimePicker.prototype.createDateObj = function (val) {\n var today = this.globalize.formatDate(new Date(), { skeleton: 'short', type: 'date' });\n var value = null;\n if (typeof val === 'string') {\n if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n today = this.defaultCulture.formatDate(new Date(), { skeleton: 'short', type: 'date' });\n value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n if (isNullOrUndefined(value)) {\n value = this.TimeParse(today, val);\n }\n }\n else {\n value = this.TimeParse(today, val);\n }\n }\n else if (val instanceof Date) {\n value = val;\n }\n return value;\n };\n TimePicker.prototype.TimeParse = function (today, val) {\n var value;\n value = this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n });\n value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n }) : value;\n value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n return value;\n };\n TimePicker.prototype.createListItems = function () {\n var _this = this;\n this.listWrapper = this.createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var start;\n var end;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs);\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n }\n };\n this.listTag = ListBase.createList(this.createElement, listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n event.preventDefault();\n var target = event.target;\n if (!(closest(target, '#' + this.popupObj.element.id)) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n target !== (this.inputWrapper && this.inputWrapper.container)) {\n if (this.isPopupOpen()) {\n this.hide();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n event.preventDefault();\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date('' + date.min));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date('' + date.max));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n TimePicker.prototype.inputBlurHandler = function (e) {\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup(0, e);\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, e);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n };\n /**\n * Focuses out the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n TimePicker.prototype.inputFocusHandler = function () {\n var focusArguments = {\n model: this\n };\n if (!this.readonly && !Browser.isDevice) {\n this.selectInputText();\n }\n this.trigger('focus', focusArguments);\n };\n /**\n * Focused the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Hides the TimePicker popup.\n * @returns void\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100, null);\n };\n /**\n * Opens the popup to show the list items.\n * @returns void\n */\n TimePicker.prototype.show = function (event) {\n if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n return;\n }\n else {\n var args = {\n popup: this.popupObj || null,\n cancel: false,\n event: event || null,\n name: 'open'\n };\n this.trigger('open', args);\n if (!args.cancel && !this.isPopupOpen() && !this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n this.inputElement.focus();\n this.popupCreation();\n if (!args.cancel) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n this.popupObj.refreshPosition(this.inputElement);\n if (this.zIndex === 1000) {\n this.popupObj.show(new Animation(openAnimation), this.element);\n }\n else {\n this.popupObj.show(new Animation(openAnimation), null);\n }\n this.setActiveDescendant();\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n addClass([this.inputWrapper.container], FOCUS);\n }\n EventHandler.add(document, 'mousedown', this.documentClickHandler, this);\n }\n }\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To get component name\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n TimePicker.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 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.inputElement.setAttribute('aria-placeholder', newProp.placeholder);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n break;\n case 'cssClass':\n this.inputWrapper.container.className += ' ' + newProp.cssClass;\n if (this.popupWrapper) {\n this.popupWrapper.className += ' ' + newProp.cssClass;\n }\n this.setProperties({ cssClass: newProp.cssClass }, true);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n this.setEnable();\n break;\n case 'allowEdit':\n this.setTimeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.updatePlaceHolder();\n this.setValue(this.value);\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.setValue(this.value);\n break;\n case 'value':\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n newProp.value = this.value;\n }\n else {\n if ((newProp.value && +new Date(+newProp.value).setMilliseconds(0)) !== +this.value) {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n }\n this.initValue = newProp.value;\n newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n this.checkValueChange(null, false);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n case 'strictMode':\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date('' + newProp.scrollTo))) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: newProp.scrollTo }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\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, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-uploader';\nvar CONTROL_WRAPPER = 'e-upload';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar RESTRICT_SEQUENTIAL = 'e-restrict-sequential';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.fileList = [];\n _this.filesData = [];\n _this.uploadedFilesData = [];\n _this.isForm = false;\n _this.allTypes = false;\n _this.pausedData = [];\n _this.uploadMetaData = [];\n _this.tabIndex = '0';\n _this.count = -1;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n Uploader.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 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.setDropArea();\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'template':\n case 'autoUpload':\n if (this.sequentialUpload) {\n this.count = -1;\n }\n this.clearAll();\n break;\n case 'sequentialUpload':\n this.count = -1;\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n /* istanbul ignore next */\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (this.fileList[i].querySelector('.e-file-play-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('resume'));\n }\n if (this.fileList[i].querySelector('.e-file-remove-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n if (this.fileList[i].querySelector('.e-file-reload-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('retry'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.localizedTexts('Upload'));\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.localizedTexts('Clear'));\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createFileList(this.filesData);\n if (this.actionButtons) {\n this.removeActionButtons();\n this.renderActionButtons();\n this.checkActionButtonStatus();\n }\n }\n };\n Uploader.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n this.localeText = { Browse: 'Browse...', Clear: 'Clear', Upload: 'Upload',\n dropFilesHint: 'Or drop files here', invalidMaxFileSize: 'File size is too large',\n invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'Unable to remove file', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', abort: 'Abort', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file',\n pauseUpload: 'File upload paused', pause: 'Pause', resume: 'Resume', retry: 'Retry',\n fileUploadCancel: 'File upload canceled'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.checkHTMLAttributes();\n if (this.asyncSettings.saveUrl === '' && this.asyncSettings.removeUrl === '' && !this.autoUpload) {\n var parentEle = this.element.parentElement;\n for (; parentEle && parentEle !== document.documentElement; parentEle = parentEle.parentElement) {\n if (parentEle.tagName === 'FORM') {\n this.isForm = true;\n this.formElement = parentEle;\n parentEle.setAttribute('enctype', 'multipart/form-data');\n parentEle.setAttribute('encoding', 'multipart/form-data');\n }\n }\n }\n // tslint:disable-next-line\n var ejInstance = getValue('ej2_instances', this.element);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-UPLOADER') {\n var inputElement = this.createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n /* istanbul ignore next */\n if (ejInstance[0].isPureReactComponent) {\n if (!isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.name);\n }\n else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.id);\n }\n else {\n this.element.setAttribute('name', 'UploadFiles');\n }\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.updateDirectoryAttributes();\n this.keyConfigs = {\n previous: 'shift+tab',\n enter: 'enter',\n next: 'tab'\n };\n if (this.element.hasAttribute('tabindex')) {\n this.tabIndex = this.element.getAttribute('tabindex');\n }\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Return the module name of the component.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n Uploader.prototype.updateDirectoryAttributes = function () {\n if (this.directoryUpload) {\n this.element.setAttribute('directory', 'true');\n this.element.setAttribute('webkitdirectory', 'true');\n }\n else {\n this.element.removeAttribute('directory');\n this.element.removeAttribute('webkitdirectory');\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = this.createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n this.browseButton.setAttribute('tabindex', this.tabIndex);\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n this.actionButtons = this.createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = this.createElement('button', { className: UPLOAD_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.clearButton = this.createElement('button', { className: CLEAR_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.actionButtons.appendChild(this.clearButton);\n this.actionButtons.appendChild(this.uploadButton);\n this.renderButtonTemplates();\n this.uploadWrapper.appendChild(this.actionButtons);\n this.browseButton.blur();\n this.uploadButton.focus();\n this.wireActionButtonEvents();\n };\n Uploader.prototype.wireActionButtonEvents = function () {\n EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n };\n Uploader.prototype.unwireActionButtonEvents = function () {\n EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n };\n Uploader.prototype.removeActionButtons = function () {\n if (this.actionButtons) {\n this.unwireActionButtonEvents();\n detach(this.actionButtons);\n this.actionButtons = null;\n }\n };\n Uploader.prototype.renderButtonTemplates = function () {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.innerHTML = '';\n this.browseButton.appendChild(this.buttons.browse);\n }\n if (this.uploadButton) {\n var uploadText = void 0;\n uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.innerText);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = void 0;\n clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.innerText);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n var fileDropArea = this.createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n this.uploadWrapper = this.createElement('div', { className: CONTROL_WRAPPER, attrs: { 'aria-activedescendant': 'li-focused' } });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (isNullOrUndefined(this.files[0].size) || !isNullOrUndefined(this.template)) {\n return;\n }\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && !this.isForm && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n document.querySelector(this.dropArea);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n }\n if (!enableDropText) {\n dropTextArea.textContent = '';\n }\n }\n else {\n this.dropZoneElement = this.uploadWrapper;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n this.bindDropEvents();\n };\n Uploader.prototype.setMultipleSelection = function () {\n if (this.multiple && !this.element.hasAttribute('multiple')) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n else if (!this.multiple) {\n this.element.removeAttribute('multiple');\n }\n };\n Uploader.prototype.checkAutoUpload = function (fileData) {\n if (this.autoUpload) {\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.sequenceUpload(fileData);\n }\n else {\n this.upload(fileData);\n }\n this.removeActionButtons();\n }\n else if (!this.actionButtons) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.sequenceUpload = function (fileData) {\n if (this.filesData.length - fileData.length === 0 ||\n this.filesData[(this.filesData.length - fileData.length - 1)].statusCode !== '1') {\n ++this.count;\n var isFileListCreated = this.showFileList ? false : true;\n if (typeof this.filesData[this.count] === 'object') {\n this.upload(this.filesData[this.count], isFileListCreated);\n if (this.filesData[this.count].statusCode === '0') {\n this.sequenceUpload(fileData);\n }\n }\n else {\n --this.count;\n }\n }\n };\n Uploader.prototype.wireEvents = function () {\n EventHandler.add(this.browseButton, 'click', this.browseButtonClick, this);\n EventHandler.add(this.element, 'change', this.onSelectFiles, this);\n EventHandler.add(document, 'click', this.removeFocus, this);\n this.keyboardModule = new KeyboardEvents(this.uploadWrapper, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n };\n Uploader.prototype.unWireEvents = function () {\n EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n EventHandler.remove(this.element, 'change', this.onSelectFiles);\n EventHandler.remove(document, 'click', this.removeFocus);\n this.keyboardModule.destroy();\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n };\n Uploader.prototype.keyActionHandler = function (e) {\n var targetElement = e.target;\n switch (e.action) {\n case 'next':\n if (e.target === this.browseButton && isNullOrUndefined(this.listParent)) {\n this.browseButton.blur();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButton.blur();\n }\n else {\n this.setTabFocus(e);\n e.preventDefault();\n e.stopPropagation();\n if (e.target === this.clearButton && this.uploadButton.hasAttribute('disabled')) {\n this.clearButton.blur();\n }\n }\n break;\n case 'previous':\n if (e.target === this.browseButton) {\n this.browseButton.blur();\n }\n else {\n this.setReverseFocus(e);\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pauseUpload');\n this.abortUpload(metaData, false);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(this.getCurrentMetaData(null, e), e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n else {\n this.removeFiles(e);\n if (!targetElement.classList.contains(ABORT_ICON)) {\n this.browseButton.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n var fileData;\n var targetMetaData;\n if (isNullOrUndefined(fileInfo)) {\n var target = this.uploadWrapper.querySelector('.' + ICON_FOCUSED).parentElement;\n fileData = this.filesData[this.fileList.indexOf(target)];\n }\n else {\n fileData = fileInfo;\n }\n for (var i = 0; i < this.uploadMetaData.length; i++) {\n if (this.uploadMetaData[i].file.name === fileData.name) {\n targetMetaData = this.uploadMetaData[i];\n }\n }\n return targetMetaData;\n };\n Uploader.prototype.setReverseFocus = function (e) {\n var target = e.target;\n if (target === this.uploadButton) {\n this.uploadButton.blur();\n this.clearButton.focus();\n }\n else if (target === this.clearButton && this.listParent && this.listParent.querySelector('.e-icons')) {\n this.clearButton.blur();\n var items = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n items[items.length - 1].classList.add(ICON_FOCUSED);\n items[items.length - 1].focus();\n }\n else {\n var iconElements = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n var index = iconElements.indexOf(target);\n if (index > 0) {\n this.removeFocus();\n iconElements[index - 1].classList.add(ICON_FOCUSED);\n iconElements[index - 1].focus();\n }\n else {\n this.removeFocus();\n this.browseButton.focus();\n }\n }\n };\n Uploader.prototype.setTabFocus = function (e) {\n var target = e.target;\n if (target === this.clearButton) {\n this.removeFocus();\n if (this.uploadButton.hasAttribute('disabled')) {\n return;\n }\n this.uploadButton.focus();\n }\n else if (target.classList.contains('e-icons')) {\n var iconElements = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n var index = iconElements.indexOf(target);\n if (index < (iconElements.length - 1)) {\n this.removeFocus();\n iconElements[index + 1].classList.add(ICON_FOCUSED);\n iconElements[index + 1].focus();\n }\n else {\n this.removeFocus();\n this.clearButton.focus();\n }\n }\n else {\n this.browseButton.blur();\n var iconElement = this.listParent.querySelectorAll('span.e-icons')[0];\n iconElement.focus();\n iconElement.classList.add(ICON_FOCUSED);\n }\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n if (this.sequentialUpload) {\n this.sequenceUpload(this.filesData);\n }\n else {\n this.upload(this.filesData);\n }\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\n /* istanbul ignore next */\n if (this.sequentialUpload) {\n this.count = -1;\n }\n };\n Uploader.prototype.bindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n EventHandler.add(this.dropZoneElement, 'paste', this.onPasteFile, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n }\n };\n Uploader.prototype.onDragLeave = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.dropElement = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.onPasteFile = function (event) {\n var item = event.clipboardData.items;\n if (item.length !== 1) {\n return;\n }\n var pasteFile = [].slice.call(item)[0];\n if ((pasteFile.kind === 'file') && pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\n }\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var liElement = this.fileList[index];\n var fileData = this.filesData[index];\n if (args.target.classList.contains(ABORT_ICON)) {\n fileData.statusCode = '5';\n if (!isNullOrUndefined(liElement)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.uploadSequential();\n }\n }\n else {\n this.remove(fileData, false, false, args);\n }\n this.element.value = '';\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n var index;\n if (customTemplate) {\n if (!this.showFileList) {\n index = this.filesData.indexOf(file);\n this.filesData.splice(index, 1);\n }\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n detach(selectedElement);\n index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n if (index <= this.count) {\n --this.count;\n }\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, eventArgs, removeDirectly, custom) {\n var _this = this;\n var selectedFiles = file;\n var name = this.element.getAttribute('name');\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n var formData = new FormData();\n var liElement = this.getLiElement(file);\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs);\n }\n if (eventArgs.cancel) {\n e.cancel = true;\n return;\n }\n if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n var spinnerTarget = void 0;\n spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ? liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name, selectedFiles.rawFile);\n }\n else {\n formData.append(name, selectedFiles.name);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n };\n ajax.onLoad = function (e) { _this.removeCompleted(e, selectedFiles, custom); return {}; };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.removeFailed(e, selectedFiles, custom); return {}; };\n ajax.send(formData);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n var _loop_1 = function (i) {\n var data = customData[i];\n // tslint:disable-next-line\n var value = Object.keys(data).map(function (e) {\n return data[e];\n });\n formData.append(Object.keys(data)[0], value);\n };\n for (var i = 0; i < customData.length; i++) {\n _loop_1(i);\n }\n }\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.removeFilesData(files, customTemplate);\n var index = this.uploadedFilesData.indexOf(files);\n this.uploadedFilesData.splice(index, 1);\n this.trigger('change', { files: this.uploadedFilesData });\n };\n Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n };\n if (!customTemplate) {\n var index = this.filesData.indexOf(files);\n var rootElement = this.fileList[index];\n if (rootElement) {\n var statusElement = rootElement.querySelector('.' + STATUS);\n rootElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n var liElement = this.getLiElement(files);\n /* istanbul ignore next */\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getFilesFromFolder = function (event) {\n this.filesEntries = [];\n var items;\n items = this.multiple ? event.dataTransfer.items : [event.dataTransfer.items[0]];\n var validDirectoryUpload = this.checkDirectoryUpload(items);\n if (!validDirectoryUpload) {\n return;\n }\n var _loop_2 = function (i) {\n // tslint:disable-next-line\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n // tslint:disable-next-line\n (item).file(function (fileObj) {\n var path = item.fullPath;\n files_2.push({ 'path': path, 'file': fileObj });\n });\n this_1.renderSelectedFiles(event, files_2, true);\n }\n else if (item.isDirectory) {\n this_1.traverseFileTree(item, event);\n }\n };\n var this_1 = this;\n for (var i = 0; i < items.length; i++) {\n _loop_2(i);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.checkDirectoryUpload = function (items) {\n for (var i = 0; i < items.length; i++) {\n // tslint:disable-next-line\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n // tslint:disable\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n var _this = this;\n if (typeof (item) === 'boolean') {\n var files_3 = [];\n var _loop_3 = function (i) {\n this_2.filesEntries[i].file(function (fileObj) {\n var path = _this.filesEntries[i].fullPath;\n files_3.push({ 'path': path, 'file': fileObj });\n });\n };\n var this_2 = this;\n for (var i = 0; i < this.filesEntries.length; i++) {\n _loop_3(i);\n }\n this.renderSelectedFiles(event, files_3, true);\n }\n else if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n // tslint:disable-next-line\n var directoryReader = item.createReader();\n // tslint:disable-next-line\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i]);\n // tslint:disable-next-line\n }\n ;\n _this.traverseFileTree(true);\n _this.filesEntries = [];\n });\n }\n };\n // tslint:enable\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var targetFiles;\n if (args.type === 'drop') {\n /* istanbul ignore next */\n if (this.directoryUpload) {\n this.getFilesFromFolder(args);\n }\n else {\n var files = args.dataTransfer.files;\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n this.renderSelectedFiles(args, targetFiles);\n }\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n this.renderSelectedFiles(args, targetFiles);\n }\n };\n Uploader.prototype.renderSelectedFiles = function (args, \n // tslint:disable-next-line\n targetFiles, directory, paste) {\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n isModified: false,\n modifiedFilesData: [],\n progressInterval: '',\n isCanceled: false\n };\n /* istanbul ignore next */\n if (targetFiles.length < 1) {\n eventArgs.isCanceled = true;\n this.trigger('selected', eventArgs);\n return;\n }\n var fileData = [];\n if (!this.multiple) {\n this.clearData(true);\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = directory ? targetFiles[i].file : targetFiles[i];\n var fileName = directory ? targetFiles[i].path.substring(1, targetFiles[i].path.length) : paste ?\n getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name) :\n this.directoryUpload ? targetFiles[i].webkitRelativePath : file.name;\n var fileDetails = {\n name: fileName,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1'\n };\n if (paste) {\n fileDetails.fileSource = 'paste';\n }\n fileDetails.status = fileDetails.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n fileDetails.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : fileDetails.status;\n if (fileDetails.validationMessages.minSize !== '' || fileDetails.validationMessages.maxSize !== '') {\n fileDetails.statusCode = '0';\n }\n fileData.push(fileDetails);\n }\n eventArgs.filesData = fileData;\n if (this.allowedExtensions.indexOf('*') > -1) {\n this.allTypes = true;\n }\n if (!this.allTypes) {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (this.showFileList) {\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n var dataFiles = this.allTypes ? eventArgs.modifiedFilesData :\n this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n this.filesData = dataFiles;\n if (!this.isForm) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.createFileList(fileData);\n this.filesData = this.filesData.concat(fileData);\n if (!this.isForm) {\n this.checkAutoUpload(fileData);\n }\n }\n if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n this.progressInterval = eventArgs.progressInterval;\n }\n }\n else {\n this.filesData = this.filesData.concat(fileData);\n if (this.autoUpload) {\n this.upload(this.filesData, true);\n }\n }\n };\n Uploader.prototype.clearData = function (singleUpload) {\n if (!isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n }\n if (Browser.info.name !== 'msie' && !singleUpload) {\n this.element.value = '';\n }\n this.fileList = [];\n this.filesData = [];\n this.removeActionButtons();\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = this.createElement('div', { id: 'clonewrapper' });\n var added = -1;\n var removedList;\n if (this.listParent) {\n for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n var liElement = this.listParent.querySelectorAll('li')[i];\n previousListClone.appendChild(liElement.cloneNode(true));\n }\n removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createParentUL();\n for (var index = 0; index < filesData.length; index++) {\n for (var j = 0; j < this.filesData.length; j++) {\n if (this.filesData[j].name === filesData[index].name) {\n this.listParent.appendChild(oldList[j]);\n EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n this.fileList.push(oldList[j]);\n added = index;\n }\n }\n if (added !== index) {\n this.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(filesData);\n }\n };\n Uploader.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n Uploader.prototype.checkExtension = function (files) {\n var dropFiles = files;\n if (!this.isBlank(this.allowedExtensions)) {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var liElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n this.listParent.appendChild(liElement);\n var fromElements = [].slice.call(this.uploadTemplateFn(listItem));\n append(fromElements, liElement);\n this.fileList.push(liElement);\n }\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = this.createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n }\n };\n Uploader.prototype.createFileList = function (fileData) {\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n this.createCustomfileList(fileData);\n }\n else {\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var liElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n var textContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var textElement = this.createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = this.createElement('span', { className: FILE_TYPE });\n fileExtension.innerHTML = '.' + this.getFileType(listItem.name);\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = this.createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = this.createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = this.createElement('span', { className: ' e-icons', attrs: { 'tabindex': '-1' } });\n /* istanbul ignore next */\n if (Browser.info.name === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(DELETE_ICON)) {\n iconElement.classList.add(REMOVE_ICON);\n }\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n }\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n var text;\n if (nameElement.offsetWidth < nameElement.scrollWidth) {\n text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode) {\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n files.status = status;\n files.statusCode = statusCode;\n }\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var index;\n for (var i = 0; i < this.filesData.length; i++) {\n if (this.filesData[i].name === files.name) {\n index = i;\n }\n }\n return this.fileList[index];\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = this.createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = this.createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = this.createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = this.createElement('span', { className: PROGRESSBAR_TEXT });\n progressbarText.textContent = '0%';\n progressbarInnerWrapper.appendChild(progressBar);\n progressbarWrapper.appendChild(progressbarInnerWrapper);\n progressbarWrapper.appendChild(progressbarText);\n liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateProgressbar = function (e, li) {\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n if (value === 0 || value === 100) {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n else {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n };\n Uploader.prototype.changeProgressValue = function (li, progressValue) {\n li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n };\n Uploader.prototype.uploadInProgress = function (e, files, customUI, request) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI)) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n /* istanbul ignore next */\n if (files.statusCode === '5') {\n this.cancelUploadingFile(files, e, request, li);\n }\n if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n this.createProgressBar(li);\n this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n this.updateProgressbar(e, li);\n var iconEle = li.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n iconEle.setAttribute('title', this.localizedTexts('abort'));\n iconEle.classList.remove(REMOVE_ICON);\n }\n }\n else {\n this.cancelUploadingFile(files, e, request);\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\n };\n /* istanbul ignore next */\n Uploader.prototype.cancelUploadingFile = function (files, e, request, li) {\n var _this = this;\n if (files.statusCode === '5') {\n var eventArgs = {\n event: e,\n fileData: files,\n cancel: false\n };\n this.trigger('canceling', eventArgs);\n if (eventArgs.cancel) {\n files.statusCode = '3';\n if (!isNullOrUndefined(li)) {\n var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(li.querySelector('.e-spinner-pane'));\n }\n }\n return;\n }\n request.emitError = false;\n request.httpRequest.abort();\n var formData = new FormData();\n if (files.statusCode === '5') {\n var name_1 = this.element.getAttribute('name');\n formData.append(name_1, files.name);\n formData.append('cancel-uploading', files.name);\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.onLoad = function (e) { _this.removecanceledFile(e, files); return {}; };\n ajax.send(formData);\n }\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var args = { event: e, response: requestResponse, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': '-1' } });\n liElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) { _this.reloadcanceledFile(e, file, liElement, false); }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n if (!custom) {\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n detach(liElement.querySelector('.' + RETRY_ICON));\n }\n this.pauseButton = null;\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n liElement.classList.add(RESTRICT_SEQUENTIAL);\n }\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(DELETE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.getResponse = function (e) {\n // tslint:disable-next-line\n var target = e.currentTarget;\n var response = {\n readyState: target.readyState,\n statusCode: target.status,\n statusText: target.statusText,\n headers: target.getAllResponseHeaders(),\n withCredentials: target.withCredentials\n };\n return response;\n };\n Uploader.prototype.raiseSuccessEvent = function (e, file) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.uploadedFilesData.push(file);\n this.trigger('change', { file: this.uploadedFilesData });\n this.checkActionButtonStatus();\n if (this.sequentialUpload && this.fileList.length > 0) {\n if ((!(this.getLiElement(file)).classList.contains(RESTRICT_SEQUENTIAL))) {\n this.uploadSequential();\n }\n else {\n /* istanbul ignore next */\n (this.getLiElement(file)).classList.remove(RESTRICT_SEQUENTIAL);\n }\n }\n };\n Uploader.prototype.uploadFailed = function (e, file) {\n var li = this.getLiElement(file);\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, this.localizedTexts('uploadFailedMessage'), '0')\n };\n if (!isNullOrUndefined(li)) {\n this.renderFailureState(e, file, li);\n }\n this.trigger('failure', args);\n this.checkActionButtonStatus();\n this.uploadSequential();\n };\n Uploader.prototype.uploadSequential = function () {\n if (this.sequentialUpload) {\n if (this.autoUpload) {\n /* istanbul ignore next */\n this.checkAutoUpload(this.filesData);\n }\n else {\n this.uploadButtonClick();\n }\n }\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () { _this.animateProgressBar(li, callType); }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n this.element.setAttribute('accept', extensions);\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n var exception = void 0;\n try {\n if (document.querySelectorAll(uploadTemplate).length) {\n return compile(document.querySelector(uploadTemplate).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n this.enableRtl ? addClass([this.uploadWrapper], RTL) : removeClass([this.uploadWrapper], RTL);\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function () {\n if (this.element.hasAttribute('accept')) {\n this.allowedExtensions = this.element.getAttribute('accept');\n this.initialAttr.accept = this.allowedExtensions;\n }\n if (this.element.hasAttribute('multiple')) {\n this.multiple = true;\n this.initialAttr.multiple = true;\n }\n if (this.element.hasAttribute('disabled')) {\n this.enabled = false;\n this.initialAttr.disabled = true;\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom) {\n var start = 0;\n var end = Math.min(this.asyncSettings.chunkSize, file.size);\n var index = 0;\n var blob = file.rawFile.slice(start, end);\n var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n this.sendRequest(file, metaData, custom);\n };\n Uploader.prototype.sendRequest = function (file, metaData, custom) {\n var _this = this;\n var formData = new FormData();\n var blob = file.rawFile.slice(metaData.start, metaData.end);\n formData.append('chunkFile', blob, file.name);\n formData.append('chunk-index', metaData.chunkIndex.toString());\n formData.append('chunkIndex', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n formData.append('totalChunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.onLoad = function (e) { _this.chunkUploadComplete(e, metaData, custom); return {}; };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n eventArgs.currentChunkIndex = metaData.chunkIndex;\n if (eventArgs.currentChunkIndex === 0) {\n // This event is currently not required but to avoid breaking changes for previous customer, we have included.\n _this.trigger('uploading', eventArgs);\n }\n _this.trigger('chunkUploading', eventArgs);\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n _this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.chunkUploadFailed(e, metaData, custom); return {}; };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n var liElement = this.getLiElement(eventArgs.fileData);\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': '-1' } });\n liElement.insertBefore(this.pauseButton, liElement.querySelector('.' + REMOVE_ICON));\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) { _this.reloadcanceledFile(e, file, liElement); }, false);\n this.checkActionButtonStatus();\n };\n Uploader.prototype.checkChunkUpload = function () {\n return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n };\n Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n var _this = this;\n var response = e.target;\n var liElement;\n if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: totalChunk,\n chunkSize: this.asyncSettings.chunkSize,\n response: requestResponse\n };\n this.trigger('chunkSuccess', eventArgs);\n if (isNullOrUndefined(custom) || !custom) {\n liElement = this.getLiElement(metaData.file);\n }\n this.updateMetaData(metaData);\n if (metaData.end === metaData.file.size) {\n metaData.file.statusCode = '3';\n }\n if (metaData.file.statusCode === '5') {\n var eventArgs_1 = { event: e, fileData: metaData.file, cancel: false };\n this.trigger('canceling', eventArgs_1);\n if (eventArgs_1.cancel) {\n metaData.file.statusCode = '3';\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n this.sendNextRequest(metaData);\n return;\n }\n metaData.request.emitError = false;\n response.abort();\n var formData = new FormData();\n var name_2 = this.element.getAttribute('name');\n formData.append(name_2, metaData.file.name);\n formData.append('cancel-uploading', metaData.file.name);\n formData.append('cancelUploading', metaData.file.name);\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.onLoad = function (e) { _this.removeChunkFile(e, metaData, custom); return {}; };\n ajax.send(formData);\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n this.sendNextRequest(metaData);\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon.classList.add(RETRY_ICON);\n pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n targetElement.nextElementSibling.classList.add(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(DELETE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize,\n cancel: false,\n response: requestResponse\n };\n this.trigger('chunkFailure', eventArgs);\n // To prevent triggering of failure event\n // tslint:disable-next-line\n if (!eventArgs.cancel) {\n if (metaData.retryCount < this.asyncSettings.retryCount) {\n setTimeout(function () { _this.retryRequest(liElement, metaData, custom); }, this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON);\n iconElement.classList.remove(ABORT_ICON);\n if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n if (metaData.start > 0) {\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n }\n }\n metaData.retryCount = 0;\n var file = metaData.file;\n var args = {\n e: e, response: requestResponse,\n operation: 'upload',\n file: this.updateStatus(file, this.localizedTexts('uploadFailedMessage'), '0')\n };\n this.trigger('failure', args);\n this.uploadSequential();\n }\n }\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n this.pauseUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n (this.getLiElement(metaData.file)).classList.add(RESTRICT_SEQUENTIAL);\n }\n };\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var target;\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n liElement.querySelector('.' + DELETE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(REMOVE_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var loadedSize = (metaData.chunkIndex * this.asyncSettings.chunkSize);\n var value = Math.min((((loadedSize + e.loaded) / metaData.file.size) * 100), 100);\n this.changeProgressValue(liElement, Math.round(value).toString() + '%');\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)) {\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': '-1' } });\n if (Browser.info.name === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n liElement.insertBefore(this.pauseButton, liElement.querySelector('.' + ABORT_ICON));\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) { _this.checkPausePlayAction(e); }, false);\n }\n };\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n * @param { number } bytes - specifies the file size in bytes.\n * @returns string\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n var size;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns File[]\n */\n Uploader.prototype.sortFileList = function (filesData) {\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n var index = 0;\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_3 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_3 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearAll();\n this.unWireEvents();\n this.unBindDropEvents();\n if (this.multiple) {\n this.element.removeAttribute('multiple');\n }\n if (!this.enabled) {\n this.element.removeAttribute('disabled');\n }\n this.element.removeAttribute('accept');\n this.setInitialAttributes();\n this.uploadWrapper.parentElement.appendChild(this.cloneElement);\n this.cloneElement.classList.remove('e-control', ROOT);\n detach(this.uploadWrapper);\n this.uploadWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Allows you to call the upload process manually by calling save URL action.\n * To process the selected files (added in upload queue), pass an empty argument otherwise\n * upload the specific file based on its argument.\n * @param { FileInfo | FileInfo[] } files - specifies the files data for upload.\n * @returns void\n */\n Uploader.prototype.upload = function (files, custom) {\n var uploadFiles = this.validateFileType(files);\n this.uploadFiles(uploadFiles, custom);\n };\n Uploader.prototype.validateFileType = function (files) {\n var uploadFiles = [];\n if (files instanceof Array) {\n uploadFiles = files;\n }\n else {\n uploadFiles.push(files);\n }\n return uploadFiles;\n };\n Uploader.prototype.uploadFiles = function (files, custom) {\n var _this = this;\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n return;\n }\n if (!custom || isNullOrUndefined(custom)) {\n if (!this.multiple) {\n var file = [];\n file.push(files[0]);\n selectedFiles = this.filterfileList(file);\n }\n else {\n selectedFiles = this.filterfileList(files);\n }\n }\n else {\n selectedFiles = files;\n }\n var chunkEnabled = this.checkChunkUpload();\n var _loop_4 = function (i) {\n var ajax = new Ajax(this_3.asyncSettings.saveUrl, 'POST', true, null);\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs);\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n };\n if (selectedFiles[i].statusCode === '1') {\n var name_4 = this_3.element.getAttribute('name');\n formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this_3.asyncSettings.chunkSize) {\n this_3.chunkUpload(selectedFiles[i], custom);\n }\n else {\n ajax.onLoad = function (e) { _this.uploadComplete(e, selectedFiles[i], custom); return {}; };\n ajax.onUploadProgress = function (e) {\n _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.uploadFailed(e, selectedFiles[i]); return {}; };\n ajax.send(formData);\n }\n }\n };\n var this_3 = this;\n for (var i = 0; i < selectedFiles.length; i++) {\n _loop_4(i);\n }\n };\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @returns void\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, args) {\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n customFormData: [],\n postRawFile: true\n };\n if (this.isForm) {\n eventArgs.filesData = this.getFilesData();\n this.trigger('removing', eventArgs);\n if (!eventArgs.cancel) {\n this.clearAll();\n }\n return;\n }\n var removeFiles = [];\n fileData = !isNullOrUndefined(fileData) ? fileData : this.filesData;\n if (fileData instanceof Array) {\n removeFiles = fileData;\n }\n else {\n removeFiles.push(fileData);\n }\n eventArgs.filesData = removeFiles;\n var removeUrl = this.asyncSettings.removeUrl;\n var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n if ((files.statusCode === '2' || files.statusCode === '4') && validUrl) {\n this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n }\n else {\n if (!removeDirectly) {\n this.trigger('removing', eventArgs);\n }\n if (eventArgs.cancel) {\n return;\n }\n this.removeFilesData(files, customTemplate);\n }\n }\n };\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n * @returns void\n */\n Uploader.prototype.clearAll = function () {\n if (isNullOrUndefined(this.listParent)) {\n if (Browser.info.name !== 'msie') {\n this.element.value = '';\n }\n this.filesData = [];\n return;\n }\n var eventArgs = {\n cancel: false,\n filesData: this.filesData\n };\n this.trigger('clearing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.clearData();\n };\n /**\n * Get the data of files which are shown in file list.\n * @returns FileInfo[]\n */\n Uploader.prototype.getFilesData = function () {\n return this.filesData;\n };\n /**\n * Pauses the in-progress chunked upload based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns void\n */\n Uploader.prototype.pause = function (fileData, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns void\n */\n Uploader.prototype.resume = function (fileData, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @returns void\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n var fileDataFiles = this.validateFileType(fileData);\n this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = void 0;\n if (!custom) {\n liElement = this.fileList[this.filesData.indexOf(files[i])];\n }\n this.reloadcanceledFile(null, files[i], liElement, custom);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns void\n */\n Uploader.prototype.cancel = function (fileData) {\n var cancelingFiles = this.validateFileType(fileData);\n this.cancelUpload(cancelingFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\n if (this.asyncSettings.chunkSize > 0) {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n var metaData = this.getCurrentMetaData(files[i], null);\n metaData.file.statusCode = '5';\n metaData.file.status = this.localizedTexts('fileUploadCancel');\n this.updateMetaData(metaData);\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n else {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n files[i].statusCode = '5';\n files[i].status = this.localizedTexts('fileUploadCancel');\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n };\n Uploader.prototype.showHideUploadSpinner = function (files) {\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"sequentialUpload\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"directoryUpload\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkSuccess\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkFailure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkUploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"canceling\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"pausing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"resuming\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\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 } from '@syncfusion/ej2-base';\nimport { addClass, getUniqueID, rippleEffect } from '@syncfusion/ej2-base';\nimport { attributes, Component, closest, select } from '@syncfusion/ej2-base';\nimport { classList, removeClass } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { getModel, Item } 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 * @param {DropDownButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function DropDownButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n DropDownButton.prototype.preRender = function () {\n /** */\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\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 * @returns void\n */\n DropDownButton.prototype.toggle = function () {\n this.canOpen() ? this.openPopUp() : this.closePopup();\n };\n /**\n * Initialize the Component rendering\n * @returns void\n * @private\n */\n DropDownButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\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['role'] = 'menu',\n _a['aria-haspopup'] = this.items.length || this.target ? 'true' : 'false',\n _a['aria-expanded'] = 'false',\n _a['aria-owns'] = this.getPopUpElement().id,\n _a['type'] = 'button',\n _a));\n if (this.cssClass) {\n addClass([div], this.cssClass.split(' '));\n }\n };\n DropDownButton.prototype.getTargetElement = function () {\n return typeof (this.target) === 'string' ? select(this.target) : this.target;\n };\n DropDownButton.prototype.createItems = function (items) {\n var showIcon = this.hasIcon(items, 'iconCss');\n var span;\n var item;\n var li;\n var eventArgs;\n var ul = this.createElement('ul', {\n attrs: { 'tabindex': '0' }\n });\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n li = this.createElement('li', {\n innerHTML: item.url ? '' : item.text,\n className: item.separator ? classNames.ITEM + ' ' + classNames.SEPARATOR : classNames.ITEM,\n attrs: { 'role': 'menuItem', 'tabindex': '-1' },\n id: item.id ? item.id : getUniqueID('e-' + this.getModuleName() + '-item')\n });\n if (item.iconCss) {\n span = this.createElement('span', { className: classNames.ICON + ' ' + item.iconCss });\n li.insertBefore(span, li.childNodes[0]);\n }\n else {\n if (showIcon && !item.separator) {\n li.classList.add('e-blank-icon');\n }\n }\n if (item.url) {\n li.appendChild(this.createAnchor(item));\n }\n eventArgs = { item: item, element: li };\n this.trigger('beforeItemRender', eventArgs);\n ul.appendChild(li);\n }\n return ul;\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 return this.createElement('a', { className: 'e-menu-text e-menu-url', innerHTML: item.text, 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.createPopup();\n this.setActiveElem([this.element]);\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 * @returns string\n * @private\n */\n DropDownButton.prototype.getModuleName = function () {\n return 'dropdown-btn';\n };\n DropDownButton.prototype.canOpen = function () {\n return this.getPopUpElement().classList.contains('e-popup-close');\n };\n /**\n * Destroys the widget.\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 attrList = void 0;\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 attrList = this.element.getAttribute('class') ? ['role', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type']\n : ['role', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type', 'class'];\n attrList.forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.dropDown.destroy();\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 if (!this.disabled) {\n this.unWireEvents();\n }\n }\n };\n DropDownButton.prototype.getPopUpElement = function () {\n return this.dropDown.element;\n };\n DropDownButton.prototype.getULElement = function () {\n return this.getPopUpElement().children[0];\n };\n DropDownButton.prototype.wireEvents = function () {\n var popupElement = this.getPopUpElement();\n this.delegateMousedownHandler = this.mousedownHandler.bind(this);\n EventHandler.add(document, 'mousedown touchstart', this.delegateMousedownHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(popupElement, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n EventHandler.add(popupElement, 'keydown', this.keyBoardHandler, this);\n this.rippleFn = rippleEffect(popupElement, { selector: '.' + classNames.ITEM });\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 var ul = this.getULElement();\n var defaultIdx = e.keyCode === 40 ? 0 : ul.childElementCount - 1;\n var liIdx = defaultIdx;\n var li = null;\n this.removeCustomSelection();\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classNames.FOCUS)) {\n li = ul.children[i];\n liIdx = i;\n li.classList.remove(classNames.FOCUS);\n e.keyCode === 40 ? liIdx++ : liIdx--;\n if (liIdx === (e.keyCode === 40 ? ul.childElementCount : -1)) {\n liIdx = defaultIdx;\n }\n }\n }\n li = ul.children[liIdx];\n liIdx = this.isValidLI(li, liIdx, e.keyCode);\n if (liIdx !== -1) {\n addClass([ul.children[liIdx]], classNames.FOCUS);\n ul.children[liIdx].focus();\n }\n };\n DropDownButton.prototype.removeCustomSelection = function () {\n var selectedLi = this.getULElement().querySelector('.e-selected');\n if (selectedLi) {\n selectedLi.classList.remove('e-selected');\n }\n };\n DropDownButton.prototype.isValidLI = function (li, index, keyCode, count) {\n if (count === void 0) { count = 0; }\n if (li.classList.contains(classNames.SEPARATOR) || li.classList.contains(classNames.DISABLED)) {\n if (index === (keyCode === 40 ? this.items.length - 1 : 0)) {\n index = keyCode === 40 ? 0 : this.items.length - 1;\n }\n else {\n keyCode === 40 ? index++ : index--;\n }\n }\n li = this.getULElement().children[index];\n if (li.classList.contains(classNames.SEPARATOR) || li.classList.contains(classNames.DISABLED)) {\n count++;\n if (count === this.items.length) {\n return index = -1;\n }\n index = this.isValidLI(li, index, keyCode, count);\n }\n return index;\n };\n DropDownButton.prototype.keyEventHandler = function (e) {\n if (this.target && (e.keyCode === 13 || e.keyCode === 9)) {\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.canOpen() && !(closest(trgt, '#' + this.getPopUpElement().id) || closest(trgt, '#' + this.element.id))) {\n this.closePopup(e);\n }\n };\n DropDownButton.prototype.clickHandler = function (e) {\n var trgt = e.target;\n var canOpen = this.canOpen();\n if (closest(trgt, '#' + this.element.id)) {\n if (canOpen) {\n this.openPopUp(e);\n }\n else {\n this.closePopup(e, this.activeElem[0]);\n }\n }\n else {\n if (closest(trgt, '#' + 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 if (e === void 0) { e = null; }\n if (!this.target) {\n this.getPopUpElement().appendChild(this.createItems(this.items));\n }\n var ul = this.getULElement();\n var beforeOpenArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs);\n if (!beforeOpenArgs.cancel) {\n this.dropDown.show(null, this.element);\n addClass([this.element], 'e-active');\n this.element.setAttribute('aria-expanded', 'true');\n ul.focus();\n var openArgs = { element: ul, items: this.items };\n this.trigger('open', openArgs);\n }\n };\n DropDownButton.prototype.closePopup = function (e, focusEle) {\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);\n if (!beforeCloseArgs.cancel) {\n this.removeCustomSelection();\n this.dropDown.hide();\n removeClass(this.activeElem, 'e-active');\n this.element.setAttribute('aria-expanded', 'false');\n if (focusEle) {\n focusEle.focus();\n }\n var closeArgs = { element: ul, items: this.items };\n this.trigger('close', closeArgs);\n if (!this.target && ul) {\n detach(ul);\n }\n }\n };\n DropDownButton.prototype.unWireEvents = function () {\n EventHandler.remove(document, 'mousedown touchstart', this.delegateMousedownHandler);\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.getPopUpElement(), 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n this.rippleFn();\n };\n /**\n * Called internally if any of the property value changed.\n * @param {DropDownButtonModel} newProp\n * @param {DropDownButtonModel} oldProp\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 = this.getPopUpElement();\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.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) {\n var arrowSpan = this.element.querySelector('span.e-caret');\n classList(arrowSpan, ['e-icon-bottom'], ['e-icon-right']);\n }\n if (oldProp.cssClass) {\n removeClass([popupElement], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([popupElement], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n popupElement.classList.toggle(classNames.RTL);\n break;\n case 'target':\n this.target = newProp.target;\n detach(this.getULElement());\n popupElement.appendChild(this.getTargetElement());\n this.dropDown.content = this.getTargetElement();\n break;\n case 'items':\n this.dropDown.refresh();\n if (popupElement.classList.contains('e-popup-open')) {\n classList(popupElement, ['e-popup-close'], ['e-popup-open']);\n }\n break;\n }\n }\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 Collection([], Item)\n ], DropDownButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"target\", 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/// \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 * @param {SplitButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function SplitButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize Angular support.\n * @private\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 SplitButton.prototype.render = function () {\n this.initWrapper();\n this.createPrimaryButton();\n this.createSecondaryButton();\n this.setActiveElem([this.element, this.secondaryBtnObj.element]);\n this.setAria();\n this.wireEvents();\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.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 beforeItemRender: function (args) {\n _this.trigger('beforeItemRender', args);\n },\n beforeOpen: function (args) {\n _this.trigger('beforeOpen', args);\n },\n beforeClose: function (args) {\n _this.trigger('beforeClose', args);\n },\n open: function (args) {\n _this.trigger('open', args);\n },\n close: function (args) {\n _this.trigger('close', args);\n },\n select: function (args) {\n _this.trigger('select', args);\n }\n };\n this.secondaryBtnObj = new DropDownButton(dropDownBtnModel);\n this.secondaryBtnObj.createElement = this.createElement;\n this.secondaryBtnObj.appendTo(btnElem);\n this.secondaryBtnObj.dropDown.relateTo = this.wrapper;\n this.dropDown = this.secondaryBtnObj.dropDown;\n this.secondaryBtnObj.activeElem = [this.element, this.secondaryBtnObj.element];\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.secondaryBtnObj.keyBoardHandler);\n this.secondaryBtnObj.element.querySelector('.e-btn-icon').classList.remove('e-icon-right');\n };\n SplitButton.prototype.setAria = function () {\n attributes(this.element, {\n 'role': 'listbox', 'aria-expanded': 'false', 'aria-haspopup': 'true',\n 'aria-label': this.element.textContent + ' splitbutton', 'aria-owns': this.secondaryBtnObj.dropDown.element.id\n });\n };\n /**\n * Get component name.\n * @returns string\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 * @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 var element = document.getElementById(this.element.id);\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\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 ['role', 'aria-label', 'aria-haspopup', 'aria-expanded',\n '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 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 EventHandler.add(this.getPopUpElement(), 'keydown', this.keyBoardHandler, this);\n new KeyboardEvents(this.element, {\n keyAction: this.btnKeyBoardHandler.bind(this),\n keyConfigs: {\n altdownarrow: 'alt+downarrow'\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 }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {SplitButtonModel} newProp\n * @param {SplitButtonModel} oldProp\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 = ['items', 'beforeOpen', 'beforeItemRender', 'select', 'open',\n 'close', 'cssClass', 'disabled', 'enableRtl'];\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.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 }\n }\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 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","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 { Button } from '@syncfusion/ej2-buttons';\nimport { EventHandler, Property, NotifyPropertyChanges, Animation, attributes } from '@syncfusion/ej2-base';\nimport { Event, remove, removeClass, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar HIDESPINNER = 'e-hide-spinner';\nvar PROGRESS = 'e-progress';\nvar PROGRESSACTIVE = 'e-progress-active';\nvar CONTENTCLS = 'e-btn-content';\nvar SpinSettings = /** @class */ (function (_super) {\n __extends(SpinSettings, _super);\n function SpinSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], SpinSettings.prototype, \"template\", void 0);\n __decorate([\n Property(16)\n ], SpinSettings.prototype, \"width\", void 0);\n __decorate([\n Property('Left')\n ], SpinSettings.prototype, \"position\", void 0);\n return SpinSettings;\n}(ChildProperty));\nexport { SpinSettings };\nvar AnimationSettings = /** @class */ (function (_super) {\n __extends(AnimationSettings, _super);\n function AnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(400)\n ], AnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('None')\n ], AnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property('ease')\n ], AnimationSettings.prototype, \"easing\", void 0);\n return AnimationSettings;\n}(ChildProperty));\nexport { AnimationSettings };\n/**\n * The ProgressButton visualizes the progression of an operation to indicate the user\n * that a process is happening in the background with visual representation.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ProgressButton = /** @class */ (function (_super) {\n __extends(ProgressButton, _super);\n /**\n * Constructor for creating the widget\n * @param {ProgressButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function ProgressButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.step = 1;\n return _this;\n }\n ProgressButton.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n /**\n * Initialize the Component rendering\n * @returns void\n * @private\n */\n ProgressButton.prototype.render = function () {\n _super.prototype.render.call(this);\n this.init();\n this.wireEvents();\n this.setAria();\n };\n /**\n * Starts the button progress at the specified percent.\n * @param percent Starts the button progress at this percent.\n * @returns void\n */\n ProgressButton.prototype.start = function (percent) {\n this.isPaused = false;\n this.startProgress(percent ? percent : this.percent, this.progressTime);\n };\n /**\n * Stops the button progress.\n * @returns void\n */\n ProgressButton.prototype.stop = function () {\n this.isPaused = true;\n cancelAnimationFrame(this.timerId);\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n ProgressButton.prototype.getModuleName = function () {\n return 'progress-btn';\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n ProgressButton.prototype.destroy = function () {\n var _this = this;\n var classList = [HIDESPINNER, PROGRESSACTIVE, 'e-round-corner', 'e-' + _super.prototype.getModuleName.call(this),\n 'e-spin-' + this.spinSettings.position.toLowerCase()];\n var css;\n _super.prototype.destroy.call(this);\n this.unWireEvents();\n this.element.innerHTML = '';\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], classList);\n css = this.element.getAttribute('class') ? ['aria-label', 'aria-valuemin', 'aria-valuemax', 'aria-valuenow']\n : ['aria-label', 'aria-valuemin', 'aria-valuemax', 'aria-valuenow', 'class'];\n css.forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n if (this.disabled) {\n this.element.removeAttribute('disabled');\n }\n };\n ProgressButton.prototype.init = function () {\n this.element.classList.add('e-' + _super.prototype.getModuleName.call(this));\n this.setContent();\n this.createSpinner();\n if (this.enableProgress) {\n this.createProgress();\n }\n };\n ProgressButton.prototype.createSpinner = function () {\n var spinner = this.createElement('span', { className: 'e-spinner' });\n this.setSpinPosition(spinner);\n createSpinner({\n target: spinner, width: this.spinSettings.width || 16, template: this.spinSettings.template\n }, this.createElement);\n };\n ProgressButton.prototype.getSpinner = function () {\n return this.element.getElementsByClassName('e-spinner')[0];\n };\n ProgressButton.prototype.getProgress = function () {\n return this.element.getElementsByClassName(PROGRESS)[0];\n };\n ProgressButton.prototype.setSpinPosition = function (ele) {\n var position = this.spinSettings.position || 'Left';\n if (position === 'Left' || position === 'Top') {\n this.element.insertBefore(ele, this.element.getElementsByClassName(CONTENTCLS)[0]);\n }\n else {\n this.element.appendChild(ele);\n }\n this.element.classList.add('e-spin-' + position.toLowerCase());\n };\n ProgressButton.prototype.createProgress = function () {\n this.element.appendChild(this.createElement('span', { className: PROGRESS }));\n };\n ProgressButton.prototype.setContent = function () {\n var cont = this.element.innerHTML;\n this.element.innerHTML = '';\n this.element.appendChild(this.createElement('span', { className: CONTENTCLS, innerHTML: cont }));\n };\n ProgressButton.prototype.clickHandler = function () {\n if (this.element.classList.contains(PROGRESSACTIVE)) {\n return;\n }\n this.startProgress();\n };\n ProgressButton.prototype.startProgress = function (percent, progressTime) {\n var clsList = this.element.classList;\n var isVertical = clsList.contains('e-vertical');\n clsList.add(PROGRESSACTIVE);\n if (!(clsList.contains(HIDESPINNER))) {\n showSpinner(this.element);\n }\n this.startAnimate(Date.now(), progressTime ? progressTime : 0, progressTime ? Date.now() - (this.duration * 1 / 100) : Date.now(), percent ? percent : 0, 0, this.step, 0, isVertical);\n this.startContAnimate();\n };\n ProgressButton.prototype.startAnimate = function (timestamp, progressTime, prevTime, percent, prevPercent, step, prevProgressTime, isVertical) {\n var _this = this;\n try {\n var args_1;\n var timeDiff = timestamp - prevTime;\n var stepTime = this.duration * step / 100;\n var timeDiffBuffer = timeDiff ? (timeDiff < stepTime ? timeDiff - stepTime : timeDiff % stepTime) : 0;\n this.progressTime = progressTime = progressTime + timeDiff - timeDiffBuffer;\n prevTime = timestamp - timeDiffBuffer;\n percent = percent + (timeDiff - timeDiffBuffer) / this.duration * 100;\n prevPercent = ((progressTime - prevProgressTime) % stepTime === 0 || percent === 100) ? percent : prevPercent;\n args_1 = { percent: prevPercent, currentDuration: progressTime, step: step };\n if (percent === 0) {\n this.trigger('begin', args_1);\n }\n else if (percent === 100 || progressTime === this.duration) {\n this.trigger('end', args_1);\n }\n else {\n this.trigger('progress', args_1);\n }\n if (percent !== args_1.percent && args_1.percent !== prevPercent) {\n percent = args_1.percent;\n }\n this.percent = percent;\n this.step = args_1.step;\n if ((progressTime - prevProgressTime) % (this.duration * args_1.step / 100) === 0 || percent === 100) {\n this.timerId = requestAnimationFrame(function () {\n if (_this.enableProgress) {\n _this.getProgress().style[isVertical ? 'height' : 'width'] = percent + '%';\n }\n _this.element.setAttribute('aria-valuenow', percent.toString());\n });\n prevPercent = percent;\n prevProgressTime = progressTime;\n }\n if (!this.isPaused) {\n if (progressTime < this.duration && percent < 100) {\n setTimeout(function () {\n _this.startAnimate(Date.now(), progressTime, prevTime, percent, prevPercent, args_1.step, prevProgressTime, isVertical);\n // tslint:disable-next-line\n }, (this.duration / 100) - timeDiffBuffer);\n }\n else {\n setTimeout(function () {\n _this.progressTime = _this.percent = 0;\n if (_this.enableProgress) {\n _this.getProgress().style[isVertical ? 'height' : 'width'] = '0%';\n }\n _this.element.setAttribute('aria-valuenow', '0');\n _this.hideSpin();\n // tslint:disable-next-line\n }, 100);\n }\n }\n }\n catch (e) {\n cancelAnimationFrame(this.timerId);\n this.trigger('fail', e);\n }\n };\n ProgressButton.prototype.startContAnimate = function () {\n var _this = this;\n var ele = this.element.getElementsByClassName(CONTENTCLS)[0];\n if (this.animationSettings.effect !== 'None') {\n (new Animation({})).animate(ele, {\n duration: this.animationSettings.duration,\n name: 'Progress' + this.animationSettings.effect,\n timingFunction: this.animationSettings.easing,\n begin: function () {\n if (_this.spinSettings.position === 'Center') {\n _this.setSpinnerSize();\n }\n },\n end: function () {\n ele.classList.add('e-animate-end');\n }\n });\n }\n else if (this.spinSettings.position === 'Center') {\n this.setSpinnerSize();\n }\n };\n ProgressButton.prototype.setSpinnerSize = function () {\n var ele = this.element.getElementsByClassName(CONTENTCLS)[0];\n var spinner = this.getSpinner();\n spinner.style.width = Math.max(spinner.offsetWidth, ele.offsetWidth) + 'px';\n spinner.style.height = Math.max(spinner.offsetHeight, ele.offsetHeight) + 'px';\n ele.classList.add('e-cont-animate');\n };\n ProgressButton.prototype.hideSpin = function () {\n var cont = this.element.getElementsByClassName(CONTENTCLS)[0];\n if (!(this.element.classList.contains(HIDESPINNER))) {\n hideSpinner(this.element);\n }\n this.element.classList.remove(PROGRESSACTIVE);\n if (this.animationSettings.effect !== 'None') {\n cont.classList.remove('e-animate-end');\n }\n if (this.spinSettings.position === 'Center') {\n var ele = this.getSpinner();\n cont.classList.remove('e-cont-animate');\n ele.style.width = 'auto';\n ele.style.height = 'auto';\n }\n };\n ProgressButton.prototype.setIconSpan = function () {\n var cont = this.element.getElementsByClassName(CONTENTCLS)[0];\n var iconSpan = this.element.getElementsByClassName('e-btn-icon')[0];\n if (cont.childNodes[0] && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n cont.insertBefore(iconSpan, cont.childNodes[0]);\n }\n else {\n cont.appendChild(iconSpan);\n }\n };\n ProgressButton.prototype.setAria = function () {\n attributes(this.element, {\n 'aria-label': this.element.textContent + ' progress', 'aria-valuemin': '0', 'aria-valuemax': '100', 'aria-valuenow': '0'\n });\n };\n ProgressButton.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n };\n ProgressButton.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n };\n /**\n * Called internally if any of the property value changed.\n * @param {ProgressButton} newProp\n * @param {ProgressButton} oldProp\n * @returns void\n * @private\n */\n ProgressButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var ele = this.element;\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 'content':\n this.setContent();\n this.createSpinner();\n if (this.enableProgress) {\n this.createProgress();\n }\n ele.setAttribute('aria-label', ele.textContent + ' progress');\n break;\n case 'iconCss':\n if (!oldProp.iconCss) {\n this.setIconSpan();\n }\n break;\n case 'iconPosition':\n this.setIconSpan();\n break;\n case 'enableProgress':\n if (newProp.enableProgress) {\n this.createProgress();\n }\n else {\n remove(this.getProgress());\n }\n break;\n case 'spinSettings':\n if (newProp.spinSettings.position) {\n ele.classList.remove('e-spin-' + oldProp.spinSettings.position.toLowerCase());\n this.setSpinPosition(this.getSpinner());\n }\n if (newProp.spinSettings.template || newProp.spinSettings.width) {\n ele.removeChild(this.getSpinner());\n this.createSpinner();\n }\n break;\n }\n }\n };\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"enableProgress\", void 0);\n __decorate([\n Property(2000)\n ], ProgressButton.prototype, \"duration\", void 0);\n __decorate([\n Property('Left')\n ], ProgressButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], ProgressButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], ProgressButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], ProgressButton.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], ProgressButton.prototype, \"isToggle\", void 0);\n __decorate([\n Complex({}, SpinSettings)\n ], ProgressButton.prototype, \"spinSettings\", void 0);\n __decorate([\n Complex({}, AnimationSettings)\n ], ProgressButton.prototype, \"animationSettings\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], ProgressButton.prototype, \"fail\", void 0);\n ProgressButton = __decorate([\n NotifyPropertyChanges\n ], ProgressButton);\n return ProgressButton;\n}(Button));\nexport { ProgressButton };\n","import { addClass, createElement as internalCreateElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\n/**\n * Initialize ButtonGroup CSS component with specified properties.\n * ```html\n *
    \n * \n * \n * \n *
    \n * ```\n * ```typescript\n * createButtonGroup('#buttongroup', {\n * cssClass: 'e-outline',\n * buttons: [\n * { content: 'Day' },\n * { content: 'Week' },\n * { content: 'Work Week'}\n * ]\n * });\n * ```\n * @param {string} selector\n * @param {CreateButtonGroupModel} options\n * @returns HTMLElement\n */\nexport function createButtonGroup(selector, options, createElement) {\n if (options === void 0) { options = {}; }\n var child;\n var btnElem;\n var nextChild;\n var btnModel;\n if (isNullOrUndefined(createElement)) {\n createElement = internalCreateElement;\n }\n var wrapper = document.querySelector(selector);\n addClass([wrapper], ['e-btn-group']);\n wrapper.setAttribute('role', 'group');\n var childs = wrapper.children;\n options.buttons = options.buttons || [];\n for (var i = 0, j = 0; j < childs.length; i++, j++) {\n child = childs[j];\n btnModel = options.buttons[i];\n if (btnModel !== null) {\n if (child.tagName === 'BUTTON') {\n btnElem = child;\n }\n else {\n btnElem = createElement('label');\n nextChild = childs[j + 1];\n if (nextChild) {\n wrapper.insertBefore(btnElem, nextChild);\n }\n else {\n wrapper.appendChild(btnElem);\n }\n if (child.id) {\n btnElem.setAttribute('for', child.id);\n }\n if (btnModel && btnModel.disabled) {\n child.disabled = true;\n }\n j++;\n }\n if (options.cssClass && btnModel && !btnModel.cssClass) {\n btnModel.cssClass = options.cssClass;\n }\n new Button(btnModel || {}, btnElem);\n }\n }\n return wrapper;\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, 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 { 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 localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n };\n /**\n * To Initialize the component rendering\n * @private\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 };\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' });\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 this.element.value = value.slice(0, 7);\n this.setProperties({ 'value': value }, true);\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.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 beforeOpen: this.beforeOpenFn.bind(this),\n open: this.onOpen.bind(this),\n beforeClose: this.beforePopupClose.bind(this),\n click: function (args) {\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 }\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.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 };\n ColorPicker.prototype.onOpen = function (args) {\n this.trigger('open', { element: this.container });\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.beforeOpenFn = function (args) {\n var beforeOpenArgs = { element: this.container, event: args.event, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs);\n args.cancel = beforeOpenArgs.cancel;\n if (!args.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 };\n ColorPicker.prototype.beforePopupClose = function (args) {\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: this.container, event: args.event, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (Browser.isDevice && args.event.target === this.modal) {\n beforeCloseArgs.cancel = true;\n }\n args.cancel = beforeCloseArgs.cancel;\n if (!args.cancel) {\n this.onPopupClose();\n }\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' } });\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' }\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 = selectAll('.e-row')[0].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 refEle ? this.container.insertBefore(ele, refEle) : this.container.appendChild(ele);\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 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 select('.e-slider-track', this.opacitySlider.element).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 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 if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n getInstance(select('.' + OPACITY, this.container), NumericTextBox).value = value;\n }\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\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 isPicker ? this.appendElement(inputWrap, 2) : this.appendElement(inputWrap, 1);\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' }\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', { className: 'e-icons e-btn e-flat e-icon-btn ' + FORMATSWITCH });\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-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-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 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 enable ? this.getWrapper().classList.add(DISABLED) : this.getWrapper().classList.remove(DISABLED);\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n enable ? attributes(ele, { 'disabled': '' }) : ele.removeAttribute('disabled');\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 * @param value - Specify the color value.\n * @param type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @return {string}\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 * @method toggle\n * @return {void}\n */\n ColorPicker.prototype.toggle = function () {\n this.splitBtn.toggle();\n };\n /**\n * Get component name.\n * @returns string\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 * @return {string}\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 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.addCtrlSwitchEvent = function () {\n EventHandler.add(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler, this);\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 ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.toggle();\n this.onPopupClose();\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 });\n this.setProperties({ 'value': value }, true);\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 var x;\n var y;\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 var left = parseInt(dragHandler.style.left, 10);\n var top = parseInt(dragHandler.style.top, 10);\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 };\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 (e) {\n var target = e.target.parentElement;\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(e);\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 };\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 idx < 0 ? idx += n + emptyCount : idx %= n + emptyCount;\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 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 var eventArgs = {\n currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n };\n if (!this.showButtons && !isKey) {\n eventArgs.previousValue = { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) };\n this.trigger('change', eventArgs);\n this.setProperties({ 'value': cValue }, true);\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', eventArgs);\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 * @method destroy\n * @return {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 detach(this.element.nextElementSibling);\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n this.container = null;\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\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 wrapper = this.getWrapper();\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\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 s;\n var v = max;\n var d = max - min;\n 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 var i;\n var f;\n var p;\n var q;\n var t;\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 i = Math.floor(h);\n f = h - i;\n p = v * (1 - s);\n q = v * (1 - s * f);\n 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 }\n else {\n this.removeTileSelection();\n this.addTileSelection(select('span[aria-label=\"' + this.roundValue(newProp) + '\"]', this.container));\n }\n this.element.value = newProp.slice(0, 7);\n };\n ColorPicker.prototype.setInputEleProps = function (prop) {\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(newProp);\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.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 * @param {ColorPickerModel} newProp\n * @param {ColorPickerModel} oldProp\n * @returns void\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var wrapper = this.getWrapper();\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n if (newProp.value) {\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor = newProp.value;\n }\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 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(newProp.enableRtl);\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n this_1.changeValueProp(newProp.value);\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 __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(false)\n ], ColorPicker.prototype, \"enableRtl\", 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 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, \"created\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\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 } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-textbox';\nvar CONTROL = 'e-control';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\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 function TextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\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.element, this.floatLabelType, this.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textboxWrapper.container);\n break;\n case 'value':\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.element, this.floatLabelType, this.showClearButton);\n this.raiseChangeEvent();\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.element);\n break;\n case 'type':\n this.element.setAttribute('type', this.type);\n this.raiseChangeEvent();\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.element, 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.element);\n break;\n case 'cssClass':\n Input.setCssClass(this.cssClass, [this.textboxWrapper.container]);\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.element);\n break;\n }\n }\n };\n /**\n * Gets 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 /* istanbul ignore next */\n if (this.element.tagName === 'EJS-TEXTBOX') {\n var ejInstance = getValue('ej2_instances', this.element);\n var inputElement = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n var attributes = this.element.attributes;\n this.checkAttributes(attributes);\n this.element.setAttribute('type', this.type);\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 };\n TextBox.prototype.checkAttributes = function (attrs) {\n for (var i = 0; i < attrs.length; i++) {\n var key = attrs[i].nodeName;\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attrs[i].nodeValue }, true);\n }\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TextBox.prototype.render = function () {\n this.textboxWrapper = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n cssClass: this.cssClass,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.wireEvents();\n if (this.element.value !== '') {\n this.value = this.element.value;\n }\n if (!isNullOrUndefined(this.value)) {\n Input.setValue(this.value, this.element, this.floatLabelType, this.showClearButton);\n }\n };\n TextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\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.element.value === '') &&\n (this.previousValue !== this.element.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.inputHandler = function (args) {\n var eventArgs = {\n event: args,\n value: this.element.value,\n previousValue: this.value,\n container: this.textboxWrapper.container\n };\n this.trigger('input', eventArgs);\n };\n TextBox.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.element.value }, true);\n this.raiseChangeEvent(args, true);\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 };\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n };\n TextBox.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR))) {\n Input.setValue('', this.element, this.floatLabelType, this.showClearButton);\n this.value = '';\n }\n };\n TextBox.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\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 * @method destroy\n * @return {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n this.textboxWrapper.container.parentElement.appendChild(this.cloneElement);\n detach(this.textboxWrapper.container);\n this.textboxWrapper = null;\n this.cloneElement.classList.remove(ROOT, CONTROL);\n _super.prototype.destroy.call(this);\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n * @param { { [key: string]: string } } attributes - Specifies the attributes to be add to TextBox element.\n * @return {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.element, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.element);\n }\n else if (key === 'class') {\n this.element.classList.add(attributes[key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[key] }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n }\n else {\n this.element.setAttribute(key, attributes[key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextBox element.\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @return {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.element, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.element);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n }\n else {\n this.element.removeAttribute(key);\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(false)\n ], TextBox.prototype, \"enableRtl\", 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 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})();\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, Internationalization } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined, throwError } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n __extends(CalendarBase, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n * @param {CalendarModel} options?\n * @param {string|HTMLElement} element?\n */\n function CalendarBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.keyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n altUpArrow: 'alt+uparrow',\n spacebar: 'space',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @returns void\n * @private\n */\n CalendarBase.prototype.render = function () {\n if (this.calendarMode === 'Islamic') {\n if (+(this.min.setSeconds(0)) === +new Date(1900, 0, 1, 0, 0, 0)) {\n this.min = new Date(1944, 2, 18);\n }\n if (+this.max === +new Date(2099, 11, 31)) {\n this.max = new Date(2069, 10, 16);\n }\n }\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n }\n else {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'role': 'calendar'\n });\n }\n this.createHeader();\n this.createContent();\n this.wireEvents();\n };\n CalendarBase.prototype.validateDate = function (value) {\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n this.currentDate = new Date('' + value);\n }\n };\n CalendarBase.prototype.minMaxUpdate = function (value) {\n if (!(+this.min <= +this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n this.currentDate = new Date('' + value);\n }\n else {\n if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n this.currentDate = new Date('' + this.max);\n }\n else {\n if (+this.currentDate < +this.min) {\n this.currentDate = new Date('' + this.min);\n }\n }\n }\n };\n CalendarBase.prototype.createHeader = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n this.headerElement = this.createElement('div', { className: HEADER });\n var iconContainer = this.createElement('div', { className: ICONCONTAINER });\n this.previousIcon = this.createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n this.nextIcon = this.createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n attributes(this.nextIcon, ariaNextAttrs);\n this.headerTitleElement = this.createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(this.createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(this.createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n };\n CalendarBase.prototype.createContent = function () {\n this.contentElement = this.createElement('div', { className: CONTENT });\n this.table = this.createElement('table', { attrs: { tabIndex: '0', 'role': 'grid', 'aria-activedescendant': '' } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.createContentHeader();\n this.createContentBody();\n if (this.showTodayButton) {\n this.createContentFooter();\n }\n };\n CalendarBase.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.short', getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n return culShortNames;\n };\n CalendarBase.prototype.createContentHeader = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n var shortNames;\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = this.createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '';\n if (this.getModuleName() === 'calendar') {\n addClass([this.element], '' + WEEKNUMBER);\n }\n else {\n addClass([this.calendarElement], '' + WEEKNUMBER);\n }\n }\n shortNames = this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek);\n for (var days = 0; days <= daysCount; days++) {\n html += '' + shortNames[days] + '';\n }\n html = '' + html + '';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n CalendarBase.prototype.createContentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n CalendarBase.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n };\n CalendarBase.prototype.createContentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(+this.min);\n var maximum = new Date(+this.max);\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = this.createElement('button');\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = this.createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n CalendarBase.prototype.wireEvents = function () {\n EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n };\n CalendarBase.prototype.todayButtonClick = function (value) {\n if (this.showTodayButton) {\n if (this.currentView() === this.depth) {\n this.effect = '';\n }\n else {\n this.effect = 'e-zoomin';\n }\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date('' + value));\n }\n else {\n this.navigateTo('Month', new Date('' + value));\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n CalendarBase.prototype.keyActionHandle = function (e, value, multiSelection) {\n var view = this.getViewNumber(this.currentView());\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate;\n if (multiSelection) {\n if (!isNullOrUndefined(focusedDate) && +value === parseInt(focusedDate.getAttribute('id').split('_')[0], 10)) {\n selectedDate = focusedDate;\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n this.KeyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveRight':\n this.KeyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveUp':\n if (view === 0) {\n this.KeyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.KeyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n break;\n case 'moveDown':\n if (view === 0) {\n this.KeyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.KeyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n break;\n case 'select':\n if (e.target === this.todayElement) {\n this.todayButtonClick(value);\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element));\n }\n else {\n this.contentClick(null, --view, (element), value);\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n detach(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.KeyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date('' + this.currentDate);\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.calendarMode === 'Gregorian') {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n else {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n CalendarBase.prototype.preRender = function (value) {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n ;\n CalendarBase.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n CalendarBase.prototype.renderMonths = function (e, value) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(this.currentDate, e, value);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n this.createContentHeader();\n if (this.calendarMode === 'Gregorian') {\n this.renderTemplate(tdEles, numCells, MONTH, e, value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(tdEles, numCells, MONTH, e, value);\n }\n };\n // tslint:disable-next-line:max-func-body-length\n CalendarBase.prototype.renderDays = function (currentDate, e, value, multiSelection, values) {\n var tdEles = [];\n var cellsCount = 42;\n var localDate = new Date('' + currentDate);\n var minMaxDate;\n var numCells = this.weekNumber ? 8 : 7;\n // 8 and 7 denotes the number of columns to be specified.\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.createElement('td', { className: CELL });\n var weekAnchor = this.createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n weekAnchor.textContent = '' + this.getWeek(localDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.renderDayCellArgs;\n this.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n if (multiSelection) {\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd' }));\n var tempDateString = +new Date(this.globalize.formatDate(values[index], { type: 'date', skeleton: 'yMd' }));\n if (localDateString === tempDateString) {\n values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (value && +value === +argument.date) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.renderDayCellArgs.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n // if (args.isDisabled && +this.value === +args.date) {\n // this.setProperties({ value: null }, true);\n // }\n if (multiSelection && !isNullOrUndefined(values) && !otherMnthBool && !disabledCls) {\n for (var tempValue = 0; tempValue < values.length; tempValue++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(localDate, formatOptions);\n var tempDateString = this.globalize.formatDate(values[tempValue], formatOptions);\n if (localDateString === tempDateString && this.getDateVal(localDate, values[tempValue])) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (values.length <= 0) {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!otherMnthBool && !disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n if (date.getMonth() === new Date().getMonth() && date.getDate() === new Date().getDate()) {\n if (date.getFullYear() === new Date().getFullYear()) {\n addClass([tdEle], TODAY);\n }\n }\n tdEles.push(this.renderDayCellArgs.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n CalendarBase.prototype.updateFocus = function (otherMonth, disabled, localDate, tableElement, currentDate) {\n if (currentDate.getDate() === localDate.getDate() && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n else {\n if (currentDate >= this.max && parseInt(tableElement.id, 0) === +this.max && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n if (currentDate <= this.min && parseInt(tableElement.id, 0) === +this.min && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n }\n };\n CalendarBase.prototype.renderYears = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var days;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date('' + this.currentDate);\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date('' + this.min).getFullYear();\n var minMonth = new Date('' + this.min).getMonth();\n var maxYr = new Date('' + this.max).getFullYear();\n var maxMonth = new Date('' + this.max).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n var disabled = (this.min > localDate) || (this.max < localDate);\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n var localMonth = (value && (value).getMonth() === localDate.getMonth());\n var select = (value && (value).getFullYear() === yr && localMonth);\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'dateTime', skeleton: 'MMM' });\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e, value);\n };\n CalendarBase.prototype.renderDecades = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date('' + this.currentDate);\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date('' + (localYr - localYr % 10));\n var endYr = new Date('' + (localYr - localYr % 10 + (10 - 1)));\n var startHdrYr = this.globalize.formatDate(startYr, { type: 'dateTime', skeleton: 'y' });\n var endHdrYr = this.globalize.formatDate(endYr, { type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n attributes(tdEle, { 'role': 'gridcell' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'dateTime', skeleton: 'y' });\n if (year < new Date('' + this.min).getFullYear() || year > new Date('' + this.max).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n CalendarBase.prototype.dayCell = function (localDate) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: type };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var value = date.valueOf();\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false', 'role': 'gridcell' }\n };\n return this.createElement('td', attrs);\n };\n CalendarBase.prototype.firstDay = function (date) {\n var collection = this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.lastDay = function (date, view) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n if (view !== 2) {\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n }\n else {\n return this.findLastDay(this.firstDay(lastDate));\n }\n };\n ;\n CalendarBase.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n CalendarBase.prototype.findLastDay = function (date) {\n var collection = this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.removeTableHeadElement = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = this.createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = this.createElement('tr', { attrs: { 'role': 'row' } });\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (this.weekNumber && rowIterator === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n if (this.calendarMode === 'Gregorian') {\n this.iconHandler();\n }\n else {\n this.islamicModule.islamicIconHandler();\n }\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActiveDescendant();\n };\n CalendarBase.prototype.clickHandler = function (e, value) {\n this.clickEventEmitter(e);\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.contentClick(e, 0, null, value);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null, value);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null, value);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null);\n }\n else {\n this.contentClick(e, 0, eve, value);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n // Content click event handler required for extended components\n CalendarBase.prototype.clickEventEmitter = function (e) {\n e.preventDefault();\n };\n CalendarBase.prototype.contentClick = function (e, view, element, value) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, element);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setMonth(d.getMonth());\n if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n this.currentDate.setDate(0);\n }\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.currentDate = d;\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n break;\n case 1:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.selectDate(e, d, null);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(d);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, islamicDate.month, 1);\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n CalendarBase.prototype.switchView = function (view, e, multiSelection) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e);\n if (multiSelection && !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0])) {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n * @private\n */\n CalendarBase.prototype.getModuleName = function () {\n return 'calendar';\n };\n CalendarBase.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n return modules;\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n CalendarBase.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp, multiSelection, values) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'min':\n case 'max':\n prop === 'min' ? this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true) :\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.setProperties({ start: this.currentView() }, true);\n detach(this.tableBodyElement);\n this.minMaxUpdate();\n if (multiSelection) {\n this.validateValues(multiSelection, values);\n }\n this.createContentBody();\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n else {\n if (this.todayElement.classList.contains('e-disabled') && (this.footer) && (this.todayElement)) {\n removeClass([this.todayElement], DISABLED);\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n }\n break;\n case 'start':\n case 'weekNumber':\n case 'firstDayOfWeek':\n this.createContentHeader();\n this.createContentBody();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.createContentHeader();\n this.createContentBody();\n this.l10.setLocale(this.locale);\n this.updateFooter();\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.createContentFooter();\n }\n else {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n /**\n * values property updated with considered disabled dates of the calendar.\n */\n CalendarBase.prototype.validateValues = function (multiSelection, values) {\n if (multiSelection && !isNullOrUndefined(values) && values.length > 0) {\n var copyValues = this.copyValues(values);\n for (var skipIndex = 0; skipIndex < copyValues.length; skipIndex++) {\n var tempValue = copyValues[skipIndex];\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var tempValueString = void 0;\n if (this.calendarMode === 'Gregorian') {\n /* tslint:disable-next-line:max-line-length */\n tempValueString = this.globalize.formatDate(tempValue, { type: 'date', skeleton: 'yMd' });\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n tempValueString = this.globalize.formatDate(tempValue, { type: 'dateTime', skeleton: 'full', calendar: 'islamic' });\n }\n var minFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var minStringValue = this.globalize.formatDate(this.min, minFormatOption);\n var minString = minStringValue;\n var maxFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var maxStringValue = this.globalize.formatDate(this.max, maxFormatOption);\n var maxString = maxStringValue;\n if (+new Date(tempValueString) < +new Date(minString) ||\n +new Date(tempValueString) > +new Date(maxString)) {\n copyValues.splice(skipIndex, 1);\n skipIndex = -1;\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n };\n CalendarBase.prototype.setValueUpdate = function () {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\n };\n CalendarBase.prototype.copyValues = function (values) {\n var copyValues = [];\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n copyValues.push(new Date(+values[index]));\n }\n }\n return copyValues;\n };\n CalendarBase.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n var dayFormatOptions;\n var monthFormatOptions;\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n if (this.calendarMode === 'Gregorian') {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM', calendar: type });\n monthFormatOptions = globalize.formatDate(date, { type: 'dateTime', skeleton: 'y', calendar: type });\n }\n else {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'MMMM y', calendar: type });\n monthFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'y', calendar: type });\n }\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = dayFormatOptions;\n break;\n case 'months':\n this.headerTitleElement.textContent = monthFormatOptions;\n }\n };\n CalendarBase.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var title = this.globalize.formatDate(this.currentDate, { type: 'dateTime', skeleton: 'full', calendar: type });\n if (selectedEle || focusedEle) {\n (focusedEle || selectedEle).setAttribute('aria-selected', 'true');\n (focusedEle || selectedEle).setAttribute('aria-label', 'The current focused date is ' + '' + title);\n id = (focusedEle || selectedEle).getAttribute('id');\n }\n return id;\n };\n CalendarBase.prototype.iconHandler = function () {\n new Date('' + this.currentDate).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date('' + this.currentDate), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date('' + this.currentDate), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date('' + this.currentDate), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n CalendarBase.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar') {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar') {\n EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n }\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n CalendarBase.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n CalendarBase.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n CalendarBase.prototype.navigateTitle = function (e) {\n e.preventDefault();\n this.title(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigatePrevious = function (e) {\n e.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.previous();\n }\n else {\n this.islamicModule.islamicPrevious();\n }\n this.triggerNavigate(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigateNext = function (eve) {\n eve.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.next();\n }\n else {\n this.islamicModule.islamicNext();\n }\n this.triggerNavigate(eve);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n CalendarBase.prototype.navigateTo = function (view, date) {\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date('' + this.min);\n }\n if (+date >= +this.max) {\n this.currentDate = new Date('' + this.max);\n }\n if (this.getModuleName() === 'daterangepicker') {\n this.currentDate = date;\n }\n if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n view = this.depth;\n }\n }\n this.switchView(this.getViewNumber(view));\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n */\n CalendarBase.prototype.currentView = function () {\n if (this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n CalendarBase.prototype.getDateVal = function (date, value) {\n return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n };\n CalendarBase.prototype.getCultureObjects = function (ld, c) {\n if (this.calendarMode === 'Gregorian') {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.short', ld);\n }\n else {\n return getValue('main.' + '' + this.locale + '.dates.calendars.islamic.days.format.short', ld);\n }\n };\n ;\n CalendarBase.prototype.getWeek = function (d) {\n var currentDate = new Date('' + d).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n var a = (currentDate - date);\n return Math.ceil((((a) / dayMilliSeconds) + new Date(date).getDay() + 1) / 7);\n };\n CalendarBase.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n CalendarBase.prototype.addMonths = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, (islamicDate.month) + i, 1);\n }\n };\n CalendarBase.prototype.addYears = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year + i, (islamicDate.month), 1);\n }\n };\n CalendarBase.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: type };\n var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n var date = this.globalize.parseDate(dateString, dateFormatOptions);\n var value = date.valueOf() - date.valueOf() % 1000;\n return new Date(value);\n //return this.globalize.parseDate(dateString, dateFormatOptions);\n };\n CalendarBase.prototype.selectDate = function (e, date, node, multiSelection, values) {\n var element = node || e.currentTarget;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n if (multiSelection && !this.checkPresentDate(date, values)) {\n var copyValues = this.copyValues(values);\n if (!isNullOrUndefined(values) && copyValues.length > 0) {\n copyValues.push(new Date('' + date));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: values[values.length - 1] }, true);\n }\n else {\n this.setProperties({ values: [new Date('' + date)] }, true);\n }\n }\n else {\n this.setProperties({ value: new Date('' + date) }, true);\n }\n this.currentDate = new Date('' + date);\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n if (multiSelection) {\n var copyValues = this.copyValues(values);\n var collection = Array.prototype.slice.call(this.tableBodyElement.querySelectorAll('td'));\n for (var index = 0; index < collection.length; index++) {\n var tempElement = tableBodyElement.querySelectorAll('td' + '.' + FOCUSEDDATE)[0];\n var selectedElement = tableBodyElement.querySelectorAll('td' + '.' + SELECTED)[0];\n if (collection[index] === tempElement) {\n removeClass([collection[index]], FOCUSEDDATE);\n }\n if (collection[index] === selectedElement &&\n !this.checkPresentDate(new Date(parseInt(selectedElement.getAttribute('id').split('_')[0], 10)), values)) {\n removeClass([collection[index]], SELECTED);\n }\n }\n if (element.classList.contains(SELECTED)) {\n removeClass([element], SELECTED);\n for (var i = 0; i < copyValues.length; i++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(date, formatOptions);\n var tempDateString = this.globalize.formatDate(copyValues[i], formatOptions);\n if (localDateString === tempDateString) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n addClass([element], FOCUSEDDATE);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n addClass([element], SELECTED);\n }\n }\n else {\n addClass([element], SELECTED);\n }\n };\n CalendarBase.prototype.checkPresentDate = function (dates, values) {\n var previousValue = false;\n if (!isNullOrUndefined(values)) {\n for (var checkPrevious = 0; checkPrevious < values.length; checkPrevious++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n /* tslint:disable-next-line:max-line-length */\n var localDateString = this.globalize.formatDate(dates, { type: 'date', skeleton: 'short', calendar: type });\n /* tslint:disable-next-line:max-line-length */\n var tempDateString = this.globalize.formatDate(values[checkPrevious], { type: 'date', skeleton: 'short', calendar: type });\n if (localDateString === tempDateString) {\n previousValue = true;\n }\n }\n }\n return previousValue;\n };\n CalendarBase.prototype.setAriaActiveDescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n CalendarBase.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n CalendarBase.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n CalendarBase.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n CalendarBase.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n CalendarBase.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n CalendarBase.prototype.isMonthYearRange = function (date) {\n if (this.calendarMode === 'Gregorian') {\n return date.getMonth() >= this.min.getMonth()\n && date.getFullYear() >= this.min.getFullYear()\n && date.getMonth() <= this.max.getMonth()\n && date.getFullYear() <= this.max.getFullYear();\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n return islamicDate.month >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).month\n && islamicDate.year >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).year\n && islamicDate.month <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).month\n && islamicDate.year <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).year;\n }\n };\n CalendarBase.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n CalendarBase.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n CalendarBase.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = void 0;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(value, null);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n collection = tdEles.filter(function (element) {\n return element.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n CalendarBase.prototype.getMaxDays = function (d) {\n var date;\n var month;\n var tmpDate = new Date('' + d);\n date = 28;\n month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n CalendarBase.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date('' + date) }, true);\n };\n ;\n CalendarBase.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n }\n this.setProperties({ value: new Date('' + date) }, true);\n this.currentDate = new Date('' + value);\n };\n CalendarBase.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n __decorate([\n Property(new Date(1900, 0, 1))\n ], CalendarBase.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], CalendarBase.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], CalendarBase.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"renderDayCell\", void 0);\n CalendarBase = __decorate([\n NotifyPropertyChanges\n ], CalendarBase);\n return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n * @param {CalendarModel} options?\n * @param {string|HTMLElement} element?\n */\n function Calendar(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To Initialize the control rendering.\n * @returns void\n * @private\n */\n Calendar.prototype.render = function () {\n if (this.calendarMode === 'Islamic' && this.islamicModule === undefined) {\n throwError('Requires the injectable Islamic modules to render Calendar in Islamic mode');\n }\n if (this.isMultiSelection && typeof this.values === 'object' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var tempValues = [];\n var copyValues = [];\n for (var limit = 0; limit < this.values.length; limit++) {\n if (tempValues.indexOf(+this.values[limit]) === -1) {\n tempValues.push(+this.values[limit]);\n copyValues.push(this.values[limit]);\n }\n }\n this.setProperties({ values: copyValues }, true);\n for (var index = 0; index < this.values.length; index++) {\n if (!this.checkDateValue(this.values[index])) {\n if (typeof (this.values[index]) === 'string' && this.checkDateValue(new Date('' + this.values[index]))) {\n var copyDate = new Date('' + this.values[index]);\n this.values.splice(index, 1);\n this.values.splice(index, 0, copyDate);\n }\n else {\n this.values.splice(index, 1);\n }\n }\n }\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n this.previousValues = this.values.length;\n }\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.render.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n Calendar.prototype.formResetHandler = function () {\n this.value = null;\n };\n Calendar.prototype.validateDate = function () {\n if (typeof this.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true); // persist the value property.\n }\n _super.prototype.validateDate.call(this, this.value);\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date('' + this.value);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n }\n if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.min);\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.max);\n }\n }\n }\n else {\n _super.prototype.minMaxUpdate.call(this, this.value);\n }\n };\n Calendar.prototype.todayButtonClick = function () {\n if (this.showTodayButton) {\n var tempValue = new Date();\n if (this.value) {\n tempValue.setHours(this.value.getHours());\n tempValue.setMinutes(this.value.getMinutes());\n tempValue.setSeconds(this.value.getSeconds());\n tempValue.setMilliseconds(this.value.getMilliseconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n }\n this.setProperties({ value: tempValue }, true);\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (!_super.prototype.checkPresentDate.call(this, tempValue, this.values)) {\n copyValues.push(tempValue);\n this.setProperties({ values: copyValues });\n }\n }\n _super.prototype.todayButtonClick.call(this, new Date(+this.value));\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n _super.prototype.keyActionHandle.call(this, e, this.value, this.isMultiSelection);\n };\n /**\n * Initialize the event handler\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n _super.prototype.preRender.call(this, this.value);\n };\n ;\n Calendar.prototype.createContent = function () {\n this.previousDate = this.value;\n _super.prototype.createContent.call(this);\n };\n Calendar.prototype.minMaxDate = function (localDate) {\n return _super.prototype.minMaxDate.call(this, localDate);\n };\n Calendar.prototype.renderMonths = function (e) {\n _super.prototype.renderMonths.call(this, e, this.value);\n };\n Calendar.prototype.renderDays = function (currentDate, e) {\n var tempDays = _super.prototype.renderDays.call(this, currentDate, e, this.value, this.isMultiSelection, this.values);\n if (this.isMultiSelection) {\n _super.prototype.validateValues.call(this, this.isMultiSelection, this.values);\n }\n return tempDays;\n };\n Calendar.prototype.renderYears = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderYears.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderYears(e, this.value);\n }\n };\n Calendar.prototype.renderDecades = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderDecades.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderDecade(e, this.value);\n }\n };\n Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(elements, count, classNm, e, this.value);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n if (eve.classList.contains(OTHERMONTH)) {\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n copyValues.push(this.getIdValue(e, null));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n else {\n this.setProperties({ value: this.getIdValue(e, null) }, true);\n }\n }\n var storeView = this.currentView();\n _super.prototype.clickHandler.call(this, e, this.value);\n if (this.isMultiSelection && this.currentDate !== this.value &&\n !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0]) && storeView === 'Year') {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n };\n Calendar.prototype.switchView = function (view, e) {\n _super.prototype.switchView.call(this, view, e, this.isMultiSelection);\n };\n /**\n * To get component name\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n _super.prototype.getModuleName.call(this);\n return 'calendar';\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n Calendar.prototype.getPersistData = function () {\n _super.prototype.getPersistData.call(this);\n var keyEntity = ['value', 'values'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\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 if (typeof newProp.value === 'string') {\n this.setProperties({ value: new Date('' + newProp.value) }, true);\n }\n else {\n newProp.value = new Date('' + newProp.value);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.update();\n break;\n case 'values':\n if (typeof newProp.values === 'string' || typeof newProp.values === 'number') {\n this.setProperties({ values: null }, true);\n }\n else {\n var copyValues = this.copyValues(this.values);\n for (var index = 0; index < copyValues.length; index++) {\n var tempDate = copyValues[index];\n if (this.checkDateValue(tempDate) && !_super.prototype.checkPresentDate.call(this, tempDate, copyValues)) {\n copyValues.push(tempDate);\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.values.length > 0) {\n this.setProperties({ value: newProp.values[newProp.values.length - 1] }, true);\n }\n }\n this.validateValues(this.isMultiSelection, this.values);\n this.update();\n break;\n case 'isMultiSelection':\n this.setProperties({ isMultiSelection: newProp.isMultiSelection }, true);\n this.update();\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp, this.isMultiSelection, this.values);\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Calendar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n Calendar.prototype.navigateTo = function (view, date) {\n this.minMaxUpdate();\n _super.prototype.navigateTo.call(this, view, date);\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n */\n Calendar.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /**\n * This method is used to add the single or multiple dates to the values property of the Calendar.\n * @param {Date || Date[]} dates - Specifies the date or dates to be added to the values property of the Calendar.\n * @returns void\n */\n Calendar.prototype.addDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number') {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && (dates).length > 0) {\n var tempDates = dates;\n for (var i = 0; i < tempDates.length; i++) {\n if (this.checkDateValue(tempDates[i]) && !_super.prototype.checkPresentDate.call(this, tempDates[i], copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push(tempDates[i]);\n }\n else {\n copyValues = [new Date(+tempDates[i])];\n }\n }\n }\n }\n else {\n if (this.checkDateValue(dates) && !_super.prototype.checkPresentDate.call(this, dates, copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push((dates));\n }\n else {\n copyValues = [new Date(+dates)];\n }\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.validateValues(this.isMultiSelection, copyValues);\n this.update();\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * This method is used to remove the single or multiple dates from the values property of the Calendar.\n * @param {Date || Date[]} dates - Specifies the date or dates which need to be removed from the values property of the Calendar.\n * @returns void\n */\n Calendar.prototype.removeDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && ((dates).length > 0)) {\n var tempDates = dates;\n for (var index = 0; index < tempDates.length; index++) {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +tempDates[index]) {\n copyValues.splice(i, 1);\n }\n }\n }\n }\n else {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +dates) {\n copyValues.splice(i, 1);\n }\n }\n }\n this.setProperties({ values: copyValues }, false);\n this.update();\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n Calendar.prototype.update = function () {\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.isMultiSelection, this.values);\n if (this.isMultiSelection && !isNullOrUndefined(this.values) && this.values.length > 0) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler(e);\n };\n Calendar.prototype.changeEvent = function (e) {\n this.trigger('change', this.changedArgs);\n this.previousDate = new Date(+this.value);\n };\n Calendar.prototype.triggerChange = function (e) {\n this.changedArgs.event = e || null;\n this.changedArgs.isInteracted = !isNullOrUndefined(e);\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n if (!this.isMultiSelection && +this.value !== Number.NaN && +this.value !== +this.previousDate) {\n this.changeEvent(e);\n }\n else if (!isNullOrUndefined(this.values) && this.previousValues !== this.values.length) {\n this.changeEvent(e);\n this.previousValues = this.values.length;\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Calendar.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(CalendarBase));\nexport { Calendar };\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/// \nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { detach, addClass, removeClass, closest, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar RTL = 'e-rtl';\nvar LINK = 'e-day';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar CLOSEDURATION = 200;\nvar OFFSETVALUE = 4;\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousElementValue = '';\n _this.isDateIconClicked = false;\n _this.keyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n tab: 'tab'\n };\n _this.calendarKeyConfigs = {\n escape: 'escape',\n enter: 'enter',\n tab: 'tab'\n };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n };\n DatePicker.prototype.setAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n };\n DatePicker.prototype.initialize = function () {\n this.createInput();\n this.setAllowEdit();\n this.updateInput();\n this.previousElementValue = this.inputElement.value;\n this.previousDate = new Date(+this.value);\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: null };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n }, this.createElement);\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function () {\n var formatOptions;\n if (this.value && !this.isCalendar()) {\n this.disabledDates();\n }\n if (!+new Date('' + this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.validateDate.call(this);\n this.minMaxUpdates();\n _super.prototype.minMaxUpdate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateString = this.globalize.formatDate(this.value, formatOptions);\n }\n if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n if (!this.strictMode && value) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n }\n if (isNullOrUndefined(this.value) && this.strictMode) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.changedArgs = { value: this.value };\n this.errorClass();\n };\n ;\n DatePicker.prototype.minMaxUpdates = function () {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n };\n DatePicker.prototype.bindEvents = function () {\n if (this.enabled) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n // To prevent the twice triggering.\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.resetFormHandler, this);\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n }\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n };\n DatePicker.prototype.resetFormHandler = function () {\n if (this.inputElement.getAttribute('value')) {\n this.value = this.checkDateValue(new Date('' + this.element.getAttribute('value')));\n }\n else {\n this.value = null;\n if (this.inputElement) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n removeClass([this.inputWrapper.container], ERROR);\n }\n }\n };\n DatePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n this.changeEvent(event);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.isDateIconClicked = true;\n this.show(null, e);\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n };\n DatePicker.prototype.CalendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show(null, e);\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n case 'tab':\n this.hide(e);\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n var focusArguments = {\n model: this\n };\n this.isDateIconClicked = false;\n this.trigger('focus', focusArguments);\n };\n DatePicker.prototype.inputBlurHandler = function (e) {\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.getModuleName() === 'datepicker') {\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n if (this.isCalendar()) {\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.CalendarKeyActionHandle.bind(this),\n keyConfigs: this.calendarKeyConfigs\n });\n }\n };\n DatePicker.prototype.documentHandler = function (e) {\n if (e.type !== 'touchstart') {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper'))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))) {\n this.hide(e);\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n switch (e.action) {\n case 'altUpArrow':\n this.hide(e);\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n if (this.getModuleName() === 'datepicker') {\n this.show(null, e);\n }\n break;\n case 'escape':\n this.hide(e);\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.isCalendar()) {\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'tab':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n this.errorClass();\n this.hide(e);\n break;\n default:\n this.previousDate = ((!isNullOrUndefined(this.value) && new Date(+this.value)) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n format = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n }\n else {\n format = isNullOrUndefined(this.format) ? this.format : this.format.replace('dd', 'd');\n }\n if (!isNullOrUndefined(format)) {\n var len = format.split('M').length - 1;\n if (len < 3) {\n format = format.replace('MM', 'M');\n }\n }\n var dateOptions;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateOptions = formatOptions;\n }\n var date;\n if ((this.getModuleName() === 'datetimepicker')) {\n if (this.checkDateValue(this.globalize.parseDate(this.inputElement.value, dateOptions))) {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.parseDate(this.inputElement.value, formatOptions);\n }\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n }\n if (this.strictMode && date) {\n Input.setValue(this.globalize.formatDate(date, dateOptions), this.inputElement, this.floatLabelType, this.showClearButton);\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === '') {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = this.createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n open: function () {\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement) {\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.CalendarKeyActionHandle.bind(_this),\n keyConfigs: _this.calendarKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.CalendarKeyActionHandle.bind(_this),\n keyConfigs: _this.calendarKeyConfigs\n });\n }\n }\n }, close: function () {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n if (_this.value) {\n _this.disabledDates();\n }\n if (_this.popupObj) {\n _this.popupObj.destroy();\n }\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.setAriaAttributes();\n }\n });\n this.popupObj.element.className += ' ' + this.cssClass;\n this.setAriaAttributes();\n };\n DatePicker.prototype.modelHeader = function () {\n var dateOptions;\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var yearHeading = this.createElement('h1', { className: 'e-model-year' });\n var h2 = this.createElement('div');\n var daySpan = this.createElement('span', { className: 'e-model-day' });\n var monthSpan = this.createElement('span', { className: 'e-model-month' });\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'y', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'y', skeleton: 'dateTime', calendar: 'islamic' };\n }\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'E', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'E', skeleton: 'dateTime', calendar: 'islamic' };\n }\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions) + ', ';\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime', calendar: 'islamic' };\n }\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n modelHeader.appendChild(yearHeading);\n h2.appendChild(daySpan);\n h2.appendChild(monthSpan);\n modelHeader.appendChild(h2);\n this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n };\n DatePicker.prototype.changeTrigger = function (event) {\n if (this.inputElement.value !== this.previousElementValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.value = this.value;\n this.changedArgs.event = event || null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n this.trigger('change', this.changedArgs);\n this.previousElementValue = this.inputElement.value;\n this.previousDate = new Date('' + this.value);\n }\n }\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.changeEvent = function (event) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.selectCalendar(event);\n this.changedArgs.event = event ? event : null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n this.trigger('change', this.changedArgs);\n this.previousDate = this.value && new Date(+this.value);\n this.hide(event);\n this.previousElementValue = this.inputElement.value;\n this.errorClass();\n }\n };\n DatePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n return modules;\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n tempFormat = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n }\n else {\n tempFormat = this.format;\n }\n if (this.value) {\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n }\n if (!isNullOrUndefined(date)) {\n Input.setValue(date, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /**\n * Shows the Calendar.\n * @returns void\n */\n DatePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n var prevent_1 = true;\n var outOfRange = void 0;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +this.min && +this.value <= +this.max)) {\n outOfRange = new Date('' + this.value);\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent_1 = false;\n },\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n appendTo: document.body\n };\n this.trigger('open', this.preventArgs);\n if (prevent_1 && !this.preventArgs.cancel) {\n addClass(this.inputWrapper.buttons, ACTIVE);\n this.preventArgs.appendTo.appendChild(this.popupWrapper);\n this.popupObj.refreshPosition(this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION,\n };\n if (this.zIndex === 1000) {\n this.popupObj.show(new Animation(openAnimation), this.element);\n }\n else {\n this.popupObj.show(new Animation(openAnimation), null);\n }\n this.setAriaAttributes();\n }\n else {\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n }\n };\n /**\n * Hide the Calendar.\n * @returns void\n */\n DatePicker.prototype.hide = function (event) {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var prevent_2 = true;\n this.preventArgs = {\n preventDefault: function () {\n prevent_2 = false;\n },\n popup: this.popupObj,\n event: event || null,\n cancel: false\n };\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n if (this.isCalendar()) {\n this.trigger('close', this.preventArgs);\n }\n if (this.isCalendar() && (prevent_2 && !this.preventArgs.cancel)) {\n var closeAnimation = {\n name: 'FadeOut',\n duration: CLOSEDURATION,\n };\n this.popupObj.hide();\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n this.previousElementValue = this.inputElement.value;\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n }\n if (Browser.isDevice) {\n this.element.removeAttribute('readonly');\n }\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DatePicker.prototype.focusIn = function (triggerEvent) {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DatePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n /**\n * Gets the current view of the DatePicker.\n * @returns string\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /**\n * Navigates to specified month or year or decade view of the DatePicker.\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DatePicker.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.keyboardModules.destroy();\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttrs, this.inputElement);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n if (this.ngTag === null) {\n if (this.inputElement) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n removeClass([this.inputElement], [INPUTROOT]);\n }\n removeClass([this.element], [ROOT]);\n detach(this.inputWrapper.container);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.inputEleCopy.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.inputEleCopy.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputEleCopy = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.formElement = closest(this.inputElement, 'form');\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n if (this.ngTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes();\n _super.prototype.preRender.call(this);\n };\n ;\n DatePicker.prototype.validationAttribute = function (target, inputElement) {\n var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n inputElement.setAttribute('name', nameAttribute);\n target.removeAttribute('name');\n var attribute = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attribute.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n continue;\n }\n var attr = target.getAttribute(attribute[i]);\n inputElement.setAttribute(attribute[i], attr);\n target.removeAttribute(attribute[i]);\n }\n };\n DatePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes = ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n options = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n options = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n options = { format: this.format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ enabled: !enabled }, true);\n break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (this.placeholder === null) {\n var placeholder = this.inputElement.getAttribute(prop);\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (!this.value) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), true);\n }\n break;\n case 'min':\n if (+this.min === +new Date(1900, 0, 1)) {\n this.setProperties(setValue(prop, this.globalize.parseDate(this.inputElement.getAttribute(prop)), {}), true);\n }\n break;\n case 'max':\n if (+this.max === +new Date(2099, 11, 31)) {\n this.setProperties(setValue(prop, this.globalize.parseDate(this.inputElement.getAttribute(prop)), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function () {\n var valueCopy;\n var formatOptions;\n var globalize;\n valueCopy = this.checkDateValue(this.value) ? new Date(+this.value) : new Date('' + this.value);\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n this.minMaxUpdates();\n _super.prototype.render.call(this);\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n this.setProperties({ value: valueCopy }, true);\n }\n }\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n inputVal = globalize;\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n inputVal = this.globalize.formatDate(valueCopy, formatOptions);\n }\n Input.setValue(inputVal, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DatePicker.prototype.setAriaAttributes = function () {\n if (this.isCalendar()) {\n Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n attributes(this.inputElement, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n }\n else {\n Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n attributes(this.inputElement, {\n 'aria-activedescendant': 'null'\n });\n }\n };\n DatePicker.prototype.errorClass = function () {\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n var isDisabledDate = this.calendarElement &&\n this.calendarElement.querySelectorAll(dateIdString)[0] &&\n this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n if ((!isNullOrUndefined(this.value) && !(+new Date(+this.value).setMilliseconds(0) >= +this.min\n && +new Date(+this.value).setMilliseconds(0) <= +this.max))\n || (!this.strictMode && this.inputElement.value !== '' && isNullOrUndefined(this.value) || isDisabledDate)) {\n addClass([this.inputWrapper.container], ERROR);\n }\n else {\n removeClass([this.inputWrapper.container], ERROR);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var options = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\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 if (typeof newProp.value === 'string') {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n this.setProperties({ value: newProp.value }, true);\n }\n this.previousElementValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput();\n this.changeTrigger(null);\n break;\n case 'format':\n this.updateInput();\n break;\n case 'allowEdit':\n this.setAllowEdit();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n this.bindEvents();\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.inputElement);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupWrapper) {\n this.popupWrapper.className += ' ' + newProp.cssClass;\n }\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'strictMode':\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n default:\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n this.hide(null);\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","/**\n *\n */\nimport { EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, addClass, attributes, HijriParser } from '@syncfusion/ej2-base';\nimport { getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar dayMilliSeconds = 86400000;\nvar Islamic = /** @class */ (function () {\n function Islamic(instance) {\n this.calendarInstance = instance;\n }\n Islamic.prototype.getModuleName = function () {\n return 'islamic';\n };\n Islamic.prototype.islamicTitleUpdate = function (date, view) {\n var globalize = new Internationalization(this.calendarInstance.locale);\n switch (view) {\n case 'days':\n /* tslint:disable-next-line:max-line-length */\n this.calendarInstance.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', format: 'MMMMyyyy', calendar: 'islamic' });\n break;\n case 'months':\n /* tslint:disable-next-line:max-line-length */\n this.calendarInstance.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', format: 'yyyy', calendar: 'islamic' });\n }\n };\n /* tslint:disable-next-line:max-line-length */\n // tslint:disable-next-line:max-func-body-length\n Islamic.prototype.islamicRenderDays = function (currentDate, value, multiSelection, values) {\n var tdEles = [];\n var cellsCount = 42;\n var localDate = new Date('' + currentDate);\n var minMaxDate;\n var numCells = this.calendarInstance.weekNumber ? 8 : 7;\n // 8 and 7 denotes the number of columns to be specified.\n this.islamicTitleUpdate(currentDate, 'days');\n /* tslint:disable-next-line:no-any */\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = this.toGregorian(islamicDate.year, islamicDate.month, 1);\n var currentMonth = islamicDate.month;\n localDate = gregorianObject;\n while (localDate.getDay() !== this.calendarInstance.firstDayOfWeek) {\n this.calendarInstance.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.calendarInstance.createElement('td', { className: CELL });\n var weekAnchor = this.calendarInstance.createElement('span');\n if (day % 7 === 0 && this.calendarInstance.weekNumber) {\n weekAnchor.textContent = '' + this.calendarInstance.getWeek(localDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.calendarInstance.minMaxDate(localDate);\n /* tslint:disable-next-line:max-line-length */\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: 'islamic' };\n var date = this.calendarInstance.globalize.parseDate(this.calendarInstance.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.islamicDayCell(localDate);\n /* tslint:disable-next-line:max-line-length */\n var title = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'full', calendar: 'islamic' });\n var dayLink = this.calendarInstance.createElement('span');\n /* tslint:disable-next-line:max-line-length */\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'd', calendar: 'islamic' });\n var disabled = (this.calendarInstance.min > localDate) || (this.calendarInstance.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n /* tslint:disable-next-line:no-any */\n var hijriMonthObject = this.getIslamicDate(localDate);\n if (currentMonth !== hijriMonthObject.month) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.calendarInstance.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.calendarInstance.renderDayCellArgs;\n this.calendarInstance.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n if (this.calendarInstance.isMultiSelection) {\n if (!isNullOrUndefined(this.calendarInstance.values) && this.calendarInstance.values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n /* tslint:disable-next-line:max-line-length */\n var localDateString = +new Date(this.calendarInstance.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd', calendar: 'islamic' }));\n /* tslint:disable-next-line:max-line-length */\n var tempDateString = +new Date(this.calendarInstance.globalize.formatDate(this.calendarInstance.values[index], { type: 'date', skeleton: 'yMd', calendar: 'islamic' }));\n if (localDateString === tempDateString) {\n this.calendarInstance.values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (value && +value === +argument.date) {\n this.calendarInstance.setProperties({ value: null }, true);\n }\n }\n if (this.calendarInstance.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.calendarInstance.renderDayCellArgs.date === +this.calendarInstance.todayDate) {\n this.calendarInstance.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n if (this.calendarInstance.isMultiSelection && !isNullOrUndefined(this.calendarInstance.values) &&\n !otherMnthBool && !disabledCls) {\n for (var tempValue = 0; tempValue < this.calendarInstance.values.length; tempValue++) {\n /* tslint:disable-next-line:max-line-length */\n var localDateString = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'short', calendar: 'islamic' });\n var tempDateString = this.calendarInstance.globalize.formatDate(this.calendarInstance.values[tempValue], { type: 'date', skeleton: 'short', calendar: 'islamic' });\n if (localDateString === tempDateString &&\n this.calendarInstance.getDateVal(localDate, this.calendarInstance.values[tempValue])) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (this.calendarInstance.values.length <= 0) {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!otherMnthBool && !disabledCls && this.calendarInstance.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n if (date.getDate() === new Date().getDate() && date.getMonth() === new Date().getMonth()) {\n if (date.getFullYear() === new Date().getFullYear()) {\n addClass([tdEle], TODAY);\n }\n }\n localDate = new Date(+minMaxDate);\n tdEles.push(this.calendarInstance.renderDayCellArgs.element);\n this.calendarInstance.addDay(localDate, 1, null, this.calendarInstance.max, this.calendarInstance.min);\n }\n return tdEles;\n };\n Islamic.prototype.islamicIconHandler = function () {\n new Date('' + this.calendarInstance.currentDate).setDate(1);\n switch (this.calendarInstance.currentView()) {\n case 'Month':\n var prevMonthCompare = this.islamicCompareMonth(new Date('' + this.calendarInstance.currentDate), this.calendarInstance.min) < 1;\n var nextMonthCompare = this.islamicCompareMonth(new Date('' + this.calendarInstance.currentDate), this.calendarInstance.max) > -1;\n this.calendarInstance.previousIconHandler(prevMonthCompare);\n this.calendarInstance.nextIconHandler(nextMonthCompare);\n break;\n case 'Year':\n var prevYearCompare = this.hijriCompareYear(new Date('' + this.calendarInstance.currentDate), this.calendarInstance.min) < 1;\n var nextYearCompare = this.hijriCompareYear(new Date('' + this.calendarInstance.currentDate), this.calendarInstance.max) > -1;\n this.calendarInstance.previousIconHandler(prevYearCompare);\n this.calendarInstance.nextIconHandler(nextYearCompare);\n break;\n case 'Decade':\n var prevDecadeCompare = this.hijriCompareDecade(new Date('' + this.calendarInstance.currentDate), this.calendarInstance.min) < 1;\n var nextDecadeCompare = this.hijriCompareDecade(new Date('' + this.calendarInstance.currentDate), this.calendarInstance.max) > -1;\n this.calendarInstance.previousIconHandler(prevDecadeCompare);\n this.calendarInstance.nextIconHandler(nextDecadeCompare);\n }\n };\n Islamic.prototype.islamicNext = function () {\n this.calendarInstance.effect = '';\n var view = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n /* tslint:disable-next-line:no-any */\n var islamicDate = this.getIslamicDate(this.calendarInstance.currentDate);\n switch (this.calendarInstance.currentView()) {\n case 'Year':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year + 1, islamicDate.month, 1);\n this.calendarInstance.switchView(view);\n break;\n case 'Month':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year, islamicDate.month + 1, 1);\n this.calendarInstance.switchView(view);\n break;\n case 'Decade':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year + 10, islamicDate.month, 1);\n this.calendarInstance.switchView(view);\n break;\n }\n };\n Islamic.prototype.islamicPrevious = function () {\n var currentView = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n this.calendarInstance.effect = '';\n /* tslint:disable-next-line:no-any */\n var islamicDate = this.getIslamicDate(this.calendarInstance.currentDate);\n switch (this.calendarInstance.currentView()) {\n case 'Month':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year, islamicDate.month - 1, 1);\n this.calendarInstance.switchView(currentView);\n break;\n case 'Year':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year - 1, islamicDate.month, 1);\n this.calendarInstance.switchView(currentView);\n break;\n case 'Decade':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year - 10, islamicDate.month - 1, 1);\n this.calendarInstance.switchView(currentView);\n break;\n }\n };\n Islamic.prototype.islamicRenderYears = function (e, value) {\n this.calendarInstance.removeTableHeadElement();\n var numCells = 4;\n var days;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date('' + this.calendarInstance.currentDate);\n var localDate = curDate;\n /* tslint:disable-next-line:no-any */\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject;\n var mon = islamicDate.month;\n var yr = islamicDate.year;\n var curYrs = islamicDate.year;\n /* tslint:disable-next-line:no-any */\n var minYr = (this.getIslamicDate(this.calendarInstance.min)).year;\n /* tslint:disable-next-line:no-any */\n var minMonth = (this.getIslamicDate(this.calendarInstance.min)).month;\n /* tslint:disable-next-line:no-any */\n var maxYr = (this.getIslamicDate(this.calendarInstance.max)).year;\n /* tslint:disable-next-line:no-any */\n var maxMonth = (this.getIslamicDate(this.calendarInstance.max)).month;\n this.islamicTitleUpdate(this.calendarInstance.currentDate, 'months');\n var disabled = (this.calendarInstance.min > localDate) || (this.calendarInstance.max < localDate);\n for (var month = 1; month <= 12; ++month) {\n /* tslint:disable-next-line:no-any */\n var islamicDate_1 = this.getIslamicDate(localDate);\n var gregorianObject_1 = HijriParser.toGregorian(islamicDate_1.year, month, 1);\n localDate = gregorianObject_1;\n var tdEle = this.islamicDayCell(localDate);\n var dayLink = this.calendarInstance.createElement('span');\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n var localMonth = (value && (this.getIslamicDate(value)).month === (this.getIslamicDate(localDate)).month);\n /* tslint:disable-next-line:no-any tslint:disable-next-line:max-line-length */\n var select = (value && (this.getIslamicDate(value)).year === yr && localMonth);\n /* tslint:disable-next-line:max-line-length */\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'dateTime', format: 'MMM', calendar: 'islamic' });\n if ((this.calendarInstance.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.calendarInstance.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n /* tslint:disable-next-line:no-any */\n if ((this.getIslamicDate(localDate)).month === mon &&\n /* tslint:disable-next-line:no-any */\n (this.getIslamicDate(this.calendarInstance.currentDate)).month === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.islamicRenderTemplate(tdEles, numCells, YEAR, e, value);\n };\n Islamic.prototype.islamicRenderDecade = function (e, value) {\n this.calendarInstance.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date('' + this.calendarInstance.currentDate);\n /* tslint:disable-next-line:no-any */\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject;\n var localYr = localDate.getFullYear();\n var startYr = new Date('' + (localYr - localYr % 10));\n var endYr = new Date('' + (localYr - localYr % 10 + (10 - 1)));\n /* tslint:disable-next-line:max-line-length */\n var startHdrYr = this.calendarInstance.globalize.formatDate(startYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n var endHdrYr = this.calendarInstance.globalize.formatDate(endYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n this.calendarInstance.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 2, 0, 1);\n var startYear = start.getFullYear();\n for (var rowCount = 1; rowCount <= yearCell; ++rowCount) {\n var year = startYear + rowCount;\n localDate.setFullYear(year);\n localDate.setDate(1);\n localDate.setMonth(0);\n /* tslint:disable-next-line:no-any */\n var islamicDate_2 = this.getIslamicDate(localDate);\n var gregorianObject_2 = HijriParser.toGregorian(islamicDate_2.year, 1, 1);\n localDate = gregorianObject_2;\n var tdEle = this.islamicDayCell(localDate);\n attributes(tdEle, { 'role': 'gridcell' });\n var dayLink = this.calendarInstance.createElement('span');\n /* tslint:disable-next-line:max-line-length */\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n /* tslint:disable-next-line:no-any */\n if (year < new Date('' + this.calendarInstance.min).getFullYear()\n || year > new Date('' + this.calendarInstance.max).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) &&\n /* tslint:disable-next-line:no-any */\n (this.getIslamicDate(localDate)).year ===\n /* tslint:disable-next-line:no-any */\n (this.getIslamicDate(value)).year) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.calendarInstance.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.islamicRenderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n Islamic.prototype.islamicDayCell = function (localDate) {\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: 'islamic' };\n var formatDate = this.calendarInstance.globalize.formatDate(localDate, dateFormatOptions);\n var date = this.calendarInstance.globalize.parseDate(formatDate, dateFormatOptions);\n var value = date.valueOf();\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false', 'role': 'gridcell' }\n };\n return this.calendarInstance.createElement('td', attrs);\n };\n Islamic.prototype.islamicRenderTemplate = function (elements, count, classNm, e, value) {\n var view = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n var trEle;\n this.calendarInstance.tableBodyElement = this.calendarInstance.createElement('tbody');\n this.calendarInstance.table.appendChild(this.calendarInstance.tableBodyElement);\n removeClass([this.calendarInstance.contentElement, this.calendarInstance.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.calendarInstance.contentElement, this.calendarInstance.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowCount = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = this.calendarInstance.createElement('tr', { attrs: { 'role': 'row' } });\n for (rowCount = 0 + rowCount; rowCount < row; rowCount++) {\n if (!elements[rowCount].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowCount].children[0])) {\n addClass([elements[rowCount].children[0]], [LINK]);\n rippleEffect(elements[rowCount].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowCount]);\n if (this.calendarInstance.weekNumber &&\n rowCount === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.calendarInstance.weekNumber\n && rowCount === otherMonthCell && elements[otherMonthCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.calendarInstance.weekNumber) {\n if (rowCount === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowCount === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowCount = rowCount + 0;\n this.calendarInstance.tableBodyElement.appendChild(trEle);\n }\n this.calendarInstance.table.querySelector('tbody').className = this.calendarInstance.effect;\n this.islamicIconHandler();\n if (view !== this.calendarInstance.getViewNumber(this.calendarInstance.currentView())\n || (view === 0 && view !== this.calendarInstance.getViewNumber(this.calendarInstance.currentView()))) {\n this.calendarInstance.navigateHandler(e);\n }\n this.calendarInstance.setAriaActiveDescendant();\n this.calendarInstance.changedArgs = { value: this.calendarInstance.value, values: this.calendarInstance.values };\n this.calendarInstance.changeHandler();\n };\n Islamic.prototype.islamicCompareMonth = function (start, end) {\n /* tslint:disable-next-line:no-any */\n var hijriStart = (this.getIslamicDate(start));\n /* tslint:disable-next-line:no-any */\n var hijriEnd = (this.getIslamicDate(end));\n var result;\n if (hijriStart.year > hijriEnd.year) {\n result = 1;\n }\n else if (hijriStart.year < hijriEnd.year) {\n result = -1;\n }\n else {\n result = hijriStart.month === hijriEnd.month ? 0 : hijriStart.month > hijriEnd.month ? 1 : -1;\n }\n return result;\n };\n ;\n Islamic.prototype.islamicCompare = function (startDate, endDate, modifier) {\n /* tslint:disable-next-line:no-any */\n var hijriStart = this.getIslamicDate(startDate);\n /* tslint:disable-next-line:no-any */\n var hijriEnd = this.getIslamicDate(endDate);\n var start = hijriEnd.year;\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (hijriStart.year > end) {\n result = 1;\n }\n else if (hijriStart.year < start) {\n result = -1;\n }\n return result;\n };\n ;\n /* tslint:disable-next-line:no-any */\n Islamic.prototype.getIslamicDate = function (date) {\n /* tslint:disable-next-line:no-any */\n return (HijriParser.getHijriDate(date));\n };\n Islamic.prototype.toGregorian = function (year, month, date) {\n return HijriParser.toGregorian(year, month, date);\n };\n Islamic.prototype.hijriCompareYear = function (start, end) {\n return this.islamicCompare(start, end, 0);\n };\n Islamic.prototype.hijriCompareDecade = function (start, end) {\n return this.islamicCompare(start, end, 10);\n };\n ;\n Islamic.prototype.destroy = function () {\n this.calendarInstance = null;\n };\n return Islamic;\n}());\nexport { Islamic };\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/// \nimport { Property, EventHandler, Internationalization, NotifyPropertyChanges, detach, getUniqueID } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Event, Browser, L10n, ChildProperty } from '@syncfusion/ej2-base';\nimport { addClass, createElement, remove, closest, select, prepend, removeClass, attributes, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, formatUnit, setValue, rippleEffect, merge, extend } from '@syncfusion/ej2-base';\nimport { CalendarBase } from '../calendar/calendar';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar DATERANGEWRAPPER = 'e-date-range-wrapper';\nvar INPUTCONTAINER = 'e-input-group';\nvar DATERANGEICON = 'e-input-group-icon e-range-icon e-icons';\nvar POPUP = 'e-popup';\nvar LEFTCALENDER = 'e-left-calendar';\nvar RIGHTCALENDER = 'e-right-calendar';\nvar LEFTCONTAINER = 'e-left-container';\nvar RIGHTCONTAINER = 'e-right-container';\nvar ROOT = 'e-daterangepicker';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar STARTENDCONTAINER = 'e-start-end';\nvar STARTDATE = 'e-start-date';\nvar ENDDATE = 'e-end-date';\nvar STARTBUTTON = 'e-start-btn';\nvar INPUTFOCUS = 'e-input-focus';\nvar ENDBUTTON = 'e-end-btn';\nvar RANGEHOVER = 'e-range-hover';\nvar OTHERMONTH = 'e-other-month';\nvar STARTLABEL = 'e-start-label';\nvar ENDLABEL = 'e-end-label';\nvar DISABLED = 'e-disabled';\nvar SELECTED = 'e-selected';\nvar CALENDAR = 'e-calendar';\nvar NEXTICON = 'e-next';\nvar PREVICON = 'e-prev';\nvar HEADER = 'e-header';\nvar TITLE = 'e-title';\nvar ICONCONTAINER = 'e-icon-container';\nvar RANGECONTAINER = 'e-date-range-container';\nvar RANGEHEADER = 'e-range-header';\nvar PRESETS = 'e-presets';\nvar FOOTER = 'e-footer';\nvar RANGEBORDER = 'e-range-border';\nvar TODAY = 'e-today';\nvar FOCUSDATE = 'e-focused-date';\nvar CONTENT = 'e-content';\nvar DAYSPAN = 'e-day-span';\nvar WEEKNUMBER = 'e-week-number';\nvar DATEDISABLED = 'e-date-disabled';\nvar ICONDISABLED = 'e-icon-disabled';\nvar CALENDARCONTAINER = 'e-calendar-container';\nvar SEPARATOR = 'e-separator';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar DEVICE = 'e-device';\nvar OVERLAY = 'e-overlay';\nvar CHANGEICON = 'e-change-icon e-icons';\nvar LISTCLASS = ListBaseClasses.li;\nvar RTL = 'e-rtl';\nvar HOVER = 'e-hover';\nvar OVERFLOW = 'e-range-overflow';\nvar OFFSETVALUE = 4;\nvar PRIMARY = 'e-primary';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar Presets = /** @class */ (function (_super) {\n __extends(Presets, _super);\n function Presets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Presets.prototype, \"label\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"start\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"end\", void 0);\n return Presets;\n}(ChildProperty));\nexport { Presets };\n/**\n * Represents the DateRangePicker component that allows user to select the date range from the calendar\n * or entering the range through the input element.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateRangePicker = /** @class */ (function (_super) {\n __extends(DateRangePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function DateRangePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isCustomRange = false;\n _this.isCustomWindow = false;\n _this.presetsItem = [];\n _this.liCollections = [];\n _this.previousEleValue = '';\n _this.isKeyPopup = false;\n _this.dateDisabled = false;\n _this.isRangeIconClicked = false;\n _this.isMaxDaysClicked = false;\n _this.disabledDays = [];\n _this.preventBlur = false;\n _this.preventFocus = false;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateRangePicker.prototype.render = function () {\n this.initialize();\n this.setProperties({ startDate: this.startValue }, true);\n this.setProperties({ endDate: this.endValue }, true);\n this.setModelValue();\n };\n /**\n * Initialize the event handler\n * @returns void\n * @private\n */\n DateRangePicker.prototype.preRender = function () {\n this.presetKeyConfig = {\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n enter: 'enter',\n tab: 'tab',\n spacebar: 'space'\n };\n this.keyInputConfigs = {\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n tab: 'tab',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n this.defaultConstant = {\n placeholder: '',\n startLabel: 'Start Date',\n endLabel: 'End Date',\n customRange: 'Custom Range',\n applyText: 'Apply',\n cancelText: 'Cancel',\n selectedDays: 'Selected Days',\n days: 'days'\n };\n /**\n * Mobile View\n */\n this.isMobile = window.matchMedia('(max-width:550px)').matches;\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.cloneElement = this.element.cloneNode(true);\n if (this.element.getAttribute('id')) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n this.initProperty();\n _super.prototype.preRender.call(this);\n this.navNextFunction = this.navNextMonth.bind(this);\n this.navPrevFunction = this.navPrevMonth.bind(this);\n this.deviceNavNextFunction = this.deviceNavNext.bind(this);\n this.deviceNavPrevFunction = this.deviceNavPrevious.bind(this);\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n this.formElement = closest(this.element, 'form');\n };\n ;\n DateRangePicker.prototype.updateValue = function () {\n if (this.value && this.value.length > 0) {\n if (this.value[0] instanceof Date && !isNaN(+this.value[0])) {\n this.setProperties({ startDate: this.value[0] }, true);\n this.startValue = this.value[0];\n }\n else if (typeof this.value[0] === 'string') {\n if (+this.value[0] === 0 || isNaN(+(new Date('' + this.value[0])))) {\n this.startValue = null;\n this.setValue();\n }\n else {\n this.setProperties({ startDate: new Date('' + this.value[0]) }, true);\n this.startValue = new Date('' + this.value[0]);\n }\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value[1] instanceof Date && !isNaN(+this.value[1])) {\n this.setProperties({ endDate: this.value[1] }, true);\n this.endValue = this.value[1];\n }\n else if (typeof this.value[1] === 'string') {\n if (+this.value[0] === 0 || isNaN(+(new Date('' + this.value[0])))) {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n else {\n this.setProperties({ endDate: new Date('' + this.value[1]) }, true);\n this.endValue = new Date('' + this.value[1]);\n this.setValue();\n }\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (this.value && this.value.start) {\n if (this.value.start instanceof Date && !isNaN(+this.value.start)) {\n this.setProperties({ startDate: this.value.start }, true);\n this.startValue = this.value.start;\n }\n else if (typeof this.value.start === 'string') {\n this.setProperties({ startDate: new Date('' + this.value.start) }, true);\n this.startValue = new Date('' + this.value.start);\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value.end instanceof Date && !isNaN(+this.value.end)) {\n this.setProperties({ endDate: this.value.end }, true);\n this.endValue = this.value.end;\n }\n else if (typeof this.value.end === 'string') {\n this.setProperties({ endDate: new Date('' + this.value.end) }, true);\n this.endValue = new Date('' + this.value.end);\n this.setValue();\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (isNullOrUndefined(this.value)) {\n this.endValue = this.checkDateValue(new Date('' + this.endDate));\n this.startValue = this.checkDateValue(new Date('' + this.startDate));\n this.setValue();\n }\n };\n DateRangePicker.prototype.initProperty = function () {\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.updateValue();\n };\n DateRangePicker.prototype.initialize = function () {\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes();\n merge(this.keyConfigs, { shiftTab: 'shift+tab' });\n this.setProperties({ startDate: this.checkDateValue(new Date('' + this.startValue)) }, true); // persist the value propeerty.\n this.setProperties({ endValue: this.checkDateValue(new Date('' + this.endValue)) }, true);\n this.setValue();\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.l10n = new L10n('daterangepicker', this.defaultConstant, this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.processPresets();\n this.createInput();\n this.setRangeAllowEdit();\n this.bindEvents();\n };\n DateRangePicker.prototype.setRangeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n };\n DateRangePicker.prototype.validationAttribute = function (element, input) {\n var name = element.getAttribute('name') ? element.getAttribute('name') : element.getAttribute('id');\n input.setAttribute('name', name);\n element.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(element.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = element.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n element.removeAttribute(attributes[i]);\n }\n };\n DateRangePicker.prototype.processPresets = function () {\n this.presetsItem = [];\n var i = 0;\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {\n var range = _a[_i];\n var id = range.label.replace(/\\s+/g, '') + '_' + (++i);\n if (typeof range.end === 'string') {\n this.presetsItem.push({\n id: id, text: range.label, end: new Date('' + range.end), start: new Date('' + range.start)\n });\n }\n else {\n this.presetsItem.push({ id: id, text: range.label, start: range.start, end: range.end });\n }\n }\n var startDate = isNullOrUndefined(this.startValue) ? null : new Date(+this.startValue);\n var endDate = isNullOrUndefined(this.endValue) ? null : new Date(+this.endValue);\n this.presetsItem.push({ id: 'custom_range', text: this.l10n.getConstant('customRange'), start: startDate, end: endDate });\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.isCustomRange = true;\n this.activeIndex = this.presetsItem.length - 1;\n }\n }\n };\n DateRangePicker.prototype.bindEvents = function () {\n if (this.enabled) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n if (!this.isMobile) {\n this.inputKeyboardModule = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown', keyAction: this.inputHandler.bind(this), keyConfigs: this.keyInputConfigs\n });\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.inputKeyboardModule)) {\n this.inputKeyboardModule.destroy();\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n }\n };\n DateRangePicker.prototype.updateHiddenInput = function () {\n if (this.firstHiddenChild && this.secondHiddenChild) {\n var format = { type: 'datetime', skeleton: 'yMd' };\n if (typeof this.startDate === 'string') {\n this.startDate = this.globalize.parseDate(this.startDate, format);\n }\n if (typeof this.endDate === 'string') {\n this.endDate = this.globalize.parseDate(this.endDate, format);\n }\n this.firstHiddenChild.value = (this.startDate && this.globalize.formatDate(this.startDate, format))\n || (this.inputElement.value);\n this.secondHiddenChild.value = (this.endDate && this.globalize.formatDate(this.endDate, format)) ||\n (this.inputElement.value);\n this.dispatchEvent(this.firstHiddenChild, 'focusout');\n this.dispatchEvent(this.firstHiddenChild, 'change');\n }\n };\n DateRangePicker.prototype.inputChangeHandler = function (e) {\n e.stopPropagation();\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DateRangePicker.prototype.resetHandler = function (e) {\n this.valueType = this.value;\n e.preventDefault();\n this.clear();\n this.changeTrigger(e);\n this.clearRange();\n this.hide(e);\n };\n DateRangePicker.prototype.formResetHandler = function (e) {\n if (this.formElement && e.target === this.formElement) {\n this.value = null;\n if (this.inputElement) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n removeClass([this.inputWrapper.container], ERROR);\n }\n }\n };\n DateRangePicker.prototype.clear = function () {\n if (this.startValue !== null) {\n this.startValue = null;\n }\n if (this.endValue !== null) {\n this.endValue = null;\n }\n if (this.value && this.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n if (this.value !== null && this.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n if (!(isNullOrUndefined(this.applyButton))) {\n this.applyButton.disabled = this.applyButton.element.disabled = true;\n }\n this.removeSelection();\n };\n DateRangePicker.prototype.rangeIconHandler = function (e) {\n if (this.isMobile) {\n this.element.setAttribute('readonly', 'readonly');\n }\n e.preventDefault();\n this.targetElement = null;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n }\n else {\n this.isRangeIconClicked = true;\n this.inputWrapper.container.children[0].focus();\n this.show(null, e);\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.isRangeIconClicked = false;\n this.calendarFocus();\n this.isRangeIconClicked = true;\n }\n }\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateRangePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes;\n attributes = ['startDate', 'endDate', 'minDays', 'maxDays', 'min', 'max', 'disabled',\n 'readonly', 'style', 'name', 'placeholder', 'type'];\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var disabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ enabled: !disabled }, true);\n break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (isNullOrUndefined(this.placeholder) || this.placeholder.trim() === '') {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'min':\n if (isNullOrUndefined(this.min) || +this.min === +new Date(1900, 0, 1)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'max':\n if (isNullOrUndefined(this.max) || +this.max === +new Date(2099, 11, 31)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'startDate':\n if (isNullOrUndefined(this.startDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.startValue = dateValue;\n this.setValue();\n }\n break;\n case 'endDate':\n if (isNullOrUndefined(this.endDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.endValue = dateValue;\n this.setValue();\n }\n break;\n case 'minDays':\n if (isNullOrUndefined(this.minDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'maxDays':\n if (isNullOrUndefined(this.maxDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n DateRangePicker.prototype.createPopup = function () {\n for (var i = 0; i < this.presetsItem.length; i++) {\n if ((i !== (this.presetsItem.length - 1)) && this.presetsItem[i].id === 'custom_range') {\n this.presetsItem.splice(i, 1);\n }\n }\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n for (var i = 0; i <= this.presetsItem.length - 2; i++) {\n var startDate = this.presetsItem[i].start;\n var endDate = this.presetsItem[i].end;\n if (this.startValue && this.endValue) {\n if ((+startDate.setMilliseconds(0) === +this.startValue.setMilliseconds(0)) &&\n (+endDate.setMilliseconds(0) === +this.endValue.setMilliseconds(0))) {\n this.activeIndex = i;\n this.isCustomRange = false;\n }\n }\n }\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n var isPreset = (!this.isCustomRange || this.isMobile);\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.isCustomWindow = false;\n this.createPresets();\n this.listRippleEffect();\n this.renderPopup();\n }\n else {\n this.isCustomWindow = true;\n this.renderControl();\n }\n };\n DateRangePicker.prototype.renderControl = function () {\n this.createControl();\n this.bindCalendarEvents();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.disabledDateRender();\n }\n this.updateHeader();\n };\n DateRangePicker.prototype.clearCalendarEvents = function () {\n EventHandler.clearEvents(this.leftCalPrevIcon);\n EventHandler.clearEvents(this.leftCalNextIcon);\n EventHandler.clearEvents(this.rightCalPrevIcon);\n EventHandler.clearEvents(this.rightCalNextIcon);\n };\n DateRangePicker.prototype.updateNavIcons = function () {\n if (this.currentView() === 'Year' || this.currentView() === 'Decade') {\n return;\n }\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n this.nextIconHandler(this.compareMonths(new Date('' + this.leftCalCurrentDate), this.rightCalCurrentDate) < 1);\n this.previousIconHandler(this.compareMonths(new Date('' + this.leftCalCurrentDate), this.rightCalCurrentDate) < 1);\n };\n DateRangePicker.prototype.calendarIconEvent = function () {\n this.clearCalendarEvents();\n if (this.leftCalPrevIcon && !this.leftCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.leftCalNextIcon && !this.leftCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalNextIcon, 'mousedown', this.navNextFunction);\n }\n if (this.rightCalPrevIcon && !this.rightCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.rightCalNextIcon && !this.rightCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalNextIcon, 'mousedown', this.navNextFunction);\n }\n };\n DateRangePicker.prototype.bindCalendarEvents = function () {\n if (!this.isMobile) {\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.headerTitleElement = this.popupObj.element.querySelector('.' + RIGHTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.headerTitleElement = this.popupObj.element.querySelector('.' + LEFTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.leftKeyboardModule = new KeyboardEvents(this.leftCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n this.rightKeyboardModule = new KeyboardEvents(this.rightCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n else {\n this.deviceCalendarEvent();\n EventHandler.add(this.startButton.element, 'click', this.deviceHeaderClick, this);\n EventHandler.add(this.endButton.element, 'click', this.deviceHeaderClick, this);\n }\n this.bindCalendarCellEvents();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.calendarIconRipple = function () {\n rippleEffect(this.leftCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.leftCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n };\n DateRangePicker.prototype.deviceCalendarEvent = function () {\n EventHandler.clearEvents(this.nextIcon);\n EventHandler.clearEvents(this.previousIcon);\n rippleEffect(this.nextIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.previousIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n if (this.nextIcon && !this.nextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.nextIcon, 'mousedown', this.deviceNavNextFunction);\n }\n if (this.previousIcon && !this.previousIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.previousIcon, 'mousedown', this.deviceNavPrevFunction);\n }\n };\n DateRangePicker.prototype.deviceNavNext = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigateNext(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.deviceNavPrevious = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigatePrevious(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.updateDeviceCalendar = function (calendar) {\n if (calendar) {\n this.previousIcon = calendar.querySelector('.' + PREVICON);\n this.nextIcon = calendar.querySelector('.' + NEXTICON);\n this.calendarElement = calendar;\n this.deviceCalendar = calendar;\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n }\n };\n DateRangePicker.prototype.deviceHeaderClick = function (event) {\n var element = event.currentTarget;\n if (element.classList.contains(STARTBUTTON) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.classList.remove(ACTIVE);\n this.startButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + STARTDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.startValue);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.removeClassDisabled();\n }\n else if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + ENDDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.endValue);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n this.selectableDates();\n }\n };\n DateRangePicker.prototype.inputFocusHandler = function () {\n this.preventBlur = false;\n var focusArguments = {\n model: this\n };\n if (!this.preventFocus) {\n this.preventFocus = true;\n this.trigger('focus', focusArguments);\n }\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.inputBlurHandler = function (e) {\n if (!this.preventBlur) {\n var value = this.inputElement.value;\n if (!isNullOrUndefined(this.presetsItem)) {\n if (this.presetsItem.length > 0 && this.previousEleValue !== this.inputElement.value) {\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n }\n }\n if (!isNullOrUndefined(value) && value.trim() !== '') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length > 1) {\n var dateOptions = { format: this.format, type: 'date', skeleton: 'yMd' };\n var startDate = this.globalize.parseDate(range[0].trim(), dateOptions);\n var endDate = this.globalize.parseDate(range[1].trim(), dateOptions);\n if (!isNullOrUndefined(startDate) && !isNaN(+startDate) && !isNullOrUndefined(endDate) && !isNaN(+endDate)) {\n this.startValue = startDate;\n this.endValue = endDate;\n this.setValue();\n this.refreshControl();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n this.updateHiddenInput();\n return;\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n if (!this.strictMode) {\n this.clearRange();\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n else {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n }\n this.errorClass();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n }\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.clearRange = function () {\n this.previousStartValue = this.previousEndValue = null;\n this.currentDate = null;\n };\n DateRangePicker.prototype.errorClass = function () {\n var inputStr = this.inputElement.value.trim();\n if (((isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue) && inputStr !== '') ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max))\n || ((this.startValue && this.isDateDisabled(this.startValue))\n || (this.endValue && this.isDateDisabled(this.endValue)))) && inputStr !== '') {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else {\n if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n }\n };\n DateRangePicker.prototype.keyCalendarUpdate = function (isLeftCalendar, ele) {\n this.removeFocusedDate();\n if (isLeftCalendar) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n ele = this.leftCalendar;\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n ele = this.rightCalendar;\n }\n this.updateCalendarElement(ele);\n this.table.focus();\n return ele;\n };\n DateRangePicker.prototype.navInCalendar = function (e, isLeftCalendar, leftLimit, rightLimit, ele) {\n var view = this.getViewNumber(this.currentView());\n var date;\n var min = this.min;\n var max;\n if (!isNullOrUndefined(this.maxDays) && this.isMaxDaysClicked && !isNullOrUndefined(this.startValue)) {\n max = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n }\n else {\n max = this.max;\n }\n switch (e.action) {\n case 'moveRight':\n date = new Date(+this.currentDate);\n this.addDay(date, 1, e, max, min);\n if (isLeftCalendar && +date === +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveLeft':\n date = new Date(+this.currentDate);\n this.addDay(date, -1, e, max, min);\n if (!isLeftCalendar) {\n if (+date === +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n }\n this.KeyboardNavigate(-1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveUp':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, -7, e, max, min);\n if (+date <= +leftLimit && !isLeftCalendar) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-7, view, e, max, min);\n }\n else {\n this.KeyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n this.keyNavigation(ele, e);\n break;\n case 'moveDown':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, 7, e, max, min);\n if (isLeftCalendar && +date >= +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(7, view, e, max, min);\n }\n else {\n this.KeyboardNavigate(4, view, e, this.max, this.min);\n }\n this.keyNavigation(ele, e);\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n remove(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n this.keyNavigation(ele, e);\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n remove(this.tableBodyElement);\n (view === 0) ? this.renderMonths(e) : ((view === 1) ? this.renderYears(e) : this.renderDecades(e));\n this.keyNavigation(ele, e);\n break;\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.keyInputHandler = function (e, value) {\n var date;\n var view = this.getViewNumber(this.currentView());\n var rightDateLimit = new Date(this.rightCalCurrentDate.getFullYear(), this.rightCalCurrentDate.getMonth(), 1);\n var leftDateLimit = new Date(this.leftCalCurrentDate.getFullYear(), this.leftCalCurrentDate.getMonth() + 1, 0);\n var ele = closest(e.target, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n var isLeftCalendar = ele.classList.contains(LEFTCALENDER);\n this.updateCalendarElement(ele);\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n var focusedDate = ele.querySelector('tr td.' + FOCUSDATE);\n var startDate = ele.querySelector('tr td.' + STARTDATE);\n var endDate = ele.querySelector('tr td.' + ENDDATE);\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n var leftCalendar = closest(e.target, '.' + LEFTCALENDER);\n var rightCalendar = closest(e.target, '.' + RIGHTCALENDER);\n var presetElement = closest(e.target, '.' + PRESETS);\n if (!isNullOrUndefined(focusedDate)) {\n this.currentDate = this.currentDate;\n }\n else if (!isNullOrUndefined(endDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.endValue);\n }\n else if (!isNullOrUndefined(startDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.startValue);\n }\n else if (!this.dateDisabled) {\n this.currentDate.setDate(1);\n }\n this.effect = '';\n switch (e.action) {\n case 'altUpArrow':\n if (this.isPopupOpen()) {\n this.hide(e);\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n break;\n case 'select':\n if (view === 0) {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : startDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n this.selectRange(null, (element));\n }\n }\n else {\n if (!isNullOrUndefined(selectedDate) && !levelRestrict || !isNullOrUndefined(focusedDate)) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n }\n e.preventDefault();\n break;\n case 'controlHome':\n var yearDate = new Date(this.currentDate.getFullYear(), 0, 1);\n if (!isLeftCalendar && +yearDate < +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n this.keyNavigation(ele, e);\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else if (!isNullOrUndefined(rightCalendar)) {\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n if (this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(rightCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'controlUp':\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n this.calendarNavigation(e, this.calendarElement);\n }\n else {\n this.calendarNavigation(e, this.calendarElement);\n }\n e.preventDefault();\n break;\n case 'controlDown':\n if ((!isNullOrUndefined(selectedDate) && !levelRestrict) || !isNullOrUndefined(focusedDate)) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (selectedDate || focusedDate), value);\n }\n e.preventDefault();\n break;\n case 'controlEnd':\n yearDate = new Date(this.currentDate.getFullYear(), 11, 31);\n if (isLeftCalendar && +yearDate > +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n this.keyNavigation(ele, e);\n break;\n case 'pageUp':\n date = new Date(+this.currentDate);\n this.addMonths(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'pageDown':\n date = new Date(+this.currentDate);\n this.addMonths(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageUp':\n date = new Date(+this.currentDate);\n this.addYears(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageDown':\n date = new Date(+this.currentDate);\n this.addYears(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftTab':\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.setAttribute('tabindex', '0');\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n e.preventDefault();\n break;\n case 'spacebar':\n if (this.applyButton && !this.applyButton.disabled) {\n this.applyFunction(e);\n }\n break;\n default:\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n this.checkMinMaxDays();\n }\n this.presetHeight();\n };\n DateRangePicker.prototype.keyNavigation = function (calendar, e) {\n this.bindCalendarCellEvents(calendar);\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n this.updateRange([calendar]);\n this.dateDisabled = this.isDateDisabled(this.currentDate);\n e.preventDefault();\n };\n DateRangePicker.prototype.inputHandler = function (e) {\n switch (e.action) {\n case 'altDownArrow':\n if (!this.isPopupOpen()) {\n if (this.inputElement.value === '') {\n this.clear();\n this.changeTrigger(e);\n this.clearRange();\n }\n this.show(null, e);\n this.isRangeIconClicked = false;\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.calendarFocus();\n }\n }\n this.isKeyPopup = true;\n }\n break;\n case 'escape':\n if (this.isPopupOpen()) {\n this.hide(e);\n }\n break;\n case 'enter':\n if (document.activeElement === this.inputElement) {\n this.inputBlurHandler(e);\n this.hide(e);\n }\n break;\n case 'tab':\n if (document.activeElement === this.inputElement && this.isPopupOpen()) {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.bindCalendarCellEvents = function (calendar) {\n var tdCells;\n if (calendar) {\n tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n }\n else {\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n }\n for (var _i = 0, tdCells_1 = tdCells; _i < tdCells_1.length; _i++) {\n var cell = tdCells_1[_i];\n EventHandler.clearEvents(cell);\n var disabledCell = void 0;\n disabledCell = cell.classList.contains(DISABLED) || cell.classList.contains(DATEDISABLED);\n if (!disabledCell && !cell.classList.contains(WEEKNUMBER)) {\n if (!this.isMobile) {\n EventHandler.add(cell, 'mouseover', this.hoverSelection, this);\n }\n EventHandler.add(cell, 'mousedown', this.selectRange, this);\n }\n }\n };\n DateRangePicker.prototype.removeFocusedDate = function () {\n var isDate = !isNullOrUndefined(this.startValue) || !isNullOrUndefined(this.endValue);\n var focusedDate;\n focusedDate = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' .' + FOCUSDATE);\n if ((this.leftCalendar && this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar && this.rightCalendar.querySelector('.e-content').classList.contains('e-month')) ||\n this.calendarElement && this.calendarElement.querySelector('.e-content').classList.contains('e-month')) {\n for (var _i = 0, focusedDate_1 = focusedDate; _i < focusedDate_1.length; _i++) {\n var ele = focusedDate_1[_i];\n if (!ele.classList.contains(TODAY) || (ele.classList.contains(TODAY) && (isDate))) {\n ele.classList.remove(FOCUSDATE);\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(ENDDATE)) {\n ele.removeAttribute('aria-label');\n }\n }\n }\n }\n };\n DateRangePicker.prototype.hoverSelection = function (event, element) {\n var currentElement = element || event.currentTarget;\n var currentDate = this.getIdValue(null, currentElement);\n if (!isNullOrUndefined(this.startValue) && +this.startValue >= +this.min && +this.startValue <= +this.max) {\n if ((!this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)\n && isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue))\n || (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))) {\n var tdCells = void 0;\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n for (var _i = 0, tdCells_2 = tdCells; _i < tdCells_2.length; _i++) {\n var ele = tdCells_2[_i];\n var isDisabledCell = (!ele.classList.contains(DISABLED) || ele.classList.contains(DATEDISABLED));\n if (!ele.classList.contains(WEEKNUMBER) && isDisabledCell) {\n var eleDate = this.getIdValue(null, ele);\n var startDateValue = new Date(+this.startValue);\n var eleDateValue = new Date(+eleDate);\n if (eleDateValue.setHours(0, 0, 0, 0) >= startDateValue.setHours(0, 0, 0, 0) && +eleDate <= +currentDate) {\n addClass([ele], RANGEHOVER);\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.updateRange = function (elementCollection) {\n if (!isNullOrUndefined(this.startValue)) {\n for (var _i = 0, elementCollection_1 = elementCollection; _i < elementCollection_1.length; _i++) {\n var calendar = elementCollection_1[_i];\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n for (var _a = 0, tdCells_3 = tdCells; _a < tdCells_3.length; _a++) {\n var ele = tdCells_3[_a];\n if (!ele.classList.contains(WEEKNUMBER) && !ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n var eleDateValue = this.getIdValue(null, ele);\n if (!isNullOrUndefined(this.endValue)) {\n if (this.currentView() === 'Month' &&\n +eleDateValue.setHours(0, 0, 0, 0) >= +new Date(+this.startValue).setHours(0, 0, 0, 0)\n && +eleDateValue.setHours(0, 0, 0, 0) <= +new Date(+this.endValue).setHours(0, 0, 0, 0) &&\n +new Date(+this.startValue).setHours(0, 0, 0, 0) !== +new Date(+this.endValue).setHours(0, 0, 0, 0) &&\n +new Date(+this.startValue).setHours(0, 0, 0, 0) >= +this.min\n && +new Date(+this.endValue).setHours(0, 0, 0, 0) <= +this.max\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], RANGEHOVER);\n }\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n if (!ele.classList.contains(OTHERMONTH)) {\n var startDateValue = new Date(+this.startValue);\n var eleDateValue_1 = new Date(+eleDate);\n if (this.currentView() === 'Month' &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +startDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) >= +startDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, true);\n }\n var endDateValue = new Date(+this.endValue);\n if (this.currentView() === 'Month' &&\n !isNullOrUndefined(this.endValue) &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +endDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) <= +endDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, false);\n }\n if (+eleDate === +this.startValue && !isNullOrUndefined(this.endValue) && +eleDate === +this.endValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.checkMinMaxDays = function () {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n if (!this.isMobile) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + LEFTCALENDER));\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + RIGHTCALENDER));\n }\n else {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n }\n };\n DateRangePicker.prototype.rangeArgs = function (e) {\n var inputValue;\n var range;\n var startDate = !isNullOrUndefined(this.startValue) ?\n this.globalize.formatDate(this.startValue, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n var endDate = !isNullOrUndefined(this.endValue) ?\n this.globalize.formatDate(this.endValue, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n inputValue = startDate + ' ' + this.separator + ' ' + endDate;\n range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n }\n else {\n inputValue = '';\n range = 0;\n }\n var args = {\n value: this.value,\n startDate: this.startValue,\n endDate: this.endValue,\n daySpan: range,\n event: e || null,\n element: this.element,\n isInteracted: !isNullOrUndefined(e),\n text: inputValue\n };\n return args;\n };\n DateRangePicker.prototype.otherMonthSelect = function (ele, isStartDate, sameDate) {\n var value = +this.getIdValue(null, ele);\n var dateIdString = '*[id^=\"/id\"]:not(.e-other-month)'.replace('/id', '' + value);\n var tdCell = this.popupObj && this.popupObj.element.querySelector(dateIdString);\n if (!isNullOrUndefined(tdCell)) {\n if (isStartDate) {\n addClass([tdCell], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.startValue, true);\n }\n else {\n addClass([tdCell], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.endValue, true);\n }\n if (sameDate) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.selectRange = function (event, element) {\n var leftCalendar;\n var rightCalendar;\n if (event) {\n event.preventDefault();\n }\n var date;\n date = isNullOrUndefined(event) ? this.getIdValue(null, element)\n : this.getIdValue(event, null);\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n if (!this.isMobile || this.isMobile && !this.endButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n }\n else if (this.isMobile && this.startButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n var ele = element || event.currentTarget;\n if (isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.previousStartValue)) {\n date.setHours(this.previousStartValue.getHours());\n date.setMinutes(this.previousStartValue.getMinutes());\n date.setSeconds(this.previousStartValue.getSeconds());\n }\n this.startValue = new Date('' + date);\n this.endValue = null;\n this.setValue();\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n this.applyButton.disabled = true;\n this.applyButton.element.disabled = true;\n if (this.isMobile) {\n this.endButton.element.classList.add(ACTIVE);\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.removeAttribute('disabled');\n this.selectableDates();\n }\n this.trigger('select', this.rangeArgs(event));\n }\n else {\n if (+date === +this.startValue || +date > +this.startValue) {\n if (+date === +this.startValue && !isNullOrUndefined(this.minDays) && this.minDays > 1) {\n return;\n }\n this.endValue = null;\n this.setValue();\n if (this.isMobile || element) {\n this.hoverSelection(event, element);\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n date.setHours(this.previousEndValue.getHours());\n date.setMinutes(this.previousEndValue.getMinutes());\n date.setSeconds(this.previousEndValue.getSeconds());\n }\n this.endValue = new Date('' + date);\n this.setValue();\n var endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n if (this.isMobile) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n for (var _i = 0, endEle_1 = endEle; _i < endEle_1.length; _i++) {\n var ele_1 = endEle_1[_i];\n ele_1.removeAttribute('aria-label');\n if (!ele_1.classList.contains(STARTDATE)) {\n ele_1.setAttribute('aria-selected', 'false');\n removeClass([ele_1], [ENDDATE, SELECTED]);\n }\n else {\n this.addSelectedAttributes(ele_1, this.startValue, true);\n removeClass([ele_1], [ENDDATE]);\n }\n }\n }\n addClass([ele], ENDDATE);\n if (+this.endValue === +this.startValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n else {\n this.addSelectedAttributes(ele, this.endValue, false);\n }\n if (ele.classList.contains(OTHERMONTH)) {\n if (+this.endValue === +this.startValue) {\n this.otherMonthSelect(ele, false, true);\n }\n else {\n this.otherMonthSelect(ele, false);\n }\n }\n endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, endEle_2 = endEle; _a < endEle_2.length; _a++) {\n var ele_2 = endEle_2[_a];\n if (ele_2.classList.contains(STARTDATE)) {\n removeClass([ele_2], [RANGEHOVER]);\n }\n }\n this.applyButton.disabled = false;\n this.applyButton.element.disabled = false;\n if (!this.isMobile) {\n this.removeClassDisabled();\n }\n this.disabledDateRender();\n this.trigger('select', this.rangeArgs(event));\n }\n else if (+date < +this.startValue) {\n this.removeClassDisabled();\n this.startValue = new Date('' + date);\n this.setValue();\n this.removeSelectedAttributes();\n removeClass(this.popupObj.element.querySelectorAll('.' + STARTDATE), [STARTDATE, SELECTED]);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n }\n }\n if (event) {\n leftCalendar = closest(event.target, '.' + LEFTCALENDER);\n }\n if (!isNullOrUndefined(leftCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (event) {\n rightCalendar = event && closest(event.target, '.' + RIGHTCALENDER);\n }\n if (!isNullOrUndefined(rightCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n addClass([ele], SELECTED);\n this.updateHeader();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.selectableDates = function () {\n if (!isNullOrUndefined(this.startValue)) {\n var tdCells = this.calendarElement.querySelectorAll('.' + CALENDAR + ' td');\n var isStartDate = false;\n if (this.currentView() === 'Month') {\n for (var _i = 0, tdCells_4 = tdCells; _i < tdCells_4.length; _i++) {\n var ele = tdCells_4[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n if (!ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n if (+eleDate < +this.startValue) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n continue;\n }\n else {\n break;\n }\n }\n }\n if (ele.classList.contains(STARTDATE) && !ele.classList.contains(OTHERMONTH)) {\n isStartDate = true;\n break;\n }\n }\n if (isStartDate) {\n if (!this.previousIcon.classList.contains(DISABLED)) {\n addClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n else {\n for (var _a = 0, tdCells_5 = tdCells; _a < tdCells_5.length; _a++) {\n var ele = tdCells_5[_a];\n var startMonth = this.startValue.getMonth();\n var startYear = this.startValue.getFullYear();\n var element = this.getIdValue(null, ele);\n if (!this.startButton.element.classList.contains(ACTIVE) && ((this.currentView() === 'Year' &&\n (element.getMonth() < startMonth) && (element.getFullYear() <= startYear))\n || (this.currentView() === 'Decade' && (element.getMonth() <= startMonth) &&\n (element.getFullYear() < startYear)))) {\n addClass([ele], [DISABLED]);\n }\n else {\n break;\n }\n }\n if (tdCells[0].classList.contains(DISABLED)) {\n this.previousIconHandler(true);\n }\n else if (tdCells[tdCells.length - 1].classList.contains(DISABLED)) {\n this.nextIconHandler(true);\n }\n }\n }\n };\n DateRangePicker.prototype.updateMinMaxDays = function (calendar) {\n if (!isNullOrUndefined(this.startValue) && (isNullOrUndefined(this.endValue) || this.isMobile)) {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n var minDate = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.minDays - 1)));\n var maxDate = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n minDate = (!isNullOrUndefined(this.minDays) && this.minDays > 0) ? minDate : null;\n maxDate = (!isNullOrUndefined(this.maxDays) && this.maxDays > 0) ? maxDate : null;\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n var maxEle = void 0;\n for (var _i = 0, tdCells_6 = tdCells; _i < tdCells_6.length; _i++) {\n var ele = tdCells_6[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n var eleDate = this.getIdValue(null, ele);\n if (!isNullOrUndefined(minDate) && +eleDate === +minDate && ele.classList.contains(DISABLED)) {\n minDate.setDate(minDate.getDate() + 1);\n }\n if (!ele.classList.contains(DISABLED)) {\n if (+eleDate <= +this.startValue) {\n continue;\n }\n if (!isNullOrUndefined(minDate) && +eleDate < +minDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n }\n if (!isNullOrUndefined(maxDate) && +eleDate > +maxDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n this.isMaxDaysClicked = true;\n EventHandler.clearEvents(ele);\n if (isNullOrUndefined(maxEle) && !ele.classList.contains(OTHERMONTH)) {\n maxEle = ele;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(maxEle)) {\n if (this.isMobile) {\n if (!this.nextIcon.classList.contains(DISABLED)) {\n addClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n var calendar_1 = closest(maxEle, '.' + RIGHTCALENDER);\n calendar_1 = isNullOrUndefined(calendar_1) ? this.leftCalendar : calendar_1;\n var isLeftCalendar = calendar_1.classList.contains(LEFTCALENDER);\n if (!isLeftCalendar) {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.leftCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.rightCalPrevIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n }\n }\n }\n else {\n this.isMaxDaysClicked = false;\n }\n };\n DateRangePicker.prototype.removeClassDisabled = function () {\n var tdCells;\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td' + '.' + DATEDISABLED);\n for (var _i = 0, tdCells_7 = tdCells; _i < tdCells_7.length; _i++) {\n var ele = tdCells_7[_i];\n if (ele.classList.contains(DATEDISABLED)) {\n removeClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.add(ele, 'click', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(ele, 'mouseover', this.hoverSelection, this);\n }\n }\n }\n if (this.isMobile) {\n if (this.nextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.previousIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (this.rightCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.rightCalPrevIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.leftCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n };\n DateRangePicker.prototype.updateHeader = function () {\n var format = { type: 'date', skeleton: 'yMMMd' };\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = range.toString() + ' ' + this.l10n.getConstant('days');\n }\n else {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n if (!isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n }\n }\n if ((this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue)) ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue))\n && +this.startValue > +this.endValue))) {\n if (!this.isMobile) {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n }\n if (this.popupObj.element.querySelector('#custom_range')) {\n this.popupObj.element.querySelector('#custom_range').textContent =\n this.l10.getConstant('customRange') !== '' ? this.l10.getConstant('customRange') : 'Custom Range';\n }\n };\n DateRangePicker.prototype.removeSelection = function () {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.removeSelectedAttributes();\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [STARTDATE, ENDDATE, SELECTED]);\n }\n if (this.popupObj.element.querySelectorAll('.' + FOCUSDATE).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + FOCUSDATE), FOCUSDATE);\n }\n if (this.popupObj.element.querySelectorAll('.' + RANGEHOVER).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + RANGEHOVER), [RANGEHOVER]);\n }\n }\n };\n DateRangePicker.prototype.addSelectedAttributes = function (ele, date, isStartDate, sameDate) {\n if (ele) {\n var title = this.globalize.formatDate(date, { type: 'date', skeleton: 'full' });\n if (!isNullOrUndefined(sameDate) && sameDate) {\n ele.setAttribute('aria-label', 'The current start and end date is ' + '' + title);\n }\n else {\n ele.setAttribute('aria-label', 'The current ' + (isStartDate ? 'start' : 'end') + ' date is ' + '' + title);\n }\n ele.setAttribute('aria-selected', 'true');\n }\n };\n DateRangePicker.prototype.removeSelectedAttributes = function () {\n if (this.popupObj) {\n var start = this.popupObj.element.querySelectorAll('.' + STARTDATE);\n for (var _i = 0, start_1 = start; _i < start_1.length; _i++) {\n var ele = start_1[_i];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n var end = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, end_1 = end; _a < end_1.length; _a++) {\n var ele = end_1[_a];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n }\n };\n DateRangePicker.prototype.updateCalendarElement = function (calendar) {\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.calendarElement = this.leftCalendar;\n this.currentDate = this.leftCalCurrentDate;\n this.previousIcon = this.leftCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.currentDate = this.rightCalCurrentDate;\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.rightCalNextIcon;\n }\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n };\n DateRangePicker.prototype.navPrevMonth = function (e) {\n e.preventDefault();\n var ele = closest(e.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(e.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigatePrevious(e);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.deviceNavigation = function (ele) {\n this.deviceCalendarEvent();\n this.updateRange([this.popupObj.element.querySelector('.' + CALENDAR)]);\n if ((!isNullOrUndefined(this.endValue) && this.endButton.element.classList.contains(ACTIVE))) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.selectableDates();\n }\n if (this.currentView() === 'Month') {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.updateControl = function (calendar) {\n if (calendar.classList.contains(RIGHTCALENDER)) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n if ((this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-month'))\n || this.isMobile) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.updateRange([calendar]);\n };\n DateRangePicker.prototype.navNextMonth = function (event) {\n event.preventDefault();\n var ele = closest(event.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(event.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigateNext(event);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.compareMonths = function (start, end) {\n var result;\n if (start.getFullYear() === end.getFullYear() &&\n (this.currentView() === 'Year' || this.currentView() === 'Decade')) {\n result = -1;\n }\n else if (start.getFullYear() > end.getFullYear()) {\n result = -1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n if (start.getFullYear() + 1 === end.getFullYear() && start.getMonth() === 11 && end.getMonth() === 0) {\n result = -1;\n }\n else {\n result = 1;\n }\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() + 1 === end.getMonth() ? -1 : 1;\n }\n return result;\n };\n DateRangePicker.prototype.isPopupOpen = function () {\n if (!isNullOrUndefined(this.popupObj) && this.popupObj.element.classList.contains(POPUP)) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.createRangeHeader = function () {\n var labelContainer = this.createElement('div', { className: STARTENDCONTAINER });\n if (!this.isMobile) {\n var startLabel = this.createElement('a', { className: STARTLABEL });\n var endLabel = this.createElement('a', { className: ENDLABEL });\n var changeIcon = this.createElement('span', { className: CHANGEICON });\n attributes(startLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'Start Date', 'role': 'button' });\n attributes(endLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'End Date', 'role': 'button' });\n labelContainer.appendChild(startLabel);\n labelContainer.appendChild(changeIcon);\n labelContainer.appendChild(endLabel);\n startLabel.textContent = this.l10n.getConstant('startLabel');\n endLabel.textContent = this.l10n.getConstant('endLabel');\n }\n else {\n var endBtn = this.createElement('button', { className: ENDBUTTON });\n var startBtn = this.createElement('button', { className: STARTBUTTON });\n this.startButton = new Button({ content: this.l10n.getConstant('startLabel') }, startBtn);\n this.endButton = new Button({ content: this.l10n.getConstant('endLabel') }, endBtn);\n labelContainer.appendChild(startBtn);\n labelContainer.appendChild(endBtn);\n }\n return labelContainer;\n };\n DateRangePicker.prototype.disableInput = function () {\n if (this.strictMode) {\n if (!isNullOrUndefined(this.previousStartValue) && !isNullOrUndefined(this.previousEndValue)) {\n this.startValue = this.previousStartValue;\n this.endValue = this.previousEndValue;\n this.setValue();\n this.updateInput();\n }\n }\n else {\n this.updateInput();\n this.clearRange();\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.errorClass();\n }\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n };\n DateRangePicker.prototype.validateMinMax = function () {\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (!(this.min <= this.max)) {\n this.disableInput();\n return;\n }\n if (!isNullOrUndefined(this.minDays) && !isNullOrUndefined(this.maxDays)) {\n if (this.maxDays > 0 && this.minDays > 0 && (this.minDays > this.maxDays)) {\n this.maxDays = null;\n }\n }\n if (!isNullOrUndefined(this.minDays) && this.minDays < 0) {\n this.minDays = null;\n }\n if (!isNullOrUndefined(this.maxDays) && this.maxDays < 0) {\n this.maxDays = null;\n }\n };\n DateRangePicker.prototype.validateRangeStrict = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (+this.startValue <= +this.min) {\n this.startValue = this.min;\n this.setValue();\n }\n else if (+this.startValue >= +this.min && +this.startValue >= +this.max) {\n this.startValue = this.max;\n }\n }\n if (!isNullOrUndefined(this.endValue)) {\n if (+this.endValue > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else if (+this.endValue < +this.min) {\n this.endValue = this.min;\n this.setValue();\n }\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateRange = function () {\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateMinMaxDays = function () {\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n var range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) && !(range >= this.minDays)) {\n if (this.strictMode) {\n var date = new Date(+this.startValue);\n date.setDate(date.getDate() + (this.minDays - 1));\n if (+date > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else {\n this.endValue = date;\n this.setValue();\n }\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n if ((!isNullOrUndefined(this.maxDays) && this.maxDays > 0) && !(range <= this.maxDays)) {\n if (this.strictMode) {\n this.endValue = new Date(+this.startValue);\n this.endValue.setDate(this.endValue.getDate() + (this.maxDays - 1));\n this.setValue();\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n };\n DateRangePicker.prototype.renderCalendar = function () {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(CALENDAR);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n attributes(this.calendarElement, { 'role': 'calendar' });\n _super.prototype.createHeader.call(this);\n _super.prototype.createContent.call(this);\n };\n DateRangePicker.prototype.isSameMonth = function (start, end) {\n if (start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.startMonthCurrentDate = function () {\n if (this.isSameMonth(this.min, this.max) || +this.currentDate > +this.max || this.isSameMonth(this.currentDate, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (this.currentDate < this.min) {\n this.currentDate = new Date('' + this.min);\n }\n };\n DateRangePicker.prototype.selectNextMonth = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameMonth(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n return;\n }\n if ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n }\n };\n DateRangePicker.prototype.selectStartMonth = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.max) && this.isSameMonth(this.startValue, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (!(this.startValue >= this.min && this.startValue <= this.max)\n || this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n else {\n this.currentDate = new Date(+this.startValue);\n }\n }\n else {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.startMonthCurrentDate();\n }\n if ((!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.startMonthCurrentDate();\n };\n DateRangePicker.prototype.createCalendar = function () {\n var calendarContainer = this.createElement('div', { className: CALENDARCONTAINER });\n if (!this.isMobile) {\n this.selectStartMonth();\n this.renderCalendar();\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.calendarElement.classList.add(LEFTCALENDER);\n this.leftCalPrevIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + PREVICON);\n this.leftCalNextIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + NEXTICON);\n this.leftTitle = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalNextIcon);\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalPrevIcon);\n prepend([this.leftCalPrevIcon], this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER));\n this.leftCalendar = this.calendarElement;\n var leftContainer = this.createElement('div', { className: LEFTCONTAINER });\n var rightContainer = this.createElement('div', { className: RIGHTCONTAINER });\n leftContainer.appendChild(this.leftCalendar);\n calendarContainer.appendChild(leftContainer);\n if (!this.isMobile) {\n EventHandler.add(this.leftTitle, 'click', this.leftNavTitle, this);\n }\n this.selectNextMonth();\n this.renderCalendar();\n this.rightCalCurrentDate = new Date(+this.currentDate);\n addClass([this.calendarElement], RIGHTCALENDER);\n this.rightCalendar = this.calendarElement;\n removeClass([this.leftCalendar && this.leftCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n removeClass([this.rightCalendar && this.rightCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n this.rightCalPrevIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + PREVICON);\n this.rightCalNextIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + NEXTICON);\n this.rightTitle = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('table').setAttribute('tabindex', '-1');\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalNextIcon);\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalPrevIcon);\n prepend([this.rightCalPrevIcon], this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER));\n rightContainer.appendChild(this.rightCalendar);\n calendarContainer.appendChild(rightContainer);\n if (!this.isMobile) {\n EventHandler.add(this.rightTitle, 'click', this.rightNavTitle, this);\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.currentDate = new Date(+this.startValue);\n }\n _super.prototype.validateDate.call(this);\n _super.prototype.minMaxUpdate.call(this);\n _super.prototype.render.call(this);\n var prevIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + PREVICON);\n var nextIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + NEXTICON);\n remove(this.calendarElement.querySelector('.' + CALENDAR + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(nextIcon);\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(prevIcon);\n prepend([prevIcon], this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER));\n this.deviceCalendar = this.calendarElement;\n calendarContainer.appendChild(this.calendarElement);\n this.headerTitleElement = this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER + ' .' + TITLE);\n }\n return calendarContainer;\n };\n DateRangePicker.prototype.leftNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.leftCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.calendarNavigation = function (e, element) {\n this.table = element.querySelector('table');\n this.headerTitleElement = element.querySelector('.e-title');\n this.tableBodyElement = element.querySelector('tbody');\n this.tableHeadElement = element.querySelector('thead');\n this.contentElement = element.querySelector('.e-content');\n this.updateCalendarElement(element);\n _super.prototype.navigateTitle.call(this, e);\n this.updateNavIcons();\n };\n DateRangePicker.prototype.rightNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.rightCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.clickEventEmitter = function (e) {\n if (!this.isMobile) {\n if (closest(e.target, '.e-calendar.e-left-calendar')) {\n this.calendarElement = this.leftCalendar;\n this.updateCalendarElement(this.leftCalendar);\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.updateCalendarElement(this.rightCalendar);\n }\n }\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n * @private\n * @hidden\n */\n DateRangePicker.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n DateRangePicker.prototype.navigatedEvent = function (e) {\n var element;\n if (this.isMobile && this.currentView() === 'Month') {\n this.bindCalendarCellEvents();\n this.deviceNavigation();\n this.removeFocusedDate();\n }\n else if (this.isMobile && (this.currentView() === 'Decade' || this.currentView() === 'Year')) {\n this.selectableDates();\n }\n else {\n if (!this.isMobile && this.currentView() === 'Month') {\n element = this.calendarElement.classList.contains('e-left-calendar') ? this.leftCalendar : this.rightCalendar;\n if (element === this.leftCalendar && ((e && !e.currentTarget.children[0].classList.contains('e-icons'))\n || (!isNullOrUndefined(this.controlDown)))) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.rightCalCurrentDate = new Date(new Date(+this.currentDate).setMonth(new Date(+this.currentDate).getMonth() + 1));\n this.currentDate = this.leftCalCurrentDate;\n this.updateCalendarElement(this.leftCalendar);\n this.updateControl(this.leftCalendar);\n this.updateCalendarElement(this.rightCalendar);\n this.navigateTo('Month', this.rightCalCurrentDate);\n this.updateControl(this.rightCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n }\n else if (e && !e.currentTarget.children[0].classList.contains('e-icons')\n || (!isNullOrUndefined(this.controlDown))) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n this.leftCalCurrentDate = new Date(this.currentDate.setMonth(this.currentDate.getMonth() - 1));\n this.currentDate = this.rightCalCurrentDate;\n this.updateCalendarElement(this.rightCalendar);\n this.updateControl(this.rightCalendar);\n this.updateCalendarElement(this.leftCalendar);\n if (this.startValue && (this.startValue.getMonth() < this.rightCalCurrentDate.getMonth() &&\n this.startValue.getFullYear() <= this.rightCalCurrentDate.getFullYear())) {\n if (isNullOrUndefined(this.endValue)) {\n this.effect = '';\n this.navigateTo('Month', new Date(+this.startValue));\n }\n else {\n this.navigateTo('Month', this.leftCalCurrentDate);\n }\n }\n else {\n this.navigateTo('Month', this.leftCalCurrentDate);\n }\n this.updateControl(this.leftCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n }\n }\n else if (!this.isMobile && (this.currentView() === 'Decade' || this.currentView() === 'Year')) {\n this.updateNavIcons();\n this.calendarIconEvent();\n }\n }\n };\n DateRangePicker.prototype.createControl = function () {\n var controlContainer = this.createElement('div', { className: RANGECONTAINER });\n var headerContainer = this.createElement('div', { className: RANGEHEADER });\n var labelContainer = this.createRangeHeader();\n headerContainer.appendChild(labelContainer);\n var daySpan = this.createElement('div', { className: DAYSPAN });\n attributes(daySpan, { 'aria-label': 'Selected Days' });\n daySpan.textContent = this.l10n.getConstant('selectedDays');\n headerContainer.appendChild(daySpan);\n var separator = this.createElement('div', { className: SEPARATOR });\n var calendarContainer = this.createCalendar();\n controlContainer.appendChild(headerContainer);\n controlContainer.appendChild(separator);\n controlContainer.appendChild(calendarContainer);\n var footerSection = this.createElement('div', { className: FOOTER });\n var cancelBtn = this.createElement('button', { className: CANCEL + ' ' + FLAT + ' ' + CSS });\n var applyBtn = this.createElement('button');\n addClass([applyBtn], [APPLY, FLAT, PRIMARY, CSS]);\n footerSection.appendChild(applyBtn);\n footerSection.appendChild(cancelBtn);\n var enable = !isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue);\n this.cancelButton = new Button({ content: this.l10n.getConstant('cancelText') }, cancelBtn);\n this.applyButton = new Button({ content: this.l10n.getConstant('applyText'), disabled: !enable }, applyBtn);\n EventHandler.add(applyBtn, 'click', this.applyFunction, this);\n EventHandler.add(cancelBtn, 'click', this.cancelFunction, this);\n this.popupWrapper.appendChild(controlContainer);\n if (!this.isMobile) {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.createPresets();\n this.listRippleEffect();\n addClass([controlContainer], RANGEBORDER);\n addClass([this.popupWrapper], 'e-preset-wrapper');\n var presets = this.popupWrapper.querySelector('.' + PRESETS);\n presets.style.height = this.popupWrapper.querySelector('.' + RANGECONTAINER).getBoundingClientRect().height + 'px';\n }\n }\n this.popupWrapper.appendChild(footerSection);\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n this.renderPopup();\n };\n DateRangePicker.prototype.cancelFunction = function (eve) {\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n eve.preventDefault();\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.startValue = null;\n this.endValue = null;\n this.removeSelection();\n this.hide(eve);\n };\n DateRangePicker.prototype.deviceHeaderUpdate = function () {\n if (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.endButton.element.setAttribute('disabled', '');\n this.startButton.element.classList.add(ACTIVE);\n }\n else if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.classList.add(ACTIVE);\n }\n };\n DateRangePicker.prototype.applyFunction = function (eve) {\n eve.preventDefault();\n if (this.closeEventArgs && this.closeEventArgs.cancel) {\n this.startValue = this.popupWrapper.querySelector('.e-start-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-start-date'));\n this.endValue = this.popupWrapper.querySelector('.e-end-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-end-date'));\n this.setValue();\n }\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n if (eve.type !== 'touchstart' &&\n this.closeEventArgs && !this.closeEventArgs.cancel) {\n eve.preventDefault();\n }\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n this.previousEleValue = this.inputElement.value;\n Input.setValue(this.rangeArgs(eve).text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.changeTrigger(eve);\n this.hide(eve ? eve : null);\n this.errorClass();\n }\n else {\n this.hide(eve ? eve : null);\n }\n if (!this.isMobile) {\n this.isKeyPopup = false;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.children[1].focus();\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n }\n }\n };\n DateRangePicker.prototype.onMouseClick = function (event, item) {\n if (event.type === 'touchstart') {\n return;\n }\n var target = item || event.target;\n var li = closest(target, '.' + LISTCLASS);\n var isClick = li && li.classList.contains(ACTIVE);\n if (li && li.classList.contains(LISTCLASS)) {\n this.setListSelection(li, event);\n }\n this.inputElement.focus();\n if (!this.isMobile) {\n this.preventFocus = true;\n if (li && li.classList.contains(LISTCLASS) && li.getAttribute('id') === 'custom_range') {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (!isClick && event.type === 'keydown') {\n this.inputElement.focus();\n }\n }\n }\n };\n DateRangePicker.prototype.onMouseOver = function (event) {\n var li = closest(event.target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS) && !li.classList.contains(HOVER)) {\n addClass([li], HOVER);\n }\n };\n DateRangePicker.prototype.onMouseLeave = function (event) {\n var item = closest(event.target, '.' + HOVER);\n if (!isNullOrUndefined(item)) {\n removeClass([item], HOVER);\n }\n };\n DateRangePicker.prototype.setListSelection = function (li, event) {\n if (li && (!li.classList.contains(ACTIVE) || (this.isMobile && li.classList.contains(ACTIVE)))) {\n if (this.isMobile && li.classList.contains(ACTIVE)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n var values_1 = this.presetsItem[this.activeIndex];\n if (values_1.id === 'custom_range') {\n this.renderCustomPopup();\n return;\n }\n return;\n }\n this.removeListSelection();\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n addClass([li], ACTIVE);\n li.setAttribute('aria-selected', 'true');\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.renderCustomPopup();\n }\n else {\n this.applyPresetRange(values);\n }\n }\n };\n DateRangePicker.prototype.removeListSelection = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n if (!isNullOrUndefined(item)) {\n removeClass([item], ACTIVE);\n item.removeAttribute('aria-selected');\n }\n };\n DateRangePicker.prototype.setValue = function () {\n this.modelValue = [this.startValue, this.endValue];\n };\n DateRangePicker.prototype.applyPresetRange = function (values) {\n this.hide(null);\n this.presetsItem[this.presetsItem.length - 1].start = null;\n this.presetsItem[this.presetsItem.length - 1].end = null;\n this.startValue = values.start;\n this.endValue = values.end;\n this.setValue();\n this.refreshControl();\n this.trigger('select', this.rangeArgs(null));\n this.changeTrigger();\n this.previousEleValue = this.inputElement.value;\n this.isCustomRange = false;\n this.leftCalendar = this.rightCalendar = null;\n if (this.isKeyPopup) {\n this.isRangeIconClicked = false;\n this.inputElement.focus();\n }\n };\n DateRangePicker.prototype.showPopup = function (element, event) {\n this.presetHeight();\n if (this.zIndex === 1000) {\n this.popupObj.show(null, this.element);\n }\n else {\n this.popupObj.show(null, null);\n }\n if (this.isMobile) {\n this.popupObj.refreshPosition();\n }\n };\n DateRangePicker.prototype.renderCustomPopup = function () {\n this.isCustomWindow = true;\n this.popupObj.hide();\n this.popupWrapper = this.createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.renderControl();\n this.openEventArgs.appendTo.appendChild(this.popupWrapper);\n this.showPopup();\n this.isCustomRange = true;\n if (!this.isMobile) {\n this.calendarFocus();\n }\n };\n DateRangePicker.prototype.listRippleEffect = function () {\n for (var _i = 0, _a = this.liCollections; _i < _a.length; _i++) {\n var li = _a[_i];\n rippleEffect(li);\n }\n };\n DateRangePicker.prototype.createPresets = function () {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.presetElement = this.createElement('div', { className: PRESETS, attrs: { 'tabindex': '0' } });\n var listTag = ListBase.createList(this.createElement, this.presetsItem, null, true);\n attributes(listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n this.presetElement.appendChild(listTag);\n this.popupWrapper.appendChild(this.presetElement);\n this.liCollections = this.presetElement.querySelectorAll('.' + LISTCLASS);\n this.wireListEvents();\n if (this.isMobile) {\n this.presetElement.style.width = this.inputWrapper.container.getBoundingClientRect().width + 'px';\n }\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex > -1) {\n addClass([this.liCollections[this.activeIndex]], ACTIVE);\n }\n }\n };\n DateRangePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.presetElement, 'click', this.onMouseClick, this);\n if (!this.isMobile) {\n EventHandler.add(this.presetElement, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.presetElement, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateRangePicker.prototype.unWireListEvents = function () {\n if (!isNullOrUndefined(this.presetElement)) {\n EventHandler.remove(this.presetElement, 'click touchstart', this.onMouseClick);\n if (!this.isMobile) {\n EventHandler.remove(this.presetElement, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.presetElement, 'mouseout', this.onMouseLeave);\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.renderPopup = function () {\n var _this = this;\n this.popupWrapper.classList.add('e-control');\n var popupWidth = this.popupWrapper.getBoundingClientRect().width;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass.trim() !== '') {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (this.isMobile && this.isCustomWindow) {\n this.modal = this.createElement('div');\n document.body.appendChild(this.modal);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n relateTo: this.isMobile && this.isCustomWindow ? document.body :\n (!isNullOrUndefined(this.targetElement) ? this.targetElement : this.inputWrapper.container),\n position: (this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'left', Y: 'bottom' } : { X: 'center', Y: 'center' }) :\n this.enableRtl ? { X: 'left', Y: 'bottom' } : { X: 'right', Y: 'bottom' }),\n offsetX: this.isMobile || this.enableRtl ? 0 : -popupWidth,\n offsetY: OFFSETVALUE,\n collision: this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'fit' } : { X: 'fit', Y: 'fit' }) : { X: 'fit', Y: 'flip' },\n targetType: this.isMobile && this.isCustomWindow ? 'container' : 'relative',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n open: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n addClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.cancelButton) {\n _this.btnKeyboardModule = new KeyboardEvents(_this.cancelButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { tab: 'tab', altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n _this.btnKeyboardModule = new KeyboardEvents(_this.applyButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n }\n if (!isNullOrUndefined(_this.leftCalendar)) {\n if (!_this.isRangeIconClicked) {\n _this.calendarFocus();\n }\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.presetKeyActionHandler.bind(_this),\n keyConfigs: _this.presetKeyConfig\n });\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n if (isNullOrUndefined(_this.leftCalendar)) {\n _this.preventBlur = true;\n _this.presetElement.focus();\n }\n else {\n _this.presetElement.setAttribute('tabindex', '-1');\n }\n }\n _this.popupKeyBoardHandler();\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.add(document, 'keydown', _this.popupCloseHandler, _this);\n }\n },\n close: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (_this.isRangeIconClicked) {\n _this.inputWrapper.container.children[1].focus();\n }\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label)) {\n _this.unWireListEvents();\n }\n if (!isNullOrUndefined(_this.popupObj)) {\n detach(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupObj = null;\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.remove(document, 'keydown', _this.popupCloseHandler);\n }\n }\n });\n if (this.isMobile) {\n this.popupObj.element.classList.add(DEVICE);\n if (!this.isMobile) {\n this.popupObj.element.classList.add('e-bigger');\n }\n }\n if (this.isMobile && this.isCustomWindow) {\n addClass([this.modal], [DEVICE, ROOT, 'e-range-modal']);\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n }\n EventHandler.add(document, 'mousedown', this.documentHandler, this);\n };\n DateRangePicker.prototype.popupCloseHandler = function (e) {\n switch (e.keyCode) {\n case 27:\n this.hide(e);\n break;\n }\n };\n DateRangePicker.prototype.calendarFocus = function () {\n var startDate = this.popupObj && this.popupObj.element.querySelector('.' + STARTDATE);\n if (startDate) {\n var ele = closest(startDate, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n ele.children[1].firstElementChild.focus();\n }\n addClass([startDate], FOCUSDATE);\n }\n else {\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n };\n DateRangePicker.prototype.presetHeight = function () {\n var presets = this.popupObj && this.popupObj.element.querySelector('.' + PRESETS);\n var rangeContainer = this.popupObj && this.popupObj.element.querySelector('.' + RANGECONTAINER);\n if (!isNullOrUndefined(presets) && !isNullOrUndefined(rangeContainer)) {\n presets.style.height = rangeContainer.getBoundingClientRect().height + 'px';\n }\n };\n DateRangePicker.prototype.presetKeyActionHandler = function (e) {\n switch (e.action) {\n case 'moveDown':\n this.listMoveDown(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'moveUp':\n this.listMoveUp(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'enter':\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(this.leftCalendar) && !isNullOrUndefined(actItem)) {\n if (isNullOrUndefined(hvrItem) || (!isNullOrUndefined(actItem) && actItem === hvrItem)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(actItem);\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.calendarFocus();\n actItem.classList.remove(HOVER);\n e.preventDefault();\n return;\n }\n }\n }\n if (!isNullOrUndefined(hvrItem) || !isNullOrUndefined(actItem)) {\n this.onMouseClick(e, hvrItem || actItem);\n }\n e.preventDefault();\n break;\n case 'tab':\n if (this.leftCalendar) {\n var item = this.getHoverLI();\n if (!isNullOrUndefined(item)) {\n item.classList.remove(HOVER);\n }\n }\n else {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.listMoveDown = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n else {\n addClass([this.liCollections[0]], HOVER);\n }\n };\n DateRangePicker.prototype.listMoveUp = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n };\n DateRangePicker.prototype.getHoverLI = function () {\n var item = this.presetElement.querySelector('.' + HOVER);\n return item;\n };\n DateRangePicker.prototype.getActiveLI = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n return item;\n };\n DateRangePicker.prototype.popupKeyBoardHandler = function () {\n this.popupKeyboardModule = new KeyboardEvents(this.popupWrapper, {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: { escape: 'escape' }\n });\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n };\n DateRangePicker.prototype.setScrollPosition = function () {\n var listHeight = this.presetElement.getBoundingClientRect().height;\n var hover = this.presetElement.querySelector('.' + HOVER);\n var active = this.presetElement.querySelector('.' + ACTIVE);\n var element = !isNullOrUndefined(hover) ? hover : active;\n if (!isNullOrUndefined(element)) {\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.presetElement.scrollTop = nextEle ? (height - (listHeight / 2 + liHeight / 2)) : height;\n }\n else {\n this.presetElement.scrollTop = 0;\n }\n }\n };\n DateRangePicker.prototype.popupKeyActionHandle = function (e) {\n var presetElement = closest(e.target, '.' + PRESETS);\n switch (e.action) {\n case 'escape':\n if (this.isPopupOpen()) {\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[1].blur();\n }\n break;\n case 'enter':\n if (!this.isPopupOpen()) {\n this.show(null, e);\n }\n else {\n this.inputWrapper.container.children[1].focus();\n }\n break;\n case 'tab':\n this.hide(e);\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n else {\n if (document.activeElement === this.cancelButton.element && this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (document.activeElement === this.applyButton.element && this.applyButton.element.disabled !== true) {\n this.cancelButton.element.focus();\n }\n else {\n if (!isNullOrUndefined(this.presetElement) && (document.activeElement === this.cancelButton.element)) {\n this.presetElement.focus();\n }\n else {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n }\n e.preventDefault();\n break;\n }\n };\n DateRangePicker.prototype.documentHandler = function (e) {\n if (isNullOrUndefined(this.popupObj)) {\n return;\n }\n var target = e.target;\n if (!this.inputWrapper.container.contains(target) ||\n (!isNullOrUndefined(this.popupObj) && !closest(target, this.popupWrapper.id))) {\n if ((e.type === 'touchstart' || e.type === 'mousedown') ||\n this.closeEventArgs && !this.closeEventArgs.cancel) {\n e.preventDefault();\n }\n }\n if ((isNullOrUndefined(this.targetElement) ||\n (!isNullOrUndefined(this.targetElement) && !(target === this.targetElement))) &&\n !(closest(target, '#' + this.popupObj.element.id))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && !(closest(target, '.e-daterangepicker.e-popup') && (!target.classList.contains('e-day')))) {\n this.preventBlur = false;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n if (!this.isMobile) {\n this.isRangeIconClicked = false;\n }\n }\n }\n };\n DateRangePicker.prototype.createInput = function () {\n this.inputWrapper = Input.createInput({\n floatLabelType: this.floatLabelType,\n element: this.inputElement,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [DATERANGEICON]\n }, this.createElement);\n attributes(this.inputElement, {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '0', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.element.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n });\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n if (!isNullOrUndefined(this.placeholder) && this.placeholder.trim() !== '') {\n Input.addAttributes({ 'aria-placeholder': this.placeholder }, this.inputElement);\n }\n this.setEleWidth(this.width);\n addClass([this.inputWrapper.container], DATERANGEWRAPPER);\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.inputElement.type === 'hidden') {\n this.inputWrapper.container.style.display = 'none';\n }\n this.refreshControl();\n this.previousEleValue = this.inputElement.value;\n };\n DateRangePicker.prototype.setEleWidth = function (width) {\n if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (this.width);\n }\n else if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n DateRangePicker.prototype.refreshControl = function () {\n this.validateMinMax();\n if (this.strictMode) {\n this.validateRangeStrict();\n }\n var isDisabled = this.disabledDates();\n if (this.strictMode && (isDisabled)) {\n this.startValue = this.previousStartValue;\n this.setProperties({ startDate: this.startValue }, true);\n this.endValue = this.previousEndValue;\n this.setProperties({ endDate: this.endValue }, true);\n this.setValue();\n }\n this.updateInput();\n if (!this.strictMode) {\n this.validateRange();\n }\n if (!this.strictMode && (isDisabled)) {\n this.clearRange();\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !isDisabled) {\n this.disabledDateRender();\n }\n this.errorClass();\n this.previousStartValue = isNullOrUndefined(this.startValue) || isNaN(+this.startValue) ? null : new Date(+this.startValue);\n this.previousEndValue = isNullOrUndefined(this.endValue) || isNaN(+this.endValue) ? null : new Date(+this.endValue);\n };\n DateRangePicker.prototype.updateInput = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var startDate = this.globalize.formatDate(this.startValue, { format: this.format, type: 'date', skeleton: 'yMd' });\n var endDate = this.globalize.formatDate(this.endValue, { format: this.format, type: 'date', skeleton: 'yMd' });\n Input.setValue(startDate + ' ' + this.separator + ' ' + endDate, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n }\n };\n DateRangePicker.prototype.isDateDisabled = function (date) {\n if (isNullOrUndefined(date)) {\n return false;\n }\n var value = new Date(+date);\n if (+value < +this.min || +value > +this.max) {\n return true;\n }\n this.virtualRenderCellArgs = {\n date: value,\n isDisabled: false,\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.disabledDateRender = function () {\n this.disabledDays = [];\n this.disabledDayCnt = null;\n var localDate = new Date(+this.startValue);\n var count = 0;\n while (+localDate <= +this.endValue) {\n this.virtualRenderCellArgs = {\n date: localDate,\n isDisabled: false,\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n this.disabledDays.push(new Date(+args.date));\n if (+localDate > +this.startValue && +localDate < +this.endValue) {\n count++;\n }\n }\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n this.disabledDayCnt = count;\n };\n DateRangePicker.prototype.virtualRenderCellEvent = function (args) {\n extend(this.virtualRenderCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n DateRangePicker.prototype.disabledDates = function () {\n var isStartDisabled = false;\n var isEndDisabled = false;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n isStartDisabled = this.isDateDisabled(this.startValue);\n isEndDisabled = this.isDateDisabled(this.endValue);\n this.currentDate = null;\n this.setValue();\n }\n return (isStartDisabled || isEndDisabled);\n };\n DateRangePicker.prototype.setModelValue = function () {\n if (!this.value && this.startDate === null && this.endDate === null) {\n this.setProperties({ value: null }, true);\n }\n else if (this.value === null || this.value.start === null) {\n if (this.value === null) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n else if (this.value.start === null) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n else {\n if ((this.value && this.value.length > 0) ||\n this.valueType && this.valueType.length > 0) {\n if (+this.startDate !== +this.value[0] || +this.endDate !== +this.value[1]) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n if (this.value && this.value[0] == null && this.value[1] == null) {\n this.setProperties({ value: null }, true);\n }\n }\n else {\n if ((this.value && this.value.start)) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n }\n this.createHiddenInput();\n };\n /**\n * To dispatch the event manually\n */\n DateRangePicker.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n this.firstHiddenChild.dispatchEvent(evt);\n };\n DateRangePicker.prototype.changeTrigger = function (e) {\n if (+this.initStartDate !== +this.startValue || +this.initEndDate !== +this.endValue) {\n this.setProperties({ endDate: this.checkDateValue(this.endValue) }, true);\n this.setProperties({ startDate: this.checkDateValue(this.startValue) }, true);\n this.setModelValue();\n this.trigger('change', this.rangeArgs(e));\n }\n this.previousEleValue = this.inputElement.value;\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n * @hidden\n */\n DateRangePicker.prototype.navigateTo = function (view, value) {\n _super.prototype.navigateTo.call(this, view, value);\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateRangePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.focus();\n var focusArguments = {\n model: this\n };\n this.trigger('focus', focusArguments);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateRangePicker.prototype.focusOut = function () {\n var isBlur = this.preventBlur;\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.preventBlur = false;\n this.inputElement.blur();\n this.preventBlur = isBlur;\n }\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateRangePicker.prototype.destroy = function () {\n this.hide(null);\n var ariaAttrs = {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '0', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.element.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'aria-invalid': 'false', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n removeClass([this.inputElement], [ROOT]);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n Input.removeAttributes(ariaAttrs, this.inputElement);\n this.ensureInputAttribute();\n this.inputElement.classList.remove('e-input');\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n detach(this.inputWrapper.container);\n }\n }\n if (!isNullOrUndefined(this.inputKeyboardModule) && !this.isMobile) {\n this.inputKeyboardModule.destroy();\n }\n if (this.popupObj) {\n if (!this.isMobile) {\n this.clearCalendarEvents();\n }\n }\n _super.prototype.destroy.call(this);\n this.inputWrapper = this.popupWrapper = this.popupObj = this.cloneElement = this.presetElement = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n if ((!isNullOrUndefined(this.firstHiddenChild))\n && (!isNullOrUndefined(this.secondHiddenChild))) {\n detach(this.firstHiddenChild);\n detach(this.secondHiddenChild);\n this.firstHiddenChild = this.secondHiddenChild = null;\n this.inputElement.setAttribute('name', this.element.getAttribute('data-name'));\n this.inputElement.removeAttribute('data-name');\n }\n };\n DateRangePicker.prototype.ensureInputAttribute = function () {\n for (var attr = 0; attr < this.inputElement.attributes.length; attr++) {\n var prop = this.inputElement.attributes[attr].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * To get component name\n * @returns string\n * @private\n */\n DateRangePicker.prototype.getModuleName = function () {\n return 'daterangepicker';\n };\n /**\n * Return the properties that are maintained upon browser refresh.\n * @returns string\n */\n DateRangePicker.prototype.getPersistData = function () {\n var keyEntity = ['startDate', 'endDate', 'value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Return the selected range and day span in the DateRangePicker.\n * @returns Object\n */\n DateRangePicker.prototype.getSelectedRange = function () {\n var range;\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n range = (Math.round(Math.abs((this.startValue.getTime() - this.endValue.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n this.disabledDateRender();\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n }\n else {\n range = 0;\n }\n return { startDate: this.startValue, endDate: this.endValue, daySpan: range };\n };\n /**\n * To open the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.show = function (element, event) {\n if (this.isMobile && this.popupObj) {\n this.popupObj.refreshPosition();\n }\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n if (!this.isPopupOpen()) {\n if (element) {\n this.targetElement = element;\n }\n this.createPopup();\n this.openEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null,\n appendTo: document.body\n };\n this.trigger('open', this.openEventArgs);\n if (!this.openEventArgs.cancel) {\n this.openEventArgs.appendTo.appendChild(this.popupWrapper);\n this.showPopup(element, event);\n var isPreset = (!this.isCustomRange || (this.isMobile && this.isCustomRange));\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.setScrollPosition();\n }\n }\n }\n }\n };\n /**\n * To close the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.hide = function (event) {\n if (this.popupObj) {\n if (isNullOrUndefined(this.previousEndValue) && isNullOrUndefined(this.previousStartValue)) {\n this.clearRange();\n }\n else {\n if (!isNullOrUndefined(this.previousStartValue)) {\n this.startValue = new Date('' + this.previousStartValue);\n this.setValue();\n this.currentDate = new Date('' + this.startValue);\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n this.endValue = new Date('' + this.previousEndValue);\n this.setValue();\n }\n else {\n this.endValue = null;\n this.setValue();\n }\n }\n if (this.isPopupOpen()) {\n this.closeEventArgs = {\n cancel: false,\n popup: this.popupObj,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null\n };\n this.trigger('close', this.closeEventArgs);\n if (!this.closeEventArgs.cancel) {\n if (this.isMobile) {\n if (!isNullOrUndefined(this.startButton) && !isNullOrUndefined(this.endButton)) {\n EventHandler.remove(this.startButton.element, 'click touchstart', this.deviceHeaderClick);\n EventHandler.remove(this.endButton.element, 'click touchstart', this.deviceHeaderClick);\n }\n }\n if (this.popupObj) {\n this.popupObj.hide();\n if (this.preventBlur) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftKeyboardModule) && !isNullOrUndefined(this.rightKeyboardModule)) {\n this.leftKeyboardModule.destroy();\n this.rightKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.cancelButton)) {\n this.btnKeyboardModule.destroy();\n }\n }\n this.targetElement = null;\n removeClass([document.body], OVERFLOW);\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (this.isMobile && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n this.isKeyPopup = this.dateDisabled = false;\n }\n else {\n removeClass([this.inputWrapper.buttons[0]], ACTIVE);\n }\n }\n }\n this.updateHiddenInput();\n if (this.isMobile) {\n this.element.removeAttribute('readonly');\n }\n };\n DateRangePicker.prototype.setLocale = function () {\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.inputElement);\n this.updateInput();\n this.changeTrigger();\n };\n DateRangePicker.prototype.refreshChange = function () {\n this.refreshControl();\n this.changeTrigger();\n };\n DateRangePicker.prototype.setDate = function () {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.refreshChange();\n };\n DateRangePicker.prototype.enableInput = function () {\n if (+this.min <= +this.max) {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.element.hasAttribute('disabled')) {\n this.bindEvents();\n }\n }\n };\n DateRangePicker.prototype.clearModelvalue = function (newProp, oldProp) {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n if (oldProp.value && oldProp.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n else if (oldProp.value && oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n else if (oldProp.value && !oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n this.updateValue();\n this.setDate();\n };\n DateRangePicker.prototype.createHiddenInput = function () {\n if (isNullOrUndefined(this.firstHiddenChild) && isNullOrUndefined(this.secondHiddenChild)) {\n this.firstHiddenChild = this.createElement('input');\n this.secondHiddenChild = this.createElement('input');\n }\n if (!isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n this.inputElement.setAttribute('data-name', this.inputElement.getAttribute('name'));\n this.inputElement.removeAttribute('name');\n }\n attributes(this.firstHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name')\n });\n attributes(this.secondHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name'),\n });\n var format = { type: 'datetime', skeleton: 'yMd' };\n this.firstHiddenChild.value = this.startDate && this.globalize.formatDate(this.startDate, format);\n this.secondHiddenChild.value = this.endDate && this.globalize.formatDate(this.endDate, format);\n this.inputElement.parentElement.appendChild(this.firstHiddenChild);\n this.inputElement.parentElement.appendChild(this.secondHiddenChild);\n this.firstHiddenChild.style.display = 'none';\n this.secondHiddenChild.style.display = 'none';\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.hide(null);\n switch (prop) {\n case 'width':\n this.setEleWidth(this.width);\n break;\n case 'separator':\n this.previousEleValue = this.inputElement.value;\n this.setProperties({ separator: newProp.separator }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.setProperties({ placeholder: newProp.placeholder }, true);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n this.inputElement.setAttribute('aria-readonly', '' + this.readonly);\n break;\n case 'cssClass':\n if (this.popupWrapper) {\n this.popupWrapper.className += ' ' + newProp.cssClass;\n }\n this.inputWrapper.container.className += ' ' + newProp.cssClass;\n this.setProperties({ cssClass: newProp.cssClass }, true);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n break;\n case 'allowEdit':\n this.setRangeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.updateInput();\n this.changeTrigger();\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.inputElement);\n this.setLocale();\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'startDate':\n if (typeof newProp.startDate === 'string') {\n newProp.startDate = this.globalize.parseDate(newProp.startDate, format);\n }\n if (+this.initStartDate !== +newProp.startDate) {\n this.startValue = this.checkDateValue(new Date('' + newProp.startDate));\n this.setDate();\n this.setValue();\n }\n break;\n case 'endDate':\n if (typeof newProp.endDate === 'string') {\n newProp.endDate = this.globalize.parseDate(newProp.endDate, format);\n }\n if (+this.initEndDate !== +newProp.endDate) {\n this.endValue = this.checkDateValue(new Date('' + newProp.endDate));\n this.setDate();\n this.setValue();\n }\n break;\n case 'value':\n if ((!isNullOrUndefined(newProp.value) && newProp.value.length > 0)\n || !isNullOrUndefined(newProp.value) && newProp.value.start) {\n this.valueType = newProp.value;\n if (newProp.value[0] === null || (newProp.value.start === null)) {\n if (newProp.value.length === 1 || (newProp.value.start)) {\n this.clearModelvalue(newProp, oldProp);\n }\n else if (newProp.value[1] === null ||\n (newProp.value.start === null)) {\n this.clearModelvalue(newProp, oldProp);\n }\n }\n else if ((+this.initStartDate !== +newProp.value[0]\n || +this.initEndDate !== +newProp.value[1]) ||\n (+this.initStartDate !== +(newProp.value.start\n || +this.initEndDate !== +newProp.value.start))) {\n if (newProp.value.length === 1) {\n this.modelValue = newProp.value;\n }\n else if (newProp.value.start) {\n this.modelValue = newProp.value;\n }\n this.updateValue();\n this.setDate();\n }\n }\n else {\n if (isNullOrUndefined(this.value)\n || newProp.value.start == null) {\n this.valueType = newProp.value;\n this.startValue = null;\n this.endValue = null;\n this.clearModelvalue(newProp, oldProp);\n }\n }\n break;\n case 'minDays':\n this.setProperties({ minDays: newProp.minDays }, true);\n this.refreshChange();\n break;\n case 'maxDays':\n this.setProperties({ maxDays: newProp.maxDays }, true);\n this.refreshChange();\n break;\n case 'min':\n this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true);\n this.previousEleValue = this.inputElement.value;\n this.enableInput();\n this.refreshChange();\n break;\n case 'max':\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.enableInput();\n this.refreshChange();\n break;\n case 'strictMode':\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.refreshChange();\n break;\n case 'presets':\n this.setProperties({ presets: newProp.presets }, true);\n this.processPresets();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateRangePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateRangePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"locale\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Property('Gregorian')\n ], DateRangePicker.prototype, \"calendarMode\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"renderDayCell\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"startDate\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"endDate\", void 0);\n __decorate([\n Collection([{}], Presets)\n ], DateRangePicker.prototype, \"presets\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], DateRangePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"depth\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property('-')\n ], DateRangePicker.prototype, \"separator\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"minDays\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"maxDays\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property('Never')\n ], DateRangePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"blur\", void 0);\n DateRangePicker = __decorate([\n NotifyPropertyChanges\n ], DateRangePicker);\n return DateRangePicker;\n}(CalendarBase));\nexport { DateRangePicker };\n","/**\n * Defines types of Cell\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 * @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 * @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","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///\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\nimport { cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar RTL = 'e-rtl';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = ListBaseClasses.li;\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.previousDateTime = null;\n return _this;\n }\n DateTimePicker.prototype.focusHandler = function () {\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateTimePicker.prototype.focusIn = function () {\n _super.prototype.focusIn.call(this);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateTimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateTimePicker.prototype.blurHandler = function (e) {\n // IE popup closing issue when click over the scrollbar\n if (this.isTimePopupOpen() && this.isPreventBlur) {\n this.inputElement.focus();\n return;\n }\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n var blurArguments = {\n model: this\n };\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n this.trigger('blur', blurArguments);\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n this.inputElement.removeAttribute('aria-placeholder');\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.isPreventBlur = false;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n this.checkAttributes();\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n this.bindInputEvents();\n this.setValue();\n this.previousDateTime = this.value && new Date(+this.value);\n };\n DateTimePicker.prototype.setValue = function () {\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n var dateOptions;\n if (!isNullOrUndefined(value)) {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n return this.globalize.formatDate(value, dateOptions);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.isDateObject = function (value) {\n return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n };\n DateTimePicker.prototype.createInputElement = function () {\n removeClass([this.inputElement], DATEPICKERROOT);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n addClass([this.inputElement], ROOT);\n this.renderTimeIcon();\n };\n DateTimePicker.prototype.renderTimeIcon = function () {\n this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n };\n DateTimePicker.prototype.bindInputEvents = function () {\n EventHandler.add(this.timeIcon, 'mousedown', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.blurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.keyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n }\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.format)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n if (this.calendarMode === 'Gregorian') {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n }\n else {\n return getValue('main.' + '' + this.locale + '.dates.calendars.islamic.timeFormats.short', ld);\n }\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n else {\n this.inputElement.focus();\n this.popupCreation('time', e);\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled) {\n return;\n }\n else {\n if (type === 'time' && !this.dateTimeWrapper) {\n if (this.isDatePopupOpen()) {\n this.hide(e);\n }\n this.popupCreation('time', e);\n }\n else if (!this.popupObj) {\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n _super.prototype.show.call(this);\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.toggle = function (e) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n this.show('time', null);\n }\n else if (this.isTimePopupOpen()) {\n this.hide(e);\n _super.prototype.show.call(this, null, e);\n this.popupCreation('date', null);\n }\n else {\n this.show(null, e);\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var dateObject;\n if (this.calendarMode === 'Gregorian') {\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.cldrDateTimeFormat(), type: 'datetime'\n });\n }\n else {\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.cldrDateTimeFormat(), type: 'datetime', calendar: 'islamic'\n });\n }\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n dateObject :\n new Date() : this.value;\n this.valueWithMinutes = value;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var min = this.startTime(value);\n var max = this.endTime(value);\n var listDetails = TimePickerBase.createListItems(this.createElement, min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type, e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (type === 'date') {\n if (!this.readonly && this.popupWrapper) {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_datepopup' });\n }\n }\n else {\n if (!this.readonly) {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.listCreation();\n append([this.listWrapper], this.dateTimeWrapper);\n }\n document.body.appendChild(this.dateTimeWrapper);\n this.addTimeSelection();\n this.renderPopup();\n this.setTimeScrollPosition();\n this.openPopup(e);\n this.popupObject.refreshPosition(this.inputElement);\n }\n }\n };\n DateTimePicker.prototype.openPopup = function (e) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObject,\n event: e || null\n };\n this.trigger('open', this.preventArgs);\n if (!this.preventArgs.cancel && !this.readonly) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n if (this.zIndex === 1000) {\n this.popupObject.show(new Animation(openAnimation), this.element);\n }\n else {\n this.popupObject.show(new Animation(openAnimation), null);\n }\n addClass([this.inputWrapper.container], [ICONANIMATION]);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n EventHandler.add(document, 'mousedown', this.documentClickHandler, this);\n }\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n event.preventDefault();\n var target = event.target;\n if (!(closest(target, '#' + (this.popupObject && this.popupObject.element.id))) && target !== this.inputElement\n && target !== this.timeIcon && target !== this.inputWrapper.container) {\n if (this.isTimePopupOpen()) {\n this.hide(event);\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = ((document.activeElement === this.inputElement) && (Browser.isIE || Browser.info.name === 'edge'));\n event.preventDefault();\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.TimeKeyActionHandle.bind(_this), keyConfigs: _this.timekeyConfigure, eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.setAttribute('aria-activedescendant', 'null');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = undefined;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }\n });\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n DateTimePicker.prototype.changeEvent = function (e) {\n if (+this.previousDateTime !== +this.value) {\n _super.prototype.changeEvent.call(this, e);\n this.inputElement.focus();\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n this.previousDateTime = this.value && new Date(+this.value);\n }\n };\n DateTimePicker.prototype.updateValue = function (e) {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs = {\n value: this.value, event: e,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupHeight = this.getPopupHeight();\n var popupElement;\n popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n var nextEle = popupElement.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : popupElement.offsetTop;\n var liHeight = popupElement.getBoundingClientRect().height;\n if ((height + popupElement.offsetTop) > popupHeight) {\n this.dateTimeWrapper.scrollTop = nextEle ? (height - (popupHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousElementValue = this.inputElement.value;\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n }\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide(event);\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n var value = li.getAttribute('data-value');\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue(event);\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement)) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n attributes(this.inputElement, { 'aria-activedescendant': 'null' });\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value;\n value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value;\n value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function (e) {\n if (this.popupObj || this.dateTimeWrapper) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObj || this.popupObject,\n event: e || null\n };\n if (isNullOrUndefined(this.popupObj)) {\n this.trigger('close', this.preventArgs);\n }\n if (!this.preventArgs.cancel) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup(e);\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n }\n }\n if (Browser.isDevice) {\n this.element.removeAttribute('readonly');\n }\n };\n DateTimePicker.prototype.closePopup = function (e) {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ;\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function () {\n var attributes = ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, true);\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n return modules;\n };\n DateTimePicker.prototype.getTimeActiveElement = function () {\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.createDateObj = function (val) {\n return val instanceof Date ? val : null;\n };\n DateTimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = this.valueWithMinutes;\n var status_1 = !isNullOrUndefined(value);\n if (this.checkDateValue(dateValue)) {\n var date = status_1 ? value.getDate() : DAY;\n var month = status_1 ? value.getMonth() : MONTH;\n var year = status_1 ? value.getFullYear() : YEAR;\n var hour = status_1 ? value.getHours() : HOUR;\n var minute = status_1 ? value.getMinutes() : MINUTE;\n var second = status_1 ? value.getSeconds() : SECOND;\n var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n return new Date(year, month, date, hour, minute, second, millisecond);\n }\n }\n return null;\n };\n DateTimePicker.prototype.findNextTimeElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var dateTimeVal = null;\n var listCount = this.liCollections.length;\n if (!isNullOrUndefined(this.activeIndex) || !isNullOrUndefined(this.checkDateValue(value))) {\n if (event.action === 'home') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n this.activeIndex = 0;\n }\n else if (event.action === 'end') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n this.activeIndex = this.timeCollections.length - 1;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < listCount; i++) {\n if (+value < this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = listCount - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n }\n };\n DateTimePicker.prototype.setTimeValue = function (date, value) {\n var dateString;\n var time;\n var val = this.validateMinMaxRange(value);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = new Date(+this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = new Date(+this.valueWithMinutes);\n }\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.format) ? this.format : this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.format) ? this.format : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ? this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.TimeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.previousDateTime = this.value;\n }\n }\n else {\n this.updateValue(event);\n }\n this.hide(event);\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n event.stopPropagation();\n break;\n case 'escape':\n this.hide(event);\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle(event);\n break;\n }\n };\n DateTimePicker.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 var options = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date('' + newProp.value)) }, true);\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n newProp.value = this.validateValue(newProp.value);\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger(null);\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.dateTimeWrapper) {\n this.dateTimeWrapper.className += ' ' + newProp.cssClass;\n }\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.l10n.getConstant('placeholder'), this.inputElement);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.updateInput.call(this);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.setValue();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.inputElement.setAttribute('aria-placeholder', newProp.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n break;\n case 'strictMode':\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n this.hide(null);\n }\n };\n /**\n * To get component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"values\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\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, addClass, append, Property, Event, L10n, compile } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend, removeClass, prepend, isNullOrUndefined, detach, getValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, rippleEffect, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\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()\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\nexport var dropDownBaseClasses = {\n root: 'e-dropdownbase',\n rtl: 'e-rtl',\n content: 'e-content',\n selected: 'e-active',\n hover: 'e-hover',\n noData: 'e-nodata',\n fixedHead: 'e-fixed-head',\n focus: 'e-item-focus',\n li: ListBaseClasses.li,\n group: ListBaseClasses.group,\n disabled: ListBaseClasses.disabled,\n grouping: 'e-dd-group'\n};\n/**\n * DropDownBase component will generate the list items based on given data and act as base class to drop-down related components\n */\nvar DropDownBase = /** @class */ (function (_super) {\n __extends(DropDownBase, _super);\n /**\n * * Constructor for DropDownBase class\n */\n function DropDownBase(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n DropDownBase.prototype.getPropObject = function (prop, newProp, oldProp) {\n var newProperty = new Object();\n var oldProperty = new Object();\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var propName = new Function('prop', 'return prop');\n newProperty[propName(prop)] = newProp[propName(prop)];\n oldProperty[propName(prop)] = oldProp[propName(prop)];\n var data = new Object();\n data.newProperty = newProperty;\n data.oldProperty = oldProperty;\n return data;\n };\n DropDownBase.prototype.getValueByText = function (text, ignoreCase, ignoreAccent) {\n var value = null;\n if (!isNullOrUndefined(this.listData)) {\n if (ignoreCase) {\n value = this.checkValueCase(text, true, ignoreAccent);\n }\n else {\n value = this.checkValueCase(text, false, ignoreAccent);\n }\n }\n return value;\n };\n ;\n DropDownBase.prototype.checkValueCase = function (text, ignoreCase, ignoreAccent, isTextByValue) {\n var _this = this;\n var value = null;\n if (isTextByValue) {\n value = text;\n }\n var dataSource = this.listData;\n var fields = this.fields;\n var type = this.typeOfData(dataSource).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n if (!isNullOrUndefined(item)) {\n if (ignoreAccent) {\n value = this.checkingAccent(String(item), text, ignoreCase);\n }\n else {\n if (ignoreCase) {\n if (this.checkIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase, isTextByValue);\n }\n }\n }\n }\n }\n }\n else {\n if (ignoreCase) {\n dataSource.filter(function (item) {\n if (_this.checkIgnoreCase(getValue(fields.text, item).toString(), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n else {\n if (isTextByValue) {\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && itemValue.toString() === value.toString()) {\n value = getValue(fields.text, item);\n }\n });\n }\n else {\n dataSource.filter(function (item) {\n if (_this.checkNonIgnoreCase(getValue(fields.text, item), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n }\n }\n return value;\n };\n DropDownBase.prototype.checkingAccent = function (item, text, ignoreCase) {\n var dataItem = DataUtil.ignoreDiacritics(String(item));\n var textItem = DataUtil.ignoreDiacritics(text.toString());\n var value = null;\n if (ignoreCase) {\n if (this.checkIgnoreCase(dataItem, textItem)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n return value;\n };\n DropDownBase.prototype.checkIgnoreCase = function (item, text) {\n return String(item).toLowerCase() === text.toString().toLowerCase() ? true : false;\n };\n DropDownBase.prototype.checkNonIgnoreCase = function (item, text) {\n return String(item) === text.toString() ? true : false;\n };\n DropDownBase.prototype.getItemValue = function (dataItem, typedText, ignoreCase, isTextByValue) {\n var value = null;\n var dataSource = this.listData;\n var type = this.typeOfData(dataSource).typeof;\n if (isTextByValue) {\n value = dataItem.toString();\n }\n else {\n if (ignoreCase) {\n value = type === 'string' ? String(dataItem) : this.getFormattedValue(String(dataItem));\n }\n else {\n value = type === 'string' ? typedText : this.getFormattedValue(typedText);\n }\n }\n return value;\n };\n DropDownBase.prototype.l10nUpdate = function (actionFailure) {\n if (this.noRecordsTemplate !== 'No Records Found' || this.actionFailureTemplate !== 'The Request Failed') {\n var template = actionFailure ? this.actionFailureTemplate : this.noRecordsTemplate;\n var compiledString = void 0;\n this.list.innerHTML = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.list.appendChild(item);\n }\n }\n else {\n var l10nLocale = { noRecordsTemplate: 'No Records Found', actionFailureTemplate: 'The Request Failed' };\n this.l10n = new L10n('dropdowns', l10nLocale, this.locale);\n this.list.innerHTML = actionFailure ?\n this.l10n.getConstant('actionFailureTemplate') : this.l10n.getConstant('noRecordsTemplate');\n }\n };\n DropDownBase.prototype.getTextByValue = function (value) {\n var text;\n text = this.checkValueCase(value, false, false, true);\n return text;\n };\n DropDownBase.prototype.getFormattedValue = function (value) {\n if (this.listData && this.listData.length) {\n var item = this.typeOfData(this.listData);\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'number'\n || item.typeof === 'number') {\n return parseInt(value, 10);\n }\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'boolean'\n || item.typeof === 'boolean') {\n return (value === 'true');\n }\n }\n return value;\n };\n /**\n * Sets RTL to dropdownbase wrapper\n */\n DropDownBase.prototype.setEnableRtl = function () {\n if (this.list) {\n this.enableRtlElements.push(this.list);\n }\n this.enableRtl ? addClass(this.enableRtlElements, dropDownBaseClasses.rtl) :\n removeClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n };\n ;\n /**\n * Initialize the Component.\n */\n DropDownBase.prototype.initialize = function () {\n this.bindEvent = true;\n if (this.element.tagName === 'UL') {\n var jsonElement = ListBase.createJsonFromElement(this.element);\n this.setProperties({ fields: { text: 'text', value: 'text' } }, true);\n this.resetList(jsonElement, this.fields);\n }\n else if (this.element.tagName === 'SELECT') {\n var dataSource = this.dataSource instanceof Array ? (this.dataSource.length > 0 ? true : false)\n : !isNullOrUndefined(this.dataSource) ? true : false;\n if (!dataSource) {\n this.renderItemsBySelect();\n }\n }\n else {\n this.setListData(this.dataSource, this.fields, this.query);\n }\n };\n ;\n /**\n * Get the properties to be maintained in persisted state.\n */\n DropDownBase.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n ;\n /**\n * Sets the enabled state to DropDownBase.\n */\n DropDownBase.prototype.setEnabled = function () {\n this.element.setAttribute('aria-disabled', (this.enabled) ? 'false' : 'true');\n };\n ;\n DropDownBase.prototype.renderItemsBySelect = function () {\n var element = this.element;\n var fields = { value: 'value', text: 'text' };\n var jsonElement = [];\n var group = element.querySelectorAll('select>optgroup');\n var option = element.querySelectorAll('select>option');\n this.getJSONfromOption(jsonElement, option, fields);\n if (group.length) {\n for (var i = 0; i < group.length; i++) {\n var item = group[i];\n var optionGroup = {};\n optionGroup[fields.text] = item.label;\n optionGroup.isHeader = true;\n var child = item.querySelectorAll('option');\n jsonElement.push(optionGroup);\n this.getJSONfromOption(jsonElement, child, fields);\n }\n var items = element.querySelectorAll('select>option');\n }\n this.fields.text = fields.text;\n this.fields.value = fields.value;\n this.resetList(jsonElement, fields);\n };\n DropDownBase.prototype.getJSONfromOption = function (items, options, fields) {\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var option = options_1[_i];\n var json = {};\n json[fields.text] = option.innerText;\n json[fields.value] = option.getAttribute(fields.value) ? option.getAttribute(fields.value) : option.innerText;\n items.push(json);\n }\n };\n /**\n * Execute before render the list items\n * @private\n */\n DropDownBase.prototype.preRender = function () {\n // there is no event handler\n this.scrollTimer = -1;\n this.enableRtlElements = [];\n this.isRequested = false;\n this.isDataFetched = false;\n };\n /**\n * Creates the list items of DropDownBase component.\n */\n DropDownBase.prototype.setListData = function (dataSource, fields, query) {\n var _this = this;\n fields = fields ? fields : this.fields;\n var ulElement;\n this.isActive = true;\n var eventArgs = { cancel: false, data: dataSource, query: query };\n this.trigger('actionBegin', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.showSpinner();\n if (dataSource instanceof DataManager) {\n this.isRequested = true;\n if (this.isDataFetched) {\n this.emptyDataRequest(fields);\n return;\n }\n eventArgs.data.executeQuery(this.getQuery(eventArgs.query)).then(function (e) {\n _this.trigger('actionComplete', e);\n if (e.cancel) {\n return;\n }\n var listItems = e.result;\n if (listItems.length === 0) {\n _this.isDataFetched = true;\n }\n ulElement = _this.renderItems(listItems, fields);\n _this.onActionComplete(ulElement, listItems, e);\n _this.isRequested = false;\n _this.bindChildItems(listItems, ulElement, fields, e);\n }).catch(function (e) {\n _this.isRequested = false;\n _this.onActionFailure(e);\n _this.hideSpinner();\n });\n }\n else {\n var dataManager = new DataManager(eventArgs.data);\n var listItems = (this.getQuery(eventArgs.query)).executeLocal(dataManager);\n var localDataArgs = { cancel: false, result: listItems };\n this.trigger('actionComplete', localDataArgs);\n if (localDataArgs.cancel) {\n return;\n }\n ulElement = this.renderItems(localDataArgs.result, fields);\n this.onActionComplete(ulElement, localDataArgs.result);\n this.bindChildItems(localDataArgs.result, ulElement, fields);\n }\n };\n DropDownBase.prototype.bindChildItems = function (listItems, ulElement, fields, e) {\n var _this = this;\n if (listItems.length >= 100 && this.getModuleName() === 'autocomplete') {\n setTimeout(function () {\n var childNode = _this.remainingItems(_this.sortedData, fields);\n append(childNode, ulElement);\n _this.liCollections = _this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n _this.updateListValues();\n _this.raiseDataBound(listItems, e);\n }, 0);\n }\n else {\n this.raiseDataBound(listItems, e);\n }\n };\n DropDownBase.prototype.updateListValues = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.raiseDataBound = function (listItems, e) {\n this.hideSpinner();\n this.trigger('dataBound', { items: listItems, e: e });\n };\n DropDownBase.prototype.remainingItems = function (dataSource, fields) {\n var spliceData = new DataManager(dataSource).executeLocal(new Query().skip(100));\n if (this.itemTemplate) {\n var listElements = this.templateListItem(spliceData, fields);\n return [].slice.call(listElements.childNodes);\n }\n var type = this.typeOfData(spliceData).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n return ListBase.createListItemFromArray(this.createElement, spliceData, true, this.listOption(spliceData, fields));\n }\n return ListBase.createListItemFromJson(this.createElement, spliceData, this.listOption(spliceData, fields), 1, true);\n };\n DropDownBase.prototype.emptyDataRequest = function (fields) {\n var listItems = [];\n this.onActionComplete(this.renderItems(listItems, fields), listItems);\n this.isRequested = false;\n this.hideSpinner();\n };\n DropDownBase.prototype.showSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.hideSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.onActionFailure = function (e) {\n this.liCollections = [];\n this.trigger('actionFailure', e);\n this.l10nUpdate(true);\n addClass([this.list], dropDownBaseClasses.noData);\n };\n DropDownBase.prototype.onActionComplete = function (ulElement, list, e) {\n this.listData = list;\n this.list.innerHTML = '';\n this.list.appendChild(ulElement);\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n this.postRender(this.list, list, this.bindEvent);\n };\n DropDownBase.prototype.postRender = function (listElement, list, bindEvent) {\n var focusItem = listElement.querySelector('.' + dropDownBaseClasses.li);\n var selectedItem = listElement.querySelector('.' + dropDownBaseClasses.selected);\n if (focusItem && !selectedItem) {\n focusItem.classList.add(dropDownBaseClasses.focus);\n }\n if (list.length <= 0) {\n this.l10nUpdate();\n addClass([listElement], dropDownBaseClasses.noData);\n }\n else {\n listElement.classList.remove(dropDownBaseClasses.noData);\n }\n if (this.groupTemplate) {\n this.renderGroupTemplate(listElement);\n }\n };\n /**\n * Get the query to do the data operation before list item generation.\n */\n DropDownBase.prototype.getQuery = function (query) {\n return query ? query : this.query ? this.query : new Query();\n };\n /**\n * To render the template content for group header element.\n */\n DropDownBase.prototype.renderGroupTemplate = function (listEle) {\n if (this.fields.groupBy !== null && this.dataSource || this.element.querySelector('.' + dropDownBaseClasses.group)) {\n var dataSource = this.dataSource;\n var headerItems = listEle.querySelectorAll('.' + dropDownBaseClasses.group);\n var tempHeaders = ListBase.renderGroupTemplate(this.groupTemplate, dataSource, this.fields.properties, headerItems);\n }\n };\n /**\n * To create the ul li list items\n */\n DropDownBase.prototype.createListItems = function (dataSource, fields) {\n if (dataSource && fields.groupBy || this.element.querySelector('optgroup')) {\n if (fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n addClass([this.list], dropDownBaseClasses.grouping);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n var options = this.listOption(dataSource, fields);\n var spliceData = (dataSource.length > 100) ?\n new DataManager(dataSource).executeLocal(new Query().take(100))\n : dataSource;\n this.sortedData = dataSource;\n return ListBase.createList(this.createElement, (this.getModuleName() === 'autocomplete') ? spliceData : dataSource, options, true);\n };\n ;\n DropDownBase.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldValues = !isNullOrUndefined(fields.properties) ?\n fields.properties : fields;\n var options = (fields.text !== null || fields.value !== null) ? {\n fields: fieldValues,\n showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n return extend({}, options, fields, true);\n };\n ;\n DropDownBase.prototype.setFloatingHeader = function (e) {\n if (isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement = this.createElement('div', { className: dropDownBaseClasses.fixedHead });\n if (!this.list.querySelector('li').classList.contains(dropDownBaseClasses.group)) {\n this.fixedHeaderElement.style.display = 'none';\n }\n prepend([this.fixedHeaderElement], this.list);\n this.setFixedHeader();\n }\n if (!isNullOrUndefined(this.fixedHeaderElement) && this.fixedHeaderElement.style.zIndex === '0') {\n this.setFixedHeader();\n }\n this.scrollStop(e);\n };\n DropDownBase.prototype.scrollStop = function (e) {\n var target = e.target;\n var liHeight = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n var topIndex = Math.round(target.scrollTop / liHeight);\n var liCollections = this.ulElement.querySelectorAll('li');\n for (var i = topIndex; i > -1; i--) {\n if (!isNullOrUndefined(liCollections[i]) && liCollections[i].classList.contains(dropDownBaseClasses.group)) {\n var currentLi = liCollections[i];\n this.fixedHeaderElement.innerHTML = currentLi.innerHTML;\n this.fixedHeaderElement.style.top = e.target.scrollTop + 'px';\n this.fixedHeaderElement.style.display = 'block';\n break;\n }\n else {\n this.fixedHeaderElement.style.display = 'none';\n this.fixedHeaderElement.style.top = 'none';\n }\n }\n };\n /**\n * To render the list items\n */\n DropDownBase.prototype.renderItems = function (listData, fields) {\n var ulElement;\n if (this.itemTemplate && listData) {\n var dataSource = listData;\n if (dataSource && fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n this.sortedData = dataSource;\n var spliceData = (dataSource.length > 100) ?\n new DataManager(dataSource).executeLocal(new Query().take(100))\n : dataSource;\n ulElement = this.templateListItem((this.getModuleName() === 'autocomplete') ? spliceData : dataSource, fields);\n }\n else {\n ulElement = this.createListItems(listData, fields);\n }\n return ulElement;\n };\n ;\n DropDownBase.prototype.templateListItem = function (dataSource, fields) {\n var option = this.listOption(dataSource, fields);\n return ListBase.renderContentTemplate(this.createElement, this.itemTemplate, dataSource, fields.properties, option);\n };\n DropDownBase.prototype.typeOfData = function (items) {\n var item = { typeof: null, item: null };\n for (var i = 0; (!isNullOrUndefined(items) && i < items.length); i++) {\n if (!isNullOrUndefined(items[i])) {\n return item = { typeof: typeof items[i], item: items[i] };\n }\n }\n return item;\n };\n DropDownBase.prototype.setFixedHeader = function () {\n this.list.parentElement.style.display = 'block';\n var liWidth = this.liCollections[0].offsetWidth;\n this.fixedHeaderElement.style.width = liWidth.toString() + 'px';\n setStyleAttribute(this.fixedHeaderElement, { zIndex: 10 });\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n };\n DropDownBase.prototype.getSortedDataSource = function (dataSource) {\n if (dataSource && this.sortOrder !== 'None') {\n var textField = this.fields.text ? this.fields.text : 'text';\n dataSource = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, textField));\n }\n return dataSource;\n };\n /**\n * Return the index of item which matched with given value in data source\n */\n DropDownBase.prototype.getIndexByValue = function (value) {\n var index;\n var listItems = this.getItems();\n for (var i = 0; i < listItems.length; i++) {\n if (!isNullOrUndefined(value) && listItems[i].getAttribute('data-value') === value.toString()) {\n index = i;\n break;\n }\n }\n return index;\n };\n ;\n /**\n * To dispatch the event manually\n */\n DropDownBase.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n };\n /**\n * To set the current fields\n */\n DropDownBase.prototype.setFields = function () {\n if (this.fields.value && !this.fields.text) {\n this.fields.text = this.fields.value;\n }\n else if (!this.fields.value && this.fields.text) {\n this.fields.value = this.fields.text;\n }\n else if (!this.fields.value && !this.fields.text) {\n this.fields.value = this.fields.text = 'text';\n }\n };\n /**\n * reset the items list.\n */\n DropDownBase.prototype.resetList = function (dataSource, fields, query) {\n if (this.list) {\n this.setListData(dataSource, fields, query);\n }\n };\n DropDownBase.prototype.updateSelection = function () {\n // This is for after added the item, need to update the selected index values.\n };\n DropDownBase.prototype.renderList = function () {\n // This is for render the list items.\n this.render();\n };\n DropDownBase.prototype.updateDataSource = function (props) {\n this.resetList(this.dataSource);\n };\n DropDownBase.prototype.setUpdateInitial = function (props, newProp) {\n this.isDataFetched = false;\n var updateData = {};\n for (var j = 0; props.length > j; j++) {\n if (newProp[props[j]] && props[j] === 'fields') {\n this.setFields();\n }\n else if (newProp[props[j]]) {\n updateData[props[j]] = newProp[props[j]];\n }\n }\n if (Object.keys(updateData).length > 0) {\n if (Object.keys(updateData).indexOf('dataSource') === -1) {\n updateData.dataSource = this.dataSource;\n }\n this.updateDataSource(updateData);\n }\n };\n /**\n * When property value changes happened, then onPropertyChanged method will execute the respective changes in this component.\n * @private\n */\n DropDownBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'dropdownbase') {\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n this.setUpdateInitial(['sortOrder', 'itemTemplate'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'sortOrder':\n case 'dataSource':\n case 'itemTemplate':\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'groupTemplate':\n this.renderGroupTemplate(this.list);\n if (this.ulElement && this.fixedHeaderElement) {\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n }\n break;\n case 'locale':\n if (this.list && (!isNullOrUndefined(this.liCollections) && this.liCollections.length === 0)) {\n this.l10nUpdate();\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n }\n }\n };\n ;\n /**\n * Build and render the component\n * @private\n */\n DropDownBase.prototype.render = function (isEmptyData) {\n this.list = this.createElement('div', { className: dropDownBaseClasses.content, attrs: { 'tabindex': '0' } });\n this.list.classList.add(dropDownBaseClasses.root);\n this.setFields();\n var rippleModel = { duration: 300, selector: '.' + dropDownBaseClasses.li };\n this.rippleFun = rippleEffect(this.list, rippleModel);\n var group = this.element.querySelector('select>optgroup');\n if (this.fields.groupBy || !isNullOrUndefined(group)) {\n EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n }\n if (this.getModuleName() === 'dropdownbase') {\n if (this.element.getAttribute('tabindex')) {\n this.list.setAttribute('tabindex', this.element.getAttribute('tabindex'));\n }\n removeClass([this.element], dropDownBaseClasses.root);\n this.element.style.display = 'none';\n var wrapperElement = this.createElement('div');\n this.element.parentElement.insertBefore(wrapperElement, this.element);\n wrapperElement.appendChild(this.element);\n wrapperElement.appendChild(this.list);\n }\n this.setEnableRtl();\n this.setEnabled();\n if (!isEmptyData) {\n this.initialize();\n }\n };\n ;\n /**\n * Return the module name of this component.\n * @private\n */\n DropDownBase.prototype.getModuleName = function () {\n return 'dropdownbase';\n };\n ;\n /**\n * Gets all the list items bound on this component.\n * @returns Element[].\n */\n DropDownBase.prototype.getItems = function () {\n return this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li);\n };\n ;\n /**\n * Adds a new item to the 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 * @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 * @return {void}.\n */\n DropDownBase.prototype.addItem = function (items, itemIndex) {\n if (!this.list || this.list.textContent === this.noRecordsTemplate) {\n this.renderList();\n }\n var itemsCount = this.getItems().length;\n var selectedItemValue = this.list.querySelector('.' + dropDownBaseClasses.selected);\n items = (items instanceof Array ? items : [items]);\n var index;\n index = (isNullOrUndefined(itemIndex) || itemIndex < 0 || itemIndex > itemsCount - 1) ? itemsCount : itemIndex;\n var fields = this.fields;\n if (items && fields.groupBy) {\n items = ListBase.groupDataSource(items, fields.properties);\n }\n var liCollections = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var isHeader = item.isHeader;\n var li = this.createElement('li', { className: isHeader ? dropDownBaseClasses.group : dropDownBaseClasses.li, id: 'option-add-' + i });\n if (isHeader) {\n li.innerText = getValue(fields.text, item);\n }\n if (this.itemTemplate && !isHeader) {\n var compiledString = compile(this.itemTemplate);\n append(compiledString(item), li);\n }\n else if (!isHeader) {\n li.appendChild(document.createTextNode(getValue(fields.text, item)));\n }\n li.setAttribute('data-value', getValue(fields.value, item));\n li.setAttribute('role', 'option');\n this.notify('addItem', { module: 'CheckBoxSelection', item: li });\n liCollections.push(li);\n this.listData.push(item);\n this.updateActionCompleteData(li, item);\n }\n if (itemsCount === 0 && isNullOrUndefined(this.list.querySelector('ul'))) {\n this.list.innerHTML = '';\n this.list.appendChild(this.ulElement);\n append(liCollections, this.ulElement);\n }\n else {\n for (var i = 0; i < items.length; i++) {\n if (this.liCollections[index]) {\n this.liCollections[index].parentNode.insertBefore(liCollections[i], this.liCollections[index]);\n }\n else {\n this.ulElement.appendChild(liCollections[i]);\n }\n var tempLi = [].slice.call(this.liCollections);\n tempLi.splice(index, 0, liCollections[i]);\n this.liCollections = tempLi;\n index += 1;\n }\n }\n if (selectedItemValue || itemIndex === 0) {\n this.updateSelection();\n }\n };\n DropDownBase.prototype.validationAttribute = function (target, hidden) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n hidden.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (!target.getAttribute(attributes[i])) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n hidden.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n DropDownBase.prototype.setZIndex = function () {\n // this is for component wise\n };\n DropDownBase.prototype.updateActionCompleteData = function (li, item) {\n // this is for ComboBox custom value\n };\n /**\n * Gets the data Object that matches the given value.\n * @param { string | number } value - Specifies the value of the list item.\n * @returns Object.\n */\n DropDownBase.prototype.getDataByValue = function (value) {\n if (!isNullOrUndefined(this.listData)) {\n var type = this.typeOfData(this.listData).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, _a = this.listData; _i < _a.length; _i++) {\n var item = _a[_i];\n if (!isNullOrUndefined(item) && item === value) {\n return item;\n }\n }\n }\n else {\n for (var _b = 0, _c = this.listData; _b < _c.length; _b++) {\n var item = _c[_b];\n if (!isNullOrUndefined(item) && getValue((this.fields.value ? this.fields.value : 'value'), item) === value) {\n return item;\n }\n }\n }\n }\n return null;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n DropDownBase.prototype.destroy = function () {\n if (document.body.contains(this.list)) {\n EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n if (!isNullOrUndefined(this.rippleFun)) {\n this.rippleFun();\n }\n detach(this.list);\n }\n _super.prototype.destroy.call(this);\n };\n ;\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], DropDownBase.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property('No Records Found')\n ], DropDownBase.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property('The Request Failed')\n ], DropDownBase.prototype, \"actionFailureTemplate\", void 0);\n __decorate([\n Property('None')\n ], DropDownBase.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(true)\n ], DropDownBase.prototype, \"enabled\", void 0);\n __decorate([\n Property([])\n ], DropDownBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"query\", void 0);\n __decorate([\n Property(1000)\n ], DropDownBase.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"destroyed\", void 0);\n DropDownBase = __decorate([\n NotifyPropertyChanges\n ], DropDownBase);\n return DropDownBase;\n}(Component));\nexport { DropDownBase };\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/// \nimport { EventHandler, Property, Event, compile, KeyboardEvents, append, extend } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, getUniqueID, formatUnit, isUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Animation, Browser, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, setStyleAttribute, closest, prepend, detach, classList } from '@syncfusion/ej2-base';\nimport { Popup, isCollide, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { incrementalSearch } from '../common/incremental-search';\nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\n/* tslint:disable */\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n// don't use space in classnames \nexport var dropDownListClasses = {\n root: 'e-dropdownlist',\n hover: dropDownBaseClasses.hover,\n selected: dropDownBaseClasses.selected,\n rtl: dropDownBaseClasses.rtl,\n li: dropDownBaseClasses.li,\n disable: dropDownBaseClasses.disabled,\n base: dropDownBaseClasses.root,\n focus: dropDownBaseClasses.focus,\n input: 'e-input-group',\n inputFocus: 'e-input-focus',\n icon: 'e-input-group-icon e-ddl-icon',\n iconAnimation: 'e-icon-anim',\n value: 'e-input-value',\n device: 'e-ddl-device',\n backIcon: 'e-input-group-icon e-back-icon e-icons',\n filterBarClearIcon: 'e-input-group-icon e-clear-icon e-icons',\n filterInput: 'e-input-filter',\n filterParent: 'e-filter-parent',\n mobileFilter: 'e-ddl-device-filter',\n footer: 'e-ddl-footer',\n header: 'e-ddl-header',\n clearIcon: 'e-clear-icon',\n clearIconHide: 'e-clear-icon-hide',\n popupFullScreen: 'e-popup-full-page',\n disableIcon: 'e-ddl-disable-icon',\n hiddenElement: 'e-ddl-hidden'\n};\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The DropDownList component contains a list of predefined values from which you can\n * choose a single value.\n * ```html\n * \n * ```\n * ```typescript\n * let dropDownListObj:DropDownList = new DropDownList();\n * dropDownListObj.appendTo(\"#list\");\n * ```\n */\nvar DropDownList = /** @class */ (function (_super) {\n __extends(DropDownList, _super);\n /**\n * * Constructor for creating the DropDownList component.\n */\n function DropDownList(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n return _this;\n }\n ;\n /**\n * Initialize the event handler.\n * @private\n */\n DropDownList.prototype.preRender = function () {\n this.element.style.opacity = '0';\n this.initializeData();\n _super.prototype.preRender.call(this);\n this.activeIndex = this.index;\n this.queryString = '';\n };\n DropDownList.prototype.initializeData = function () {\n this.isPopupOpen = false;\n this.isDocumentClick = false;\n this.isInteracted = false;\n this.isFilterFocus = false;\n this.beforePopupOpen = false;\n this.initial = true;\n this.initRemoteRender = false;\n this.isNotSearchList = false;\n this.isTyped = false;\n this.isSelected = false;\n this.preventFocus = false;\n this.preventAutoFill = false;\n this.isValidKey = false;\n this.typedString = '';\n this.isEscapeKey = false;\n this.isPreventBlur = false;\n this.isTabKey = false;\n this.actionCompleteData = { isUpdated: false };\n this.prevSelectPoints = {};\n this.isSelectCustom = false;\n this.isDropDownClick = false;\n this.preventAltUp = false;\n this.isCustomFilter = false;\n this.isSecondClick = false;\n this.keyConfigure = {\n tab: 'tab',\n enter: '13',\n escape: '27',\n end: '35',\n home: '36',\n down: '40',\n up: '38',\n pageUp: '33',\n pageDown: '34',\n open: 'alt+40',\n close: 'shift+tab',\n hide: 'alt+38',\n space: '32'\n };\n };\n DropDownList.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n DropDownList.prototype.renderList = function (isEmptyData) {\n _super.prototype.render.call(this, isEmptyData);\n this.wireListEvents();\n };\n DropDownList.prototype.floatLabelChange = function () {\n if (this.getModuleName() === 'dropdownlist' && this.floatLabelType === 'Auto') {\n var floatElement = this.inputWrapper.container.querySelector('.e-float-text');\n if (this.inputElement.value !== '' || this.isInteracted) {\n classList(floatElement, ['e-label-top'], ['e-label-bottom']);\n }\n else {\n classList(floatElement, ['e-label-bottom'], ['e-label-top']);\n }\n }\n };\n DropDownList.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n this.onChangeEvent(e);\n };\n DropDownList.prototype.resetFocusElement = function () {\n this.removeHover();\n this.removeSelection();\n this.removeFocus();\n this.list.scrollTop = 0;\n if (this.getModuleName() !== 'autocomplete') {\n var li = this.ulElement.querySelector('.' + dropDownListClasses.li);\n if (li) {\n li.classList.add(dropDownListClasses.focus);\n }\n }\n };\n DropDownList.prototype.clear = function (e, properties) {\n if (isNullOrUndefined(properties) || (!isNullOrUndefined(properties) &&\n (isNullOrUndefined(properties.dataSource) ||\n (!(properties.dataSource instanceof DataManager) && properties.dataSource.length === 0)))) {\n this.resetSelection(properties);\n }\n var dataItem = this.getItemData();\n if (this.previousValue === dataItem.value) {\n return;\n }\n this.onChangeEvent(e);\n };\n DropDownList.prototype.resetSelection = function (properties) {\n if (this.list) {\n if ((!isNullOrUndefined(properties) &&\n (isNullOrUndefined(properties.dataSource) ||\n (!(properties.dataSource instanceof DataManager) && properties.dataSource.length === 0)))) {\n this.selectedLI = null;\n this.actionCompleteData.isUpdated = false;\n this.actionCompleteData.ulElement = null;\n this.actionCompleteData.list = null;\n this.resetList(properties.dataSource);\n }\n else {\n if (this.allowFiltering && this.getModuleName() !== 'autocomplete'\n && !isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n this.onActionComplete(this.actionCompleteData.ulElement.cloneNode(true), this.actionCompleteData.list);\n }\n this.resetFocusElement();\n }\n }\n this.hiddenElement.innerHTML = '';\n this.inputElement.value = '';\n this.value = null;\n this.itemData = null;\n this.text = null;\n this.index = null;\n this.activeIndex = null;\n this.item = null;\n this.queryString = '';\n if (this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n this.valueTempElement = null;\n }\n this.setSelection(null, null);\n this.isSelectCustom = false;\n this.updateIconState();\n };\n DropDownList.prototype.setHTMLAttributes = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n this.inputWrapper.container.classList.add(this.htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && this.htmlAttributes[htmlAttr] === 'disabled') {\n this.enabled = false;\n this.setEnable();\n }\n else if (htmlAttr === 'readonly' && this.htmlAttributes[htmlAttr] === 'readonly') {\n this.readonly = true;\n this.dataBind();\n }\n else if (htmlAttr === 'style') {\n this.inputWrapper.container.setAttribute('style', this.htmlAttributes[htmlAttr]);\n }\n else {\n var defaultAttr = ['title', 'id', 'placeholder'];\n var validateAttr = ['name', 'required'];\n if (htmlAttr.indexOf('data') === 0 || validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (defaultAttr.indexOf(htmlAttr) > -1) {\n htmlAttr === 'placeholder' ? Input.setPlaceholder(this.htmlAttributes[htmlAttr], this.inputElement) :\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.inputWrapper.container.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n };\n DropDownList.prototype.getAriaAttributes = function () {\n return {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false',\n 'aria-activedescendant': 'null',\n 'aria-labelledby': this.hiddenElement.id\n };\n };\n DropDownList.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputElement.parentElement]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n DropDownList.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hidePopup();\n addClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.targetElement().tabIndex = -1;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n DropDownList.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ;\n DropDownList.prototype.preventTabIndex = function (element) {\n if (this.getModuleName() === 'dropdownlist') {\n element.tabIndex = -1;\n }\n };\n DropDownList.prototype.targetElement = function () {\n return this.inputWrapper.container;\n };\n DropDownList.prototype.getNgDirective = function () {\n return 'EJS-DROPDOWNLIST';\n };\n DropDownList.prototype.getElementByText = function (text) {\n return this.getElementByValue(this.getValueByText(text));\n };\n DropDownList.prototype.getElementByValue = function (value) {\n var item;\n var listItems = this.getItems();\n for (var _i = 0, listItems_1 = listItems; _i < listItems_1.length; _i++) {\n var liItem = listItems_1[_i];\n if (this.getFormattedValue(liItem.getAttribute('data-value')) === value) {\n item = liItem;\n break;\n }\n }\n return item;\n };\n ;\n DropDownList.prototype.initValue = function () {\n this.renderList();\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n else {\n this.updateValues();\n }\n };\n DropDownList.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n this.setSelection(this.getElementByValue(this.value), null);\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var element = this.getElementByText(this.text);\n if (isNullOrUndefined(element)) {\n this.setProperties({ text: null });\n return;\n }\n else {\n this.setSelection(element, null);\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 DropDownList.prototype.onBlur = function (e) {\n if (!this.enabled) {\n return;\n }\n var target = e.relatedTarget;\n var currentTarget = e.target;\n var isPreventBlur = this.isPreventBlur;\n this.isPreventBlur = false;\n //IE 11 - issue\n if (isPreventBlur && !this.isDocumentClick && this.isPopupOpen && (!isNullOrUndefined(currentTarget) ||\n !this.isFilterLayout() && isNullOrUndefined(target))) {\n if (this.getModuleName() === 'dropdownlist' && this.allowFiltering && this.isPopupOpen) {\n this.filterInput.focus();\n }\n else {\n this.targetElement().focus();\n }\n return;\n }\n if (this.isDocumentClick || (!isNullOrUndefined(this.popupObj)\n && document.body.contains(this.popupObj.element) &&\n this.popupObj.element.classList.contains(dropDownListClasses.mobileFilter))) {\n if (!this.beforePopupOpen) {\n this.isDocumentClick = false;\n }\n return;\n }\n if (((this.getModuleName() === 'dropdownlist' && !this.isFilterFocus && target !== this.inputElement)\n && (document.activeElement !== target || (document.activeElement === target &&\n currentTarget.classList.contains(dropDownListClasses.inputFocus)))) ||\n (isNullOrUndefined(target) && this.getModuleName() === 'dropdownlist' && this.allowFiltering &&\n currentTarget !== this.inputWrapper.container) || this.getModuleName() !== 'dropdownlist' &&\n !this.inputWrapper.container.contains(target) || this.isTabKey) {\n this.isDocumentClick = this.isPopupOpen ? true : false;\n this.focusOutAction();\n this.isTabKey = false;\n }\n if (this.isRequested && !this.isPopupOpen && !this.isPreventBlur) {\n this.isActive = false;\n this.beforePopupOpen = false;\n }\n };\n DropDownList.prototype.focusOutAction = function () {\n this.isInteracted = false;\n this.focusOut();\n this.onFocusOut();\n };\n DropDownList.prototype.onFocusOut = function () {\n if (!this.enabled) {\n return;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(null);\n }\n this.floatLabelChange();\n this.dispatchEvent(this.hiddenElement, 'change');\n if (this.getModuleName() === 'dropdownlist' && this.element.tagName !== 'INPUT') {\n this.dispatchEvent(this.inputElement, 'blur');\n }\n if (this.inputWrapper.clearButton) {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n this.trigger('blur');\n };\n DropDownList.prototype.onFocus = function (e) {\n if (!this.isInteracted) {\n this.isInteracted = true;\n var args = { isInteracted: e ? true : false, event: e };\n this.trigger('focus', args);\n }\n this.updateIconState();\n };\n DropDownList.prototype.resetValueHandler = function (e) {\n var formElement = closest(this.inputElement, 'form');\n if (formElement && e.target === formElement) {\n this.value = null;\n }\n };\n DropDownList.prototype.wireEvent = function () {\n EventHandler.add(this.inputWrapper.container, 'mousedown', this.dropDownClick, this);\n EventHandler.add(this.inputWrapper.container, 'focus', this.focusIn, this);\n EventHandler.add(this.inputWrapper.container, 'keypress', this.onSearch, this);\n this.bindCommonEvent();\n };\n DropDownList.prototype.bindCommonEvent = function () {\n EventHandler.add(this.targetElement(), 'blur', this.onBlur, this);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\n if (!Browser.isDevice) {\n this.keyboardModule = new KeyboardEvents(this.targetElement(), {\n keyAction: this.keyActionHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n }\n this.bindClearEvent();\n };\n DropDownList.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DropDownList.prototype.unBindCommonEvent = function () {\n EventHandler.remove(this.targetElement(), 'blur', this.onBlur);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\n if (!Browser.isDevice) {\n this.keyboardModule.destroy();\n }\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown', this.resetHandler);\n }\n };\n DropDownList.prototype.updateIconState = function () {\n if (this.showClearButton) {\n if (this.inputElement.value !== '') {\n removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n else {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n };\n /**\n * Event binding for list\n */\n DropDownList.prototype.wireListEvents = function () {\n EventHandler.add(this.list, 'click', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n };\n ;\n DropDownList.prototype.onSearch = function (e) {\n if (e.charCode !== 32 && e.charCode !== 13) {\n if (this.list === undefined) {\n this.renderList();\n }\n this.searchKeyEvent = e;\n if (!this.isRequested && !isNullOrUndefined(this.list.querySelector('li'))) {\n this.incrementalSearch(e);\n }\n }\n };\n DropDownList.prototype.onMouseClick = function (e) {\n var target = e.target;\n var classList = target.classList;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (!this.isValidLI(li)) {\n return;\n }\n this.setSelection(li, e);\n if (Browser.isDevice && this.isFilterLayout()) {\n history.back();\n }\n else {\n var delay = 100;\n this.closePopup(delay);\n }\n };\n DropDownList.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.setHover(currentLi);\n };\n ;\n DropDownList.prototype.setHover = function (li) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.hover)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n ;\n DropDownList.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n ;\n DropDownList.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n ;\n DropDownList.prototype.isValidLI = function (li) {\n return (li && li.hasAttribute('role') && li.getAttribute('role') === 'option');\n };\n ;\n DropDownList.prototype.incrementalSearch = function (e) {\n if (this.liCollections.length > 0) {\n var li = incrementalSearch(e.charCode, this.liCollections, this.activeIndex, true);\n if (!isNullOrUndefined(li)) {\n this.setSelection(li, e);\n this.setScrollPosition();\n }\n }\n };\n ;\n /**\n * Hides the spinner loader.\n * @returns void.\n */\n DropDownList.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n this.spinnerElement.innerHTML = '';\n this.spinnerElement = null;\n }\n };\n /**\n * Shows the spinner loader.\n * @returns void.\n */\n DropDownList.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = Browser.isDevice && !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[1] ||\n !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[0] || this.inputWrapper.buttons[0];\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 DropDownList.prototype.keyActionHandler = function (e) {\n var preventAction = e.action === 'pageUp' || e.action === 'pageDown';\n var preventHomeEnd = this.getModuleName() !== 'dropdownlist' && (e.action === 'home' || e.action === 'end');\n this.isEscapeKey = e.action === 'escape';\n this.isTabKey = !this.isPopupOpen && e.action === 'tab';\n var isNavigation = (e.action === 'down' || e.action === 'up' || e.action === 'pageUp' || e.action === 'pageDown'\n || e.action === 'home' || e.action === 'end');\n if ((this.isEditTextBox() || preventAction || preventHomeEnd) && !this.isPopupOpen) {\n return;\n }\n if (!this.readonly) {\n var isTabAction = e.action === 'tab' || e.action === 'close';\n if (this.list === undefined && !this.isRequested && !isTabAction && e.action !== 'escape') {\n this.searchKeyEvent = e;\n this.renderList();\n }\n if (isNullOrUndefined(this.list) || (!isNullOrUndefined(this.liCollections) &&\n isNavigation && this.liCollections.length === 0) || this.isRequested) {\n return;\n }\n if (isTabAction && this.isPopupOpen || e.action === 'escape') {\n e.preventDefault();\n }\n this.isSelected = e.action === 'escape' ? false : this.isSelected;\n this.isTyped = (isNavigation || e.action === 'escape') ? false : this.isTyped;\n switch (e.action) {\n case 'down':\n case 'up':\n var focusEle = this.list.querySelector('.' + dropDownListClasses.focus);\n if (this.isSelectFocusItem(focusEle)) {\n this.setSelection(focusEle, e);\n }\n else {\n var nextItem = void 0;\n var index = e.action === 'down' ? this.activeIndex + 1 : this.activeIndex - 1;\n var startIndex = 0;\n if (this.getModuleName() === 'autocomplete') {\n startIndex = e.action === 'down' && isNullOrUndefined(this.activeIndex) ? 0 : this.liCollections.length - 1;\n index = index < 0 ? this.liCollections.length - 1 : index === this.liCollections.length ? 0 : index;\n }\n nextItem = isNullOrUndefined(this.activeIndex) ? this.liCollections[startIndex] : this.liCollections[index];\n this.setSelection(nextItem, e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.pageUpSelection(this.activeIndex - this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'pageDown':\n this.pageDownSelection(this.activeIndex + this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'home':\n if (this.getModuleName() === 'dropdownlist') {\n e.preventDefault();\n if (this.activeIndex === 0) {\n return;\n }\n this.setSelection(this.liCollections[0], e);\n }\n break;\n case 'end':\n if (this.getModuleName() === 'dropdownlist') {\n e.preventDefault();\n var lastLi = this.getItems().length - 1;\n if (this.activeIndex === lastLi) {\n return;\n }\n this.setSelection(this.liCollections[lastLi], e);\n }\n break;\n case 'space':\n if (this.getModuleName() === 'dropdownlist') {\n if (!this.beforePopupOpen) {\n this.showPopup();\n }\n }\n break;\n case 'open':\n this.showPopup();\n break;\n case 'hide':\n this.preventAltUp = this.isPopupOpen;\n this.hidePopup();\n this.focusDropDown(e);\n break;\n case 'enter':\n this.selectCurrentItem(e);\n break;\n case 'escape':\n case 'tab':\n case 'close':\n if (this.isPopupOpen) {\n this.hidePopup();\n this.focusDropDown(e);\n }\n break;\n }\n }\n };\n DropDownList.prototype.selectCurrentItem = function (e) {\n if (this.isPopupOpen) {\n var li = this.list.querySelector('.' + dropDownListClasses.focus);\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 this.hidePopup();\n this.focusDropDown(e);\n }\n else {\n this.showPopup();\n }\n };\n DropDownList.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n DropDownList.prototype.getPageCount = function () {\n var liHeight = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.getBoundingClientRect().height / parseInt(liHeight, 10));\n };\n DropDownList.prototype.pageUpSelection = function (steps, event) {\n var previousItem = steps >= 0 ? this.liCollections[steps + 1] : this.liCollections[0];\n this.setSelection(previousItem, event);\n };\n ;\n DropDownList.prototype.pageDownSelection = function (steps, event) {\n var list = this.getItems();\n var previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];\n this.setSelection(previousItem, event);\n };\n ;\n DropDownList.prototype.unWireEvent = function () {\n EventHandler.remove(this.inputWrapper.container, 'mousedown', this.dropDownClick);\n EventHandler.remove(this.inputWrapper.container, 'keypress', this.onSearch);\n EventHandler.remove(this.inputWrapper.container, 'focus', this.focusIn);\n this.unBindCommonEvent();\n };\n /**\n * Event un binding for list items.\n */\n DropDownList.prototype.unWireListEvents = function () {\n EventHandler.remove(this.list, 'click', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n };\n ;\n DropDownList.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, '#' + this.popupObj.element.id)) &&\n !this.inputWrapper.container.contains(e.target)) {\n if (this.inputWrapper.container.classList.contains(dropDownListClasses.inputFocus) || this.isPopupOpen) {\n this.isDocumentClick = true;\n var isActive = this.isRequested;\n this.isInteracted = false;\n this.hidePopup();\n if (!isActive) {\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n }\n }\n else if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput)\n && !(this.getModuleName() === 'combobox' &&\n !this.allowFiltering && Browser.isDevice && target === this.inputWrapper.buttons[0])) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.targetElement() ||\n document.activeElement === this.filterInput);\n e.preventDefault();\n }\n };\n DropDownList.prototype.activeStateChange = function () {\n if (this.isDocumentClick) {\n this.hidePopup();\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n };\n DropDownList.prototype.focusDropDown = function (e) {\n if (!this.initial && this.isFilterLayout()) {\n this.focusIn(e);\n }\n };\n DropDownList.prototype.dropDownClick = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable) || this.inputWrapper.clearButton === e.target) {\n return;\n }\n var target = e.target;\n if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput) && this.getModuleName() !== 'combobox') {\n e.preventDefault();\n }\n if (!this.readonly) {\n if (this.isPopupOpen) {\n this.hidePopup();\n if (this.isFilterLayout()) {\n this.focusDropDown(e);\n }\n }\n else {\n this.focusIn(e);\n this.floatLabelChange();\n this.queryString = this.inputElement.value.trim() === '' ? null : this.inputElement.value;\n this.isDropDownClick = true;\n this.showPopup();\n }\n var proxy_1 = this;\n if (!this.isSecondClick) {\n setTimeout(function () { proxy_1.cloneElements(); }, 100);\n }\n }\n else {\n this.focusIn(e);\n }\n };\n DropDownList.prototype.cloneElements = function () {\n if (this.list) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n ulElement = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.actionCompleteData.ulElement = ulElement;\n this.isSecondClick = true;\n }\n }\n };\n DropDownList.prototype.updateSelectedItem = function (li, e, preventSelect) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n var selectedData = this.getDataByValue(value);\n if (!this.initial && !preventSelect) {\n var items = this.detachChanges(selectedData);\n this.isSelected = true;\n var eventArgs = {\n e: e,\n item: li,\n itemData: items,\n isInteracted: e ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n li.classList.remove(dropDownBaseClasses.selected);\n return true;\n }\n }\n this.previousItemData = (!isNullOrUndefined(this.itemData)) ? this.itemData : null;\n this.item = li;\n this.itemData = selectedData;\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (focusedItem) {\n removeClass([focusedItem], dropDownBaseClasses.focus);\n }\n li.setAttribute('aria-selected', 'true');\n this.activeIndex = this.getIndexByValue(value);\n return false;\n };\n DropDownList.prototype.activeItem = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n li.setAttribute('aria-selected', 'true');\n }\n };\n DropDownList.prototype.setValue = function (e) {\n var dataItem = this.getItemData();\n if (dataItem.value === null) {\n Input.setValue(null, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dataItem.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n else if (this.inputElement.previousSibling === this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n }\n if (this.previousValue === dataItem.value) {\n this.isSelected = false;\n return true;\n }\n else {\n this.isSelected = !this.initial ? true : false;\n this.isSelectCustom = false;\n if (this.getModuleName() === 'dropdownlist') {\n this.updateIconState();\n }\n return false;\n }\n };\n DropDownList.prototype.setSelection = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n var argsCancel = this.updateSelectedItem(li, e, false);\n if (argsCancel) {\n return;\n }\n }\n if (this.list) {\n this.removeHover();\n }\n this.previousSelectedLI = (!isNullOrUndefined(this.selectedLI)) ? this.selectedLI : null;\n this.selectedLI = li;\n if (this.setValue(e)) {\n return;\n }\n if (this.isPopupOpen) {\n attributes(this.targetElement(), { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n if (this.isFilterLayout()) {\n attributes(this.filterInput, { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n }\n }\n if ((!this.isPopupOpen && !isNullOrUndefined(li)) || (this.isPopupOpen && !isNullOrUndefined(e) &&\n (e.type !== 'keydown' || e.type === 'keydown' && e.action === 'enter'))) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n if (this.isPopupOpen && !isNullOrUndefined(this.selectedLI) && this.itemData !== null && (!e || e.type !== 'click')) {\n this.setScrollPosition(e);\n }\n };\n DropDownList.prototype.setValueTemplate = function () {\n var compiledString;\n if (!this.valueTempElement) {\n this.valueTempElement = this.createElement('span', { className: dropDownListClasses.value });\n this.inputElement.parentElement.insertBefore(this.valueTempElement, this.inputElement);\n this.inputElement.style.display = 'none';\n }\n this.valueTempElement.innerHTML = '';\n compiledString = compile(this.valueTemplate);\n for (var _i = 0, _a = compiledString(this.itemData); _i < _a.length; _i++) {\n var item = _a[_i];\n this.valueTempElement.appendChild(item);\n }\n };\n DropDownList.prototype.removeSelection = function () {\n var selectedItems = this.list.querySelectorAll('.' + dropDownBaseClasses.selected);\n if (selectedItems.length) {\n removeClass(selectedItems, dropDownBaseClasses.selected);\n selectedItems[0].removeAttribute('aria-selected');\n }\n };\n ;\n DropDownList.prototype.getItemData = function () {\n var fields = this.fields;\n var dataItem = null;\n dataItem = this.itemData;\n var dataValue;\n var dataText;\n if (!isNullOrUndefined(dataItem)) {\n dataValue = getValue(fields.value, dataItem);\n dataText = getValue(fields.text, dataItem);\n }\n var value = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataValue : dataItem);\n var text = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataText : dataItem);\n return { value: value, text: text };\n };\n /**\n * To trigger the change event for list.\n */\n DropDownList.prototype.onChangeEvent = function (eve) {\n var dataItem = this.getItemData();\n var index = this.isSelectCustom ? null : this.activeIndex;\n this.setProperties({ 'value': dataItem.value, 'index': index, 'text': dataItem.text }, true);\n this.detachChangeEvent(eve);\n };\n ;\n DropDownList.prototype.detachChanges = function (value) {\n var items;\n if (typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number') {\n items = Object.defineProperties({}, {\n value: {\n value: value,\n enumerable: true\n },\n text: {\n value: value,\n enumerable: true\n }\n });\n }\n else {\n items = value;\n }\n return items;\n };\n DropDownList.prototype.detachChangeEvent = function (eve) {\n this.isSelected = false;\n this.previousValue = this.value;\n this.activeIndex = this.index;\n this.typedString = !isNullOrUndefined(this.text) ? this.text : '';\n if (!this.initial) {\n var items = this.detachChanges(this.itemData);\n var preItems = void 0;\n if (typeof this.previousItemData === 'string' ||\n typeof this.previousItemData === 'boolean' ||\n typeof this.previousItemData === 'number') {\n preItems = Object.defineProperties({}, {\n value: {\n value: this.previousItemData,\n enumerable: true\n },\n text: {\n value: this.previousItemData,\n enumerable: true\n }\n });\n }\n else {\n preItems = this.previousItemData;\n }\n this.setHiddenValue();\n var eventArgs = {\n e: eve,\n item: this.item,\n itemData: items,\n previousItem: this.previousSelectedLI,\n previousItemData: preItems,\n isInteracted: eve ? true : false,\n value: this.value,\n element: this.element\n };\n this.trigger('change', eventArgs);\n }\n };\n DropDownList.prototype.setHiddenValue = function () {\n if (!isNullOrUndefined(this.value)) {\n this.hiddenElement.innerHTML = '';\n var selectedElement = this.hiddenElement.querySelector('option');\n selectedElement.setAttribute('value', this.value.toString());\n }\n else {\n this.hiddenElement.innerHTML = '';\n }\n };\n /**\n * Filter bar implementation\n */\n DropDownList.prototype.onFilterUp = function (e) {\n if (this.isValidKey || e.keyCode === 40 || e.keyCode === 38) {\n this.isValidKey = false;\n switch (e.keyCode) {\n case 38: //up arrow \n case 40: //down arrow \n if (this.getModuleName() === 'autocomplete' && !this.isPopupOpen && !this.preventAltUp && !this.isRequested) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else {\n this.preventAutoFill = false;\n }\n this.preventAltUp = false;\n e.preventDefault();\n break;\n case 46: //delete\n case 8: //backspace\n this.typedString = this.filterInput.value;\n if (!this.isPopupOpen && this.typedString !== '' || this.isPopupOpen && this.queryString.length > 0) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else if (this.typedString === '') {\n this.resetFocusElement();\n this.activeIndex = null;\n if (this.getModuleName() === 'autocomplete') {\n this.hidePopup();\n }\n }\n e.preventDefault();\n break;\n default:\n this.typedString = this.filterInput.value;\n this.preventAutoFill = false;\n this.searchLists(e);\n break;\n }\n }\n else {\n this.isValidKey = false;\n }\n };\n DropDownList.prototype.onFilterDown = function (e) {\n switch (e.keyCode) {\n case 13: //enter\n break;\n case 40: //down arrow\n case 38: //up arrow \n this.queryString = this.filterInput.value;\n e.preventDefault();\n break;\n case 9: //tab \n if (this.isPopupOpen) {\n e.preventDefault();\n }\n break;\n default:\n this.prevSelectPoints = this.getSelectionPoints();\n this.queryString = this.filterInput.value;\n break;\n }\n };\n DropDownList.prototype.removeFillSelection = function () {\n if (this.isInteracted) {\n var selection = this.getSelectionPoints();\n this.inputElement.setSelectionRange(selection.end, selection.end);\n }\n };\n DropDownList.prototype.getSelectionPoints = function () {\n var input = this.inputElement;\n return { start: Math.abs(input.selectionStart), end: Math.abs(input.selectionEnd) };\n };\n DropDownList.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.activeIndex = null;\n if (this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon)) {\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n clearElement.style.visibility = this.filterInput.value === '' ? 'hidden' : 'visible';\n }\n this.isDataFetched = false;\n if (this.isFiltering()) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isCustomFilter = true;\n _this.filteringAction(dataSource, query, fields);\n },\n baseEventArgs: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isCustomFilter && !eventArgs_1.preventDefaultAction) {\n var filterQuery = this.query ? this.query.clone() : new Query();\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n this.filteringAction(this.dataSource, filterQuery, this.fields);\n }\n }\n };\n DropDownList.prototype.filteringAction = function (dataSource, query, fields) {\n if (!isNullOrUndefined(this.filterInput)) {\n this.beforePopupOpen = true;\n if (this.filterInput.value.trim() === '') {\n this.actionCompleteData.isUpdated = false;\n this.isTyped = false;\n if (!isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list);\n }\n this.isTyped = true;\n if (!isNullOrUndefined(this.itemData) && this.getModuleName() === 'dropdownlist') {\n this.focusIndexItem();\n this.setScrollPosition();\n }\n this.isNotSearchList = true;\n }\n else {\n this.isNotSearchList = false;\n this.resetList(dataSource, fields, query);\n }\n }\n };\n DropDownList.prototype.setSearchBox = function (popupElement) {\n if (this.isFiltering()) {\n var parentElement = this.createElement('span', {\n className: dropDownListClasses.filterParent\n });\n this.filterInput = this.createElement('input', {\n attrs: { type: 'text' },\n className: dropDownListClasses.filterInput\n });\n this.element.parentNode.insertBefore(this.filterInput, this.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ?\n [dropDownListClasses.backIcon, dropDownListClasses.filterBarClearIcon] : [dropDownListClasses.filterBarClearIcon],\n properties: { placeholder: this.filterBarPlaceholder }\n }, this.createElement);\n append([this.filterInputObj.container], parentElement);\n prepend([parentElement], popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null,\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n if (!Browser.isDevice) {\n this.searchKeyModule = new KeyboardEvents(this.filterInput, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n }\n EventHandler.add(this.filterInput, 'input', this.onInput, this);\n EventHandler.add(this.filterInput, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.filterInput, 'keydown', this.onFilterDown, this);\n EventHandler.add(this.filterInput, 'blur', this.onBlur, this);\n return this.filterInputObj;\n }\n else {\n return inputObject;\n }\n };\n ;\n DropDownList.prototype.onInput = function () {\n this.isValidKey = true;\n };\n DropDownList.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n };\n DropDownList.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n if (this.isNotSearchList) {\n this.isNotSearchList = false;\n return;\n }\n if (this.isActive) {\n var selectedItem = this.selectedLI ? this.selectedLI.cloneNode(true) : null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent) && this.searchKeyEvent.type === 'keydown') {\n this.isRequested = false;\n this.keyActionHandler(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent)) {\n this.incrementalSearch(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n this.list.scrollTop = 0;\n if (!isNullOrUndefined(ulElement)) {\n attributes(ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n }\n if (this.initRemoteRender) {\n this.initial = true;\n this.activeIndex = this.index;\n this.updateValues();\n this.initRemoteRender = false;\n this.initial = false;\n }\n if (this.getModuleName() !== 'autocomplete' && this.isFiltering() && !this.isTyped) {\n if (!this.actionCompleteData.isUpdated || ((!this.isCustomFilter\n && !this.isFilterFocus)\n && ((this.dataSource instanceof DataManager)\n || (!isNullOrUndefined(this.dataSource) && !isNullOrUndefined(this.dataSource.length) &&\n this.dataSource.length !== 0)))) {\n this.actionCompleteData = { ulElement: ulElement.cloneNode(true), list: list, isUpdated: true };\n }\n this.addNewItem(list, selectedItem);\n if (!isNullOrUndefined(this.itemData)) {\n this.focusIndexItem();\n }\n }\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n }\n };\n DropDownList.prototype.addNewItem = function (listData, newElement) {\n var _this = this;\n if (!isNullOrUndefined(this.itemData) && !isNullOrUndefined(newElement)) {\n var value_1 = this.getItemData().value;\n var isExist = listData.some(function (data) {\n return (((typeof data === 'string' || typeof data === 'number') && data === value_1) ||\n (getValue(_this.fields.value, data) === value_1));\n });\n if (!isExist) {\n this.addItem(this.itemData);\n }\n }\n };\n DropDownList.prototype.updateActionCompleteData = function (li, item) {\n if (this.getModuleName() !== 'autocomplete' && this.actionCompleteData.ulElement) {\n this.actionCompleteData.ulElement.appendChild(li.cloneNode(true));\n if (this.isFiltering()) {\n this.actionCompleteData.list.push(item);\n }\n }\n };\n DropDownList.prototype.focusIndexItem = function () {\n var value = this.getItemData().value;\n this.activeIndex = this.getIndexByValue(value);\n var element = this.list.querySelector('[data-value=\"' + value + '\"]');\n this.selectedLI = element;\n this.activeItem(element);\n this.removeFocus();\n };\n DropDownList.prototype.updateSelection = function () {\n var selectedItem = this.list.querySelector('.' + dropDownBaseClasses.selected);\n if (selectedItem) {\n this.setProperties({ 'index': this.getIndexByValue(selectedItem.getAttribute('data-value')) });\n this.activeIndex = this.index;\n }\n else {\n this.removeFocus();\n this.list.querySelector('.' + dropDownBaseClasses.li).classList.add(dropDownListClasses.focus);\n }\n };\n DropDownList.prototype.removeFocus = function () {\n var highlightedItem = this.list.querySelectorAll('.' + dropDownListClasses.focus);\n if (highlightedItem && highlightedItem.length) {\n removeClass(highlightedItem, dropDownListClasses.focus);\n }\n };\n ;\n DropDownList.prototype.renderPopup = function () {\n if (this.popupObj && document.body.contains(this.popupObj.element)) {\n this.refreshPopup();\n return;\n }\n var args = { cancel: false };\n this.trigger('beforeOpen', args);\n if (args.cancel) {\n return;\n }\n var popupEle = this.createElement('div', {\n id: this.element.id + '_popup', className: 'e-ddl e-popup ' + (this.cssClass != null ? this.cssClass : '')\n });\n var searchBox = this.setSearchBox(popupEle);\n this.listHeight = formatUnit(this.popupHeight);\n if (this.headerTemplate) {\n this.setHeaderTemplate(popupEle);\n }\n append([this.list], popupEle);\n if (this.footerTemplate) {\n this.setFooterTemplate(popupEle);\n }\n document.body.appendChild(popupEle);\n popupEle.style.visibility = 'hidden';\n if (this.popupHeight !== 'auto') {\n this.searchBoxHeight = 0;\n if (!isNullOrUndefined(searchBox.container)) {\n this.searchBoxHeight = (searchBox.container.parentElement).getBoundingClientRect().height;\n this.listHeight = (parseInt(this.listHeight, 10) - (this.searchBoxHeight)).toString() + 'px';\n }\n if (this.headerTemplate) {\n var height = Math.round(this.header.getBoundingClientRect().height);\n this.listHeight = (parseInt(this.listHeight, 10) - (height + this.searchBoxHeight)).toString() + 'px';\n }\n if (this.footerTemplate) {\n var height = Math.round(this.footer.getBoundingClientRect().height);\n this.listHeight = (parseInt(this.listHeight, 10) - (height + this.searchBoxHeight)).toString() + 'px';\n }\n this.list.style.maxHeight = (parseInt(this.listHeight, 10) - 2).toString() + 'px'; // due to box-sizing property\n popupEle.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n popupEle.style.height = 'auto';\n }\n var offsetValue = 0;\n var left;\n if (!isNullOrUndefined(this.selectedLI) && (!isNullOrUndefined(this.activeIndex) && this.activeIndex >= 0)) {\n this.setScrollPosition();\n }\n else {\n this.list.scrollTop = 0;\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n offsetValue = this.getOffsetValue(popupEle);\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10));\n }\n this.getFocusElement();\n this.createPopup(popupEle, offsetValue, left);\n this.checkCollision(popupEle);\n if (Browser.isDevice) {\n this.popupObj.element.classList.add(dropDownListClasses.device);\n if (this.getModuleName() === 'dropdownlist' || (this.getModuleName() === 'combobox'\n && !this.allowFiltering && this.isDropDownClick)) {\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n if (this.isFilterLayout()) {\n this.popupObj.element.classList.add(dropDownListClasses.mobileFilter);\n this.popupObj.position = { X: 0, Y: 0 };\n this.popupObj.dataBind();\n attributes(this.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n this.setSearchBoxPosition();\n this.backIconElement = searchBox.container.querySelector('.e-back-icon');\n this.clearIconElement = searchBox.container.querySelector('.' + dropDownListClasses.clearIcon);\n EventHandler.add(this.backIconElement, 'click', this.clickOnBackIcon, this);\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n }\n }\n popupEle.style.visibility = 'visible';\n addClass([popupEle], 'e-popup-close');\n var scrollParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollParentElements_1 = scrollParentElements; _i < scrollParentElements_1.length; _i++) {\n var element = scrollParentElements_1[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n EventHandler.add(this.list, 'scroll', this.listScroll, this);\n }\n attributes(this.targetElement(), { 'aria-expanded': 'true' });\n var inputParent = this.isFiltering() ? this.filterInput.parentElement : this.inputWrapper.container;\n addClass([inputParent], [dropDownListClasses.inputFocus]);\n var animModel = { name: 'FadeIn', duration: 100 };\n this.beforePopupOpen = true;\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.iconAnimation]);\n this.popupObj.show(new Animation(eventArgs.animation), (this.zIndex === 1000) ? this.element : null);\n };\n DropDownList.prototype.checkCollision = function (popupEle) {\n if (!Browser.isDevice || (Browser.isDevice && !(this.getModuleName() === 'dropdownlist' || this.isDropDownClick))) {\n var collision = isCollide(popupEle);\n if (collision.length > 0) {\n popupEle.style.marginTop = -parseInt(getComputedStyle(popupEle).marginTop, 10) + 'px';\n }\n }\n };\n DropDownList.prototype.getOffsetValue = function (popupEle) {\n var popupStyles = getComputedStyle(popupEle);\n var borderTop = parseInt(popupStyles.borderTop, 10);\n var borderBottom = parseInt(popupStyles.borderBottom, 10);\n return this.setPopupPosition(borderTop + borderBottom);\n };\n DropDownList.prototype.createPopup = function (element, offsetValue, left) {\n var _this = this;\n this.popupObj = new Popup(element, {\n width: this.setWidth(), targetType: 'relative',\n relateTo: this.inputWrapper.container, collision: { X: 'flip', Y: 'flip' }, offsetY: offsetValue,\n enableRtl: this.enableRtl, offsetX: left, position: { X: 'left', Y: 'bottom' },\n zIndex: this.zIndex,\n close: function () {\n if (!_this.isDocumentClick) {\n _this.focusDropDown();\n }\n _this.isDocumentClick = false;\n _this.destroyPopup();\n },\n open: function () {\n EventHandler.add(document, 'mousedown', _this.onDocumentClick, _this);\n _this.isPopupOpen = true;\n if (_this.isFilterLayout()) {\n removeClass([_this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n _this.isFilterFocus = true;\n _this.filterInput.focus();\n if (_this.inputWrapper.clearButton) {\n addClass([_this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n _this.activeStateChange();\n }\n });\n };\n DropDownList.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0;\n };\n DropDownList.prototype.getFocusElement = function () {\n // combo-box used this method\n };\n DropDownList.prototype.isFilterLayout = function () {\n return this.getModuleName() === 'dropdownlist' && this.allowFiltering;\n };\n DropDownList.prototype.scrollHandler = function () {\n if (Browser.isDevice && ((this.getModuleName() === 'dropdownlist' &&\n !this.isFilterLayout()) || (this.getModuleName() === 'combobox' && !this.allowFiltering && this.isDropDownClick))) {\n this.hidePopup();\n }\n if (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement.style.zIndex = '0';\n this.fixedHeaderElement.style.display = 'none';\n }\n };\n DropDownList.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.popupObj.element.style.maxHeight = '100%';\n this.popupObj.element.style.width = '100%';\n this.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n DropDownList.prototype.setPopupPosition = function (border) {\n var offsetValue;\n var popupOffset = border;\n var selectedLI = this.list.querySelector('.' + dropDownListClasses.focus) || this.selectedLI;\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n var lastItem = this.isEmptyList() ? this.list : this.liCollections[this.getItems().length - 1];\n var liHeight = firstItem.getBoundingClientRect().height;\n var listHeight = this.list.offsetHeight / 2;\n var height = isNullOrUndefined(selectedLI) ? firstItem.offsetTop : selectedLI.offsetTop;\n var lastItemOffsetValue = lastItem.offsetTop;\n if (lastItemOffsetValue - listHeight < height && !isNullOrUndefined(this.liCollections) &&\n this.liCollections.length > 0 && !isNullOrUndefined(selectedLI)) {\n var count = this.list.offsetHeight / liHeight;\n var paddingBottom = parseInt(getComputedStyle(this.list).paddingBottom, 10);\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - popupOffset + paddingBottom;\n this.list.scrollTop = selectedLI.offsetTop;\n }\n else if (height > listHeight) {\n offsetValue = listHeight - liHeight / 2;\n this.list.scrollTop = height - listHeight + liHeight / 2;\n }\n else {\n offsetValue = height;\n }\n var inputHeight = this.inputWrapper.container.offsetHeight;\n offsetValue = offsetValue + liHeight + popupOffset - ((liHeight - inputHeight) / 2);\n return -offsetValue;\n };\n DropDownList.prototype.setWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.inputWrapper.container.offsetWidth * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n DropDownList.prototype.scrollBottom = function (isInitial) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n nextOffset = isInitial ? nextOffset + parseInt(getComputedStyle(this.list).paddingTop, 10) * 2 : nextOffset;\n var boxRange = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n boxRange = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset || !(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n DropDownList.prototype.scrollTop = function () {\n var nextOffset = this.selectedLI.offsetTop - this.list.scrollTop;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop);\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = this.selectedLI.offsetTop - (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n };\n DropDownList.prototype.isEditTextBox = function () {\n return false;\n };\n DropDownList.prototype.isFiltering = function () {\n return this.allowFiltering;\n };\n DropDownList.prototype.isPopupButton = function () {\n return true;\n };\n DropDownList.prototype.setScrollPosition = function (e) {\n if (!isNullOrUndefined(e)) {\n switch (e.action) {\n case 'pageDown':\n case 'down':\n case 'end':\n this.scrollBottom();\n break;\n default:\n this.scrollTop();\n break;\n }\n }\n else {\n this.scrollBottom(true);\n }\n };\n DropDownList.prototype.clearText = function () {\n this.filterInput.value = '';\n this.searchLists(null);\n };\n DropDownList.prototype.listScroll = function () {\n this.filterInput.blur();\n };\n DropDownList.prototype.closePopup = function (delay) {\n this.isTyped = false;\n if (!(this.popupObj && document.body.contains(this.popupObj.element) && this.beforePopupOpen)) {\n return;\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n this.isActive = false;\n this.filterInputObj = null;\n this.isDropDownClick = false;\n this.preventAutoFill = false;\n var scrollableParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollableParentElements_1 = scrollableParentElements; _i < scrollableParentElements_1.length; _i++) {\n var element = scrollableParentElements_1[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n removeClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n EventHandler.remove(this.list, 'scroll', this.listScroll);\n }\n if (this.isFilterLayout()) {\n if (!Browser.isDevice) {\n this.searchKeyModule.destroy();\n if (this.clearIconElement) {\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n }\n if (this.backIconElement) {\n EventHandler.remove(this.backIconElement, 'click', this.clickOnBackIcon);\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n EventHandler.remove(this.filterInput, 'input', this.onInput);\n EventHandler.remove(this.filterInput, 'keyup', this.onFilterUp);\n EventHandler.remove(this.filterInput, 'keydown', this.onFilterDown);\n EventHandler.remove(this.filterInput, 'blur', this.onBlur);\n this.filterInput = null;\n }\n attributes(this.targetElement(), { 'aria-expanded': 'false', 'aria-activedescendant': null });\n this.inputWrapper.container.classList.remove(dropDownListClasses.iconAnimation);\n if (this.isFiltering()) {\n this.actionCompleteData.isUpdated = false;\n }\n this.beforePopupOpen = false;\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (this.getModuleName() === 'autocomplete') {\n this.rippleFun();\n }\n if (this.isPopupOpen) {\n this.popupObj.hide(new Animation(eventArgs.animation));\n }\n else {\n this.destroyPopup();\n }\n };\n DropDownList.prototype.destroyPopup = function () {\n this.isPopupOpen = false;\n this.isFilterFocus = false;\n this.popupObj.destroy();\n detach(this.popupObj.element);\n };\n DropDownList.prototype.clickOnBackIcon = function () {\n this.hidePopup();\n this.focusIn();\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n DropDownList.prototype.render = function () {\n if (this.element.tagName === 'INPUT') {\n this.inputElement = this.element;\n }\n else {\n this.inputElement = this.createElement('input');\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n this.element.parentElement.insertBefore(this.inputElement, this.element);\n this.preventTabIndex(this.inputElement);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n buttons: this.isPopupButton() ? [dropDownListClasses.icon] : null,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.getModuleName() === 'dropdownlist' ? true : this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n }, this.createElement);\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.inputWrapper.container);\n }\n else {\n this.inputElement.parentElement.insertBefore(this.element, this.inputElement);\n }\n this.hiddenElement = this.createElement('select', {\n attrs: { 'aria-hidden': 'true', 'tabindex': '-1', 'class': dropDownListClasses.hiddenElement }\n });\n prepend([this.hiddenElement], this.inputWrapper.container);\n this.validationAttribute(this.element, this.hiddenElement);\n this.setFields();\n this.inputWrapper.container.style.width = formatUnit(this.width);\n this.inputWrapper.container.classList.add('e-ddl');\n this.wireEvent();\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement.id = id + '_hidden';\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n attributes(this.targetElement(), this.getAriaAttributes());\n var invalidAttr = ['class', 'style', 'id'];\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 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 this.setHTMLAttributes();\n if (this.value !== null || this.activeIndex !== null || this.text !== null) {\n this.initValue();\n }\n else if (this.element.tagName === 'SELECT' && this.element.options[0]) {\n var selectElement = this.element;\n this.value = selectElement.options[selectElement.selectedIndex].value;\n this.text = isNullOrUndefined(this.value) ? null : selectElement.options[selectElement.selectedIndex].textContent;\n this.initValue();\n }\n this.preventTabIndex(this.element);\n if (!this.enabled) {\n this.targetElement().tabIndex = -1;\n }\n this.initial = false;\n this.element.style.opacity = '';\n this.inputElement.onselect = function (e) { e.stopImmediatePropagation(); };\n this.inputElement.onchange = function (e) { e.stopImmediatePropagation(); };\n if (this.element.hasAttribute('autofocus')) {\n this.focusIn();\n }\n };\n ;\n DropDownList.prototype.setFooterTemplate = function (popupEle) {\n var compiledString;\n if (this.footer) {\n this.footer.innerHTML = '';\n }\n else {\n this.footer = this.createElement('div');\n addClass([this.footer], dropDownListClasses.footer);\n }\n compiledString = compile(this.footerTemplate);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.footer.appendChild(item);\n }\n append([this.footer], popupEle);\n };\n DropDownList.prototype.setHeaderTemplate = function (popupEle) {\n var compiledString;\n if (this.header) {\n this.header.innerHTML = '';\n }\n else {\n this.header = this.createElement('div');\n addClass([this.header], dropDownListClasses.header);\n }\n compiledString = compile(this.headerTemplate);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.header.appendChild(item);\n }\n var contentEle = popupEle.querySelector('div.e-content');\n popupEle.insertBefore(this.header, contentEle);\n };\n DropDownList.prototype.setOldText = function (text) {\n this.text = text;\n };\n DropDownList.prototype.setOldValue = function (value) {\n this.value = value;\n };\n DropDownList.prototype.refreshPopup = function () {\n if (!isNullOrUndefined(this.popupObj) && document.body.contains(this.popupObj.element) &&\n ((this.allowFiltering && !(Browser.isDevice && this.isFilterLayout())) || this.getModuleName() === 'autocomplete')) {\n this.popupObj.refreshPosition(this.inputWrapper.container);\n }\n };\n DropDownList.prototype.updateDataSource = function (props) {\n this.clear(null, props);\n if (!(!isNullOrUndefined(props) && (isNullOrUndefined(props.dataSource)\n || (!(props.dataSource instanceof DataManager) && props.dataSource.length === 0)))) {\n this.resetList(this.dataSource);\n }\n if (!this.isCustomFilter && !this.isFilterFocus && document.activeElement !== this.filterInput) {\n this.itemData = this.getDataByValue(this.value);\n var dataItem = this.getItemData();\n this.setProperties({ 'value': dataItem.value, 'text': dataItem.text });\n }\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n DropDownList.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'dropdownlist') {\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 'query':\n case 'dataSource':\n break;\n case 'htmlAttributes':\n this.setHTMLAttributes();\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': formatUnit(newProp.width) });\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'filterBarPlaceholder':\n if (this.filterInput) {\n Input.setPlaceholder(newProp.filterBarPlaceholder, this.filterInput);\n }\n break;\n case 'readonly':\n if (this.getModuleName() !== 'dropdownlist') {\n Input.setReadonly(newProp.readonly, this.inputElement);\n }\n break;\n case 'cssClass':\n this.setCssClass(newProp, oldProp);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'text':\n if (newProp.text === null) {\n this.clear();\n break;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var li = this.getElementByText(newProp.text);\n if (!this.checkValidLi(li)) {\n if (this.liCollections.length === 100 &&\n this.getModuleName() === 'autocomplete' && this.listData.length > 100) {\n this.setSelectionData(newProp.text, oldProp.text, 'text');\n }\n else {\n this.setOldText(oldProp.text);\n }\n }\n }\n break;\n case 'value':\n if (newProp.value === null) {\n this.clear();\n break;\n }\n this.notify('beforeValueChange', { newProp: newProp }); // gird component value type change\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var item = this.getElementByValue(newProp.value);\n if (!this.checkValidLi(item)) {\n if (this.liCollections.length === 100 &&\n this.getModuleName() === 'autocomplete' && this.listData.length > 100) {\n this.setSelectionData(newProp.value, oldProp.value, 'value');\n }\n else {\n this.setOldValue(oldProp.value);\n }\n }\n }\n break;\n case 'index':\n if (newProp.index === null) {\n this.clear();\n break;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var element = this.liCollections[newProp.index];\n if (!this.checkValidLi(element)) {\n if (this.liCollections.length === 100 &&\n this.getModuleName() === 'autocomplete' && this.listData.length > 100) {\n this.setSelectionData(newProp.index, oldProp.index, 'index');\n }\n else {\n this.index = oldProp.index;\n }\n }\n }\n break;\n case 'footerTemplate':\n if (this.popupObj) {\n this.setFooterTemplate(this.popupObj.element);\n }\n break;\n case 'headerTemplate':\n if (this.popupObj) {\n this.setHeaderTemplate(this.popupObj.element);\n }\n break;\n case 'valueTemplate':\n if (!isNullOrUndefined(this.itemData) && this.valueTemplate != null) {\n this.setValueTemplate();\n }\n break;\n case 'floatLabelType':\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, newProp.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.inputElement, this.inputWrapper, null, this.createElement);\n this.bindClearEvent();\n break;\n default:\n var ddlProps = void 0;\n ddlProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, ddlProps.newProperty, ddlProps.oldProperty);\n break;\n }\n }\n };\n DropDownList.prototype.checkValidLi = function (element) {\n if (this.isValidLI(element)) {\n this.setSelection(element, null);\n return true;\n }\n return false;\n };\n DropDownList.prototype.setSelectionData = function (newProp, oldProp, prop) {\n var _this = this;\n var li;\n this.updateListValues = function () {\n if (prop === 'text') {\n li = _this.getElementByText(newProp);\n if (!_this.checkValidLi(li)) {\n _this.setOldText(oldProp);\n }\n }\n else if (prop === 'value') {\n li = _this.getElementByValue(newProp);\n if (!_this.checkValidLi(li)) {\n _this.setOldValue(oldProp);\n }\n }\n else if (prop === 'index') {\n li = _this.liCollections[newProp];\n if (!_this.checkValidLi(li)) {\n _this.index = oldProp;\n }\n }\n };\n };\n DropDownList.prototype.setCssClass = function (newProp, oldProp) {\n this.inputWrapper.container.classList.remove(oldProp.cssClass);\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.element.classList.remove(oldProp.cssClass);\n this.popupObj.element.classList.add(newProp.cssClass);\n }\n };\n /**\n * Return the module name.\n * @private\n */\n DropDownList.prototype.getModuleName = function () {\n return 'dropdownlist';\n };\n /**\n * Opens the popup that displays the list of items.\n * @returns void.\n */\n DropDownList.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n if (this.isFiltering() && !this.isActive && this.actionCompleteData.list && this.actionCompleteData.list[0]) {\n this.isActive = true;\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list, null, true);\n }\n else if (isNullOrUndefined(this.list) || !isUndefined(this.list) && this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderList();\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n var proxy_2 = this;\n window.onpopstate = function () {\n proxy_2.hidePopup();\n };\n history.pushState({}, '');\n }\n if (!isNullOrUndefined(this.list.children[0]) || this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderPopup();\n }\n attributes(this.targetElement(), { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n };\n /**\n * Hides the popup if it is in an open state.\n * @returns void.\n */\n DropDownList.prototype.hidePopup = function () {\n if (this.isEscapeKey && this.getModuleName() === 'dropdownlist') {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n if (!isNullOrUndefined(this.index)) {\n this.selectedLI = this.liCollections[this.index];\n this.updateSelectedItem(this.selectedLI, null, true);\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n }\n else {\n this.resetSelection();\n }\n }\n this.closePopup();\n var dataItem = this.getItemData();\n if (this.inputElement.value.trim() === '' && !this.isInteracted && (this.isSelectCustom ||\n !isNullOrUndefined(this.selectedLI) && this.inputElement.value !== dataItem.text)) {\n this.isSelectCustom = false;\n this.clear();\n }\n };\n /**\n * Sets the focus on the component for interaction.\n * @returns void.\n */\n DropDownList.prototype.focusIn = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable)) {\n return;\n }\n var isFocused = false;\n if (this.preventFocus && Browser.isDevice) {\n this.inputWrapper.container.tabIndex = 1;\n this.inputWrapper.container.focus();\n this.preventFocus = false;\n isFocused = true;\n }\n if (!isFocused) {\n this.targetElement().focus();\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n this.onFocus(e);\n };\n /**\n * Moves the focus from the component if the component is already focused.\n * @returns void.\n */\n DropDownList.prototype.focusOut = function () {\n if (!this.enabled) {\n return;\n }\n this.isTyped = true;\n this.hidePopup();\n this.targetElement().blur();\n removeClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n DropDownList.prototype.destroy = function () {\n var _this = this;\n this.isActive = false;\n this.hidePopup();\n this.unWireEvent();\n if (this.list) {\n this.unWireListEvents();\n }\n if (this.element && !this.element.classList.contains('e-' + this.getModuleName())) {\n return;\n }\n var attrArray = ['readonly', 'aria-disabled', 'aria-placeholder',\n 'placeholder', 'aria-owns', 'aria-labelledby', 'aria-haspopup', 'aria-expanded',\n 'aria-activedescendant', 'autocomplete', 'aria-readonly', 'autocorrect',\n 'autocapitalize', 'spellcheck', 'aria-autocomplete'];\n attrArray.forEach(function (value) {\n _this.inputElement.removeAttribute(value);\n });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n this.inputElement.classList.remove('e-input');\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.element.style.display = 'block';\n if (this.inputWrapper.container.parentElement.tagName === this.getNgDirective()) {\n detach(this.inputWrapper.container);\n }\n else {\n this.inputWrapper.container.parentElement.insertBefore(this.element, this.inputWrapper.container);\n detach(this.inputWrapper.container);\n }\n _super.prototype.destroy.call(this);\n };\n ;\n /**\n * Gets all the list items bound on this component.\n * @returns Element[].\n */\n DropDownList.prototype.getItems = function () {\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n return this.ulElement ? _super.prototype.getItems.call(this) : [];\n };\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], DropDownList.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], DropDownList.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], DropDownList.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"focus\", void 0);\n DropDownList = __decorate([\n NotifyPropertyChanges\n ], DropDownList);\n return DropDownList;\n}(DropDownBase));\nexport { DropDownList };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization, setCulture } from '@syncfusion/ej2-base';\n/**\n * ValueFormatter class to globalize the value.\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","import { merge, isNullOrUndefined, extend } 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) {\n var _this = this;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\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 * @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 * @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 * @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 * @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 * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `enableGroupByFormat` set to true, then it groups the particular column by formatted values.\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 * @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`](./filtering.html#custom-component-in-filter-menu) for its customization.\n * @default null\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 * @default true\n */\n this.showInColumnChooser = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n * @default {}\n */\n this.edit = {};\n this.sortDirection = 'Descending';\n /** @hidden */\n this.getEditTemplate = function () { return _this.editTemplateFn; };\n /** @hidden */\n this.getFilterTemplate = function () { return _this.filterTemplateFn; };\n merge(this, options);\n this.uid = getUid('grid-column');\n var valueFormatter = new ValueFormatter();\n if (options.format && (options.format.skeleton || options.format.format)) {\n this.setFormatter(valueFormatter.getFormatFunction(options.format));\n this.setParser(valueFormatter.getParserFunction(options.format));\n }\n this.toJSON = function () { return {}; };\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 (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() && (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit')) {\n this.editType = 'dropdownedit';\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 comparer(x, y) {\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 }\n return a_1(x, y);\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 /** @hidden */\n Column.prototype.getSortDirection = function () {\n return this.sortDirection;\n };\n /** @hidden */\n Column.prototype.setSortDirection = function (direction) {\n this.sortDirection = direction;\n };\n /** @hidden */\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[i]] = column[keys[i]];\n }\n };\n /**\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 /** @hidden */\n Column.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /** @hidden */\n Column.prototype.setFormatter = function (value) {\n this.formatFn = value;\n };\n /** @hidden */\n Column.prototype.getParser = function () {\n return this.parserFn;\n };\n /** @hidden */\n Column.prototype.setParser = function (value) {\n this.parserFn = value;\n };\n /** @hidden */\n Column.prototype.getColumnTemplate = function () {\n return this.templateFn;\n };\n /** @hidden */\n Column.prototype.getHeaderTemplate = function () {\n return this.headerTemplateFn;\n };\n /** @hidden */\n Column.prototype.getFilterItemTemplate = function () {\n return this.fltrTemplateFn;\n };\n /** @hidden */\n Column.prototype.getDomSetter = function () {\n return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n };\n return Column;\n}());\nexport { Column };\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 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 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 filterChoiceRequest = 'filterchoicerequest';\n/** @hidden */\nexport var filterAfterOpen = 'filterafteropen';\n/** @hidden */\nexport var filterBeforeOpen = 'filterbeforeopen';\n/** @hidden */\nexport var filterSearchBegin = 'filtersearchbegin';\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 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 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 rowPositionChanged = 'row-position-changed';\n/** @hidden */\nexport var batchForm = 'batchedit-form';\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, isActionPrevent, appendChildren, getDatePredicate } from '../base/util';\nimport { remove, debounce } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate, UrlAdaptor, Deferred } 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 * `CheckBoxFilter` module is used to handle filtering action.\n */\nvar CheckBoxFilter = /** @class */ (function () {\n /**\n * Constructor for checkbox filtering module\n * @hidden\n */\n function CheckBoxFilter(parent, filterSettings, serviceLocator) {\n this.existingPredicate = {};\n this.foreignKeyQuery = new Query();\n this.filterState = true;\n this.values = {};\n this.renderEmpty = false;\n this.parent = parent;\n this.id = this.parent.element.id;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\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 }\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n CheckBoxFilter.prototype.destroy = function () {\n this.closeDialog();\n };\n CheckBoxFilter.prototype.wireEvents = function () {\n EventHandler.add(this.dlg, 'click', this.clickHandler, this);\n this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n EventHandler.add(this.dlg.querySelector('.e-searchinput'), 'keyup', this.searchHandler, this);\n };\n CheckBoxFilter.prototype.unWireEvents = function () {\n EventHandler.remove(this.dlg, 'click', this.clickHandler);\n var elem = this.dlg.querySelector('.e-searchinput');\n if (elem) {\n EventHandler.remove(elem, 'keyup', this.searchHandler);\n }\n };\n CheckBoxFilter.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 fPredicate.predicate.predicates.forEach(function (fpred) {\n filterCollection.push({\n field: fpred.field,\n predicate: 'or',\n matchCase: fpred.ignoreCase,\n ignoreAccent: fpred.ignoreAccent,\n operator: fpred.operator,\n value: fpred.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 CheckBoxFilter.prototype.foreignFilter = function (args, value) {\n var operator = this.parent.getDataModule().isRemote() ?\n (this.options.column.type === 'string' ? 'contains' : 'equal') : (this.options.column.type ? 'startswith' : 'contains');\n var initalPredicate = new Predicate(this.options.column.foreignKeyValue, operator, value, true, this.parent.filterSettings.ignoreAccent);\n this.foreignKeyFilter(args, [args.filterCollection], initalPredicate);\n };\n CheckBoxFilter.prototype.searchBoxClick = function (e) {\n var target = e.target;\n if (target.classList.contains('e-searchclear')) {\n this.sInput.value = '';\n this.refreshCheckboxes();\n this.updateSearchIcon();\n this.sInput.focus();\n }\n };\n CheckBoxFilter.prototype.searchBoxKeyUp = function (e) {\n this.refreshCheckboxes();\n this.updateSearchIcon();\n };\n CheckBoxFilter.prototype.updateSearchIcon = function () {\n if (this.sInput.value.length) {\n classList(this.sIcon, ['e-chkcancel-icon'], ['e-search-icon']);\n }\n else {\n classList(this.sIcon, ['e-search-icon'], ['e-chkcancel-icon']);\n }\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n CheckBoxFilter.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n CheckBoxFilter.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 if (typeof dataSource !== str) {\n var obj = {};\n obj[this.options.field] = dataSource[i];\n dataSource[i] = obj;\n }\n }\n }\n };\n CheckBoxFilter.prototype.updateModel = function (options) {\n this.options = options;\n this.existingPredicate = options.actualPredicate || {};\n this.options.dataSource = options.dataSource;\n this.updateDataSource();\n this.options.type = options.type || 'string';\n this.options.format = options.format || '';\n this.options.filteredColumns = options.filteredColumns || this.parent.filterSettings.columns;\n this.options.sortedColumns = options.sortedColumns || this.parent.sortSettings.columns;\n this.options.query = options.query || new Query();\n this.options.allowCaseSensitive = options.allowCaseSensitive || false;\n this.values = {};\n this.localeObj = options.localeObj;\n this.isFiltered = options.filteredColumns.length;\n };\n CheckBoxFilter.prototype.getAndSetChkElem = function (options) {\n this.dlg = this.parent.createElement('div', {\n id: this.id + this.options.type + '_excelDlg',\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 }\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 CheckBoxFilter.prototype.showDialog = function (options) {\n var args = {\n requestType: events.filterBeforeOpen, filterModel: this,\n columnName: this.options.field, columnType: this.options.type, cancel: false\n };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n this.dialogObj = new Dialog({\n visible: false, content: this.sBox,\n close: this.closeDialog.bind(this),\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: 'e-primary', isPrimary: true\n }\n },\n {\n click: this.btnClick.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.getLocalizedLabel(this.isExcel ? 'CancelButton' : 'ClearButton') }\n }],\n created: this.dialogCreated.bind(this),\n open: this.dialogOpen.bind(this)\n });\n this.dialogObj.appendTo(this.dlg);\n this.dialogObj.element.style.maxHeight = '800px';\n this.dialogObj.show();\n this.wireEvents();\n createSpinner({ target: this.spinner }, this.parent.createElement);\n showSpinner(this.spinner);\n this.getAllData();\n };\n CheckBoxFilter.prototype.dialogCreated = function (e) {\n if (!Browser.isDevice) {\n getFilterMenuPostion(this.options.target, this.dialogObj, this.parent);\n }\n else {\n this.dialogObj.position = { X: 'center', Y: 'center' };\n }\n this.parent.notify(events.filterDialogCreated, e);\n };\n CheckBoxFilter.prototype.openDialog = function (options) {\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n };\n CheckBoxFilter.prototype.closeDialog = function () {\n if (this.dialogObj && !this.dialogObj.isDestroyed) {\n var filterTemplateCol = this.parent.getColumns().filter(function (col) { return col.getFilterItemTemplate(); });\n if (filterTemplateCol.length) {\n this.parent.destroyTemplate(['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 }\n };\n CheckBoxFilter.prototype.clearFilter = function () {\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFilter });\n return;\n }\n this.options.handler({ action: 'clear-filter', field: this.options.field });\n };\n CheckBoxFilter.prototype.btnClick = function (e) {\n if (this.filterState) {\n if (e.target.tagName.toLowerCase() === 'input') {\n var value = e.target.value;\n if (this.options.column.type === 'boolean') {\n if (value !== undefined &&\n this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(value.toLowerCase()) !== -1) {\n value = 'true';\n }\n else if (value !== undefined &&\n this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(value.toLowerCase()) !== -1) {\n value = 'false';\n }\n }\n var args = {\n action: 'filtering', filterCollection: {\n field: this.options.field,\n operator: this.parent.getDataModule().isRemote() ?\n (this.options.column.type === 'string' ? 'contains' : 'equal') :\n (this.options.column.type === 'date' || this.options.column.type === 'datetime' ||\n this.options.column.type === 'boolean' ? 'equal' : 'contains'),\n value: value, matchCase: false, type: this.options.column.type\n },\n field: this.options.field\n };\n value ? this.options.column.isForeignColumn() ? this.foreignFilter(args, value) :\n this.options.handler(args) : this.closeDialog();\n }\n else {\n var text = e.target.firstChild.textContent.toLowerCase();\n if (this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton').toLowerCase() === text) {\n this.fltrBtnHandler();\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 };\n CheckBoxFilter.prototype.fltrBtnHandler = function () {\n var checked = [].slice.call(this.cBox.querySelectorAll('.e-check:not(.e-selectall)'));\n var optr = 'equal';\n var caseSen = this.options.type === 'string' ?\n this.options.allowCaseSensitive : true;\n var defaults = {\n field: this.options.field, predicate: 'or',\n operator: optr, type: this.options.type, matchCase: caseSen, ignoreAccent: this.parent.filterSettings.ignoreAccent\n };\n var isNotEqual = this.itemsCnt !== checked.length && this.itemsCnt - checked.length < checked.length;\n if (isNotEqual) {\n optr = 'notequal';\n checked = [].slice.call(this.cBox.querySelectorAll('.e-uncheck:not(.e-selectall)'));\n defaults.predicate = 'and';\n defaults.operator = 'notequal';\n }\n var value;\n var fObj;\n var coll = [];\n var searchInput = this.searchBox.querySelector('.e-searchinput');\n if (checked.length !== this.itemsCnt || (searchInput.value && searchInput.value !== '')) {\n for (var i = 0; i < checked.length; i++) {\n value = this.values[parentsUntil(checked[i], '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.push({\n field: defaults.field, ignoreAccent: defaults.ignoreAccent, matchCase: defaults.matchCase,\n operator: defaults.operator, predicate: defaults.predicate, value: ''\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 }\n else {\n coll.push(fObj);\n }\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\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\n });\n return;\n }\n }\n this.initiateFilter(coll);\n }\n else {\n this.clearFilter();\n }\n };\n CheckBoxFilter.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[j].ejpredicate !== undefined ?\n predicate[fColl[j].predicate](fColl[j].ejpredicate) :\n predicate[fColl[j].predicate](fColl[j].field, fColl[j].operator, fColl[j].value, !fColl[j].matchCase, fColl[j].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 CheckBoxFilter.prototype.refreshCheckboxes = function () {\n var _this = this;\n var val = this.sInput.value;\n var column = this.options.column;\n var query = column.isForeignColumn() ? this.foreignKeyQuery.clone() : this.options.query.clone();\n var foreignQuery = this.options.query.clone();\n query.queries = [];\n foreignQuery.queries = [];\n var parsed = (this.options.type !== 'string' && parseFloat(val)) ? parseFloat(val) : val;\n var operator = this.parent.getDataModule().isRemote() ?\n (this.options.type === 'string' ? 'contains' : 'equal') : (this.options.type ? 'startswith' : 'contains');\n var matchCase = true;\n var ignoreAccent = this.parent.filterSettings.ignoreAccent;\n var field = column.isForeignColumn() ? column.foreignKeyValue : column.field;\n parsed = (parsed === '' || parsed === undefined) ? undefined : parsed;\n var predicte;\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 operator = 'equal';\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\n };\n this.parent.trigger(events.actionBegin, args);\n predicte = new Predicate(field, args.operator, parsed, args.matchCase, args.ignoreAccent);\n if (this.options.type === 'date' || this.options.type === 'datetime') {\n parsed = this.valueFormatter.fromView(val, this.options.parserFn, this.options.type);\n operator = 'equal';\n if (isNullOrUndefined(parsed) && val.length) {\n return;\n }\n var filterObj = {\n field: field, operator: operator, value: parsed, matchCase: matchCase,\n ignoreAccent: ignoreAccent\n };\n predicte = getDatePredicate(filterObj, this.options.type);\n }\n if (val.length) {\n query.where(predicte);\n }\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n var fPredicate = {};\n showSpinner(this.spinner);\n this.renderEmpty = false;\n if (column.isForeignColumn() && val.length) {\n // tslint:disable-next-line:no-any\n column.dataSource.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(args.filterChoiceCount);\n _this.search(args, foreignQuery);\n });\n }\n else {\n query.take(args.filterChoiceCount);\n this.search(args, query);\n }\n };\n CheckBoxFilter.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 CheckBoxFilter.prototype.getPredicateFromCols = function (columns) {\n var predicates = CheckBoxFilter.getPredicate(columns);\n var predicateList = [];\n var fPredicate = {};\n var foreignColumn = this.parent.getForeignKeyColumns();\n for (var _i = 0, _a = Object.keys(predicates); _i < _a.length; _i++) {\n var prop = _a[_i];\n var col = getColumnByForeignKeyValue(prop, foreignColumn);\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 CheckBoxFilter.prototype.getAllData = function () {\n var query = this.parent.getQuery().clone();\n query.requiresCount(); //consider take query\n this.addDistinct(query);\n var args = {\n requestType: events.filterChoiceRequest, filterModel: this, query: query, filterChoiceCount: null\n };\n this.parent.trigger(events.actionBegin, args);\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n query.take(args.filterChoiceCount);\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 CheckBoxFilter.prototype.addDistinct = function (query) {\n var filteredColumn = DataUtil.distinct(this.parent.filterSettings.columns, '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 CheckBoxFilter.prototype.filterEvent = function (args, query) {\n var _this = this;\n var def = this.eventPromise(args, query);\n def.promise.then(function (e) {\n _this.dataSuccess(e);\n });\n };\n CheckBoxFilter.prototype.eventPromise = function (args, query) {\n var state;\n state = this.getStateEventArgument(query);\n var def = new Deferred();\n state.dataSource = def.resolve;\n state.action = args;\n this.parent.trigger(events.dataStateChange, state);\n return def;\n };\n ;\n CheckBoxFilter.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 data;\n };\n ;\n CheckBoxFilter.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.options.column.isForeignColumn() && isInitial) {\n allPromise.push(this.options.column.dataSource.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 e.forEach(function (data) {\n runArray[i++](data.result);\n });\n });\n };\n CheckBoxFilter.prototype.dataSuccess = function (e) {\n this.fullData = e;\n var query = new Query();\n if ((this.options.filteredColumns.length)) {\n var cols = [];\n for (var i = 0; i < this.options.filteredColumns.length; i++) {\n if (!(this.options.filteredColumns[i].field === this.options.field ||\n this.options.filteredColumns[i].field === this.options.foreignKeyValue)) {\n cols.push(this.options.filteredColumns[i]);\n }\n }\n var predicate = this.getPredicateFromCols(cols);\n if (predicate) {\n query.where(predicate);\n }\n }\n // query.select(this.options.field);\n var result = new DataManager(this.fullData).executeLocal(query);\n var col = this.options.column;\n this.filteredData = CheckBoxFilter.\n getDistinct(result, this.options.field, col, this.foreignKeyData).records || [];\n this.processDataSource(null, true, this.filteredData);\n this.sInput.focus();\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: this.options.field, columnType: this.options.type\n };\n this.parent.trigger(events.actionComplete, args);\n };\n CheckBoxFilter.prototype.processDataSource = function (query, isInitial, dataSource) {\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.updateResult();\n this.createFilterItems(dataSource, isInitial);\n };\n CheckBoxFilter.prototype.processSearch = function (query) {\n this.processDataOperation(query);\n };\n CheckBoxFilter.prototype.updateResult = function () {\n this.result = {};\n var predicate = this.getPredicateFromCols(this.options.filteredColumns);\n var query = new Query();\n if (predicate) {\n query.where(predicate);\n }\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[getValue(this.options.field, res)] = true;\n }\n };\n CheckBoxFilter.prototype.clickHandler = function (e) {\n var target = e.target;\n var elem = parentsUntil(target, 'e-checkbox-wrapper');\n if (parentsUntil(target, 'e-searchbox')) {\n this.searchBoxClick(e);\n }\n if (elem) {\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 };\n CheckBoxFilter.prototype.updateAllCBoxes = function (checked) {\n var cBoxes = [].slice.call(this.cBox.querySelectorAll('.e-frame'));\n for (var _i = 0, cBoxes_1 = cBoxes; _i < cBoxes_1.length; _i++) {\n var cBox = cBoxes_1[_i];\n removeAddCboxClasses(cBox, checked);\n }\n };\n CheckBoxFilter.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 this.dialogObj.element.querySelector('.e-btn').focus();\n }\n };\n CheckBoxFilter.prototype.createCheckbox = function (value, checked, data) {\n var elem = checked ? this.cBoxTrue.cloneNode(true) :\n this.cBoxFalse.cloneNode(true);\n var label = elem.querySelector('.e-label');\n label.innerHTML = !isNullOrUndefined(value) && value.toString().length ? value :\n this.getLocalizedLabel('Blanks');\n addClass([label], ['e-checkboxfiltertext']);\n if (this.options.template) {\n label.innerHTML = '';\n appendChildren(label, this.options.template(data, this.parent, 'filterItemTemplate'));\n }\n return elem;\n };\n CheckBoxFilter.prototype.updateIndeterminatenBtn = function () {\n var cnt = this.cBox.children.length - 1;\n var className = [];\n var elem = this.cBox.querySelector('.e-selectall');\n var selected = this.cBox.querySelectorAll('.e-check:not(.e-selectall)').length;\n var btn = this.dialogObj.btnObj[0];\n btn.disabled = false;\n if (cnt === selected) {\n className = ['e-check'];\n }\n else if (selected) {\n className = ['e-stop'];\n }\n else {\n className = ['e-uncheck'];\n btn.disabled = true;\n }\n this.filterState = !btn.disabled;\n btn.dataBind();\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n addClass([elem], className);\n };\n CheckBoxFilter.prototype.createFilterItems = function (data, isInitial) {\n var _a;\n var cBoxes = this.parent.createElement('div');\n var btn = this.dialogObj.btnObj[0];\n var nullCounter = -1;\n for (var i = 0; i < data.length; i++) {\n var val = getValue('ejValue', data[i]);\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 checkBox = this.createCheckbox(selectAllValue, false, (_a = {}, _a[this.options.field] = selectAllValue, _a));\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 var isRndere = void 0;\n for (var i = 0; i < data.length; i++) {\n var uid = getUid('cbox');\n this.values[uid] = getValue('ejValue', data[i]);\n var value = this.valueFormatter.toView(getValue(this.options.field, data[i]), this.options.formatFn);\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[i]));\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 btn.disabled = false;\n }\n else {\n cBoxes.appendChild(this.parent.createElement('span', { innerHTML: this.getLocalizedLabel('NoResult') }));\n this.cBox.innerHTML = '';\n appendChildren(this.cBox, [].slice.call(cBoxes.children));\n btn.disabled = true;\n }\n this.filterState = !btn.disabled;\n btn.dataBind();\n var args = { requestType: events.filterChoiceRequest, filterModel: this, dataSource: this.renderEmpty ? [] : data };\n this.parent.trigger(events.actionComplete, args);\n hideSpinner(this.spinner);\n };\n CheckBoxFilter.prototype.getCheckedState = function (isColFiltered, value) {\n if (!this.isFiltered || !isColFiltered) {\n return true;\n }\n else {\n return this.result[value];\n }\n };\n CheckBoxFilter.getDistinct = function (json, field, column, foreignKeyData) {\n var len = json.length;\n var result = [];\n var value;\n var ejValue = 'ejValue';\n var lookup = {};\n var isForeignKey = column && column.isForeignColumn();\n while (len--) {\n value = json[len];\n value = getValue(field, value); //local remote diff, check with mdu \n if (!(value in lookup)) {\n var obj = {};\n obj[ejValue] = value;\n lookup[value] = true;\n if (isForeignKey) {\n var foreignDataObj = getForeignData(column, {}, value, foreignKeyData)[0];\n setValue(events.foreignKeyData, foreignDataObj, json[len]);\n value = getValue(column.foreignKeyValue, foreignDataObj);\n }\n setValue(field, isNullOrUndefined(value) ? null : value, obj);\n setValue('dataObj', json[len], obj);\n result.push(obj);\n }\n }\n return DataUtil.group(DataUtil.sort(result, field, DataUtil.fnAscending), 'ejValue');\n };\n CheckBoxFilter.getPredicate = function (columns) {\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[i].field));\n if (collection.length !== 0) {\n pred[cols[i].field] = CheckBoxFilter.generatePredicate(collection);\n }\n }\n return pred;\n };\n CheckBoxFilter.generatePredicate = function (cols) {\n var len = cols ? cols.length : 0;\n var predicate;\n var first;\n first = CheckBoxFilter.updateDateFilter(cols[0]);\n first.ignoreAccent = !isNullOrUndefined(first.ignoreAccent) ? first.ignoreAccent : false;\n if (first.type === 'date' || first.type === 'datetime') {\n predicate = getDatePredicate(first, first.type);\n }\n else {\n predicate = first.ejpredicate ? first.ejpredicate :\n new Predicate(first.field, first.operator, first.value, !CheckBoxFilter.getCaseValue(first), first.ignoreAccent);\n }\n for (var p = 1; p < len; p++) {\n cols[p] = CheckBoxFilter.updateDateFilter(cols[p]);\n if (len > 2 && p > 1 && cols[p].predicate === 'or') {\n if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n predicate.predicates.push(getDatePredicate(cols[p], cols[p].type));\n }\n else {\n predicate.predicates.push(new Predicate(cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilter.getCaseValue(cols[p]), cols[p].ignoreAccent));\n }\n }\n else {\n if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n predicate = predicate[(cols[p].predicate)](getDatePredicate(cols[p]), cols[p].type, cols[p].ignoreAccent);\n }\n else {\n predicate = cols[p].ejpredicate ?\n predicate[cols[p].predicate](cols[p].ejpredicate) :\n predicate[(cols[p].predicate)](cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilter.getCaseValue(cols[p]), cols[p].ignoreAccent);\n }\n }\n }\n return predicate || null;\n };\n CheckBoxFilter.getCaseValue = function (filter) {\n if (isNullOrUndefined(filter.matchCase)) {\n return true;\n }\n else {\n return filter.matchCase;\n }\n };\n CheckBoxFilter.updateDateFilter = function (filter) {\n if ((filter.type === 'date' || filter.type === 'datetime' || filter.value instanceof Date)) {\n filter.type = filter.type || 'date';\n }\n return filter;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n CheckBoxFilter.prototype.getModuleName = function () {\n return 'checkboxFilter';\n };\n return CheckBoxFilter;\n}());\nexport { CheckBoxFilter };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate, Deferred, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { setFormatter, getDatePredicate, getColumnByForeignKeyValue } from '../base/util';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\n/**\n * Grid data module is used to generate query and data source.\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module.\n * @hidden\n */\n function Data(parent, serviceLocator) {\n this.dataState = { isPending: false, resolver: null, group: [] };\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 }\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 * @return {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 gObj.query = gObj.query instanceof Query ? gObj.query : new Query();\n };\n /**\n * The function is used to generate updated Query from Grid model.\n * @return {Query}\n * @hidden\n */\n Data.prototype.generateQuery = function (skipPage) {\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[i].field);\n }\n query.select(selectQueryFields);\n }\n this.filterQuery(query);\n this.searchQuery(query);\n this.aggregateQuery(query);\n this.sortQuery(query);\n this.pageQuery(query, skipPage);\n this.groupQuery(query);\n return query;\n };\n Data.prototype.aggregateQuery = function (query, isForeign) {\n this.parent.aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) { return query.aggregate(type.toLowerCase(), column.field); });\n });\n });\n return query;\n };\n Data.prototype.pageQuery = function (query, skipPage) {\n var gObj = this.parent;\n var fName = 'fn';\n if ((gObj.allowPaging || gObj.enableVirtualization) && 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[i][fName] === 'onPage') {\n query.queries.splice(i, 1);\n }\n }\n }\n query.page(gObj.pageSettings.currentPage, gObj.pageSettings.pageSize);\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 var columns = gObj.groupSettings.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n var column = this.getColumnByField(columns[i]);\n var isGrpFmt = column.enableGroupByFormat;\n var format = column.format;\n if (isGrpFmt) {\n query.group(columns[i], this.formatGroupColumn.bind(this), format);\n }\n else {\n query.group(columns[i], 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[i].field);\n if (col) {\n col.setSortDirection(columns[i].direction);\n }\n var fn = col.sortComparer && !this.isRemote() ? col.sortComparer.bind(col) :\n columns[i].direction;\n if (gObj.groupSettings.columns.indexOf(columns[i].field) === -1) {\n query.sortBy(col.field, fn);\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 query.sortBy(sortGrp[i].field, sortGrp[i].direction);\n }\n }\n return query;\n };\n Data.prototype.searchQuery = function (query) {\n var _this = this;\n var sSettings = this.parent.searchSettings;\n var fields = sSettings.fields.length ? sSettings.fields : this.parent.getColumns().map(function (f) { return f.field; });\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 if (needForeignKeySearch && !(this.dataManager.adaptor.getModulename &&\n this.dataManager.adaptor.getModulename() === 'ODataV4Adaptor')) {\n fields.forEach(function (columnName) {\n var column = _this.getColumnByField(columnName);\n if (column.isForeignColumn()) {\n predicateList = _this.fGeneratePredicate(column, predicateList);\n }\n else {\n predicateList.push(new Predicate(column.field, sSettings.operator, sSettings.key, sSettings.ignoreCase, sSettings.ignoreAccent));\n }\n });\n query.where(Predicate.or(predicateList));\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 fPredicate = {};\n var actualFilter = [];\n var foreignColumn = this.parent.getForeignKeyColumns();\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 checkBoxCols = [];\n var defaultFltrCols = [];\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var col = columns_1[_b];\n if (colType[col.field] === 'CheckBox' || colType[col.field] === 'Excel') {\n checkBoxCols.push(col);\n }\n else {\n defaultFltrCols.push(col);\n }\n }\n if (checkBoxCols.length) {\n var excelPredicate = CheckBoxFilter.getPredicate(checkBoxCols);\n for (var _c = 0, _d = Object.keys(excelPredicate); _c < _d.length; _c++) {\n var prop = _d[_c];\n var col = getColumnByForeignKeyValue(prop, foreignColumn);\n if (col && !skipFoerign) {\n predicateList = this.fGeneratePredicate(col, predicateList);\n actualFilter.push(col);\n }\n else {\n predicateList.push(excelPredicate[prop]);\n }\n }\n }\n if (defaultFltrCols.length) {\n for (var _e = 0, defaultFltrCols_1 = defaultFltrCols; _e < defaultFltrCols_1.length; _e++) {\n var col = defaultFltrCols_1[_e];\n var column_1 = this.getColumnByField(col.field) ||\n getColumnByForeignKeyValue(col.field, this.parent.getForeignKeyColumns());\n var sType = column_1.type;\n if (getColumnByForeignKeyValue(col.field, foreignColumn) && !skipFoerign) {\n actualFilter.push(col);\n predicateList = this.fGeneratePredicate(column_1, predicateList);\n }\n else {\n if (sType !== 'date' && sType !== 'datetime') {\n predicateList.push(new Predicate(col.field, col.operator, col.value, !col.matchCase, this.parent.filterSettings.ignoreAccent));\n }\n else {\n predicateList.push(getDatePredicate(col, sType));\n }\n }\n }\n }\n if (predicateList.length) {\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 * @param {Query} query - Defines the query which will execute along with data processing.\n * @return {Promise}\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 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 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 if (crud && !Array.isArray(crud) && !crud.hasOwnProperty('deletedRecords')) {\n return crud.then(function (result) {\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 (e) {\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 gObj = this.parent;\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;\n this.parent.notify(events.crudAction, args);\n };\n /** @hidden */\n Data.prototype.saveChanges = function (changes, key, original) {\n var query = this.generateQuery().requiresCount();\n if ('result' in this.parent.dataSource) {\n var state = void 0;\n state = this.getStateEventArgument(query);\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 /** @hidden */\n Data.prototype.isRemote = function () {\n return this.dataManager.dataSource.offline !== true && this.dataManager.dataSource.url !== undefined;\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, index) { 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 };\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.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 state;\n var dataArgs = args;\n 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 = args;\n editArgs.key = key;\n editArgs.state = state;\n this.setState({ isPending: true, resolver: deff.resolve });\n dataArgs.endEdit = deff.resolve;\n this.parent.trigger(events.dataSourceChanged, editArgs);\n deff.promise.then(function (e) {\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({ 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 return Data;\n}());\nexport { Data };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Row\n * @hidden\n */\nvar Row = /** @class */ (function () {\n function Row(options) {\n merge(this, options);\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 return Row;\n}());\nexport { Row };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Cell\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 * @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[i].cellType || CellType.Data);\n var colSpan = row.cells[i].cellSpan ? row.cells[i].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 cells = this.parent.groupSettings.columns.length > 0 &&\n !this.parent.getRowsObject()[row.index - 1].isDataRow ? this.parent.getRowsObject()[row.index].cells :\n this.parent.getRowsObject()[row.index - 1].cells;\n var targetCell_1 = row.cells[i];\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[j].visible === false) {\n visible++;\n }\n else {\n row.cells[j].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[j].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[i].cellSpan) {\n row.data[cellArgs.column.field] = row.cells[i].spanText;\n td = cellRenderer.render(row.cells[i], 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[i].isRowSpanned = true;\n row.cells[i].rowSpanRange = Number(rowSpan);\n if (colSpan > 1) {\n row.cells[i].colSpanRange = Number(colSpan);\n }\n }\n if (row.index > 0 && (spannedCell.rowSpanRange > 1)) {\n row.cells[i].isSpanned = true;\n row.cells[i].rowSpanRange = Number(spannedCell.rowSpanRange - 1);\n row.cells[i].colSpanRange = spannedCell.rowSpanRange > 0 ? spannedCell.colSpanRange : 1;\n }\n if (this.parent.enableColumnVirtualization && !row.cells[i].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 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","import { isNullOrUndefined, extend, addClass } from '@syncfusion/ej2-base';\nimport { attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, getObject } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { CellMergeRender } from './cell-merge-renderer';\n/**\n * RowRenderer class which responsible for building row content.\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', { attrs: { role: 'row' } });\n }\n /**\n * Function to render the row content based on Column[] and data.\n * @param {Column[]} columns\n * @param {Object} data?\n * @param {{[x:string]:Object}} attributes?\n * @param {string} rowTemplate?\n */\n RowRenderer.prototype.render = function (row, columns, attributes, rowTemplate, cloneNode) {\n return this.refreshRow(row, columns, attributes, rowTemplate, cloneNode);\n };\n /**\n * Function to refresh the row content based on Column[] and data.\n * @param {Column[]} columns\n * @param {Object} data?\n * @param {{[x:string]:Object}} attributes?\n * @param {string} rowTemplate?\n */\n RowRenderer.prototype.refresh = function (row, columns, isChanged, attributes, rowTemplate) {\n if (isChanged) {\n row.data = extend({}, 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);\n var cells = [].slice.call(tr.cells);\n node.innerHTML = '';\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n node.appendChild(cell);\n }\n };\n RowRenderer.prototype.refreshRow = function (row, columns, attributes, rowTemplate, cloneNode) {\n var tr = !isNullOrUndefined(cloneNode) ? cloneNode : this.element.cloneNode();\n var rowArgs = { data: row.data };\n var cellArgs = { data: row.data };\n var attrCopy = extend({}, attributes, {});\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 if (row.isDataRow) {\n row.isSelected = this.parent.getSelectedRowIndexes().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 (this.parent.getSelectedRowIndexes().indexOf(row.index) === -1) {\n this.parent.getSelectedRowIndexes().push(row.index);\n }\n }\n this.buildAttributeFromRow(tr, row);\n addAttributes(tr, attrCopy);\n setStyleAndAttributes(tr, row.attributes);\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var _loop_1 = function (i, len) {\n var cell = row.cells[i];\n cell.isSelected = row.isSelected;\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || CellType.Data);\n var attrs = { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' };\n if (row.isExpand && row.cells[i].cellType === CellType.DetailExpand) {\n attrs['class'] = this_1.parent.isPrinting ? 'e-detailrowcollapse' : 'e-detailrowexpand';\n }\n var td = cellRenderer.render(row.cells[i], row.data, attrs);\n if (row.cells[i].cellType !== CellType.Filter) {\n if (row.cells[i].cellType === CellType.Data || row.cells[i].cellType === CellType.CommandColumn) {\n this_1.parent.trigger(queryCellInfo, extend(cellArgs, {\n cell: td, column: cell.column, colSpan: 1,\n rowSpan: 1, foreignKeyData: row.cells[i].foreignKeyData,\n requestType: this_1.parent.requestTypeAction\n }));\n var isRowSpanned = false;\n if (row.index > 0 && this_1.isSpan) {\n var prevRowCells = this_1.parent.groupSettings.columns.length > 0 &&\n !this_1.parent.getRowsObject()[row.index - 1].isDataRow ?\n this_1.parent.getRowsObject()[row.index].cells : this_1.parent.getRowsObject()[row.index - 1].cells;\n var uid_1 = 'uid';\n var prevRowCell = prevRowCells.filter(function (cell) {\n return cell.column.uid === row.cells[i].column[uid_1];\n })[0];\n isRowSpanned = prevRowCell.isRowSpanned ? prevRowCell.isRowSpanned : prevRowCell.rowSpanRange > 1;\n }\n if (cellArgs.colSpan > 1 || row.cells[i].cellSpan > 1 || cellArgs.rowSpan > 1 || 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[i].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_1(i, len);\n }\n var args = { row: tr, rowHeight: this.parent.rowHeight };\n if (row.isDataRow) {\n this.parent.trigger(rowDataBound, extend(rowArgs, args));\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 (this.parent.element.scrollHeight > this.parent.height && this.parent.aggregates.length) {\n for (var i = 0; i < this.parent.aggregates.length; i++) {\n var property = 'properties';\n var column = 'columns';\n if (this.parent.aggregates[i][property][column][0].footerTemplate) {\n var summarycell = tr.querySelectorAll('.e-summarycell');\n if (summarycell.length) {\n var lastSummaryCell = (summarycell[summarycell.length - 1]);\n addClass([lastSummaryCell], ['e-lastsummarycell']);\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 /**\n * Function to check and add alternative row css class.\n * @param {Element} tr\n * @param {{[x:string]:Object}} attr\n */\n RowRenderer.prototype.buildAttributeFromRow = function (tr, row) {\n var attr = {};\n var prop = { 'rowindex': 'aria-rowindex', 'dataUID': 'data-uid', 'ariaSelected': 'aria-selected' };\n var classes = [];\n if (row.isDataRow) {\n classes.push('e-row');\n }\n if (row.isAltRow) {\n classes.push('e-altrow');\n }\n if (!isNullOrUndefined(row.index)) {\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';\n/**\n * RowModelGenerator is used to generate grid data rows.\n * @hidden\n */\nvar RowModelGenerator = /** @class */ (function () {\n /**\n * Constructor for header renderer module\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.startIndex : 0;\n for (var i = 0, len = Object.keys(data).length; i < len; i++, startIndex++) {\n rows[i] = this.generateRow(data[i], 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 cols.push(this.generateCell({}, 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) {\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.isDataRow = true;\n options.isExpand = false;\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[index]) {\n options.isExpand = this.parent.expandedRows[index].isExpand;\n }\n }\n options.cssClass = cssClass;\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);\n row.cells = cells.concat(this.generateCells(options));\n return row;\n };\n RowModelGenerator.prototype.refreshForeignKeyRow = function (options) {\n this.parent.getForeignKeyColumns().forEach(function (col) {\n setValue(col.field, getForeignData(col, options.data), options.foreignKeyData);\n });\n };\n RowModelGenerator.prototype.generateCells = function (options) {\n var _this = this;\n var dummies = this.parent.getColumns();\n var tmp = [];\n dummies.forEach(function (dummy, index) {\n return tmp.push(_this.generateCell(dummy, options.uid, isNullOrUndefined(dummy.commands) ? undefined : CellType.CommandColumn, null, index, options.foreignKeyData));\n });\n return tmp;\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') {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n RowModelGenerator.prototype.refreshRows = function (input) {\n var _this = this;\n input.forEach(function (row) {\n _this.refreshForeignKeyRow(row);\n row.cells = _this.generateCells(row);\n });\n return input;\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 * @hidden\n */\nvar SummaryModelGenerator = /** @class */ (function () {\n /**\n * Constructor for Summary row model generator\n */\n function SummaryModelGenerator(parent) {\n this.parent = parent;\n }\n SummaryModelGenerator.prototype.getData = function () {\n var _this = this;\n var rows = [];\n this.parent.aggregates.slice().forEach(function (row) {\n var columns = row.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.allowGrouping) {\n this.parent.groupSettings.columns.forEach(function (value) { return columns.push(new Column({})); });\n }\n if (this.parent.detailTemplate || !isNullOrUndefined(this.parent.childGrid) || this.parent.isRowDragable()) {\n columns.push(new Column({}));\n }\n columns.push.apply(columns, this.parent.getColumns());\n return isNullOrUndefined(start) ? columns : columns.slice(start, end);\n };\n SummaryModelGenerator.prototype.generateRows = function (input, args, start, end) {\n var _this = this;\n if (this.parent.currentViewData.length === 0) {\n return [];\n }\n var data = this.buildSummaryData(input, args);\n var rows = [];\n this.getData().forEach(function (row, index) {\n rows.push(_this.getGeneratedRow(row, data[index], args ? args.level : undefined, start, end));\n });\n return rows;\n };\n SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end) {\n var _this = this;\n var tmp = [];\n var indents = this.getIndentByLevel(raw);\n var isDetailGridAlone = !isNullOrUndefined(this.parent.childGrid);\n var indentLength = this.parent.groupSettings.columns.length + (this.parent.detailTemplate ||\n !isNullOrUndefined(this.parent.childGrid) ? 1 : 0);\n if (this.parent.isRowDragable()) {\n indentLength++;\n indents = ['e-indentcelltop'];\n }\n this.getColumns(start, end).forEach(function (value, index) { return tmp.push(_this.getGeneratedCell(value, summaryRow, index >= indentLength ? _this.getCellType() :\n index < _this.parent.groupSettings.columns.length ? CellType.Indent : CellType.DetailFooterIntent, indents[index], isDetailGridAlone)); });\n var row = new Row({ data: data, attributes: { class: 'e-summaryrow' } });\n row.cells = tmp;\n row.uid = getUid('grid-row');\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 = { 'style': { 'textAlign': column.textAlign } };\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 return new Cell(opt);\n };\n SummaryModelGenerator.prototype.buildSummaryData = function (data, args) {\n var _this = this;\n var dummy = [];\n var summaryRows = this.getData();\n var single = {};\n var key = '';\n summaryRows.forEach(function (row) {\n single = {};\n row.columns.forEach(function (column) {\n single = _this.setTemplate(column, (args && args.aggregates) ? args : data, single);\n });\n dummy.push(single);\n });\n return dummy;\n };\n SummaryModelGenerator.prototype.getIndentByLevel = function (data) {\n return this.parent.groupSettings.columns.map(function () { return 'e-indentcelltop'; });\n };\n SummaryModelGenerator.prototype.setTemplate = function (column, data, single) {\n var _this = this;\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 types.forEach(function (type) {\n var key = column.field + ' - ' + type.toLowerCase();\n var disp = column.columnName;\n var val = type !== 'Custom' && group.aggregates && key in group.aggregates ? group.aggregates[key] :\n calculateAggregate(type, group.aggregates ? group : data, column, _this.parent);\n single[disp] = single[disp] || {};\n single[disp][key] = val;\n single[disp][type] = !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 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 * @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 _this.index = 0;\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.rows = [];\n this.index = this.parent.enableVirtualization ? args.startIndex : 0;\n for (var i = 0, len = data.length; i < len; i++) {\n this.getGroupedRecords(0, data[i], data.level);\n }\n this.index = 0;\n return this.rows;\n };\n GroupModelGenerator.prototype.getGroupedRecords = function (index, data, raw) {\n var _a;\n var level = raw;\n if (isNullOrUndefined(data.items)) {\n if (isNullOrUndefined(data.GroupGuid) && (this.parent.columns.length !== this.parent.groupSettings.columns.length)) {\n this.rows = this.rows.concat(this.generateDataRows(data, index));\n }\n else {\n for (var j = 0, len = data.length; j < len; j++) {\n this.getGroupedRecords(index, data[j], data.level);\n }\n }\n }\n else {\n this.rows = this.rows.concat(this.generateCaptionRow(data, index));\n if (data.items && data.items.length) {\n this.getGroupedRecords(index + 1, data.items, data.items.level);\n }\n if (this.parent.aggregates.length) {\n (_a = this.rows).push.apply(_a, this.summaryModelGen.generateRows(data, { level: level }));\n }\n }\n };\n GroupModelGenerator.prototype.getCaptionRowCells = function (field, indent, data) {\n var _this = this;\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 cols.forEach(function (col, index) {\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 GroupModelGenerator.prototype.generateCaptionRow = function (data, indent) {\n var options = {};\n var tmp = [];\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.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 setValue('foreignKey', col.valueAccessor(col.foreignKeyValue, getForeignData(col, {}, data.key)[0], col), row.data);\n }\n };\n GroupModelGenerator.prototype.generateDataRows = function (data, indent) {\n var rows = [];\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = data.length; i < len; i++) {\n rows[i] = this.generateRow(data[i], this.index, i ? undefined : 'e-firstchildrow', indent);\n for (var j = 0; j < indent; j++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(indent) === -1) {\n continue;\n }\n rows[i].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 _this = this;\n var indexes = this.parent.getColumnIndexesInView();\n input.forEach(function (row) {\n if (row.isDataRow) {\n row.cells = _this.generateCells(row);\n for (var j = 0; j < row.indent; j++) {\n if (_this.parent.enableColumnVirtualization && indexes.indexOf(row.indent) === -1) {\n continue;\n }\n row.cells.unshift(_this.generateIndentCell());\n }\n }\n else {\n var cRow = _this.generateCaptionRow(row.data, row.indent);\n row.cells = cRow.cells;\n }\n });\n return input;\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 } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf, appendChildren } 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 { getScrollBarWidth } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n var _this = this;\n this.rows = [];\n this.freezeRows = [];\n this.movableRows = [];\n this.isLoaded = true;\n this.drop = function (e) {\n _this.parent.notify(events.columnDrop, { target: e.target, droppedElement: e.droppedElement });\n remove(e.droppedElement);\n };\n this.rafCallback = function (args) {\n var arg = args;\n return function () {\n _this.ariaService.setBusy(_this.getPanel().firstChild, false);\n if (_this.parent.isDestroyed) {\n return;\n }\n var rows = _this.rows.slice(0);\n if (_this.parent.getFrozenColumns() !== 0) {\n rows = args.isFrozen ? _this.freezeRows : _this.movableRows;\n }\n _this.parent.notify(events.contentReady, { rows: rows, args: arg });\n if (_this.isLoaded) {\n _this.parent.trigger(events.dataBound, {});\n if (_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, { case: 'textwrap' });\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.generator = this.getModelGenerator();\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n this.parent.on(events.colGroupRefresh, this.colGroupRefresh, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n }\n /**\n * The function is used to render grid content div\n */\n ContentRender.prototype.renderPanel = function () {\n var gObj = this.parent;\n var div = this.parent.createElement('div', { className: 'e-gridcontent' });\n var innerDiv = this.parent.createElement('div', {\n className: 'e-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 ContentRender.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n contentDiv.appendChild(this.createContentTable('_content_table'));\n this.setTable(contentDiv.querySelector('.e-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 * @return {Element}\n * @hidden\n */\n ContentRender.prototype.createContentTable = function (id) {\n var innerDiv = this.getPanel().firstChild;\n var table = this.parent.createElement('table', {\n className: 'e-table', attrs: {\n cellspacing: '0.25px', role: 'grid',\n id: this.parent.element.id + id\n }\n });\n this.setColGroup(this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true));\n table.appendChild(this.getColGroup());\n table.appendChild(this.parent.createElement('tbody'));\n innerDiv.appendChild(table);\n return innerDiv;\n };\n ContentRender.prototype.splitRows = function (idx) {\n if (this.parent.getFrozenColumns()) {\n if (idx === 0) {\n this.freezeRows = this.rows;\n this.freezeRowElements = this.rowElements;\n }\n else {\n this.movableRows = this.rows;\n }\n }\n };\n /**\n * Refresh the content of the Grid.\n * @return {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 = gObj.currentViewData;\n var frag = document.createDocumentFragment();\n var hdrfrag = document.createDocumentFragment();\n var columns = gObj.getColumns();\n var tr;\n var hdrTbody;\n var frzCols = gObj.getFrozenColumns();\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n this.rowElements = [];\n this.rows = [];\n var fCont = this.getPanel().querySelector('.e-frozencontent');\n var mCont = this.getPanel().querySelector('.e-movablecontent');\n var cont = this.getPanel().querySelector('.e-content');\n var modelData = this.generator.generateRows(dataSource, args);\n if (isNullOrUndefined(modelData[0].cells[0])) {\n mCont.querySelector('tbody').innerHTML = '';\n }\n var idx = modelData[0].cells[0].index;\n /* tslint:disable:no-any */\n if (this.parent.registeredTemplate && this.parent.registeredTemplate.template && !args.isFrozen) {\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 /* tslint:enable:no-any */\n }\n }\n }\n this.parent.destroyTemplate(['template'], templatetoclear);\n }\n if (this.parent.enableColumnVirtualization) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n cellMerge.updateVirtualCells(modelData);\n }\n if (frzCols && idx >= frzCols) {\n this.tbody = mCont.querySelector('tbody');\n }\n else {\n this.tbody = this.getTable().querySelector('tbody');\n }\n for (var i = 0, len = modelData.length; i < len; i++) {\n this.rows.push(modelData[i]);\n if (!gObj.rowTemplate) {\n tr = row.render(modelData[i], columns);\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n if (modelData[i].isExpand) {\n gObj.notify(events.expandChildGrid, tr.cells[gObj.groupSettings.columns.length]);\n }\n }\n else {\n var elements = gObj.getRowTemplate()(extend({ index: i }, dataSource[i]), gObj, 'rowTemplate');\n if (elements[0].tagName === 'TBODY') {\n for (var j = 0; j < elements.length; j++) {\n var isTR = elements[j].nodeName.toLowerCase() === 'tr';\n if (isTR || (elements[j].querySelectorAll && elements[j].querySelectorAll('tr').length)) {\n tr = isTR ? elements[j] : elements[j].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 = appendChildren(hdrfrag, elements);\n }\n else {\n // frag.appendChild(tr);\n tr = appendChildren(frag, elements);\n }\n }\n }\n if (modelData[i].isDataRow) {\n //detailrowvisible \n var td = tr.querySelectorAll('.e-rowcell:not(.e-hide)')[0];\n if (td) {\n td.classList.add('e-detailrowvisible');\n }\n this.rowElements.push(tr);\n }\n this.ariaService.setOptions(this.getTable(), { colcount: gObj.getColumns().length.toString() });\n }\n this.splitRows(idx);\n if (gObj.frozenRows) {\n hdrTbody = frzCols ? gObj.getHeaderContent().querySelector(idx === 0 ? '.e-frozenheader'\n : '.e-movableheader').querySelector('tbody') : gObj.getHeaderTable().querySelector('tbody');\n hdrTbody.innerHTML = '';\n hdrTbody.appendChild(hdrfrag);\n }\n if (gObj.frozenRows && idx === 0 && cont.offsetHeight === Number(gObj.height)) {\n cont.style.height = (cont.offsetHeight - hdrTbody.offsetHeight) + 'px';\n }\n if (frzCols && idx === 0) {\n this.getPanel().firstChild.style.overflowY = 'hidden';\n }\n args.rows = this.rows.slice(0);\n args.isFrozen = this.parent.getFrozenColumns() !== 0 && !args.isFrozen;\n this.index = idx;\n getUpdateUsingRaf(function () {\n _this.parent.notify(events.beforeFragAppend, args);\n if (!_this.parent.enableVirtualization) {\n remove(_this.tbody);\n _this.tbody = _this.parent.createElement('tbody');\n }\n if (frzCols) {\n _this.tbody.appendChild(frag);\n if (_this.index === 0) {\n _this.isLoaded = false;\n fCont.querySelector('table').appendChild(_this.tbody);\n }\n else {\n if (_this.tbody.childElementCount < 1) {\n _this.tbody.appendChild(_this.parent.createElement('tr').appendChild(_this.parent.createElement('td')));\n }\n _this.isLoaded = true;\n mCont.querySelector('table').appendChild(_this.tbody);\n fCont.style.height = ((mCont.offsetHeight) - getScrollBarWidth()) + 'px';\n mCont.style.overflowY = _this.parent.height !== 'auto' ? 'scroll' : 'auto';\n fCont.style.borderRightWidth = '1px';\n }\n }\n else {\n _this.appendContent(_this.tbody, frag, args);\n }\n if (frzCols && idx === 0) {\n _this.refreshContentRows(extend({}, args));\n }\n frag = null;\n }, this.rafCallback(extend({}, args)));\n };\n ContentRender.prototype.appendContent = function (tbody, frag, args) {\n tbody.appendChild(frag);\n this.getTable().appendChild(tbody);\n };\n /**\n * Get the content div element of grid\n * @return {Element}\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Set the content div element of grid\n * @param {Element} panel\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the content table element of grid\n * @return {Element}\n */\n ContentRender.prototype.getTable = function () {\n return this.contentTable;\n };\n /**\n * Set the content table element of grid\n * @param {Element} table\n */\n ContentRender.prototype.setTable = function (table) {\n this.contentTable = table;\n };\n /**\n * Get the Row collection in the Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n ContentRender.prototype.getRows = function () {\n return this.parent.getFrozenColumns() ? this.freezeRows : this.rows;\n };\n /**\n * Get the Movable Row collection in the Freeze pane Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n ContentRender.prototype.getMovableRows = function () {\n return this.movableRows;\n };\n /**\n * Get the content table data row elements\n * @return {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 * @return {Element}\n */\n ContentRender.prototype.getMovableRowElements = function () {\n return this.rowElements;\n };\n /**\n * Get the content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.setRowElements = function (elements) {\n this.rowElements = elements;\n };\n /**\n * Get the header colgroup element\n * @returns {Element}\n */\n ContentRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n * @param {Element} colgroup\n * @returns {Element}\n */\n ContentRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Function to hide content table column based on visible property\n * @param {Column[]} columns?\n */\n ContentRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var rows = [];\n if (frzCols) {\n var fRows = this.freezeRows;\n var mRows = this.movableRows;\n var rowLen = fRows.length;\n var cellLen = void 0;\n for (var i = 0, row = void 0; i < rowLen; i++) {\n cellLen = mRows[i].cells.length;\n row = fRows[i].clone();\n for (var j = 0; j < cellLen; j++) {\n row.cells.push(mRows[i].cells[j]);\n }\n rows.push(row);\n }\n }\n else {\n rows = this.getRows();\n }\n var element;\n var testRow;\n rows.some(function (r) { if (r.isDataRow) {\n testRow = r;\n } return r.isDataRow; });\n var tasks = [];\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[c];\n var idx = this.parent.getNormalizedColumnIndex(column.uid);\n //used canSkip method to skip unwanted visible toggle operation. \n if (this.canSkip(column, testRow, idx)) {\n continue;\n }\n var displayVal = column.visible === true ? '' : 'none';\n if (frzCols) {\n if (idx < frzCols) {\n setStyleAttribute(this.getColGroup().childNodes[idx], { 'display': displayVal });\n }\n else {\n var mTable = gObj.getContent().querySelector('.e-movablecontent').querySelector('colgroup');\n setStyleAttribute(mTable.childNodes[idx - frzCols], { 'display': displayVal });\n }\n }\n else {\n setStyleAttribute(this.getColGroup().childNodes[idx], { 'display': displayVal });\n }\n }\n this.refreshContentRows({ requestType: 'refresh' });\n };\n ContentRender.prototype.colGroupRefresh = function () {\n if (this.getColGroup()) {\n var colGroup = this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n this.getTable().replaceChild(colGroup, this.getColGroup());\n this.setColGroup(colGroup);\n }\n };\n ContentRender.prototype.initializeContentDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getContent(), {\n accept: '.e-dragclone',\n drop: this.drop\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[index].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('tbody').innerHTML = '';\n }\n };\n ContentRender.prototype.setSelection = function (uid, set, clearAll) {\n if (this.parent.getFrozenColumns()) {\n this.getMovableRows().filter(function (row) { return clearAll || uid === row.uid; }).forEach(function (row) { return row.isSelected = set; });\n }\n this.getRows().filter(function (row) { return clearAll || uid === row.uid; })\n .forEach(function (row) {\n row.isSelected = set;\n row.cells.forEach(function (cell) { return cell.isSelected = set; });\n });\n };\n ContentRender.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows()[index];\n };\n ContentRender.prototype.getVirtualRowIndex = function (index) {\n return index;\n };\n ContentRender.prototype.getMovableRowByIndex = function (index) {\n return this.parent.getMovableDataRows()[index];\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 return ContentRender;\n}());\nexport { ContentRender };\n","import { isNullOrUndefined } 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 { parentsUntil, wrap, measureColumnDepth } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar HeaderRender = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n */\n function HeaderRender(parent, serviceLocator) {\n var _this = this;\n this.frzIdx = 0;\n this.notfrzIdx = 0;\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var parentEle = parentsUntil(target, 'e-headercell');\n if (!(gObj.allowReordering || gObj.allowGrouping) || (!isNullOrUndefined(parentEle)\n && parentEle.querySelectorAll('.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 (col.headerTemplate.indexOf('#') !== -1) {\n visualElement.innerHTML = document.querySelector(col.headerTemplate).innerHTML.trim();\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: e.target, 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 return;\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 });\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 this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n this.parent.on(events.columnPositionChanged, this.colPosRefresh, this);\n }\n /**\n * The function is used to render grid header div\n */\n HeaderRender.prototype.renderPanel = function () {\n var div = this.parent.createElement('div', { className: 'e-gridheader' });\n var innerDiv = this.parent.createElement('div', { className: 'e-headercontent' });\n div.appendChild(innerDiv);\n this.setPanel(div);\n this.parent.element.appendChild(div);\n };\n /**\n * The function is used to render grid header table\n */\n HeaderRender.prototype.renderTable = function () {\n var headerDiv = this.getPanel();\n headerDiv.appendChild(this.createHeaderTable());\n this.setTable(headerDiv.querySelector('.e-table'));\n if (!this.parent.getFrozenColumns()) {\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n }\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n };\n /**\n * Get the header content div element of grid\n * @return {Element}\n */\n HeaderRender.prototype.getPanel = function () {\n return this.headerPanel;\n };\n /**\n * Set the header content div element of grid\n * @param {Element} panel\n */\n HeaderRender.prototype.setPanel = function (panel) {\n this.headerPanel = panel;\n };\n /**\n * Get the header table element of grid\n * @return {Element}\n */\n HeaderRender.prototype.getTable = function () {\n return this.headerTable;\n };\n /**\n * Set the header table element of grid\n * @param {Element} table\n */\n HeaderRender.prototype.setTable = function (table) {\n this.headerTable = table;\n };\n /**\n * Get the header colgroup element\n * @returns {Element}\n */\n HeaderRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n * @param {Element} colgroup\n * @returns {Element}\n */\n HeaderRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Get the header row element collection.\n * @return {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 * @return {Element}\n * @hidden\n */\n HeaderRender.prototype.createHeaderTable = function () {\n var table = this.createTable();\n var innerDiv = this.getPanel().firstChild;\n innerDiv.appendChild(table);\n return innerDiv;\n };\n /**\n * @hidden\n */\n HeaderRender.prototype.createTable = function () {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var table = this.parent.createElement('table', { className: 'e-table', attrs: { cellspacing: '0.25px', role: 'grid' } });\n var innerDiv = this.getPanel().firstChild;\n var findHeaderRow = this.createHeaderContent();\n var thead = findHeaderRow.thead;\n var tbody = this.parent.createElement('tbody', { className: this.parent.frozenRows ? '' : 'e-hide' });\n this.caption = this.parent.createElement('caption', { innerHTML: this.parent.element.id + '_header_table', className: 'e-hide' });\n var colGroup = this.parent.createElement('colgroup');\n var rowBody = this.parent.createElement('tr');\n var bodyCell;\n var rows = this.rows = findHeaderRow.rows;\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, this.parent);\n for (var i = 0, len = rows.length; i < len; i++) {\n for (var j = 0, len_1 = rows[i].cells.length; j < len_1; j++) {\n var cell = rows[i].cells[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 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 HeaderRender.prototype.createHeaderContent = function () {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var thead = this.parent.createElement('thead');\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[i] = this.generateRow(i);\n rows[i].cells = [];\n }\n rows = this.ensureColumns(rows);\n rows = this.getHeaderCells(rows);\n for (var i = 0, len = this.colDepth; i < len; i++) {\n headerRow = rowRenderer.render(rows[i], 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 colGroup.id = this.parent.element.id + '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()) {\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[i].visible === false) {\n setStyleAttribute(col, { 'display': 'none' });\n }\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[i].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gObj.detailTemplate || gObj.childGrid) {\n rows[i].cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n if (gObj.isRowDragable()) {\n rows[i].cells.push(this.generateCell({}, CellType.RowDragHIcon));\n }\n }\n return rows;\n };\n HeaderRender.prototype.getHeaderCells = function (rows) {\n var column;\n var thead = this.parent.getHeaderTable() && this.parent.getHeaderTable().querySelector('thead');\n var cols = this.parent.enableColumnVirtualization ? this.parent.getColumns() : 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[i], rows, 0, i === 0, false, i === (cols.length - 1), thead);\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[i], rows, 0, i === 0, false, i === (len - 1), thead);\n }\n return rows;\n };\n HeaderRender.prototype.appendCells = function (cols, rows, index, isFirstObj, isFirstCol, isLastCol, isMovable) {\n var lastCol = isLastCol ? 'e-lastcell' : '';\n var frzCols = this.parent.getFrozenColumns();\n if (!cols.columns) {\n if (!frzCols && (!this.parent.lockcolPositionCount\n || (cols.lockColumn && !this.lockColsRendered) || (!cols.lockColumn && this.lockColsRendered))\n || (frzCols && ((!isMovable && (this.frzIdx + this.notfrzIdx < this.parent.frozenColumns || cols.isFrozen) &&\n (!this.parent.lockcolPositionCount || (cols.lockColumn && !this.lockColsRendered) ||\n (!cols.lockColumn && this.lockColsRendered)))\n || (isMovable && (this.frzIdx + this.notfrzIdx >= this.parent.frozenColumns && !cols.isFrozen) &&\n (!this.parent.lockcolPositionCount || (cols.lockColumn && !this.lockColsRendered) ||\n (!cols.lockColumn && this.lockColsRendered)))))) {\n rows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\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 var colSpan = this.getCellCnt(cols, 0);\n if (colSpan) {\n var frzObj = this.refreshFrozenHdr(cols.columns, { isPartial: false, isComp: true, cnt: 0 });\n var stackedLockColsCount = this.getStackedLockColsCount(cols, 0);\n if (!frzCols && (!this.parent.lockcolPositionCount\n || (!this.lockColsRendered && stackedLockColsCount) || (this.lockColsRendered && (colSpan - stackedLockColsCount)))\n || (frzCols && ((!isMovable && (this.parent.frozenColumns - this.frzIdx > 0 || (frzObj.isPartial)))\n || (isMovable && (colSpan + this.frzIdx > this.parent.frozenColumns && !frzObj.isComp))))) {\n rows[index].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols,\n colSpan: this.getColSpan(colSpan, isMovable, frzObj.cnt, stackedLockColsCount)\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[i], rows, index + 1, isFirstObj, i === 0, i === (cols.columns.length - 1) && isLastCol, isMovable);\n }\n }\n if (this.lockColsRendered) {\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n rows = this.appendCells(cols.columns[i], rows, index + 1, isFirstObj, i === 0, i === (len - 1) && isLastCol, isMovable);\n }\n }\n }\n return rows;\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[i], lockColsCount);\n }\n }\n else if (col.lockColumn) {\n lockColsCount++;\n }\n return lockColsCount;\n };\n HeaderRender.prototype.refreshFrozenHdr = function (cols, frzObj) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].columns) {\n frzObj = this.refreshFrozenHdr(cols[i].columns, frzObj);\n }\n else {\n if (cols[i].isFrozen) {\n frzObj.isPartial = true;\n frzObj.cnt++;\n }\n frzObj.isComp = frzObj.isComp && (cols[i].isFrozen ||\n this.parent.getColumnIndexByField(cols[i].field) < this.parent.frozenColumns);\n }\n }\n return frzObj;\n };\n HeaderRender.prototype.getColSpan = function (colSpan, isMovable, frozenCnt, stackedLockColsCount) {\n var frzCol = this.parent.frozenColumns;\n if (this.parent.getFrozenColumns() && this.frzIdx + colSpan > frzCol) {\n if (isMovable) {\n colSpan = colSpan - (frzCol > this.frzIdx ? frzCol - this.frzIdx : 0) - frozenCnt;\n }\n else {\n colSpan = colSpan - (colSpan - (frzCol > this.frzIdx ? frzCol + frozenCnt - this.frzIdx : frozenCnt));\n }\n }\n else if (this.parent.lockcolPositionCount) {\n colSpan = !this.lockColsRendered ? stackedLockColsCount : colSpan - stackedLockColsCount;\n }\n return colSpan;\n };\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 * @param {Column[]} columns?\n */\n HeaderRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var rows = [].slice.call(this.getRows()); //NodeList -> Array \n var displayVal = '';\n var idx;\n var className;\n var element;\n var frzCols = gObj.getFrozenColumns();\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[c];\n idx = gObj.getNormalizedColumnIndex(column.uid);\n if (column.visible === false) {\n displayVal = 'none';\n }\n if (frzCols) {\n if (idx < frzCols) {\n setStyleAttribute(this.getColGroup().children[idx], { 'display': displayVal });\n }\n else {\n var mTblColGrp = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup');\n setStyleAttribute(mTblColGrp.children[idx - frzCols], { 'display': displayVal });\n }\n }\n else {\n setStyleAttribute(this.getColGroup().children[idx], { 'display': displayVal });\n }\n this.refreshUI();\n }\n };\n HeaderRender.prototype.colPosRefresh = function () {\n this.refreshUI();\n };\n /**\n * Refresh the header of the Grid.\n * @returns {void}\n */\n HeaderRender.prototype.refreshUI = function () {\n var headerDiv = this.getPanel();\n var table = this.getTable();\n var frzCols = this.parent.getFrozenColumns();\n if (this.getTable()) {\n remove(this.getTable());\n table.removeChild(table.firstChild);\n table.removeChild(table.childNodes[0]);\n var colGroup = this.parent.createElement('colgroup');\n var findHeaderRow = this.createHeaderContent();\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 this.setTable(table);\n this.appendContent(table);\n this.parent.notify(events.colGroupRefresh, {});\n this.widthService.setWidthToColumns();\n this.parent.updateDefaultCursor();\n if (!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.querySelectorAll('.e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n }\n if (!frzCols) {\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n }\n if (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {\n wrap(rows, true);\n }\n }\n };\n HeaderRender.prototype.appendContent = function (table) {\n this.getPanel().firstChild.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[i], 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 var headerRows = [].slice.call(gObj.getHeaderContent().querySelectorAll('.e-columnheader'));\n for (var i = 0, len = headerRows.length; i < len; i++) {\n var drag = new Draggable(headerRows[i], {\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 });\n }\n };\n HeaderRender.prototype.initializeHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getHeaderContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n return HeaderRender;\n}());\nexport { HeaderRender };\n","import { 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';\n/**\n * CellRenderer class which responsible for building cell content.\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: 'e-rowcell', attrs: { role: 'gridcell', tabindex: '-1' } });\n this.rowChkBox = this.parent.createElement('input', { className: 'e-checkselect', attrs: { 'type': 'checkbox' } });\n }\n /**\n * Function to return the wrapper for the TD content\n * @returns string\n */\n CellRenderer.prototype.getGui = function () {\n return '';\n };\n /**\n * Function to format the cell value.\n * @param {Column} column\n * @param {Object} value\n * @param {Object} data\n */\n CellRenderer.prototype.format = function (column, value, data) {\n if (!isNullOrUndefined(column.format)) {\n value = this.formatter.toView(value, column.getFormatter());\n }\n return isNullOrUndefined(value) ? '' : value.toString();\n };\n CellRenderer.prototype.evaluate = function (node, cell, data, attributes, fData) {\n var _a;\n var result;\n if (cell.column.template) {\n var literals = ['index'];\n var dummyData = extendObjWithFn({}, data, (_a = {}, _a[foreignKeyData] = fData, _a));\n result = cell.column.getColumnTemplate()(extend({ 'index': attributes[literals[0]] }, dummyData), this.parent, 'template');\n appendChildren(node, result);\n result = null;\n node.setAttribute('aria-label', node.innerText + ' is template cell' + ' column header ' +\n 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 * @param {Column} column\n * @param {Object} value\n * @param {Object} data\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 * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CellRenderer.prototype.render = function (cell, data, attributes) {\n return this.refreshCell(cell, data, attributes);\n };\n /**\n * Function to refresh the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CellRenderer.prototype.refreshTD = function (td, cell, data, attributes) {\n var node = this.refreshCell(cell, data, attributes);\n td.innerHTML = '';\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 CellRenderer.prototype.refreshCell = function (cell, data, attributes) {\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') && !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 === '' ? 'empty' : innerHtml) + ' column header ' + cell.column.headerText);\n if (!isNullOrUndefined(cell.column.headerText)) {\n node.setAttribute('aria-label', innerHtml + ' column header ' + cell.column.headerText);\n }\n if (this.evaluate(node, cell, data, attributes, fData) && column.type !== 'checkbox') {\n this.appendHtml(node, innerHtml, column.getDomSetter ? column.getDomSetter() : 'innerHTML');\n }\n else if (column.type === 'checkbox') {\n node.classList.add('e-gridchkbox');\n node.setAttribute('aria-label', 'checkbox');\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 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 checkWrap.classList.add('e-checkbox-disabled');\n node.appendChild(checkWrap);\n node.setAttribute('aria-label', checked + ' column header ' + cell.column.headerText);\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHtml\n * @returns 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 * @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 (column.textAlign) {\n node.style.textAlign = column.textAlign;\n }\n if (column.clipMode === 'Clip') {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip') {\n node.classList.add('e-ellipsistooltip');\n }\n };\n CellRenderer.prototype.buildAttributeFromCell = function (node, cell, isCheckBoxType) {\n var attr = {};\n var prop = { 'colindex': 'aria-colindex' };\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 (!isNullOrUndefined(cell.index)) {\n attr[prop.colindex] = cell.index;\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","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 { 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 * @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: { role: 'columnheader', 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' });\n _this.gui = _this.parent.createElement('div');\n _this.chkAllBox = _this.parent.createElement('input', { className: 'e-checkselectall', attrs: { 'type': 'checkbox' } });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n * @returns string\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 * @param {Column} column\n * @param {Object} data\n * @param {Element}\n */\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' });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n /**\n * Function to refresh the cell content based on Column object.\n * @param {Cell} cell\n * @param {Element} node\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' });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n HeaderCellRenderer.prototype.clean = function (node) {\n node.innerHTML = '';\n };\n HeaderCellRenderer.prototype.prepareHeader = function (cell, node, fltrMenuEle) {\n var column = cell.column;\n var ariaAttr = {};\n //Prepare innerHtml\n var innerDIV = this.getGui();\n attributes(innerDIV, {\n 'e-mappinguid': column.uid,\n 'class': 'e-headercelldiv'\n });\n if (column.type !== 'checkbox') {\n var value = column.headerText;\n var headerText = this.hTxtEle.cloneNode();\n headerText[column.getDomSetter()] = value;\n innerDIV.appendChild(headerText);\n }\n else {\n column.editType = 'booleanedit';\n var checkAllWrap = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n checkAllWrap.insertBefore(this.chkAllBox.cloneNode(), checkAllWrap.firstChild);\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 node.classList.add('e-fltr-icon');\n var matchFlColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFlColumns.length) {\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[count].field === column.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 (column.allowSorting) {\n ariaAttr.sort = 'none';\n }\n if (column.allowGrouping) {\n ariaAttr.grabbed = false;\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 result = column.getHeaderTemplate()(extend({ 'index': colIndex }, column), gridObj, 'headerTemplate');\n node.firstElementChild.innerHTML = '';\n appendChildren(node.firstElementChild, result);\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') {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip') {\n node.classList.add('e-ellipsistooltip');\n }\n node.setAttribute('aria-rowspan', (!isNullOrUndefined(cell.rowSpan) ? cell.rowSpan : 1).toString());\n node.setAttribute('aria-colspan', '1');\n this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n return node;\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' }));\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[j].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 * @param {Element} node\n * @param {string|Element} innerHtml\n * @returns 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';\n/**\n * StackedHeaderCellRenderer class which responsible for building stacked header cell content.\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 role: 'columnheader',\n tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {Element}\n */\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 node.appendChild(div);\n div.innerHTML = cell.column.headerText;\n if (cell.column.toolTip) {\n node.setAttribute('title', cell.column.toolTip);\n }\n if (!isNullOrUndefined(cell.column.textAlign)) {\n div.style.textAlign = cell.column.textAlign;\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 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 * @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 * @param {Cell} cell\n * @param {Object} data\n */\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 * @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.element = _this.parent\n .createElement('TD', { className: 'e-groupcaption',\n attrs: { id: _this.parent.element.id + 'captioncell', role: 'gridcell', tabindex: '-1' } });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n GroupCaptionCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n var gObj = this.parent;\n var result;\n var helper = {};\n var fKeyValue;\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 if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data);\n appendChildren(node, result);\n }\n else {\n node.innerHTML = cell.column.headerText + ': ' + value + ' - ' + data.count + ' ' +\n (data.count < 2 ? this.localizer.getConstant('Item') : this.localizer.getConstant('Items'));\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-label', node.innerHTML + ' is groupcaption cell');\n node.setAttribute('title', node.innerHTML);\n return node;\n };\n return GroupCaptionCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionCellRenderer };\n/**\n * GroupCaptionEmptyCellRenderer class which responsible for building group caption empty cell.\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 * @param {Cell} cell\n * @param {Object} data\n */\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';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\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 * @param {Cell} cell\n * @param {Object} data\n */\n ExpandCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.className = 'e-recordplusexpand';\n node.setAttribute('ej-mappingname', data.field);\n node.setAttribute('ej-mappingvalue', data.key);\n node.setAttribute('aria-expanded', 'true');\n node.setAttribute('tabindex', '-1');\n node.appendChild(this.parent.createElement('div', { className: 'e-icons e-gdiagonaldown e-icon-gdownarrow' }));\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 * @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 * @param {Cell} cell\n * @param {Object} data\n */\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 * @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 * @param {Cell} cell\n * @param {Object} data\n */\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 * @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', role: 'gridcell', tabindex: '-1' }\n });\n return _this;\n }\n /**\n * Function to render the detail expand cell\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('div', { className: 'e-icons e-dtdiagonaldown e-icon-gdownarrow' }));\n }\n else {\n node.appendChild(this.parent.createElement('div', { className: 'e-icons e-dtdiagonalright e-icon-grightarrow' }));\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 * @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',\n attrs: { role: 'gridcell', tabindex: '-1' }\n });\n return _this;\n }\n /**\n * Function to render the detail expand cell\n */\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 }));\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 * @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 * @param {Cell} cell\n * @param {Object} data\n */\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 } 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, getDatePredicate, getObject } 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';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.emptyGrid = false;\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 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.refreshDataManager();\n };\n /**\n * Refresh the entire Grid.\n * @return {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 this.parent.trigger(events.actionBegin, e);\n if (e.cancel) {\n this.parent.notify(events.cancelBegin, e);\n return;\n }\n this.refreshDataManager(e);\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 * @return {void}\n */\n Render.prototype.refreshDataManager = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n if (args.requestType !== 'virtualscroll') {\n this.parent.showSpinner();\n }\n this.emptyGrid = false;\n var dataManager;\n var isFActon = this.isNeedForeignAction();\n this.ariaService.setBusy(this.parent.getContent().firstChild, true);\n if (isFActon) {\n var deffered = new Deferred();\n dataManager = this.getFData(deffered);\n }\n if (!dataManager) {\n dataManager = this.data.getData(args, this.data.generateQuery().requiresCount());\n }\n else {\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 });\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) {\n this.parent.notify(events.getForeignKeyData, { isComplex: true, promise: deferred });\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.foreignKeyValue === value.field;\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 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 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 * @return {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('tbody');\n var tr;\n if (!isNullOrUndefined(tbody)) {\n remove(tbody);\n }\n tbody = this.parent.createElement('tbody');\n 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.getColumns().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[i].field || '', data);\n if (!isNullOrUndefined(columns[i][cFormat])) {\n columns[i].format = columns[i][cFormat];\n }\n if (!isNullOrUndefined(columns[i].validationRules) && !isNullOrUndefined(columns[i].validationRules[equalTo])) {\n columns[i].validationRules[equalTo][0] = this.parent.element.id + columns[i].validationRules[equalTo][0];\n }\n if (columns[i].isForeignColumn() && columns[i].columnData) {\n value = getObject(columns[i].foreignKeyValue || '', columns[i].columnData[0]);\n }\n if (!isNullOrUndefined(value)) {\n this.isColTypeDef = true;\n if (!columns[i].type) {\n columns[i].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[i].type = columns[i].type || null;\n }\n var valueFormatter = new ValueFormatter();\n if (columns[i].format && (columns[i].format.skeleton || columns[i].format.format)) {\n columns[i].setFormatter(valueFormatter.getFormatFunction(columns[i].format));\n columns[i].setParser(valueFormatter.getParserFunction(columns[i].format));\n }\n if (typeof (columns[i].format) === 'string') {\n setFormatter(this.locator, columns[i]);\n }\n else if (!columns[i].format && columns[i].type === 'number') {\n columns[i].setParser(fmtr.getParserFunction({ format: 'n2' }));\n }\n }\n };\n /** @hidden */\n Render.prototype.dataManagerSuccess = function (e, args) {\n var gObj = this.parent;\n gObj.trigger(events.beforeDataBound, e);\n if (e.cancel) {\n return;\n }\n var len = Object.keys(e.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 this.parent.isEdit = false;\n this.parent.notify(events.tooltipDestroy, {});\n gObj.currentViewData = e.result;\n if (!len && e.count && gObj.allowPaging) {\n gObj.prevPageMoving = true;\n gObj.pageSettings.totalRecordsCount = e.count;\n gObj.pageSettings.currentPage = Math.ceil(e.count / gObj.pageSettings.pageSize);\n gObj.dataBind();\n return;\n }\n if (!gObj.getColumns().length && len || !this.isLayoutRendered) {\n this.updatesOnInitialRender(e);\n }\n if (!this.isColTypeDef && gObj.getCurrentViewRecords()) {\n this.updateColumnType(gObj.getCurrentViewRecords()[0]);\n }\n if (!this.parent.isInitialLoad && this.parent.groupSettings.disablePageWiseAggregates &&\n !this.parent.groupSettings.columns.length) {\n e.result = this.parent.dataSource instanceof Array ? this.parent.dataSource : this.parent.currentViewData;\n }\n this.parent.notify(events.dataReady, extend({ count: e.count, result: e.result, aggregates: e.aggregates }, args));\n if (gObj.groupSettings.columns.length || (args && args.requestType === 'ungrouping')) {\n this.headerRenderer.refreshUI();\n }\n if (len) {\n this.contentRenderer.refreshContentRows(args);\n }\n else {\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().firstChild, false);\n this.renderEmptyRow();\n if (args) {\n var action = (args.requestType || '').toLowerCase() + '-complete';\n this.parent.notify(action, args);\n }\n this.parent.hideSpinner();\n }\n this.parent.notify(events.toolbarRefresh, {});\n };\n Render.prototype.dataManagerFailure = function (e, args) {\n this.ariaService.setOptions(this.parent.getContent().firstChild, { busy: false, invalid: true });\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.hideSpinner();\n if (args.requestType === 'save' || args.requestType === 'delete'\n || args.name === 'bulk-save') {\n return;\n }\n this.parent.currentViewData = [];\n this.renderEmptyRow();\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);\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.parent.notify(events.autoCol, {});\n };\n Render.prototype.buildColumns = function (record) {\n var columns = Object.keys(record);\n var cols = [];\n for (var i = 0, len = columns.length; i < len; i++) {\n cols[i] = { 'field': columns[i] };\n if (this.parent.enableColumnVirtualization) {\n cols[i].width = !isNullOrUndefined(cols[i].width) ? cols[i].width : 200;\n }\n }\n this.parent.columns = cols;\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 /** @hidden */\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[index];\n var predicate = [];\n var addWhere = function (input) {\n [group0, groupN].forEach(function (group) {\n return predicate.push(new Predicate('field', '==', group.field).and(_this.getPredicate('key', 'equal', group.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 [group0, groupN].forEach(function (group) {\n return rPredicate.push(_this.getPredicate(group.field, 'equal', group.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 _this = this;\n var dm = new DataManager(untouched);\n current.forEach(function (element, index, array) {\n var uGroup = dm.executeLocal(new Query()\n .where(new Predicate('field', '==', element.field).and(_this.getPredicate('key', 'equal', element.key))))[0];\n element.count = uGroup.count;\n var itemGroup = element.items;\n var uGroupItem = uGroup.items;\n if (itemGroup.GroupGuid) {\n element.items = _this.updateGroupInfo(element.items, uGroup.items);\n }\n _this.parent.aggregates.forEach(function (row) {\n return row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) {\n var key = column.field + ' - ' + type.toLowerCase();\n var data = itemGroup.level ? uGroupItem.records : uGroup.items;\n var context = _this.parent;\n if (type === 'Custom') {\n var data_1 = itemGroup.level ? uGroupItem : uGroup;\n element.aggregates[key] = column.customAggregate ?\n column.customAggregate.call(context, data_1, column) : '';\n }\n else {\n element.aggregates[key] = DataUtil.aggregates[type.toLowerCase()](data, column.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 * @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 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 { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\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 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 * @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 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 } from '../base/constant';\nimport { Column } from '../models/column';\n/**\n * ColumnWidthService\n * @hidden\n */\nvar ColumnWidthService = /** @class */ (function () {\n function ColumnWidthService(parent) {\n this.parent = parent;\n }\n ColumnWidthService.prototype.setWidthToColumns = function () {\n var _this = this;\n var i = 0;\n var indexes = this.parent.getColumnIndexesInView();\n var wFlag = true;\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()) {\n this.setColumnWidth(new Column({ width: '30px' }), i);\n i++;\n }\n this.parent.getColumns().forEach(function (column, index) {\n _this.setColumnWidth(column, wFlag && _this.parent.enableColumnVirtualization ? undefined : index + i);\n });\n };\n ColumnWidthService.prototype.setColumnWidth = function (column, index, module) {\n var columnIndex = isNullOrUndefined(index) ? this.parent.getNormalizedColumnIndex(column.uid) : index;\n var cWidth = this.getWidth(column);\n if (cWidth !== null) {\n this.setWidth(cWidth, columnIndex);\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) {\n var chrome = 'chrome';\n var webstore = 'webstore';\n if (typeof (width) === 'string' && width.indexOf('%') !== -1 &&\n !(Boolean(window[chrome]) && Boolean(window[chrome][webstore])) && this.parent.allowGrouping) {\n var elementWidth = this.parent.element.offsetWidth;\n width = parseInt(width, 10) / 100 * (elementWidth);\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 mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n if (frzCols && index >= frzCols && mHdr && mHdr.querySelector('colgroup')) {\n headerCol = mHdr.querySelector('colgroup').children[index - frzCols];\n }\n else {\n headerCol = header.querySelector('colgroup').children[index];\n }\n if (headerCol) {\n headerCol.style.width = fWidth;\n }\n var contentCol;\n if (frzCols && index >= frzCols) {\n contentCol = this.parent.getContent().querySelector('.e-movablecontent')\n .querySelector('colgroup').children[index - frzCols];\n }\n else {\n contentCol = content.querySelector('colgroup').children[index];\n }\n if (contentCol) {\n contentCol.style.width = fWidth;\n }\n var edit = content.querySelector('.e-table.e-inline-edit');\n if (edit) {\n if (edit.querySelector('colgroup').children[index]) {\n edit.querySelector('colgroup').children[index].style.width = fWidth;\n }\n }\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 = ['e-gridheader', 'e-gridfooter', 'e-groupdroparea', 'e-gridpager', 'e-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.getWidth = function (column) {\n if (isNullOrUndefined(column.width) && this.parent.allowResizing) {\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.visible !== false && cWidth !== null) {\n tWidth += parseInt(cWidth.toString(), 10);\n }\n }\n return tWidth;\n };\n ColumnWidthService.prototype.setWidthToFrozenTable = function () {\n var columns = this.parent.getColumns();\n columns.splice(this.parent.getFrozenColumns(), columns.length);\n var freezeWidth = formatUnit(this.getTableWidth(columns));\n this.parent.getHeaderTable().style.width = freezeWidth;\n this.parent.getContentTable().style.width = freezeWidth;\n };\n ColumnWidthService.prototype.setWidthToMovableTable = function () {\n var columns = this.parent.getColumns();\n columns.splice(0, this.parent.getFrozenColumns());\n var movableWidth = formatUnit(this.getTableWidth(columns));\n if (this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild) {\n this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild.style.width\n = movableWidth;\n }\n this.parent.getContent().querySelector('.e-movablecontent').firstElementChild.style.width =\n movableWidth;\n };\n ColumnWidthService.prototype.setWidthToTable = function () {\n var tWidth = formatUnit(this.getTableWidth(this.parent.getColumns()));\n if (this.parent.getFrozenColumns()) {\n this.setWidthToFrozenTable();\n this.setWidthToMovableTable();\n }\n else {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }));\n }\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) {\n edit.style.width = tWidth;\n }\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';\n/**\n * FocusStrategy class\n * @hidden\n */\nvar FocusStrategy = /** @class */ (function () {\n function FocusStrategy(parent) {\n this.currentInfo = {};\n this.oneTime = true;\n this.swap = {};\n this.forget = true;\n this.skipFocus = true;\n this.focusByClick = false;\n this.prevIndexes = {};\n this.parent = parent;\n this.addEventListener();\n }\n FocusStrategy.prototype.focusCheck = function (e) {\n var target = e.target;\n this.focusByClick = true;\n this.skipFocus = target.classList.contains('e-grid');\n };\n FocusStrategy.prototype.onFocus = function () {\n if (this.parent.isDestroyed || Browser.isDevice || this.parent.enableVirtualization) {\n return;\n }\n this.setActive(this.parent.frozenRows === 0, this.parent.frozenColumns !== 0);\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) {\n this.focus();\n this.skipFocus = false;\n }\n };\n FocusStrategy.prototype.passiveFocus = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\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 if ((this.parent.isEdit || e && (!e.relatedTarget || closest(e.relatedTarget, '.e-grid')))) {\n return;\n }\n this.removeFocus();\n this.skipFocus = false;\n this.currentInfo.skipAction = false;\n if (this.getContent().getFocusInfo().elementToFocus) {\n this.getContent().getFocusInfo().elementToFocus.tabIndex = 0;\n }\n };\n FocusStrategy.prototype.onClick = function (e, force) {\n var isContent = !isNullOrUndefined(closest(e.target, '.e-gridcontent'));\n var isHeader = !isNullOrUndefined(closest(e.target, '.e-gridheader'));\n isContent = isContent && isHeader ? !isContent : isContent;\n var isFrozen = !isNullOrUndefined(closest(e.target, '.e-frozencontent')) ||\n !isNullOrUndefined(closest(e.target, '.e-frozenheader'));\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) ||\n e.target.classList.contains('e-content')) {\n return;\n }\n this.setActive(isContent, isFrozen);\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) ||\n e.target.classList.contains('e-filtermenudiv')) {\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);\n if (this.getContent()) {\n var returnVal = this.getContent().onClick(e, force);\n if (returnVal === false) {\n return;\n }\n this.focus();\n }\n };\n FocusStrategy.prototype.onKeyPress = function (e) {\n if (this.skipOn(e)) {\n return;\n }\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 this.currentInfo.outline = true;\n var swapInfo = this.getContent().jump(e.action, bValue);\n this.swap = swapInfo;\n if (swapInfo.swap) {\n this.setActive(!swapInfo.toHeader, swapInfo.toFrozen);\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 = this.getContent().onKeyPress(e);\n if (returnVal === false) {\n this.clearIndicator();\n return;\n }\n e.preventDefault();\n this.focus(e);\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'].indexOf(e.action) > -1) {\n this.clearIndicator();\n return true;\n }\n return (e.action === 'delete'\n || (this.parent.editSettings.mode !== 'Batch' && (this.parent.isEdit || ['insert', 'f2'].indexOf(e.action) > -1))\n || (closest(document.activeElement, '.e-filterbarcell') !== null ||\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, '.e-gridcontent') === null && closest(target, '.e-gridheader') === null)\n || (e.action === 'space' && (!target.classList.contains('e-gridchkbox') && closest(target, '.e-gridchkbox') === null\n && closest(target, '.e-headerchkcelldiv') === null)));\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) {\n this.active = content ? isFrozen ? this.fContent : this.content :\n isFrozen ? this.fHeader : this.header;\n };\n FocusStrategy.prototype.setFocusedElement = function (element) {\n var _this = this;\n this.currentInfo.elementToFocus = element;\n setTimeout(function () { return _this.currentInfo.elementToFocus.focus(); }, 0);\n };\n FocusStrategy.prototype.focus = function (e) {\n this.removeFocus();\n this.addFocus(this.getContent().getFocusInfo(), e);\n };\n FocusStrategy.prototype.removeFocus = function (e) {\n if (!this.currentInfo.element) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n this.currentInfo.element.tabIndex = -1;\n };\n FocusStrategy.prototype.addFocus = function (info, e) {\n this.currentInfo = info;\n this.currentInfo.outline = info.outline && !isNullOrUndefined(e);\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);\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.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 && !_this.header) {\n _this.header = new HeaderFocus(_this.parent);\n }\n var cFocus = content ? (e.args && e.args.isFrozen) ? _this.fContent : _this.content :\n (e.args && e.args.isFrozen) ? _this.fHeader : _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 var isRowTemplate = !isNullOrUndefined(_this.parent.rowTemplate);\n var matrix = cFocus.matrix.generate(updateRow, cFocus.selector, isRowTemplate);\n var frozenColumnsCount = _this.parent.getFrozenColumns();\n if (e.name === 'batchAdd' && frozenColumnsCount) {\n var newMovableRows = rows.map(function (row) { return row.clone(); });\n var newFrozenRows = rows.map(function (row) { return row.clone(); });\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].cells.length > frozenColumnsCount) {\n newFrozenRows[i].cells = rows[i].cells.slice(0, frozenColumnsCount);\n newMovableRows[i].cells = rows[i].cells.slice(frozenColumnsCount);\n }\n }\n _this.fContent.matrix.generate(newFrozenRows, _this.fContent.selector, isRowTemplate);\n cFocus.matrix.generate(newMovableRows, cFocus.selector, isRowTemplate);\n }\n else {\n cFocus.matrix.generate(rows, cFocus.selector, isRowTemplate);\n }\n cFocus.generateRows(updateRow, { matrix: matrix, handlerInstance: (e.args && e.args.isFrozen) ? _this.fHeader : _this.header });\n if (!Browser.isDevice && !_this.focusByClick && e && e.args && e.args.requestType === 'paging') {\n _this.skipFocus = false;\n _this.parent.element.focus();\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.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 };\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, '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.parent.on(event.keyPressed, this.onKeyPress, this);\n this.parent.on(event.click, this.onClick, this);\n this.parent.on(event.contentReady, this.refreshMatrix(true), this);\n this.parent.on(event.headerRefreshed, this.refreshMatrix(), this);\n this.parent.on('close-edit', this.restoreFocus, this);\n ['start-edit', 'start-add'].forEach(function (evt) { return _this.parent.on(evt, _this.clearIndicator, _this); });\n ['sorting'].forEach(function (action) { return _this.parent.on(action + \"-complete\", _this.restoreFocus, _this); });\n this.parent.on(event.batchAdd, this.refreshMatrix(true), this);\n this.parent.on(event.batchCancel, this.refreshMatrix(true), this);\n this.parent.on(event.batchDelete, this.refreshMatrix(true), this);\n this.parent.on(event.detailDataBound, this.refreshMatrix(true), this);\n this.parent.on(event.onEmpty, this.refreshMatrix(true), this);\n this.parent.on(event.cellFocused, this.internalCellFocus, this);\n };\n FocusStrategy.prototype.removeEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, 'mousedown', 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 this.parent.off(event.keyPressed, this.onKeyPress);\n this.parent.off(event.click, this.onClick);\n this.parent.off(event.contentReady, this.refreshMatrix(true));\n this.parent.off(event.headerRefreshed, this.refreshMatrix());\n this.parent.off('close-edit', this.restoreFocus);\n ['start-edit', 'start-add'].forEach(function (evt) { return _this.parent.off(evt, _this.clearOutline); });\n ['sorting'].forEach(function (action) { return _this.parent.off(action + \"-complete\", _this.restoreFocus); });\n this.parent.off(event.batchAdd, this.refreshMatrix(true));\n this.parent.off(event.batchDelete, this.refreshMatrix(true));\n this.parent.off(event.batchCancel, this.refreshMatrix(true));\n this.parent.off(event.detailDataBound, this.refreshMatrix(true));\n this.parent.off(event.onEmpty, this.refreshMatrix(true));\n this.parent.off(event.cellFocused, this.internalCellFocus);\n };\n FocusStrategy.prototype.destroy = function () {\n this.removeEventListener();\n };\n FocusStrategy.prototype.restoreFocus = function () {\n this.addFocus(this.getContent().getFocusInfo());\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 ? { 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.frozenColumns === 0 && this.parent.frozenRows === 0) {\n return;\n }\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.frozenColumns !== 0 }); },\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') || e.parent.classList.contains('e-templatecell')))) {\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 * @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[rowIndex] = this.matrix[rowIndex] || [];\n this.matrix[rowIndex][columnIndex] = 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 columnIndex = Math.max(0, Math.min(columnIndex + navigator[1], this.matrix[rowIndex].length - 1));\n if (tmp + navigator[1] > this.matrix[rowIndex].length - 1 && validator(rowIndex, columnIndex, action)) {\n return [rowIndex, tmp];\n }\n var first = this.first(this.matrix[rowIndex], 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') {\n navigator[0] = -1;\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[index])\n && (action !== 'upArrow' && action !== 'downArrow')) || !vector.some(function (v) { return v === 1; })) {\n return null;\n }\n return !this.inValid(vector[index]) ? 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[rowIndex].length - 1));\n this.current = [rowIndex, columnIndex];\n };\n Matrix.prototype.generate = function (rows, selector, isRowTemplate) {\n var _this = this;\n this.rows = rows.length - 1;\n this.matrix = [];\n rows.forEach(function (row, rIndex) {\n var cells = row.cells.filter(function (c) { return c.isSpanned !== true; });\n _this.columns = Math.max(cells.length - 1, _this.columns | 0);\n cells.forEach(function (cell, cIndex) {\n _this.set(rIndex, cIndex, selector(row, cell, isRowTemplate));\n });\n });\n return this.matrix;\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.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.frozenColumns ?\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 if (current.toString() === [this.matrix.rows, this.matrix.columns].toString() ||\n current.toString() === [0, 0].toString()) {\n return false;\n }\n }\n this.matrix.select(current[0], current[1]);\n };\n ContentFocus.prototype.getCurrentFromAction = function (action, navigator, isPresent, e) {\n if (navigator === void 0) { navigator = [0, 0]; }\n if (!isPresent && !this.indexesByKey(action)) {\n return null;\n }\n if (!this.shouldFocusChange(e)) {\n return this.matrix.current;\n }\n var _a = this.indexesByKey(action) || this.matrix.current.concat(navigator), rowIndex = _a[0], cellIndex = _a[1], rN = _a[2], cN = _a[3];\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 target = (target.classList.contains('e-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('e-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 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[rowIndex]) ? this.getTable().rows[rowIndex].cells[cellIndex] : 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.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 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 ? 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)\n || (!row.isDataRow && types.indexOf(cell.cellType) > -1)\n || (cell.column && cell.column.type === 'checkbox')\n || (cell.cellType === CellType.CommandColumn)\n || (row.isDataRow && isRowTemplate))\n && !(row.edit === 'delete' && row.isDirty);\n };\n ContentFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 &&\n ((action === 'leftArrow' || action === 'shiftTab') && current[1] === 0);\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n var info = {\n swap: ((action === 'upArrow' || enterFrozen) && current[0] === 0) || frozenSwap,\n toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n toFrozen: frozenSwap\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 (action === 'rightArrow' || action === 'tab') {\n current[0] = previous[0];\n current[1] = -1;\n }\n else if (action === 'downArrow' || action === 'enter') {\n current[0] = -1;\n current[1] = previous[1];\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('e-rowcell');\n var isSelectable = isData || (e && e.action !== 'enter' && (info.element.classList.contains('e-detailrowcollapse')\n || info.element.classList.contains('e-detailrowexpand')));\n var _b = [Math.min(parseInt(info.element.parentElement.getAttribute('aria-rowindex'), 10), rIndex),\n Math.min(parseInt(info.element.getAttribute('aria-colindex'), 10), cIndex)], rowIndex = _b[0], cellIndex = _b[1];\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 var cell = table.rows[rowIndex].cells[cellIndex];\n if (action === 'enter' || action === 'shiftEnter') {\n return cell.classList.contains('e-rowcell');\n }\n if ((action === 'shiftUp' || action === 'shiftDown') && cell.classList.contains('e-rowcell')) {\n return true;\n }\n else if (action !== 'shiftUp' && action !== 'shiftDown') {\n return cell.getBoundingClientRect().width !== 0;\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('e-rowcell') && !cell.classList.contains('e-unboundcell')\n && !cell.classList.contains('e-templatecell') && !cell.classList.contains('e-detailcell') : true;\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.getFrozenColumns() ?\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 target = (target.classList.contains('e-headercell') ? target : closest(target, 'th'));\n if (!target && this.parent.frozenRows !== 0) {\n target = (e.target.classList.contains('e-rowcell') ? e.target :\n closest(e.target, 'td'));\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[rowIndex].cells[cellIndex];\n info.elementToFocus = this.getFocusable(info.element);\n info.outline = !info.element.classList.contains('e-filterbarcell');\n return info;\n };\n HeaderFocus.prototype.selector = function (row, cell) {\n return (cell.visible && (cell.column.field !== undefined || cell.isTemplate)) || cell.column.type === 'checkbox' ||\n cell.cellType === CellType.StackedHeader;\n };\n HeaderFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 &&\n (action === 'leftArrow' || action === 'shiftTab') && current[1] === 0;\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n return {\n swap: ((action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1) ||\n frozenSwap,\n toHeader: frozenSwap,\n toFrozen: frozenSwap\n };\n };\n HeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current1 = [];\n if (action === 'upArrow' || action === 'shiftEnter') {\n current1[0] = this.matrix.matrix.length;\n current1[1] = previous[1];\n }\n else if (action === 'rightArrow' || action === 'tab') {\n current1[0] = previous[0];\n current1[1] = -1;\n }\n return current1;\n };\n HeaderFocus.prototype.generateRows = function (rows) {\n var _this = this;\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 rows[0].cells.forEach(function (cell, cIndex) {\n return _this.matrix.set(length, cIndex, cell.visible && cell.column.allowFiltering !== false);\n });\n }\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 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 return {\n swap: (action === 'upArrow' || enterFrozen) && current[0] === 0\n || ((action === 'tab' || action === 'rightArrow') && current[1] === this.matrix.columns),\n toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n toFrozen: (action === 'upArrow' || enterFrozen) && current[0] === 0\n };\n };\n FixedContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current2 = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current2[0] = previous[0];\n current2[1] = active.matrix.columns + 1;\n }\n else if (action === 'downArrow' || action === 'enter') {\n current2[0] = -1;\n current2[1] = previous[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 return {\n swap: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\n || ((action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns),\n toHeader: (action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns,\n toFrozen: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\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 (action === 'leftArrow' || action === 'shiftTab') {\n current3[0] = previous[0];\n current3[1] = active.matrix.columns + 1;\n }\n else if (action === 'upArrow' || action === 'shiftEnter') {\n current3[0] = this.matrix.matrix.length;\n current3[1] = previous[1];\n }\n return current3;\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 };\n SearchBox.prototype.searchBlur = function (args) {\n args.target.parentElement.classList.remove('e-input-focus');\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 };\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 __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 } from '@syncfusion/ej2-base';\nimport { Query } from '@syncfusion/ej2-data';\nimport { setCssInGridPopUp, getPosition, parentsUntil, addRemoveActiveClasses, removeAddCboxClasses } from '../base/util';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { iterateExtend } from '../base/util';\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 * @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 this.isMultiShiftRequest = false;\n this.isMultiCtrlRequest = false;\n this.enableSelectMultiTouch = false;\n this.selectedRowState = {};\n this.totalRecordsCount = 0;\n this.chkAllCollec = [];\n this.isCheckedOnAdd = false;\n this.persistSelectedData = [];\n this.isCancelDeSelect = false;\n this.isPreventCellSelect = false;\n this.disableUI = false;\n this.parent = parent;\n this.selectionSettings = selectionSettings;\n this.factory = locator.getService('rendererFactory');\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n Selection.prototype.initializeSelection = function () {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n };\n /**\n * The function used to trigger onActionBegin\n * @return {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 (args.cellIndex || 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 * @return {void}\n * @hidden\n */\n Selection.prototype.onActionComplete = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n /**\n * To destroy the selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.hidePopUp();\n this.clearSelection();\n this.removeEventListener();\n EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n };\n Selection.prototype.isEditing = function () {\n return (this.parent.editSettings.mode === 'Normal' || (this.parent.editSettings.mode === 'Batch' &&\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.getFrozenColumns()) {\n return gObj.getMovableRowByIndex(index);\n }\n return null;\n };\n Selection.prototype.getCurrentBatchRecordChanges = function () {\n var gObj = this.parent;\n var added = 'addedRecords';\n var deleted = 'deletedRecords';\n if (gObj.editSettings.mode === 'Batch') {\n var currentRecords = iterateExtend(this.parent.getCurrentViewRecords());\n currentRecords = this.parent.editModule.getBatchChanges()[added].concat(currentRecords);\n var deletedRecords = this.parent.editModule.getBatchChanges()[deleted];\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[i][primaryKey] === currentRecords[j][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 * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {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 selectedMovableRow = this.getSelectedMovableRow(index);\n var selectData = this.getCurrentBatchRecordChanges()[index];\n if (gObj.enableVirtualization && selectedRow) {\n selectData = gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')).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 isToggle = !isToggle ? isToggle :\n !this.selectedRowIndexes.length ? false :\n (this.selectedRowIndexes.length === 1 ? (index === this.selectedRowIndexes[0]) : 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\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n }\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n if (!this.selectionSettings.persistSelection) {\n this.clearRow();\n }\n if (!isToggle) {\n this.updateRowSelection(selectedRow, index);\n if (gObj.getFrozenColumns()) {\n this.updateRowSelection(selectedMovableRow, index);\n }\n gObj.selectedRowIndex = 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\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n }\n this.updateRowProps(index);\n };\n Selection.prototype.addMovableArgs = function (targetObj, mRow) {\n if (this.parent.getFrozenColumns()) {\n var mObj = { mRow: mRow, previousMovRow: this.parent.getMovableRows()[this.prevRowIndex] };\n targetObj = __assign({}, targetObj, mObj);\n }\n return targetObj;\n };\n /**\n * Selects a range of rows from start and end row indexes.\n * @param {number} startIndex - Specifies the start row index.\n * @param {number} endIndex - Specifies the end row index.\n * @return {void}\n */\n Selection.prototype.selectRowsByRange = function (startIndex, endIndex) {\n this.selectRows(this.getCollectionFromIndexes(startIndex, endIndex));\n this.parent.selectedRowIndex = endIndex;\n };\n /**\n * Selects a collection of rows by index.\n * @param {number[]} rowIndexes - Specifies an array of row indexes.\n * @return {void}\n */\n Selection.prototype.selectRows = function (rowIndexes) {\n var gObj = this.parent;\n var rowIndex = !this.isSingleSel() ? rowIndexes[0] : rowIndexes[rowIndexes.length - 1];\n var selectedRow = gObj.getRowByIndex(rowIndex);\n var selectedMovableRow = this.getSelectedMovableRow(rowIndex);\n var frzCols = gObj.getFrozenColumns();\n var can = 'cancel';\n var selectedData = this.getCurrentBatchRecordChanges()[rowIndexes[0]];\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n var args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.actualTarget,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n data: selectedData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n this.clearRow();\n gObj.selectedRowIndex = rowIndexes.slice(-1)[0];\n if (!this.isSingleSel()) {\n for (var _i = 0, rowIndexes_1 = rowIndexes; _i < rowIndexes_1.length; _i++) {\n var rowIdx = rowIndexes_1[_i];\n this.updateRowSelection(gObj.getRowByIndex(rowIdx), rowIdx);\n if (frzCols) {\n this.updateRowSelection(gObj.getMovableRowByIndex(rowIdx), rowIdx);\n }\n this.updateRowProps(rowIndex);\n }\n }\n else {\n this.updateRowSelection(gObj.getRowByIndex(rowIndex), rowIndex);\n if (frzCols) {\n this.updateRowSelection(gObj.getMovableRowByIndex(rowIndex), rowIndex);\n }\n this.updateRowProps(rowIndex);\n }\n args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.actualTarget,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n data: selectedData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n };\n /**\n * Select rows with existing row selection by passing row indexes.\n * @param {number} startIndex - Specifies the row indexes.\n * @return {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 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 frzCols = gObj.getFrozenColumns();\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n var args;\n for (var _i = 0, rowIndexes_2 = rowIndexes; _i < rowIndexes_2.length; _i++) {\n var rowIndex = rowIndexes_2[_i];\n var rowObj = this.getRowObj(rowIndex);\n var isUnSelected = this.selectedRowIndexes.indexOf(rowIndex) > -1;\n gObj.selectedRowIndex = rowIndex;\n if (isUnSelected) {\n this.rowDeselect(events.rowDeselecting, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target);\n this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(rowIndex), 1);\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedRow), 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 this.rowDeselect(events.rowDeselected, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target, [selectedMovableRow]);\n }\n else {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.actualTarget,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n foreignKeyData: rowObj.foreignKeyData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n if (this.isSingleSel()) {\n this.clearRow();\n }\n this.updateRowSelection(selectedRow, rowIndex);\n if (frzCols) {\n this.updateRowSelection(selectedMovableRow, rowIndex);\n }\n }\n if (!isUnSelected) {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.actualTarget,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n foreignKeyData: rowObj.foreignKeyData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n }\n this.updateRowProps(rowIndex);\n if (this.isSingleSel()) {\n break;\n }\n }\n };\n Selection.prototype.getCollectionFromIndexes = function (startIndex, endIndex) {\n var indexes = [];\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.clearRowSelection();\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.parent.selectedRowIndex = -1;\n if (this.isSingleSel() && this.parent.isPersistSelection) {\n this.selectedRowState = {};\n }\n };\n Selection.prototype.updateRowProps = function (startIndex) {\n this.prevRowIndex = startIndex;\n this.isRowSelected = this.selectedRowIndexes.length && true;\n };\n Selection.prototype.updatePersistCollection = function (selectedRow, chkState) {\n var _this = this;\n if (this.parent.isPersistSelection && !isNullOrUndefined(selectedRow)) {\n var rowObj = this.getRowObj(selectedRow);\n var pKey_1 = rowObj.data ? rowObj.data[this.primaryKey] : null;\n if (pKey_1 === null) {\n return;\n }\n rowObj.isSelected = chkState;\n if (chkState) {\n this.selectedRowState[pKey_1] = chkState;\n if (!this.persistSelectedData.some(function (data) { return data[_this.primaryKey] === 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) {\n var _this = this;\n delete (this.selectedRowState[pKey]);\n var index;\n var isPresent = this.persistSelectedData.some(function (data, i) {\n index = i;\n return data[_this.primaryKey] === pKey;\n });\n if (isPresent) {\n this.persistSelectedData.splice(index, 1);\n }\n };\n Selection.prototype.updateCheckBoxes = function (row, chkState) {\n if (!isNullOrUndefined(row)) {\n var chkBox = row.querySelector('.e-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n removeAddCboxClasses(chkBox.nextElementSibling, chkState);\n if (isNullOrUndefined(this.checkedTarget) || (!isNullOrUndefined(this.checkedTarget)\n && !this.checkedTarget.classList.contains('e-checkselectall'))) {\n this.setCheckAllState(parseInt(row.getAttribute('aria-rowindex'), 10));\n }\n }\n }\n };\n Selection.prototype.updateRowSelection = function (selectedRow, startIndex) {\n if (!selectedRow) {\n return;\n }\n this.selectedRowIndexes.push(startIndex);\n var len = this.selectedRowIndexes.length;\n if (this.parent.getFrozenColumns() && 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)');\n if (!target) {\n return;\n }\n this.focus.onClick({ target: target }, true);\n }\n };\n /**\n * Deselects the currently selected rows and cells.\n * @return {void}\n */\n Selection.prototype.clearSelection = function () {\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 this.clearRowSelection();\n this.clearCellSelection();\n this.enableSelectMultiTouch = false;\n }\n };\n /**\n * Deselects the currently selected rows.\n * @return {void}\n */\n Selection.prototype.clearRowSelection = function () {\n var _this = this;\n if (this.isRowSelected) {\n var gObj = this.parent;\n var rows = this.parent.getDataRows();\n var data = [];\n var row = [];\n var mRow = [];\n var rowIndex = [];\n var frzCols = gObj.getFrozenColumns();\n var foreignKeyData = [];\n var target = this.target;\n var currentViewData = this.parent.getCurrentViewRecords();\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[i]]\n : this.parent.getDataRows()[this.selectedRowIndexes[i]];\n var rowObj = this.getRowObj(currentRow);\n if (rowObj) {\n data.push(rowObj.data);\n row.push(currentRow);\n rowIndex.push(this.selectedRowIndexes[i]);\n foreignKeyData.push(rowObj.foreignKeyData);\n }\n if (frzCols) {\n mRow.push(gObj.getMovableRows()[this.selectedRowIndexes[i]]);\n }\n }\n this.rowDeselect(events.rowDeselecting, rowIndex, data, row, foreignKeyData, target, mRow);\n if (this.isCancelDeSelect === true) {\n return;\n }\n rows.filter(function (record) { return record.hasAttribute('aria-selected'); }).forEach(function (ele) {\n if (!_this.disableUI) {\n ele.removeAttribute('aria-selected');\n _this.addRemoveClassesForRow(ele, false, true, 'e-selectionbackground', 'e-active');\n }\n _this.updatePersistCollection(ele, false);\n _this.updateCheckBoxes(ele);\n });\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var movableRow = this.getSelectedMovableRow(this.selectedRowIndexes[i]);\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.updatePersistCollection(movableRow, false);\n }\n }\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.isRowSelected = false;\n this.parent.selectedRowIndex = -1;\n this.rowDeselect(events.rowDeselected, rowIndex, data, row, foreignKeyData, target, mRow);\n }\n };\n Selection.prototype.rowDeselect = function (type, rowIndex, data, row, foreignKeyData, target, mRow) {\n var cancl = 'cancel';\n this.updatePersistCollection(row[0], false);\n var rowDeselectObj = {\n rowIndex: rowIndex, data: data, row: row, foreignKeyData: foreignKeyData,\n cancel: false, target: target\n };\n this.parent.trigger(type, this.parent.getFrozenColumns() ? __assign({}, rowDeselectObj, { mRow: mRow }) : rowDeselectObj);\n this.isCancelDeSelect = rowDeselectObj[cancl];\n this.updateCheckBoxes(row[0]);\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 frzCols = gObj.getFrozenColumns();\n if (frzCols) {\n if (cellIndex.cellIndex >= frzCols) {\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 * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {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 var cncl = 'cancel';\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n var selectedTable;\n var cIdx;\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, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n cancel: false\n };\n this.onActionBegin(args, events.cellSelecting);\n }\n if (!isNullOrUndefined(args) && args[cncl] === true) {\n return;\n }\n this.clearCell();\n if (!isToggle) {\n this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n this.updateCellProps(cellIndex, cellIndex);\n if (!isToggle) {\n this.onActionComplete({\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\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 * @param {IIndex} startIndex - Specifies the row and column's start index.\n * @param {IIndex} endIndex - Specifies the row and column's end index.\n * @return {void}\n */\n Selection.prototype.selectCellsByRange = function (startIndex, endIndex) {\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, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n this.onActionBegin(args, events.cellSelecting);\n if (!isNullOrUndefined(args) && args[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 this.updateCellProps(stIndex, edIndex);\n this.onActionComplete({\n data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n };\n /**\n * Selects a collection of cells by row and column indexes.\n * @param {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n * @return {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 this.onActionBegin({\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelecting);\n for (var i = 0, len = rowCellIndexes.length; i < len; i++) {\n for (var j = 0, cellLen = rowCellIndexes[i].cellIndexes.length; j < cellLen; j++) {\n if (frzCols) {\n if (rowCellIndexes[i].cellIndexes[j] < frzCols) {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n else {\n selectedCell = gObj.getMovableCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n }\n else {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n if (!selectedCell) {\n continue;\n }\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n this.addRowCellIndex({ rowIndex: rowCellIndexes[i].rowIndex, cellIndex: rowCellIndexes[i].cellIndexes[j] });\n }\n }\n this.updateCellProps({ rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] }, { rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] });\n this.onActionComplete({\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n };\n /**\n * Select cells with existing cell selection by passing row and column index.\n * @param {IIndex} startIndex - Defines the collection of row and column index.\n * @return {void}\n * @hidden\n */\n Selection.prototype.addCellsToSelection = function (cellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedTable;\n var cIdx;\n var selectedCell;\n var frzCols = gObj.getFrozenColumns();\n var index;\n this.currentIndex = cellIndexes[0].rowIndex;\n var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n this.hideAutoFill();\n var rowObj;\n if (frzCols && cellIndexes[0].cellIndex >= frzCols) {\n rowObj = gObj.getMovableRowsObject()[cellIndexes[0].rowIndex];\n }\n else {\n rowObj = this.getRowObj(cellIndexes[0].rowIndex);\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[i].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 foreignKeyData.push(rowObj.cells[frzCols && cellIndexes[0].cellIndex >= frzCols\n ? cellIndex.cellIndex - frzCols : cellIndex.cellIndex].foreignKeyData);\n var args = {\n data: selectedData, cellIndex: cellIndexes[0],\n isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n previousRowCell: this.prevECIdxs ?\n gObj.getCellFromIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n };\n var isUnSelected = index > -1;\n if (isUnSelected) {\n var selectedCellIdx = this.selectedRowCellIndexes[index].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 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 this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n this.updateCellProps(cellIndex, cellIndex);\n if (!isUnSelected) {\n this.onActionComplete({\n data: selectedData, cellIndex: cellIndexes[0], currentCell: selectedCell,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) :\n undefined, previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes\n }, events.cellSelected);\n }\n }\n };\n Selection.prototype.getColIndex = function (rowIndex, index) {\n var cells;\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (index >= frzCols) {\n cells = this.parent.getMovableDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n }\n }\n if (!cells) {\n cells = this.parent.getDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 10);\n if (colIndex === index) {\n if (frzCols) {\n if (index >= frzCols) {\n m += frzCols;\n }\n }\n return m;\n }\n }\n return -1;\n };\n Selection.prototype.getLastColIndex = function (rowIndex) {\n var cells = this.parent.getFrozenColumns() ? this.parent.getMovableDataRows()[rowIndex].querySelectorAll('td.e-rowcell')\n : this.parent.getDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n return parseInt(cells[cells.length - 1].getAttribute('aria-colindex'), 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('e-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('e-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[i].rowIndex === rowCellIndex.rowIndex) {\n isRowAvail = true;\n index = i;\n break;\n }\n }\n if (isRowAvail) {\n if (this.selectedRowCellIndexes[index].cellIndexes.indexOf(rowCellIndex.cellIndex) < 0) {\n this.selectedRowCellIndexes[index].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 * @return {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 selectedTable = void 0;\n var frzCols = gObj.getFrozenColumns();\n this.hideAutoFill();\n for (var i = 0, len = rowCell.length; i < len; i++) {\n data.push(currentViewData[rowCell[i].rowIndex]);\n var rowObj = this.getRowObj(rowCell[i].rowIndex);\n for (var j = 0, cLen = rowCell[i].cellIndexes.length; j < cLen; j++) {\n if (frzCols) {\n if (rowCell[i].cellIndexes[j] < frzCols) {\n cells.push(gObj.getCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n else {\n cells.push(gObj.getMovableCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n }\n else {\n foreignKeyData.push(rowObj.cells[rowCell[i].cellIndexes[j]].foreignKeyData);\n cells.push(gObj.getCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\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[i].classList.remove('e-cellselectionbackground');\n selectedCells[i].removeAttribute('aria-selected');\n }\n this.selectedRowCellIndexes = [];\n this.isCellSelected = false;\n this.cellDeselect(events.cellDeselected, rowCell, data, cells, foreignKeyData);\n this.prevECIdxs = undefined;\n }\n };\n Selection.prototype.getSelectedCellsElement = function () {\n var gObj = this.parent;\n var rows = gObj.getDataRows();\n var mRows;\n if (gObj.getFrozenColumns()) {\n mRows = gObj.getMovableDataRows();\n rows = gObj.addMovableRows(rows, mRows);\n }\n var cells = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n cells = cells.concat([].slice.call(rows[i].querySelectorAll('.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('aria-rowindex'), 10);\n if (!this.isCellDrag) {\n this.hideAutoFill();\n this.selectRowsByRange(this.startDIndex, rowIndex);\n }\n else {\n var td = parentsUntil(e.target, 'e-rowcell');\n if (td) {\n this.startAFCell = this.startCell;\n this.endAFCell = parentsUntil(e.target, 'e-rowcell');\n this.selectLikeExcel(e, rowIndex, parseInt(td.getAttribute('aria-colindex'), 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 if (!this.bdrBottom) {\n this.createBorders();\n }\n this.positionBorders();\n }\n else {\n this.hideBorders();\n }\n };\n Selection.prototype.positionBorders = function () {\n this.updateStartEndCells();\n if (!this.startCell || !this.bdrLeft || !this.selectedRowCellIndexes.length) {\n return;\n }\n this.showBorders();\n var stOff = this.startCell.getBoundingClientRect();\n var endOff = this.endCell.getBoundingClientRect();\n var parentOff = this.startCell.offsetParent.getBoundingClientRect();\n this.bdrLeft.style.left = stOff.left - parentOff.left + 'px';\n this.bdrLeft.style.top = stOff.top - parentOff.top + 'px';\n this.bdrLeft.style.height = endOff.top - stOff.top > 0 ?\n (endOff.top - parentOff.top + endOff.height + 1) - (stOff.top - parentOff.top) + 'px' : endOff.height + 'px';\n this.bdrRight.style.left = endOff.left - parentOff.left + endOff.width + 'px';\n this.bdrRight.style.top = this.bdrLeft.style.top;\n this.bdrRight.style.height = this.bdrLeft.style.height;\n this.bdrTop.style.left = this.bdrLeft.style.left;\n this.bdrTop.style.top = this.bdrRight.style.top;\n this.bdrTop.style.width = parseInt(this.bdrRight.style.left, 10) - parseInt(this.bdrLeft.style.left, 10) + 1 + 'px';\n this.bdrBottom.style.left = this.bdrLeft.style.left;\n this.bdrBottom.style.top = parseInt(this.bdrLeft.style.top, 10) + parseInt(this.bdrLeft.style.height, 10) + 'px';\n this.bdrBottom.style.width = this.bdrTop.style.width;\n };\n Selection.prototype.createBorders = function () {\n if (!this.bdrLeft) {\n this.bdrLeft = this.parent.getContentTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_bdrleft', styles: 'width: 2px;' }));\n this.bdrRight = this.parent.getContentTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_bdrright', styles: 'width: 2px;' }));\n this.bdrBottom = this.parent.getContentTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_bdrbottom', styles: 'height: 2px;' }));\n this.bdrTop = this.parent.getContentTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_bdrtop', styles: 'height: 2px;' }));\n }\n };\n Selection.prototype.showBorders = function () {\n if (this.bdrLeft) {\n this.bdrLeft.style.display = '';\n this.bdrRight.style.display = '';\n this.bdrBottom.style.display = '';\n this.bdrTop.style.display = '';\n }\n };\n Selection.prototype.hideBorders = function () {\n if (this.bdrLeft) {\n this.bdrLeft.style.display = 'none';\n this.bdrRight.style.display = 'none';\n this.bdrBottom.style.display = 'none';\n this.bdrTop.style.display = 'none';\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 this.showBorders();\n var stOff = this.startAFCell.getBoundingClientRect();\n var endOff = this.endAFCell.getBoundingClientRect();\n var parentOff = this.startAFCell.offsetParent.getBoundingClientRect();\n this.bdrAFLeft.style.left = stOff.left - parentOff.left + 'px';\n this.bdrAFLeft.style.top = stOff.top - parentOff.top + 'px';\n this.bdrAFLeft.style.height = endOff.top - stOff.top > 0 ?\n (endOff.top - parentOff.top + endOff.height + 1) - (stOff.top - parentOff.top) + 'px' : endOff.height + 'px';\n this.bdrAFRight.style.left = endOff.left - parentOff.left + endOff.width + 'px';\n this.bdrAFRight.style.top = this.bdrAFLeft.style.top;\n this.bdrAFRight.style.height = this.bdrAFLeft.style.height;\n this.bdrAFTop.style.left = this.bdrAFLeft.style.left;\n this.bdrAFTop.style.top = this.bdrAFRight.style.top;\n this.bdrAFTop.style.width = parseInt(this.bdrAFRight.style.left, 10) - parseInt(this.bdrAFLeft.style.left, 10) + 1 + 'px';\n this.bdrAFBottom.style.left = this.bdrAFLeft.style.left;\n this.bdrAFBottom.style.top = parseInt(this.bdrAFLeft.style.top, 10) + parseInt(this.bdrAFLeft.style.height, 10) + 'px';\n this.bdrAFBottom.style.width = this.bdrAFTop.style.width;\n };\n Selection.prototype.createAFBorders = function () {\n if (!this.bdrAFLeft) {\n this.bdrAFLeft = this.parent.getContentTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_bdrafleft', styles: 'width: 2px;' }));\n this.bdrAFRight = this.parent.getContentTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_bdrafright', styles: 'width: 2px;' }));\n this.bdrAFBottom = this.parent.getContentTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_bdrafbottom', styles: 'height: 2px;' }));\n this.bdrAFTop = this.parent.getContentTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', 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 col = this.parent.getColumnByIndex(cIdx);\n if (this.parent.editModule && cell) {\n if (col.type === 'number') {\n this.parent.editModule.updateCell(rIdx, col.field, parseInt(cell.textContent, 10));\n }\n else {\n this.parent.editModule.updateCell(rIdx, col.field, cell.textContent);\n }\n }\n };\n /* tslint:disable-next-line:max-func-body-length */\n Selection.prototype.selectLikeAutoFill = function (e, isApply) {\n var startrowIdx = parseInt(parentsUntil(this.startAFCell, 'e-row').getAttribute('aria-rowindex'), 10);\n var startCellIdx = parseInt(this.startAFCell.getAttribute('aria-colindex'), 10);\n var endrowIdx = parseInt(parentsUntil(this.endAFCell, 'e-row').getAttribute('aria-rowindex'), 10);\n var endCellIdx = parseInt(this.endAFCell.getAttribute('aria-colindex'), 10);\n var rowLen = this.selectedRowCellIndexes.length - 1;\n var colLen = this.selectedRowCellIndexes[0].cellIndexes.length - 1;\n var col;\n switch (true) { //direction \n case !isApply && this.endAFCell.classList.contains('e-cellselectionbackground') &&\n !!parentsUntil(e.target, 'e-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 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, 'e-row').getAttribute('aria-rowindex'), 10);\n endCellIdx = parseInt(this.endAFCell.getAttribute('aria-colindex'), 10);\n if (!isApply) {\n this.drawAFBorders();\n }\n else {\n var cellIdx = parseInt(this.endCell.getAttribute('aria-colindex'), 10);\n for (var i = startrowIdx; i <= endrowIdx; i++) {\n var cells = [].slice.call(this.parent.getDataRows()[i].querySelectorAll('.e-cellselectionbackground'));\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[c]);\n c++;\n }\n }\n this.selectCellsByRange({ rowIndex: startrowIdx, cellIndex: this.startCellIndex }, { rowIndex: endrowIdx, cellIndex: endCellIdx });\n }\n break;\n case 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 = [].slice.call(this.parent.getDataRows()[i].querySelectorAll('.e-cellselectionbackground'));\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[c]);\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('aria-rowindex'), 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 = [].slice.call(this.parent.getDataRows()[r].querySelectorAll('.e-cellselectionbackground'));\n var c = 0;\n r--;\n for (var j = this.startCellIndex; j <= this.startCellIndex + colLen; j++) {\n this.updateValue(i, j, cells[c]);\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('aria-rowindex'), 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 = [].slice.call(this.parent.getDataRows()[r].querySelectorAll('.e-cellselectionbackground'));\n r++;\n var c = 0;\n for (var m = this.startCellIndex; m <= this.startCellIndex + colLen; m++) {\n this.updateValue(i, m, cells[c]);\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, 'e-rowcell');\n }\n else {\n this.mUPTarget = null;\n }\n this.isDragged = false;\n this.updateAutoFillPosition();\n if (this.isAutoFillSel) {\n this.startAFCell = this.startCell;\n this.endAFCell = parentsUntil(e.target, 'e-rowcell');\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 EventHandler.remove(document.body, 'mouseup', this.mouseUpHandler);\n };\n Selection.prototype.hideAutoFill = function () {\n if (this.autofill) {\n this.autofill.style.display = 'none';\n }\n };\n /**\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 cells = [].slice.call(this.parent.getDataRows()[this.selectedRowCellIndexes[this.selectedRowCellIndexes.length - 1].rowIndex].querySelectorAll('.e-cellselectionbackground'));\n if (!this.parent.element.querySelector('#' + this.parent.element.id + '_autofill')) {\n this.autofill = this.parent.getContentTable().parentElement.appendChild(createElement('div', { className: 'e-autofill', id: this.parent.element.id + '_autofill' }));\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 this.autofill.style.left = clientRect.left - parentOff.left + clientRect.width - 3 + 'px';\n this.autofill.style.top = clientRect.top - parentOff.top + clientRect.height - 3 + 'px';\n }\n this.autofill.style.display = '';\n }\n else {\n this.hideAutoFill();\n }\n };\n Selection.prototype.mouseDownHandler = function (e) {\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) {\n return;\n }\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (parentsUntil(target, 'e-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) {\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')) {\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.querySelectorAll('.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('aria-rowindex'), 10);\n this.startCellIndex = parseInt(parentsUntil(this.startCell, 'e-rowcell').getAttribute('aria-colindex'), 10);\n }\n };\n Selection.prototype.updateStartCellsIndex = function () {\n if (this.startCell) {\n this.startIndex = parseInt(this.startCell.parentElement.getAttribute('aria-rowindex'), 10);\n this.startCellIndex = parseInt(parentsUntil(this.startCell, 'e-rowcell').getAttribute('aria-colindex'), 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('aria-rowindex'), 10);\n this.startDCellIndex = parseInt(parentsUntil(e.target, 'e-rowcell').getAttribute('aria-colindex'), 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 EventHandler.add(document.body, 'mouseup', this.mouseUpHandler, this);\n };\n Selection.prototype.clearSelAfterRefresh = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n /**\n * @hidden\n */\n Selection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.initialEnd, this.initializeSelection, this);\n this.parent.on(events.rowSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.cellSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.parent.on(events.beforeFragAppend, this.clearSelAfterRefresh, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.contentReady, this.initialEnd, 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.parent.on(events.rowsRemoved, this.rowsRemoved, this);\n this.parent.on(events.headerRefreshed, this.refreshHeader, this);\n this.addEventListener_checkbox();\n };\n /**\n * @hidden\n */\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.initialEnd, this.initializeSelection);\n this.parent.off(events.rowSelectionComplete, this.onActionComplete);\n this.parent.off(events.cellSelectionComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.off(events.beforeFragAppend, this.clearSelAfterRefresh);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.off(events.rowsRemoved, this.rowsRemoved);\n this.parent.off(events.headerRefreshed, this.refreshHeader);\n this.removeEventListener_checkbox();\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 delete (this.selectedRowState[e.records[i][this.primaryKey]]);\n --this.totalRecordsCount;\n }\n this.setCheckAllState();\n };\n ;\n Selection.prototype.beforeFragAppend = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\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 }\n };\n Selection.prototype.render = function (e) {\n EventHandler.add(this.parent.getContent(), '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 }\n if (this.selectedRowIndexes.length > 1) {\n this.clearRowSelection();\n }\n this.enableSelectMultiTouch = false;\n this.hidePopUp();\n }\n if (!isNullOrUndefined(e.properties.mode) ||\n !isNullOrUndefined(e.properties.cellSelectionMode)) {\n this.clearSelection();\n }\n this.checkBoxSelectionChanged();\n this.initPerisistSelection();\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').querySelectorAll('.e-rowselect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Selection.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n this.selectRow(this.parent.selectedRowIndex);\n };\n Selection.prototype.checkBoxSelectionChanged = function () {\n this.parent.off(events.contentReady, this.checkBoxSelectionChanged);\n var gobj = this.parent;\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) {\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 var dataManager = data.getData({}, query);\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 for (var i = 0; i < res.length; i++) {\n if (isNullOrUndefined(this.selectedRowState[res[i][this.primaryKey]]) && res[i][this.chkField]) {\n this.selectedRowState[res[i][this.primaryKey]] = res[i][this.chkField];\n }\n }\n this.persistSelectedData = res;\n };\n Selection.prototype.setRowSelection = function (state) {\n if (!this.parent.getDataModule().isRemote()) {\n if (state) {\n for (var _i = 0, _a = this.getData(); _i < _a.length; _i++) {\n var data = _a[_i];\n this.selectedRowState[data[this.primaryKey]] = true;\n }\n }\n else {\n this.selectedRowState = {};\n }\n // (this.getData()).forEach(function (data) {\n // this.selectedRowState[data[this.primaryKey]] = true;\n // })\n }\n };\n Selection.prototype.getData = function () {\n return this.parent.getDataModule().dataManager.dataSource.json;\n };\n Selection.prototype.refreshPersistSelection = function () {\n var rows = this.parent.getRows();\n if (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[j]);\n var pKey = rowObj ? rowObj.data[this.primaryKey] : null;\n if (pKey === null) {\n return;\n }\n var checkState = void 0;\n var chkBox = rows[j].querySelector('.e-checkselect');\n if (this.selectedRowState[pKey] || (this.parent.checkAllRows === 'Check' && this.chkAllCollec.indexOf(pKey) < 0)\n || (this.parent.checkAllRows === 'Uncheck' && this.chkAllCollec.indexOf(pKey) > 0)\n || (this.parent.checkAllRows === 'Intermediate' && !isNullOrUndefined(this.chkField) && rowObj.data[this.chkField])) {\n indexes.push(parseInt(rows[j].getAttribute('aria-rowindex'), 10));\n checkState = true;\n }\n else {\n checkState = false;\n if (this.checkedTarget !== chkBox && this.parent.isCheckBoxSelection) {\n removeAddCboxClasses(chkBox.nextElementSibling, checkState);\n }\n }\n this.updatePersistCollection(rows[j], checkState);\n }\n this.isSingleSel() && indexes.length > 0 ? this.selectRow(indexes[0], true) : this.selectRows(indexes);\n }\n if (this.parent.isCheckBoxSelection && 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, '.e-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[rowObj.data[this.primaryKey]] = rowObj.isSelected = editChkBox.checked;\n }\n else {\n this.isCheckedOnAdd = editChkBox.checked;\n }\n }\n }\n };\n Selection.prototype.actionComplete = function (e) {\n var _this = this;\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n if (e.action === 'add' && this.isCheckedOnAdd) {\n var rowObj = this.parent.getRowObjectFromUID(this.parent.getRows()[e.selectedRow].getAttribute('data-uid'));\n this.selectedRowState[rowObj.data[this.primaryKey]] = rowObj.isSelected = this.isCheckedOnAdd;\n }\n this.refreshPersistSelection();\n }\n if (e.requestType === 'delete' && this.parent.isPersistSelection) {\n e.data.slice().forEach(function (data) {\n if (!isNullOrUndefined(data[_this.primaryKey])) {\n _this.updatePersistDelete(data[_this.primaryKey]);\n }\n });\n this.setCheckAllState();\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n }\n };\n Selection.prototype.onDataBound = function () {\n if (!this.parent.enableVirtualization && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\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.selectRowsByRange(cRenderer.getVirtualRowIndex(0), cRenderer.getVirtualRowIndex(this.getCurrentBatchRecordChanges().length));\n this.parent.checkAllRows = 'Check';\n }\n else {\n this.clearSelection();\n this.parent.checkAllRows = 'Uncheck';\n }\n this.chkAllCollec = [];\n if (this.parent.isPersistSelection) {\n var rows = this.parent.getRows();\n for (var i = 0; i < rows.length; i++) {\n this.updatePersistCollection(rows[i], checkState);\n }\n if (this.parent.checkAllRows === 'Uncheck') {\n this.setRowSelection(false);\n this.persistSelectedData = this.parent.getDataModule().isRemote() ? this.persistSelectedData : [];\n }\n else if (this.parent.checkAllRows === 'Check') {\n this.setRowSelection(true);\n this.persistSelectedData = !this.parent.getDataModule().isRemote() ? this.getData().slice() : this.persistSelectedData;\n }\n }\n if (!isNullOrUndefined(editForm)) {\n var editChkBox = editForm.querySelector('.e-edit-checkselect');\n removeAddCboxClasses(editChkBox.nextElementSibling, checkState);\n }\n };\n Selection.prototype.checkSelectAll = function (checkBox) {\n var _this = this;\n var stateStr = this.getCheckAllStatus(checkBox);\n var state = stateStr === 'Check';\n if (stateStr === 'Intermediate') {\n state = this.getCurrentBatchRecordChanges().some(function (data) {\n return data[_this.primaryKey] in _this.selectedRowState;\n });\n }\n this.checkSelectAllAction(!state);\n this.target = null;\n if (this.getCurrentBatchRecordChanges().length > 0) {\n this.setCheckAllState();\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, '.e-rowcell');\n var checkObj = checkBox;\n this.isMultiCtrlRequest = true;\n var rIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n if (this.parent.isPersistSelection && this.parent.element.querySelectorAll('.e-addedrow').length > 0) {\n ++rIndex;\n }\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\n this.moveIntoUncheckCollection(closest(target, '.e-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 ? rowObj.data[this.primaryKey] : 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.updateSelectedRowIndex = function (index) {\n if (this.parent.isCheckBoxSelection && this.parent.enableVirtualization && !this.parent.getDataModule().isRemote()) {\n if (this.parent.checkAllRows === 'Check') {\n this.selectedRowIndexes = [];\n for (var data = 0; data < this.getData().length; data++) {\n this.selectedRowIndexes.push(data);\n }\n }\n else if (this.parent.checkAllRows === 'Uncheck') {\n this.selectedRowIndexes = [];\n }\n else {\n if (index && this.parent.getRowByIndex(index).getAttribute('aria-selected') === 'false') {\n var selectedVal = this.selectedRowIndexes.indexOf(index);\n this.selectedRowIndexes.splice(selectedVal, 1);\n }\n }\n }\n };\n ;\n Selection.prototype.setCheckAllState = function (index, isInteraction) {\n if (this.parent.isCheckBoxSelection || this.parent.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n var checkedLen = Object.keys(this.selectedRowState).length;\n if (!this.parent.isPersistSelection) {\n checkedLen = this.selectedRecords.length;\n this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n }\n if (this.getCheckAllBox()) {\n var spanEle = this.getCheckAllBox().nextElementSibling;\n removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n if (checkedLen === this.totalRecordsCount && this.totalRecordsCount || (this.parent.enableVirtualization\n && !this.parent.allowPaging && !this.parent.getDataModule().isRemote() && checkedLen === this.getData().length)) {\n addClass([spanEle], ['e-check']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, true, true);\n }\n this.parent.checkAllRows = 'Check';\n }\n else if (checkedLen === 0 || this.getCurrentBatchRecordChanges().length === 0) {\n addClass([spanEle], ['e-uncheck']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, false, true);\n }\n this.parent.checkAllRows = 'Uncheck';\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 }\n else {\n addClass([spanEle], ['e-stop']);\n this.parent.checkAllRows = 'Intermediate';\n }\n if (this.parent.enableVirtualization && !this.parent.allowPaging && !this.parent.getDataModule().isRemote()) {\n this.updateSelectedRowIndex(index);\n }\n }\n }\n };\n Selection.prototype.clickHandler = function (e) {\n var target = e.target;\n this.actualTarget = target;\n this.isMultiCtrlRequest = e.ctrlKey || this.enableSelectMultiTouch;\n this.isMultiShiftRequest = e.shiftKey;\n this.popUpClickHandler(e);\n var chkSelect = false;\n this.preventFocus = true;\n var checkBox;\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\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 target = parentsUntil(target, 'e-rowcell');\n if ((target && target.parentElement.classList.contains('e-row') && !this.parent.selectionSettings.checkboxOnly) || chkSelect) {\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 rIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n if (this.parent.isPersistSelection && this.parent.element.querySelectorAll('.e-addedrow').length > 0) {\n ++rIndex;\n }\n if (!this.mUPTarget || !this.mUPTarget.isEqualNode(target)) {\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\n }\n if (this.parent.isCheckBoxSelection) {\n this.moveIntoUncheckCollection(closest(target, '.e-row'));\n this.setCheckAllState();\n }\n }\n if (!this.parent.isCheckBoxSelection && Browser.isDevice && !this.isSingleSel()) {\n this.showPopup(e);\n }\n }\n this.isMultiCtrlRequest = false;\n this.isMultiShiftRequest = false;\n this.preventFocus = false;\n };\n Selection.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains('e-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, true);\n }\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\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, '.e-rowcell').classList.contains('e-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.hideBorders();\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('aria-rowindex'));\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.getFrozenColumns() ? (((e.container.isHeader && e.element.tagName !== 'TD' && e.isJump) ||\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 var headerAction = (e.container.isHeader && e.element.tagName !== 'TD' && !closest(e.element, '.e-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, '.e-rowcell'))) {\n var thLen = this.parent.getHeaderTable().querySelector('thead').childElementCount;\n rowIndex -= thLen;\n prev.rowIndex = 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 if (this.parent.getFrozenColumns()) {\n var cIdx = Number(e.element.getAttribute('aria-colindex'));\n prev.cellIndex = prev.cellIndex ? (prev.cellIndex === cellIndex ? cIdx : cIdx - 1) : null;\n cellIndex = cIdx;\n }\n }\n if (headerAction || (['ctrlPlusA', 'escape'].indexOf(e.keyArgs.action) === -1 && e.keyArgs.action !== 'space' &&\n rowIndex === prev.rowIndex && cellIndex === prev.cellIndex)) {\n return;\n }\n this.preventFocus = true;\n switch (e.keyArgs.action) {\n case 'downArrow':\n case 'upArrow':\n case 'enter':\n case 'shiftEnter':\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 }\n this.preventFocus = false;\n this.positionBorders();\n this.updateAutoFillPosition();\n };\n /**\n * Apply ctrl + A key selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.ctrlPlusA = function () {\n if (this.isRowType() && !this.isSingleSel()) {\n this.selectRowsByRange(0, this.parent.getRows().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.checkSelectAllAction(false);\n this.checkedTarget = null;\n }\n if (this.isRowType()) {\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 };\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('aria-colindex'), 10);\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (cIndex >= frzCols) {\n this.target =\n this.contentRenderer.getMovableRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex - frzCols];\n }\n else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex];\n }\n }\n else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex];\n }\n this.addAttribute(this.target);\n };\n Selection.prototype.applyRightLeftKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n 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 * @return {void}\n * @hidden\n */\n Selection.prototype.shiftDownKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\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 {\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 var gObj = this.parent;\n this.isMultiShiftRequest = true;\n this.selectCellsByRange(this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n this.isMultiShiftRequest = false;\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.querySelectorAll('.e-rowcell'));\n var cell = row.querySelector('.e-detailrowcollapse') || row.querySelector('.e-detailrowexpand')\n || row.querySelector('.e-rowdragdrop');\n if (cell) {\n cells.push(cell);\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 * @return {Object[]}\n */\n Selection.prototype.getSelectedRecords = function () {\n var selectedData = [];\n if (!this.selectionSettings.persistSelection) {\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 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.contentReady, this.checkBoxSelectionChanged, 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 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.click, this.clickHandler);\n };\n Selection.prototype.dataReady = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.disableUI = true;\n this.clearSelection();\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 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 * @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`](./api-grid.html#searchsettings-searchsettingsmodel).\n * @param {string} searchString - Defines the key.\n * @return {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 * @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 * @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 * @return {void}\n * @hidden\n */\n Search.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\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 * @return {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 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 * @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, isActionPrevent } 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 * @hidden\n */\n function ShowHide(parent) {\n this.parent = parent;\n }\n /**\n * Shows a column by column name.\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 * @return {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 columns.forEach(function (value) {\n value.visible = true;\n });\n this.setVisible(columns);\n };\n /**\n * Hides a column by column name.\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 * @return {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 columns.forEach(function (value) {\n value.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, index) {\n return iterateArrayOrObject(_this.parent.getColumns(), function (item, index) {\n if (item[getKeyBy] === key) {\n return item;\n }\n return undefined;\n })[0];\n });\n return columns;\n };\n /**\n * Shows or hides columns by given column collection.\n * @private\n * @param {Column[]} columns - Specifies the columns.\n * @return {void}\n */\n ShowHide.prototype.setVisible = function (columns) {\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\n instance: this, handler: this.setVisible,\n arg1: columns\n });\n return;\n }\n columns = isNullOrUndefined(columns) ? this.parent.getColumns() : columns;\n if (this.parent.allowSelection && this.parent.getSelectedRecords().length) {\n this.parent.clearSelection();\n }\n this.parent.notify(events.columnVisibilityChanged, columns);\n if (this.parent.columnQueryMode !== 'All') {\n this.parent.refresh();\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 } from '../base/constant';\nimport { ColumnWidthService } from '../services/width-controller';\n/**\n * The `Scroll` module is used to handle scrolling behaviour.\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the Grid scrolling.\n * @hidden\n */\n function Scroll(parent) {\n this.lastScrollTop = 0;\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 * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * @hidden\n */\n Scroll.prototype.setWidth = function () {\n this.parent.element.style.width = formatUnit(this.parent.width);\n if (this.parent.toolbarModule && this.parent.toolbarModule.toolbar &&\n this.parent.toolbarModule.toolbar.element) {\n this.parent.toolbarModule.toolbar.refreshOverflow();\n }\n };\n /**\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n var mHdrHeight = 0;\n var content = this.parent.getContent().firstChild;\n if (this.parent.frozenRows && this.parent.height !== 'auto') {\n mHdrHeight =\n this.parent.getHeaderContent().querySelector('tbody').offsetHeight;\n content.style.height = formatUnit(this.parent.height - mHdrHeight);\n }\n else {\n content.style.height = formatUnit(this.parent.height);\n }\n this.ensureOverflow(content);\n };\n /**\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 content.firstChild.style[cssProps.border] = scrollWidth > 0 ? '1px' : '0px';\n content.style[cssProps.padding] = scrollWidth > 0 ? scrollWidth + 'px' : '0px';\n };\n /**\n * @hidden\n */\n Scroll.prototype.removePadding = function (rtl) {\n var cssProps = this.getCssProperties(rtl);\n this.parent.getHeaderContent().firstChild.style[cssProps.border] = '';\n this.parent.getHeaderContent().firstChild.parentElement.style[cssProps.padding] = '';\n };\n /**\n * Refresh makes the Grid adoptable with the height of parent container.\n *\n * > The [`height`](./api-grid.html#height) must be set to 100%.\n * @return\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 '.e-gridcontent';\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 * @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(headerRefreshed, this.setScrollLeft, this);\n };\n /**\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(headerRefreshed, this.setScrollLeft);\n };\n Scroll.prototype.setScrollLeft = function () {\n if (this.parent.frozenColumns) {\n this.parent.headerModule.getMovableHeader().scrollLeft = this.previousValues.left;\n }\n };\n Scroll.prototype.onContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n var isHeader = element.classList.contains('e-headercontent');\n return function (e) {\n if (_this.content.querySelector('tbody') === null || _this.parent.isPreventScrollEvent) {\n return;\n }\n var target = e.target;\n var left = target.scrollLeft;\n var sLimit = target.scrollWidth;\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 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.onFreezeContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var target = e.target;\n var top = target.scrollTop;\n if (_this.previousValues.top === top) {\n return;\n }\n element.scrollTop = top;\n _this.previousValues.top = top;\n if (_this.parent.isDestroyed) {\n return;\n }\n };\n };\n Scroll.prototype.onWheelScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var top = element.scrollTop + (e.deltaMode === 1 ? e.deltaY * 30 : e.deltaY);\n if (_this.previousValues.top === top) {\n return;\n }\n e.preventDefault();\n _this.parent.getContent().querySelector('.e-frozencontent').scrollTop = top;\n element.scrollTop = top;\n _this.previousValues.top = top;\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 cont;\n var mHdr;\n var pageXY = _this.getPointXY(e);\n var top = element.scrollTop + (_this.pageXY.y - pageXY.y);\n var left = element.scrollLeft + (_this.pageXY.x - pageXY.x);\n if (_this.parent.getHeaderContent().contains(e.target)) {\n mHdr = _this.parent.getFrozenColumns() ?\n _this.parent.getHeaderContent().querySelector('.e-movableheader') : _this.parent.getHeaderContent().firstChild;\n if (_this.previousValues.left === left || (left < 0 || (mHdr.scrollWidth - mHdr.clientWidth) < left)) {\n return;\n }\n e.preventDefault();\n mHdr.scrollLeft = left;\n element.scrollLeft = left;\n _this.pageXY.x = pageXY.x;\n _this.previousValues.left = left;\n }\n else {\n cont = _this.parent.getContent().querySelector('.e-frozencontent');\n if (_this.previousValues.top === top && (top < 0 || (cont.scrollHeight - cont.clientHeight) < top)\n || (top < 0 || (cont.scrollHeight - cont.clientHeight) < top)) {\n return;\n }\n e.preventDefault();\n cont.scrollTop = top;\n element.scrollTop = top;\n _this.pageXY.y = pageXY.y;\n _this.previousValues.top = top;\n }\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.wireEvents = function () {\n var _this = this;\n if (this.oneTimeReady) {\n var frzCols = this.parent.getFrozenColumns();\n this.content = this.parent.getContent().firstChild;\n this.header = this.parent.getHeaderContent().firstChild;\n var mCont = this.content.querySelector('.e-movablecontent');\n var fCont = this.content.querySelector('.e-frozencontent');\n var mHdr = this.header.querySelector('.e-movableheader');\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 (frzCols) {\n EventHandler.add(mCont, 'scroll', this.onContentScroll(mHdr), this);\n EventHandler.add(mCont, 'scroll', this.onFreezeContentScroll(fCont), this);\n EventHandler.add(fCont, 'scroll', this.onFreezeContentScroll(mCont), this);\n EventHandler.add(mHdr, 'scroll', this.onContentScroll(mCont), this);\n EventHandler.add(fCont, 'wheel', this.onWheelScroll(mCont), this);\n EventHandler.add(fCont, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(fCont, 'touchmove pointermove', this.onTouchScroll(mCont), this);\n }\n else {\n EventHandler.add(this.content, 'scroll', this.onContentScroll(this.header), this);\n EventHandler.add(this.header, 'scroll', this.onContentScroll(this.content), this);\n }\n if (this.parent.aggregates.length) {\n EventHandler.add(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll(this.content), this);\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 if (!_this.parent.enableVirtualization) {\n if (sHeight < clientHeight) {\n addClass(table.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n if (_this.parent.getFrozenColumns()) {\n addClass(_this.parent.getContent().querySelector('.e-movablecontent').querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n }\n }\n if ((_this.parent.frozenRows > 0 || _this.parent.frozenColumns > 0) && _this.header.querySelector('.e-movableheader')) {\n _this.header.querySelector('.e-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 if (!_this.parent.enableColumnVirtualization) {\n _this.content.scrollLeft = sLeft;\n }\n if (_this.parent.frozenColumns && _this.header.querySelector('.e-movableheader')) {\n _this.header.querySelector('.e-movableheader').scrollLeft =\n _this.content.querySelector('.e-movablecontent').scrollLeft;\n }\n });\n this.parent.isPreventScrollEvent = false;\n };\n /**\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 if (this.parent.getFrozenColumns()) {\n content.querySelector('.e-movablecontent').style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\n else {\n content.style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\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 this.setWidth();\n };\n /**\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.removeEventListener();\n //Remove padding\n this.removePadding();\n removeClass([this.parent.getHeaderContent().firstChild], 'e-headercontent');\n removeClass([this.parent.getContent().firstChild], 'e-content');\n //Remove height\n this.parent.getContent().firstChild.style.height = '';\n //Remove width\n this.parent.element.style.width = '';\n //Remove Dom event\n EventHandler.remove(this.parent.getContent().firstChild, 'scroll', this.onContentScroll);\n };\n /**\n * Function to get the scrollbar width of the browser.\n * @return {number}\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';\nimport { ValueFormatter } from '../services/value-formatter';\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 * @hidden\n */\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n var valueFormatter = new ValueFormatter(cultureName);\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = valueFormatter.getFormatFunction(this.format);\n }\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\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 * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\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 } from '../base/util';\nimport * as events from '../base/constant';\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 * @hidden\n */\n function Clipboard(parent) {\n this.copyContent = '';\n this.isSelect = false;\n this.parent = parent;\n this.addEventListener();\n }\n /**\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 EventHandler.add(this.parent.element, 'keydown', this.pasteHandler, this);\n };\n /**\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.click, this.clickHandler);\n EventHandler.remove(this.parent.element, 'keydown', this.pasteHandler);\n };\n Clipboard.prototype.clickHandler = function (e) {\n var target = e.target;\n target = parentsUntil(target, 'e-rowcell');\n };\n Clipboard.prototype.pasteHandler = function (e) {\n var _this = this;\n if (e.keyCode === 86 && e.ctrlKey && !this.parent.isEdit) {\n var target_1 = closest(document.activeElement, '.e-rowcell');\n if (!target_1) {\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, parseInt(target_1.parentElement.getAttribute('aria-rowindex'), 10), parseInt(target_1.getAttribute('aria-colindex'), 10));\n }, 10);\n }\n };\n /**\n * Paste data from clipboard to selected cells.\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 */\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 isFrozen = this.parent.getFrozenColumns();\n if (isFrozen) {\n mRows = grid.getMovableDataRows();\n }\n for (var r = 0; r < rows.length; r++) {\n cols = rows[r].split('\\t');\n cIdx = colIndex;\n if ((r === rows.length - 1 && rows[r] === '') || 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[rIdx];\n var mTr = mRows[rIdx];\n isAvail = !fTr.querySelector('[aria-colindex=\"' + cIdx + '\"]') ?\n mTr.querySelector('[aria-colindex=\"' + cIdx + '\"]') : true;\n }\n if (!isAvail) {\n cIdx++;\n break;\n }\n col = grid.getColumnByIndex(cIdx);\n value = col.getParser() ? col.getParser()(cols[c]) : cols[c];\n if (col.allowEditing && !col.isPrimaryKey && !col.template) {\n if (grid.editModule) {\n if (col.type === 'number') {\n this.parent.editModule.updateCell(rIdx, col.field, parseInt(value, 10));\n }\n else {\n grid.editModule.updateCell(rIdx, col.field, value);\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.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': '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.getFrozenColumns();\n this.clipBoardTextArea.value = this.copyContent = '';\n var mRows = void 0;\n var rows = this.parent.getRows();\n if (isFrozen) {\n mRows = this.parent.getMovableDataRows();\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[i] = this.parent.getVisibleColumns()[i].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 cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[selectedIndexes[i]].querySelectorAll('.e-rowcell')));\n }\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[i]));\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[i]].\n querySelectorAll('.e-cellselectionbackground'));\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[obj.rowIndexes[i]].querySelectorAll('.e-cellselectionbackground')));\n }\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n }\n else {\n this.getCopyData([].slice.call(this.parent.element.querySelectorAll('.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 this.copyContent += this.parent.getColumns()[parseInt(cells[j].getAttribute('aria-colindex'), 10)].headerText + '\\n';\n }\n if (isElement) {\n if (!cells[j].classList.contains('e-hide')) {\n this.copyContent += cells[j].textContent;\n }\n }\n else {\n this.copyContent += cells[j];\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 * @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')) {\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 * @private\n */\n Clipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n * @return {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 isBox = void 0;\n var rowIndexes = [];\n var i = void 0;\n for (i = 0; i < rowCellIndxes.length; i++) {\n if (rowCellIndxes[i].cellIndexes.length) {\n rowIndexes.push(rowCellIndxes[i].rowIndex);\n }\n if (rowCellIndxes[i].cellIndexes.length) {\n if (!str) {\n str = JSON.stringify(rowCellIndxes[i].cellIndexes.sort());\n }\n if (str !== JSON.stringify(rowCellIndxes[i].cellIndexes.sort())) {\n break;\n }\n }\n }\n rowIndexes.sort();\n if (i === rowCellIndxes.length && rowIndexes[rowIndexes.length - 1] - rowIndexes[0] === rowIndexes.length - 1) {\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 { Component, ChildProperty, Browser, closest, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, append, 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 { DataUtil } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner, Tooltip } from '@syncfusion/ej2-popups';\nimport { iterateArrayOrObject, prepareColumns, parentsUntil, wrap, templateCompiler, refreshForeignData } from './util';\nimport { getRowHeight } 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 { 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';\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 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()\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 return Predicate;\n}(ChildProperty));\nexport { Predicate };\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()\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 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 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 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, \"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 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('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\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 * @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.freezeRefresh = Component.prototype.refresh;\n /**\n * Gets the currently visible records of the Grid.\n */\n _this.currentViewData = [];\n /** @hidden */\n _this.lockcolPositionCount = 0;\n /** @hidden */\n _this.prevPageMoving = false;\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 * @return {string}\n * @hidden\n */\n Grid.prototype.getPersistData = function () {\n var _this = this;\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'groupSettings', 'columns', 'searchSettings', 'selectedRowIndex'];\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: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource', 'headerText'];\n keyEntity.forEach(function (value) {\n var currentObject = _this[value];\n for (var _i = 0, _a = ignoreOnPersist[value]; _i < _a.length; _i++) {\n var val = _a[_i];\n delete currentObject[val];\n }\n });\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n Grid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n var _this = this;\n columns.forEach(function (column) {\n if (column.columns) {\n _this.ignoreInColumn(ignoreOnColumn, column);\n _this.ignoreInArrays(ignoreOnColumn, column.columns);\n }\n else {\n _this.ignoreInColumn(ignoreOnColumn, column);\n }\n });\n };\n Grid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n ignoreOnColumn.forEach(function (val) {\n delete column[val];\n column.filter = {};\n });\n };\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n Grid.prototype.requiredModules = function () {\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]\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) {\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.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 };\n /**\n * For internal use only - Initialize the event handler;\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 /* tslint:disable */\n this.isInitial = true;\n this.sortedColumns = [];\n this.inViewIndexes = [];\n this.mediaCol = [];\n this.isInitialLoad = false;\n this.mergeCells = {};\n this.isEdit = false;\n this.checkAllRows = 'None';\n this.isCheckBoxSelection = false;\n this.isPersistSelection = false;\n this.freezeRefresh = 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'\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 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 EndsWith: 'Ends With',\n Contains: 'Contains',\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 autoFitAll: 'Auto Fit all columns',\n autoFit: 'Auto Fit 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 Blanks: 'Blanks',\n FilterTrue: 'True',\n FilterFalse: 'False',\n NoResult: 'No Matches Found',\n ClearFilter: 'Clear Filter',\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 };\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 };\n /* tslint:enable */\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n */\n Grid.prototype.render = function () {\n this.ariaService.setOptions(this.element, { role: 'grid' });\n createSpinner({ target: this.element }, this.createElement);\n this.renderModule = new Render(this, this.serviceLocator);\n this.getMediaColumns();\n this.searchModule = new Search(this);\n this.scrollModule = new Scroll(this);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n prepareColumns(this.columns, this.enableColumnVirtualization);\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 this.showSpinner();\n this.notify(events.initialEnd, {});\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 Grid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually showed spinner needs to hide by `hideSpinnner`.\n */\n Grid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n Grid.prototype.updateStackedFilter = function () {\n if (this.allowFiltering && this.filterSettings.type === 'FilterBar' &&\n this.getHeaderContent().querySelectorAll('.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[index].hideAtMedia)) {\n this.mediaCol.push(gcol[index]);\n var media = window.matchMedia(gcol[index].hideAtMedia);\n this.mediaQueryUpdate(index, media);\n media.addListener(this.mediaQueryUpdate.bind(this, index));\n }\n }\n }\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.mediaQueryUpdate = function (columnIndex, e) {\n var col = this.getColumns()[columnIndex];\n col.visible = e.matches;\n if (this.isInitialLoad) {\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 Grid.prototype.refreshMediaCol = function () {\n this.isInitialLoad = true;\n if (this.aggregates.length && this.element.scrollHeight > this.height) {\n var footerContent = this.element.querySelector('.e-gridfooter');\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 this.refreshHeader();\n }\n };\n /**\n * For internal use only - Initialize the event handler\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 * @method destroy\n * @return {void}\n */\n Grid.prototype.destroy = function () {\n var gridElement = this.element;\n if (!gridElement) {\n return;\n }\n var hasGridChild = gridElement.querySelector('.e-gridheader') &&\n gridElement.querySelector('.e-gridcontent') ? true : false;\n if (hasGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n if (hasGridChild) {\n _super.prototype.destroy.call(this);\n }\n this.toolTipObj.destroy();\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[i]]) {\n this[modules[i]] = 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 };\n Grid.prototype.destroyDependentModules = function () {\n var gridElement = this.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.scrollModule.destroy();\n this.keyboardModule.destroy();\n this.focusModule.destroy();\n };\n /**\n * For internal use only - Get 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 }\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n /* tslint:disable-next-line:max-line-length */\n // tslint:disable-next-line:max-func-body-length\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 if (this.isDestroyed) {\n return;\n }\n var properties = Object.keys(newProp);\n if (properties.indexOf('columns') > -1) {\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 this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n if (isNullOrUndefined(newProp.pageSettings.currentPage) && 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 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 break;\n case 'allowSelection':\n this.notify(events.uiUpdate, { module: 'selection', enable: this.allowSelection });\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 'childGrid':\n requireRefresh = true;\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 freezeRefresh = true;\n requireGridRefresh = true;\n break;\n default:\n this.extendedPropertyChange(prop, newProp);\n }\n }\n if (checkCursor) {\n this.updateDefaultCursor();\n }\n if (requireGridRefresh) {\n if (freezeRefresh || this.frozenColumns || 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 }\n };\n /* tslint:disable-next-line:max-line-length */\n Grid.prototype.extendedPropertyChange = function (prop, newProp) {\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 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 var pending_1 = this.getDataModule().getState();\n if (pending_1.isPending) {\n var gResult_1 = !isNullOrUndefined(this.dataSource) ? this.dataSource.result : [];\n (pending_1.group || []).forEach(function (name) {\n gResult_1 = DataUtil.group(gResult_1, name, pending_1.aggregates || []);\n });\n this.dataSource = {\n result: gResult_1, count: this.dataSource.count,\n aggregates: this.dataSource.aggregates\n };\n pending_1.resolver(this.dataSource);\n }\n else {\n this.getDataModule().setState({ isDataChanged: false });\n this.notify(events.dataSourceModified, {});\n this.renderModule.refresh();\n }\n break;\n case 'enableHover':\n var action = newProp.enableHover ? addClass : removeClass;\n action([this.element], 'e-gridhover');\n break;\n }\n };\n /**\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 */\n Grid.prototype.updateDefaultCursor = function () {\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n for (var _i = 0, headerRows_1 = headerRows; _i < headerRows_1.length; _i++) {\n var row = headerRows_1[_i];\n if (this.allowSorting || (this.allowGrouping && this.groupSettings.showDropArea) || this.allowReordering) {\n row.classList.remove('e-defaultcursor');\n }\n else {\n row.classList.add('e-defaultcursor');\n }\n }\n };\n Grid.prototype.updateColumnModel = function (columns) {\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].columns) {\n this.updateColumnModel(columns[i].columns);\n }\n else {\n this.columnModel.push(columns[i]);\n }\n }\n this.updateFrozenColumns();\n this.updateLockableColumns();\n };\n Grid.prototype.updateFrozenColumns = function () {\n var cols = this.columnModel;\n var count = 0;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].isFrozen) {\n cols.splice(this.frozenColumns + count, 0, cols.splice(i, 1)[0]);\n count++;\n }\n }\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[i].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[i].columns) {\n this.checkLockColumns(cols[i].columns);\n }\n else if (cols[i].lockColumn) {\n this.lockcolPositionCount++;\n }\n }\n };\n /**\n * Gets the columns from the Grid.\n * @return {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 return columns;\n };\n /**\n * @private\n */\n Grid.prototype.getStackedHeaderColumnByHeaderText = function (stackedHeader, col) {\n for (var i = 0; i < col.length; i++) {\n var individualColumn = col[i];\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 */\n Grid.prototype.getColumnIndexesInView = function () {\n return this.inViewIndexes;\n };\n /**\n * @private\n */\n Grid.prototype.getQuery = function () {\n return this.query;\n };\n /**\n * @private\n */\n Grid.prototype.getLocaleConstants = function () {\n return this.defaultLocale;\n };\n /**\n * @private\n */\n Grid.prototype.setColumnIndexesInView = function (indexes) {\n this.inViewIndexes = indexes;\n };\n /**\n * Gets the visible columns from the Grid.\n * @return {Column[]}\n */\n Grid.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 * Gets the header div of the Grid.\n * @return {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 * @param {Element} element - Specifies the Grid header.\n * @return {void}\n */\n Grid.prototype.setGridHeaderContent = function (element) {\n this.headerModule.setPanel(element);\n };\n /**\n * Gets the content table of the Grid.\n * @return {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 * @param {Element} element - Specifies the Grid content table.\n * @return {void}\n */\n Grid.prototype.setGridContentTable = function (element) {\n this.contentModule.setTable(element);\n };\n /**\n * Gets the content div of the Grid.\n * @return {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 * @param {Element} element - Specifies the Grid content.\n * @return {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 * @return {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 * @param {Element} element - Specifies the Grid header table.\n * @return {void}\n */\n Grid.prototype.setGridHeaderTable = function (element) {\n this.headerModule.setTable(element);\n };\n /**\n * Gets the footer div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getFooterContent = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n return this.footerElement;\n };\n /**\n * Gets the footer table element of the Grid.\n * @return {Element}\n */\n Grid.prototype.getFooterContentTable = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n return this.footerElement.firstChild.firstChild;\n };\n /**\n * Gets the pager of the Grid.\n * @return {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 * @param {Element} element - Specifies the Grid pager.\n * @return {void}\n */\n Grid.prototype.setGridPager = function (element) {\n this.gridPager = element;\n };\n /**\n * Gets a row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n Grid.prototype.getRowByIndex = function (index) {\n return this.contentModule.getRowByIndex(index);\n };\n /**\n * Gets a movable tables row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n Grid.prototype.getMovableRowByIndex = function (index) {\n return this.contentModule.getMovableRowByIndex(index);\n };\n /**\n * Gets all the data rows of the Grid.\n * @return {Element[]}\n */\n Grid.prototype.getRows = function () {\n return this.contentModule.getRowElements();\n };\n /**\n * Get a row information based on cell\n * @param {Element}\n * @return RowInfo\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'))) && !this.isEdit) {\n var cell = closest(ele, '.e-rowcell');\n if (!cell) {\n return args;\n }\n var cellIndex = parseInt(cell.getAttribute('aria-colindex'), 10);\n if (!isNullOrUndefined(cell) && !isNaN(cellIndex)) {\n var row_1 = closest(cell, '.e-row');\n var rowIndex = parseInt(row_1.getAttribute('aria-rowindex'), 10);\n var frzCols = this.getFrozenColumns();\n var isMovable = frzCols ? cellIndex >= frzCols : false;\n var rows = (isMovable ?\n this.contentModule.getMovableRows() : this.contentModule.getRows());\n var rowsObject = rows.filter(function (r) { return r.uid === row_1.getAttribute('data-uid'); });\n var rowData = rowsObject[0].data;\n var column = rowsObject[0].cells[isMovable ? cellIndex - frzCols : cellIndex].column;\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 * @return {Element[]}\n */\n Grid.prototype.getMovableRows = function () {\n return this.contentModule.getMovableRowElements();\n };\n /**\n * Gets all the Grid's data rows.\n * @return {Element[]}\n */\n Grid.prototype.getDataRows = function () {\n var rows = [].slice.call(this.getContentTable().querySelector('tbody').children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderTable().querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\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[i]);\n }\n return fRows;\n };\n Grid.prototype.generateDataRows = function (rows) {\n var dRows = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Gets all the Grid's movable table data rows.\n * @return {Element[]}\n */\n Grid.prototype.getMovableDataRows = function () {\n var rows = [].slice.call(this.getContent().querySelector('.e-movablecontent').querySelector('tbody').children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows);\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 * @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 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 fieldIdx;\n var col;\n var tr;\n var mTr;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var cell = new CellRenderer(this, this.serviceLocator);\n var selectedRow = {};\n var movableSelectedRow = {};\n var rowObjects = this.contentModule.getRows();\n var movableRowObjects = this.contentModule.getMovableRows();\n fieldIdx = this.getColumnIndexByField(field);\n if (this.groupSettings.columns.length > 0 || this.childGrid || this.detailTemplate) {\n fieldIdx = fieldIdx + 1;\n }\n col = this.getColumnByField(field);\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n movableSelectedRow = movableRowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n tr = !isNullOrUndefined(selectedRow) ? this.element.querySelector('[data-uid=' + selectedRow[rowuID] + ']') : null;\n mTr = !isNullOrUndefined(movableSelectedRow) ? this.element.querySelector('[data-uid=' + movableSelectedRow[rowuID] + ']') : null;\n if (!isNullOrUndefined(tr)) {\n setValue(field, value, selectedRow[rowData]);\n var td = !isNullOrUndefined(tr.childNodes[fieldIdx]) ?\n tr.childNodes[fieldIdx] : mTr.childNodes[fieldIdx - this.frozenColumns];\n if (!isNullOrUndefined(td)) {\n var sRow = selectedRow[cells][fieldIdx];\n var mRow = void 0;\n if (this.frozenColumns) {\n mRow = movableSelectedRow[cells][fieldIdx - this.frozenColumns];\n }\n cell.refreshTD(td, !isNullOrUndefined(sRow) ? sRow : mRow, selectedRow[rowData], { index: selectedRow[rowIdx] });\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(movableSelectedRow) && !isNullOrUndefined(movableSelectedRow['changes'])) {\n movableSelectedRow['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 }\n }\n else {\n return;\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 * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n */\n Grid.prototype.setRowData = function (key, rowData) {\n var rwdata = 'data';\n var rowuID = 'uid';\n var rowObjects = this.contentModule.getRows();\n var selectedRow;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this);\n if (this.groupSettings.columns.length > 0 && this.aggregates.length > 0) {\n rowObjects = rowObjects.filter(function (row) { return row.isDataRow; });\n }\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n if (!isNullOrUndefined(selectedRow) && this.element.querySelectorAll('[data-uid=' + selectedRow[rowuID] + ']').length) {\n selectedRow.changes = rowData;\n refreshForeignData(selectedRow, this.getForeignKeyColumns(), selectedRow.changes);\n rowRenderer.refresh(selectedRow, this.getColumns(), true);\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 /**\n * Gets a cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.getDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex];\n };\n /**\n * Gets a movable table cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.getMovableDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex - this.getFrozenColumns()];\n };\n /**\n * Gets a column header by column index.\n * @param {number} index - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByIndex = function (index) {\n return this.getHeaderTable().querySelectorAll('.e-headercell')[index];\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowObjectFromUID = function (uid) {\n var rows = this.contentModule.getRows();\n var row = this.rowObject(rows, uid);\n if (this.getFrozenColumns()) {\n if (!row) {\n row = this.rowObject(this.contentModule.getMovableRows(), uid);\n return row;\n }\n }\n return row;\n };\n Grid.prototype.rowObject = function (rows, uid) {\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 return null;\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * @hidden\n */\n Grid.prototype.getMovableRowsObject = function () {\n return this.contentModule.getMovableRows();\n };\n /**\n * Gets a column header by column name.\n * @param {string} field - Specifies the column name.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByField = function (field) {\n return this.getColumnHeaderByUid(this.getColumnByField(field).uid);\n };\n /**\n * Gets a column header by UID.\n * @param {string} field - Specifies the column uid.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByUid = function (uid) {\n return this.getHeaderContent().querySelector('[e-mappinguid=' + uid + ']').parentElement;\n };\n /**\n * @hidden\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 * @param {string} field - Specifies the column name.\n * @return {Column}\n */\n Grid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\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 * @param {string} field - Specifies the column name.\n * @return {number}\n */\n Grid.prototype.getColumnIndexByField = function (field) {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Gets a column by UID.\n * @param {string} uid - Specifies the column UID.\n * @return {Column}\n */\n Grid.prototype.getColumnByUid = function (uid) {\n return iterateArrayOrObject(this.getColumns().concat(this.getStackedColumns(this.columns)), function (item, index) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\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 * @param {string} uid - Specifies the column UID.\n * @return {number}\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 * @param {string} field - Specifies the column name.\n * @return {string}\n */\n Grid.prototype.getUidByColumnField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return item.uid;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets TH index by column uid value.\n * @private\n * @param {string} uid - Specifies the column uid.\n * @return {number}\n */\n Grid.prototype.getNormalizedColumnIndex = function (uid) {\n var index = this.getColumnIndexByUid(uid);\n if (this.allowGrouping) {\n index += this.groupSettings.columns.length;\n }\n if (this.isDetail()) {\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 * @return {string[]}\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()[i];\n if (column.visible) {\n columnNames.push(column.field);\n }\n }\n return columnNames;\n };\n /**\n * Gets a compiled row template.\n * @return {Function}\n * @private\n */\n Grid.prototype.getRowTemplate = function () {\n return this.rowTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n * @private\n * @return {Function}\n */\n Grid.prototype.getDetailTemplate = function () {\n return this.detailTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n * @private\n * @return {Function}\n */\n Grid.prototype.getEditTemplate = function () {\n return this.editTemplateFn;\n };\n /**\n * Get the names of the primary key columns of the Grid.\n * @return {string[]}\n */\n Grid.prototype.getPrimaryKeyFieldNames = function () {\n var keys = [];\n for (var k = 0; k < this.columnModel.length; k++) {\n if (this.columnModel[k].isPrimaryKey) {\n keys.push(this.columnModel[k].field);\n }\n }\n return keys;\n };\n /**\n * Refreshes the Grid header and content.\n */\n Grid.prototype.refresh = function () {\n this.headerModule.refreshUI();\n this.updateStackedFilter();\n this.renderModule.refresh();\n };\n /**\n * Refreshes the Grid header.\n */\n Grid.prototype.refreshHeader = function () {\n this.headerModule.refreshUI();\n };\n /**\n * Gets the collection of selected rows.\n * @return {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 * @return {number[]}\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 * @return {number[]}\n */\n Grid.prototype.getSelectedRowCellIndexes = function () {\n return this.selectionModule ? this.selectionModule.selectedRowCellIndexes : [];\n };\n /**\n * Gets the collection of selected records.\n * @return {Object[]}\n */\n Grid.prototype.getSelectedRecords = function () {\n return this.selectionModule ? this.selectionModule.getSelectedRecords() : [];\n };\n /**\n * Gets the data module.\n * @return {Data}\n */\n Grid.prototype.getDataModule = function () {\n return this.renderModule.data;\n };\n /**\n * Shows a column by its column name.\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 * @return {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 * @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 * @return {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 */\n Grid.prototype.getFrozenColumns = function () {\n return this.frozenColumns + this.getFrozenCount(this.columns, 0);\n };\n /**\n * @hidden\n */\n Grid.prototype.getVisibleFrozenColumns = function () {\n return this.getVisibleFrozenColumnsCount() + this.getVisibleFrozenCount(this.columns, 0);\n };\n Grid.prototype.getVisibleFrozenColumnsCount = function () {\n var visibleFrozenColumns = 0;\n var col = this.columns;\n for (var i = 0; i < this.frozenColumns; i++) {\n if (col[i].visible) {\n visibleFrozenColumns++;\n }\n }\n return visibleFrozenColumns;\n };\n Grid.prototype.getVisibleFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getVisibleFrozenCount(cols[i].columns, cnt);\n }\n else {\n if (cols[i].isFrozen && cols[i].visible) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n Grid.prototype.getFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getFrozenCount(cols[i].columns, cnt);\n }\n else {\n if (cols[i].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Navigates to the specified target page.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {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 * @param {string} message - Defines the message to update.\n * @return {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 * @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 * @return {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 * Clears all the sorted columns of the Grid.\n * @return {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 * @param {string} field - Defines the column field name to remove sort.\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Filters grid row by column name with the given options.\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 * @return {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 * @return {void}\n */\n Grid.prototype.clearFiltering = function () {\n if (this.filterModule) {\n this.filterModule.clearFiltering();\n }\n };\n /**\n * Removes filtered column by field name.\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 * @return {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 * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {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 * @param {number[]} rowIndexes - Specifies the row indexes.\n * @return {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 * @return {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 * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {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 * @param {IIndex} startIndex - Specifies the row and column's start index.\n * @param {IIndex} endIndex - Specifies the row and column's end index.\n * @return {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`](./api-searchSettings.html).\n * @param {string} searchString - Defines the key.\n * @return {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`](./api-grid.html#printmode-string).\n * @return {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 * @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 */\n Grid.prototype.deleteRecord = function (fieldname, data) {\n if (this.editModule) {\n this.editModule.deleteRecord(fieldname, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\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 Grid.prototype.endEdit = function () {\n if (this.editModule) {\n this.editModule.endEdit();\n }\n };\n /**\n * Cancels edited state.\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 * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\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 * @param {HTMLTableRowElement} tr - Defines the table row element.\n */\n Grid.prototype.deleteRow = function (tr) {\n if (this.editModule) {\n this.editModule.deleteRow(tr);\n }\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n */\n Grid.prototype.copy = function (withHeader) {\n if (this.clipboardModule) {\n this.clipboardModule.copy(withHeader);\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.recalcIndentWidth = function () {\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('colgroup').childNodes);\n var contentCol = [].slice.call(this.getContentTable().querySelector('colgroup').childNodes);\n var perPixel = indentWidth / 30;\n var i = 0;\n if (perPixel >= 1) {\n indentWidth = (30 / perPixel);\n }\n if (this.enableColumnVirtualization) {\n indentWidth = 30;\n }\n while (i < this.groupSettings.columns.length) {\n headerCol[i].style.width = indentWidth + 'px';\n contentCol[i].style.width = indentWidth + 'px';\n this.notify(events.columnWidthChanged, { index: i, width: indentWidth });\n i++;\n }\n if (this.isDetail()) {\n headerCol[i].style.width = indentWidth + 'px';\n contentCol[i].style.width = indentWidth + 'px';\n this.notify(events.columnWidthChanged, { index: i, width: indentWidth });\n i++;\n }\n if (this.isRowDragable()) {\n headerCol[i].style.width = indentWidth + 'px';\n contentCol[i].style.width = indentWidth + 'px';\n this.notify(events.columnWidthChanged, { index: i, width: indentWidth });\n }\n this.getHeaderTable().querySelector('.e-emptycell').setAttribute('indentRefreshed', 'true');\n };\n /**\n * @hidden\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 * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @return {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 Row position with given indexes.\n * @param {number} fromIndexes - Defines the origin Indexes.\n * @param {number} toIndex - Defines the destination Index.\n * @return {void}\n */\n Grid.prototype.reorderRows = function (fromIndexes, toIndex) {\n if (this.rowDragAndDropModule) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex);\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.refreshDataSource = function (e, args) {\n this.notify('refreshdataSource', e);\n };\n /**\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('colgroup').childNodes[0], { 'display': disValue });\n setStyleAttribute(contentTable.querySelector('colgroup').childNodes[0], { 'display': disValue });\n for (var i = 0; i < this.getRows().length; i++) {\n var ele = rows[i].firstElementChild;\n enable ? addClass([ele], 'e-hide') : removeClass([ele], ['e-hide']);\n }\n for (var j = 0; j < headerTable.querySelectorAll('th.e-rowdragheader, th.e-mastercell').length; j++) {\n var ele = headerRows[j];\n enable ? addClass([ele], 'e-hide') : removeClass([ele], ['e-hide']);\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 * @param {string |string[]} fieldNames - Defines the column names.\n * @return {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 * @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 _this = this;\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[j].field === gCols[i]) {\n flag = true;\n break;\n }\n }\n if (!flag) {\n sCols.push({ field: gCols[i], direction: 'Ascending' });\n }\n else {\n if (this_1.allowSorting) {\n this_1.sortedColumns.push(sCols[j].field);\n }\n else {\n sCols[j].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[i]; })[0] : this_1.getColumnByField(gCols[i]);\n column.visible = false;\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 sCols.forEach(function (col) {\n _this.sortedColumns.push(col.field);\n });\n }\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n this.editTemplateFn = templateCompiler(this.editSettings.template);\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.gridRender = function () {\n this.updateRTL();\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 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);\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: '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 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 * @return {void}\n * @hidden\n */\n Grid.prototype.applyTextWrap = function () {\n if (this.allowTextWrap) {\n var headerRows = [].slice.call(this.element.querySelectorAll('.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 }\n };\n /**\n * The function is used to remove text wrap\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeTextWrap = function () {\n wrap(this.element, false);\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n wrap(headerRows, false);\n wrap(this.getContent(), false);\n };\n /**\n * The function is used to add Tooltip to the grid cell that has ellipsiswithtooltip clip mode.\n * @return {void}\n * @hidden\n */\n Grid.prototype.createTooltip = function () {\n this.toolTipObj = new Tooltip({ opensOn: 'custom', content: '' }, this.element);\n };\n Grid.prototype.getTooltipStatus = function (element) {\n var width;\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var htable = this.createTable(headerTable, headerDivTag, 'header');\n var ctable = this.createTable(headerTable, headerDivTag, 'content');\n var td = element;\n var table = headerTable.contains(element) ? htable : ctable;\n var ele = headerTable.contains(element) ? 'th' : 'tr';\n table.querySelector(ele).className = element.className;\n table.querySelector(ele).innerHTML = element.innerHTML;\n 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 this.toolTipObj.close();\n if (element) {\n if (element.getAttribute('aria-describedby')) {\n return;\n }\n if (this.getTooltipStatus(element)) {\n if (element.getElementsByClassName('e-headertext').length) {\n this.toolTipObj.content = element.getElementsByClassName('e-headertext')[0].innerText;\n }\n else {\n this.toolTipObj.content = element.innerText;\n }\n this.toolTipObj.open(element);\n }\n }\n }\n };\n Grid.prototype.isEllipsisTooltip = function () {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].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 * @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');\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.keyPressed = 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 * @hidden\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.getContent(), 'dblclick', this.dblClickHandler, 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 };\n /**\n * Unbinding events from the element while component destroy.\n * @hidden\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.getContent().firstElementChild, 'scroll', this.scrollHandler);\n EventHandler.remove(this.element, 'mousemove', this.mouseMoveHandler);\n };\n /**\n * @hidden\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.keyPressed, this);\n };\n /**\n * @hidden\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.keyPressed);\n };\n /**\n * Get current visible data of grid.\n * @return {Object[]}\n * @hidden\n */\n Grid.prototype.getCurrentViewRecords = function () {\n return (this.allowGrouping && this.groupSettings.columns.length && this.currentViewData.length) ?\n this.currentViewData.records : this.currentViewData;\n };\n Grid.prototype.mouseClickHandler = function (e) {\n if (this.isChildGrid(e) || (parentsUntil(e.target, 'e-gridpopup') && e.touches) ||\n this.element.querySelectorAll('.e-cloneproperties').length || this.checkEdit(e)) {\n return;\n }\n if (((!this.allowRowDragAndDrop && (parentsUntil(e.target, 'e-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 e.preventDefault();\n }\n this.notify(events.click, e);\n };\n Grid.prototype.checkEdit = function (e) {\n var tr = parentsUntil(e.target, 'e-row');\n var isEdit = this.editSettings.mode !== 'Batch' &&\n this.isEdit && tr && (tr.classList.contains('e-editedrow') || tr.classList.contains('e-addedrow'));\n return !parentsUntil(e.target, 'e-unboundcelldiv') && (isEdit || (parentsUntil(e.target, 'e-rowcell') &&\n parentsUntil(e.target, 'e-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 args = this.getRowInfo(e.target);\n args.target = e.target;\n this.trigger(events.recordDoubleClick, args);\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) {\n filterClear.classList.add('e-hide');\n }\n if ((!e.relatedTarget || !parentsUntil(e.relatedTarget, 'e-grid'))\n && !this.keyPress && this.isEdit && !Browser.isDevice) {\n if (this.editSettings.mode === 'Batch') {\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) {\n return true;\n }\n return false;\n };\n Grid.prototype.mergePersistGridData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n var dataObj = JSON.parse(data);\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 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 _this = this;\n storedColumn.forEach(function (col, index, arr) {\n var ind;\n var localCol = _this.getColumnByField(col.field) ||\n columns.some(function (element, i) {\n ind = i;\n return element.headerText === col.headerText;\n }) && columns[ind];\n if (!isNullOrUndefined(localCol)) {\n if (localCol.columns && localCol.columns.length) {\n _this.mergeColumns(col.columns, localCol.columns);\n }\n else {\n arr[index] = extend({}, localCol, col, true);\n }\n }\n });\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.keyActionHandler = function (e) {\n this.keyPress = e.action !== 'space';\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 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 * @hidden\n */\n Grid.prototype.setInjectedModules = function (modules) {\n this.injectedModules = modules;\n };\n Grid.prototype.updateColumnObject = function () {\n prepareColumns(this.columns, this.enableColumnVirtualization);\n this.initForeignColumn();\n this.notify(events.autoCol, {});\n };\n /**\n * Gets the foreign columns from Grid.\n * @return {Column[]}\n */\n Grid.prototype.getForeignKeyColumns = function () {\n return this.getColumns().filter(function (col) {\n return col.isForeignColumn();\n });\n };\n /**\n * @hidden\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 Grid.prototype.refreshColumns = function () {\n this.isPreventScrollEvent = true;\n this.updateColumnObject();\n this.refresh();\n };\n /**\n * Export Grid data to Excel file(.xlsx).\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 * @return {Promise}\n */\n Grid.prototype.excelExport = function (excelExportProperties, isMultipleExport, \n /* tslint:disable-next-line:no-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 * @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 * @return {Promise}\n *\n */\n Grid.prototype.csvExport = function (excelExportProperties, \n /* tslint:disable-next-line:no-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 * @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 * @return {Promise}\n *\n */\n Grid.prototype.pdfExport = function (pdfExportProperties, \n /* tslint:disable-next-line:no-any */\n 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 * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n Grid.prototype.groupColumn = function (columnName) {\n if (this.groupModule) {\n this.groupModule.groupColumn(columnName);\n }\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n Grid.prototype.ungroupColumn = function (columnName) {\n if (this.groupModule) {\n this.groupModule.ungroupColumn(columnName);\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.isContextMenuOpen = function () {\n return this.contextMenuModule && this.contextMenuModule.isOpen;\n };\n /**\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 * @param {string[]} propertyNames - Defines the collection of template name.\n */\n //tslint:disable-next-line:no-any\n Grid.prototype.destroyTemplate = function (propertyNames, index) {\n this.clearTemplate(propertyNames, index);\n };\n var Grid_1;\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, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], Grid.prototype, \"textWrapSettings\", 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 Property(false)\n ], Grid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableColumnVirtualization\", 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(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 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(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, \"showColumnMenu\", 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 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('All')\n ], Grid.prototype, \"columnQueryMode\", 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, \"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, \"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, \"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, \"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, \"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, \"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, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataSourceChanged\", void 0);\n Grid = Grid_1 = __decorate([\n NotifyPropertyChanges\n ], Grid);\n return Grid;\n}(Component));\nexport { Grid };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, classList } from '@syncfusion/ej2-base';\nimport { setCssInGridPopUp, getActualPropFromColl, isActionPrevent, iterateExtend } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\n/**\n *\n * The `Sort` module is used to handle sorting action.\n */\nvar Sort = /** @class */ (function () {\n /**\n * Constructor for Grid sorting module\n * @hidden\n */\n function Sort(parent, sortSettings, sortedColumns, locator) {\n this.contentRefresh = true;\n this.isModelChanged = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.sortSettings = sortSettings;\n this.sortedColumns = sortedColumns;\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n /**\n * The function used to update sortSettings\n * @return {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n var sortedColumn = { field: this.columnName, direction: this.direction };\n var index;\n var gCols = this.parent.groupSettings.columns;\n var flag = false;\n if (!this.isMultiSort) {\n if (!gCols.length) {\n this.sortSettings.columns = [sortedColumn];\n }\n else {\n var sortedCols = [];\n for (var i = 0, len = gCols.length; i < len; i++) {\n index = this.getSortedColsIndexByField(gCols[i], sortedCols);\n if (this.columnName === gCols[i]) {\n flag = true;\n sortedCols.push(sortedColumn);\n }\n else {\n var sCol = this.getSortColumnFromField(gCols[i]);\n sortedCols.push({ field: sCol.field, direction: sCol.direction });\n }\n }\n if (!flag) {\n sortedCols.push(sortedColumn);\n }\n this.sortSettings.columns = sortedCols;\n }\n }\n else {\n index = this.getSortedColsIndexByField(this.columnName);\n if (index > -1) {\n this.sortSettings.columns.splice(index, 1);\n }\n this.sortSettings.columns.push(sortedColumn);\n this.sortSettings.columns = this.sortSettings.columns;\n }\n this.parent.dataBind();\n this.lastSortedCol = this.columnName;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Sort.prototype.onActionComplete = function (e) {\n var args = !this.isRemove ? {\n columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionComplete\n } : { requestType: 'sorting', type: events.actionComplete };\n this.isRemove = false;\n this.parent.trigger(events.actionComplete, extend(e, args));\n };\n /**\n * Sorts a column with the given options.\n * @param {string} columnName - Defines the column name to sort.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previously sorted columns are to be maintained.\n * @return {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n var gObj = this.parent;\n if (this.parent.getColumnByField(columnName).allowSorting === false || this.parent.isContextMenuOpen()) {\n return;\n }\n if (!gObj.allowMultiSorting) {\n isMultiSort = gObj.allowMultiSorting;\n }\n if (this.isActionPrevent()) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.sortColumn,\n arg1: columnName, arg2: direction, arg3: isMultiSort\n });\n return;\n }\n this.backupSettings();\n this.columnName = columnName;\n this.direction = direction;\n this.isMultiSort = isMultiSort;\n this.removeSortIcons();\n var column = gObj.getColumnHeaderByField(columnName);\n this.updateSortedCols(columnName, isMultiSort);\n this.updateModel();\n };\n Sort.prototype.backupSettings = function () {\n this.lastSortedCols = iterateExtend(this.sortSettings.columns);\n this.lastCols = this.sortedColumns;\n };\n Sort.prototype.restoreSettings = function () {\n this.isModelChanged = false;\n this.isMultiSort = true;\n this.parent.setProperties({ sortSettings: { columns: this.lastSortedCols } }, true);\n //this.parent.sortSettings.columns = this.lastSortedCols; \n this.sortedColumns = this.lastCols;\n this.isModelChanged = true;\n };\n Sort.prototype.updateSortedCols = function (columnName, isMultiSort) {\n if (!isMultiSort) {\n if (this.parent.allowGrouping) {\n for (var i = 0, len = this.sortedColumns.length; i < len; i++) {\n if (this.parent.groupSettings.columns.indexOf(this.sortedColumns[i]) < 0) {\n this.sortedColumns.splice(i, 1);\n len--;\n i--;\n }\n }\n }\n else {\n this.sortedColumns.splice(0, this.sortedColumns.length);\n }\n }\n if (this.sortedColumns.indexOf(columnName) < 0) {\n this.sortedColumns.push(columnName);\n }\n };\n /**\n * @hidden\n */\n Sort.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.contentRefresh) {\n var args = this.sortSettings.columns.length ? {\n columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionBegin\n } : { requestType: 'sorting', type: events.actionBegin, cancel: false };\n this.parent.notify(events.modelChanged, args);\n }\n this.refreshSortSettings();\n this.removeSortIcons();\n this.addSortIcons();\n };\n Sort.prototype.refreshSortSettings = function () {\n var _this = this;\n this.sortedColumns = [];\n this.sortSettings.columns.forEach(function (e) {\n _this.sortedColumns.push(e.field);\n });\n };\n /**\n * Clears all the sorted columns of the Grid.\n * @return {void}\n */\n Sort.prototype.clearSorting = function () {\n var cols = getActualPropFromColl(this.sortSettings.columns);\n if (this.isActionPrevent()) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearSorting });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeSortColumn(cols[i].field);\n }\n };\n Sort.prototype.isActionPrevent = function () {\n return isActionPrevent(this.parent);\n };\n /**\n * Remove sorted column by field name.\n * @param {string} field - Defines the column field name to remove sort.\n * @return {void}\n * @hidden\n */\n Sort.prototype.removeSortColumn = function (field) {\n var gObj = this.parent;\n var cols = this.sortSettings.columns;\n if (this.sortedColumns.indexOf(field) < 0) {\n return;\n }\n if (this.isActionPrevent()) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.removeSortColumn, arg1: field });\n return;\n }\n this.backupSettings();\n this.removeSortIcons();\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === field) {\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1) {\n continue;\n }\n this.sortedColumns.splice(this.sortedColumns.indexOf(cols[i].field), 1);\n cols.splice(i, 1);\n this.isRemove = true;\n if (this.isModelChanged) {\n this.parent.notify(events.modelChanged, {\n requestType: 'sorting', type: events.actionBegin\n });\n }\n break;\n }\n }\n this.addSortIcons();\n };\n Sort.prototype.getSortedColsIndexByField = function (field, sortedColumns) {\n var cols = sortedColumns ? sortedColumns : this.sortSettings.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n Sort.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.sortSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n this.isMultiSort = this.sortSettings.columns.length > 1;\n for (var _i = 0, _a = gObj.sortSettings.columns.slice(); _i < _a.length; _i++) {\n var col = _a[_i];\n if (this.sortedColumns.indexOf(col.field) > -1) {\n this.sortColumn(col.field, col.direction, true);\n }\n }\n this.isMultiSort = false;\n this.contentRefresh = true;\n }\n };\n /**\n * @hidden\n */\n Sort.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.sortComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressed, this);\n this.parent.on(events.cancelBegin, this.cancelBeginEvent, this);\n };\n /**\n * @hidden\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.sortComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressed);\n this.parent.off(events.cancelBegin, this.cancelBeginEvent);\n };\n /**\n * To destroy the sorting\n * @return {void}\n * @hidden\n */\n Sort.prototype.destroy = function () {\n this.isModelChanged = false;\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n if (this.parent.element.querySelector('.e-gridpopup').querySelectorAll('.e-sortdirect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n // tslint:disable-next-line:no-any\n if (!this.parent.refreshing) {\n this.clearSorting();\n }\n this.isModelChanged = true;\n this.removeEventListener();\n };\n Sort.prototype.cancelBeginEvent = function (e) {\n if (e.requestType === 'sorting') {\n this.restoreSettings();\n this.refreshSortIcons();\n this.isMultiSort = true;\n }\n };\n Sort.prototype.clickHandler = function (e) {\n this.popUpClickHandler(e);\n var target = closest(e.target, '.e-headercell');\n if (target && !e.target.classList.contains('e-grptogglebtn') &&\n !e.target.classList.contains('e-stackedheadercell') &&\n !e.target.classList.contains('e-stackedheadercelldiv') &&\n !(target.classList.contains('e-resized')) &&\n !e.target.classList.contains('e-rhandler') &&\n !e.target.classList.contains('e-columnmenu') &&\n !e.target.classList.contains('e-filtermenudiv')) {\n var gObj = this.parent;\n var colObj = gObj.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n var direction = !target.querySelectorAll('.e-ascending').length ? 'Ascending' :\n 'Descending';\n if (colObj.type !== 'checkbox') {\n this.initiateSort(target, e, colObj);\n if (Browser.isDevice) {\n this.showPopUp(e);\n }\n }\n }\n if (target) {\n target.classList.remove('e-resized');\n }\n };\n Sort.prototype.keyPressed = function (e) {\n var ele = e.target;\n if (!this.parent.isEdit && (e.action === 'enter' || e.action === 'ctrlEnter' || e.action === 'shiftEnter')\n && closest(ele, '.e-headercell')) {\n var target = this.focus.getFocusedElement();\n if (isNullOrUndefined(target) || !target.classList.contains('e-headercell')\n || !target.querySelector('.e-headercelldiv')) {\n return;\n }\n var col = this.parent.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n this.initiateSort(target, e, col);\n }\n };\n Sort.prototype.initiateSort = function (target, e, column) {\n var gObj = this.parent;\n var field = column.field;\n var direction = !target.querySelectorAll('.e-ascending').length ? 'Ascending' :\n 'Descending';\n if (e.shiftKey || (this.sortSettings.allowUnsort && target.querySelectorAll('.e-descending').length)\n && !(gObj.groupSettings.columns.indexOf(field) > -1)) {\n this.removeSortColumn(field);\n }\n else {\n this.sortColumn(field, direction, e.ctrlKey || this.enableSortMultiTouch);\n }\n };\n Sort.prototype.showPopUp = function (e) {\n var target = closest(e.target, '.e-headercell');\n if (!isNullOrUndefined(target) || this.parent.isContextMenuOpen()) {\n setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-sortdirect e-icons e-icon-sortdirect' + (this.sortedColumns.length > 1 ? ' e-spanclicked' : ''));\n }\n };\n Sort.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains('e-rowcell') ||\n closest(target, '.e-gridpopup')) {\n if (target.classList.contains('e-sortdirect')) {\n if (!target.classList.contains('e-spanclicked')) {\n target.classList.add('e-spanclicked');\n this.enableSortMultiTouch = true;\n }\n else {\n target.classList.remove('e-spanclicked');\n this.enableSortMultiTouch = 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 Sort.prototype.addSortIcons = function () {\n var gObj = this.parent;\n var header;\n var filterElement;\n var cols = this.sortSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\n this.aria.setSort(header, cols[i].direction);\n if (this.isMultiSort && cols.length > 1) {\n header.querySelector('.e-headercelldiv').insertBefore(this.parent.createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }), header.querySelector('.e-headertext'));\n }\n filterElement = header.querySelector('.e-sortfilterdiv');\n if (cols[i].direction === 'Ascending') {\n classList(filterElement, ['e-ascending', 'e-icon-ascending'], []);\n }\n else {\n classList(filterElement, ['e-descending', 'e-icon-descending'], []);\n }\n }\n };\n Sort.prototype.removeSortIcons = function (position) {\n var gObj = this.parent;\n var header;\n var cols = this.sortSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = position ? position : 0, len = !isNullOrUndefined(position) ? position + 1 : cols.length; i < len; i++) {\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1 &&\n (isNullOrUndefined(header) || !header.querySelector('.e-sortfilterdiv'))) {\n continue;\n }\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n this.aria.setSort(header, 'none');\n classList(header.querySelector('.e-sortfilterdiv'), [], ['e-descending', 'e-icon-descending', 'e-ascending', 'e-icon-ascending']);\n if (header.querySelector('.e-sortnumber')) {\n header.querySelector('.e-headercelldiv').removeChild(header.querySelector('.e-sortnumber'));\n }\n }\n };\n Sort.prototype.getSortColumnFromField = function (field) {\n for (var i = 0, len = this.sortSettings.columns.length; i < len; i++) {\n if (this.sortSettings.columns[i].field === field) {\n return this.sortSettings.columns[i];\n }\n }\n return false;\n };\n Sort.prototype.updateAriaAttr = function () {\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var _i = 0, _a = this.sortedColumns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (fieldNames.indexOf(col) === -1) {\n continue;\n }\n var header = this.parent.getColumnHeaderByField(col);\n this.aria.setSort(header, this.getSortColumnFromField(col).direction);\n }\n };\n Sort.prototype.refreshSortIcons = function (params) {\n if (params === void 0) { params = { args: { isFrozen: false } }; }\n if (!params.args.isFrozen) {\n this.removeSortIcons();\n this.isMultiSort = true;\n this.removeSortIcons();\n this.addSortIcons();\n this.isMultiSort = false;\n this.updateAriaAttr();\n }\n };\n return Sort;\n}());\nexport { Sort };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { 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 * @hidden\n */\n function NumericContainer(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render numericContainer\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 NumericContainer.prototype.refresh = function () {\n this.pagerModule.updateTotalPages();\n if (this.links.length) {\n this.updateLinksHtml();\n }\n this.updateStyles();\n };\n /**\n * The function is used to refresh refreshNumericLinks\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: { role: 'link', tabindex: '-1', 'aria-label': 'Goto Page ' + i,\n href: 'javascript:void(0);', name: 'Goto page' + i }\n });\n if (pagerObj.currentPage === i) {\n classList(link, ['e-currentitem', 'e-active'], ['e-pager-default']);\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 * @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 * @hidden\n */\n NumericContainer.prototype.unwireEvents = function () {\n EventHandler.remove(this.pagerElement, 'click', this.clickHandler);\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n NumericContainer.prototype.destroy = function () {\n this.unwireEvents();\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'\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'\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'), role: 'link',\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n href: 'javascript:void(0);'\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'), role: 'link',\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n href: 'javascript:void(0);'\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'\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'\n }\n });\n append([this.next, this.last], pagerContainer);\n };\n NumericContainer.prototype.clickHandler = function (e) {\n var pagerObj = this.pagerModule;\n var target = e.target;\n pagerObj.previousPageNo = pagerObj.currentPage;\n if (!target.classList.contains('e-disable') && !isNullOrUndefined(target.getAttribute('index'))) {\n pagerObj.currentPage = parseInt(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 pageNo;\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 pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n if (pageNo <= pagerObj.totalPages) {\n this.links[i].style.display = '';\n this.links[i].setAttribute('index', pageNo.toString());\n this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n if (pagerObj.currentPage !== pageNo) {\n this.links[i].classList.add('e-pager-default');\n }\n else {\n this.links[i].classList.remove('e-pager-default');\n }\n }\n else {\n this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n this.links[i].style.display = 'none';\n }\n classList(this.links[i], [], ['e-currentitem', 'e-active']);\n }\n this.first.setAttribute('index', '1');\n this.last.setAttribute('index', pagerObj.totalPages.toString());\n this.prev.setAttribute('index', (pagerObj.currentPage - 1).toString());\n this.next.setAttribute('index', (pagerObj.currentPage + 1).toString());\n this.pagerElement.querySelector('.e-mfirst').setAttribute('index', '1');\n this.pagerElement.querySelector('.e-mlast').setAttribute('index', pagerObj.totalPages.toString());\n this.pagerElement.querySelector('.e-mprev').setAttribute('index', (pagerObj.currentPage - 1).toString());\n this.pagerElement.querySelector('.e-mnext').setAttribute('index', (pagerObj.currentPage + 1).toString());\n this.PP.setAttribute('index', (parseInt(this.links[0].getAttribute('index'), 10) - pagerObj.pageCount).toString());\n this.NP.setAttribute('index', (parseInt(this.links[this.links.length - 1].getAttribute('index'), 10) + 1).toString());\n };\n NumericContainer.prototype.updateStyles = function () {\n this.updateFirstNPrevStyles();\n this.updatePrevPagerSetStyles();\n this.updateNextPagerSetStyles();\n this.updateNextNLastStyles();\n if (this.links.length) {\n classList(this.links[(this.pagerModule.currentPage - 1) % this.pagerModule.pageCount], ['e-currentitem', 'e-active'], []);\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) {\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 if (!firstPage.length || !this.links.length || (parseInt(firstPage, 10) + pagerObj.pageCount > 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 * @hidden\n */\n function PagerMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render pager message\n * @hidden\n */\n PagerMessage.prototype.render = function () {\n var div = createElement('div', { className: 'e-parentmsgbar', attrs: { 'aria-label': 'Pager 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 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]) + ' ';\n this.pageCountMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('totalItemsInfo'), [pagerObj.totalRecordsCount || 0]);\n this.pageNoMsgElem.parentElement.setAttribute('aria-label', this.pageNoMsgElem.textContent + this.pageCountMsgElem.textContent);\n };\n /**\n * Hides the Pager information.\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 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 * @method destroy\n * @return {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 regx = new RegExp('\\\\{' + (i) + '\\\\}', 'gm');\n str = str.replace(regx, args[i].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 } from '@syncfusion/ej2-base';\nimport { createElement, compile as templateCompiler } 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 } from '../grid/base/util';\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 * @hidden\n */\n function Pager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultConstants = {\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',\n previousPagerTooltip: 'Go to previous pager',\n pagerDropDown: 'Items per page',\n pagerAllDropDown: 'Items',\n All: 'All'\n };\n /**\n * `containerModule` is used to manipulate numeric container behavior of Pager.\n */\n _this.containerModule = new NumericContainer(_this);\n /**\n * `pagerMessageModule` is used to manipulate pager message of Pager.\n */\n _this.pagerMessageModule = new PagerMessage(_this);\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\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 * @hidden\n */\n Pager.prototype.preRender = function () {\n //preRender\n };\n /**\n * To Initialize the component rendering\n */\n Pager.prototype.render = function () {\n if (this.template) {\n this.pagerTemplate();\n }\n else {\n this.initLocalization();\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 };\n /**\n * Get the properties to be maintained in the persisted state.\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 * @method destroy\n * @return {void}\n */\n Pager.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.containerModule.destroy();\n this.pagerMessageModule.destroy();\n this.element.innerHTML = '';\n };\n /**\n * For internal use only - Get 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 * @hidden\n */\n Pager.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.isDestroyed) {\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();\n }\n break;\n case 'pageSize':\n case 'totalRecordsCount':\n case 'customText':\n if (this.checkpagesizes() && this.pagerdropdownModule) {\n this.pagerdropdownModule.setDropDownValue('value', this.pageSize);\n }\n this.refresh();\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 };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Pager.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n /**\n * Navigate to target page by given number.\n * @param {number} pageNo - Defines page number.\n * @return {void}\n */\n Pager.prototype.goToPage = function (pageNo) {\n if (this.checkGoToPage(pageNo)) {\n this.currentPage = pageNo;\n this.dataBind();\n }\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 () {\n if (this.enableQueryString) {\n this.updateQueryString(this.currentPage);\n }\n var args = { currentPage: this.currentPage, cancel: false };\n this.trigger('click', args);\n if (!args.cancel) {\n this.refresh();\n }\n };\n Pager.prototype.pagerTemplate = function () {\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 result = this.getPagerTemplate()(data);\n appendChildren(this.element, result);\n };\n /** @hidden */\n Pager.prototype.updateTotalPages = function () {\n this.totalPages = (this.totalRecordsCount % this.pageSize === 0) ? (this.totalRecordsCount / this.pageSize) :\n (parseInt((this.totalRecordsCount / this.pageSize).toString(), 10) + 1);\n };\n /** @hidden */\n Pager.prototype.getPagerTemplate = function () {\n return this.templateFn;\n };\n Pager.prototype.compile = function (template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n this.templateFn = templateCompiler(document.querySelector(template).innerHTML.trim());\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 * @return {void}\n */\n Pager.prototype.refresh = function () {\n if (this.template) {\n this.element.innerHTML = '';\n this.updateTotalPages();\n this.pagerTemplate();\n }\n else {\n this.updateRTL();\n this.containerModule.refresh();\n if (this.enablePagerMessage) {\n this.pagerMessageModule.refresh();\n }\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\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 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 _this = this;\n var classList = ['.e-mfirst', '.e-mprev', '.e-mnext', '.e-mlast'];\n if (!Browser.isDevice) {\n classList.forEach(function (value) {\n var element = _this.element.querySelector(value);\n element.setAttribute('aria-label', element.getAttribute('title'));\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 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","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/// \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';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\n/* tslint:enable */\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 function ComboBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n /**\n * Initialize the event handler\n * @private\n */\n ComboBox.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\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.onBlur, 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 }\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.targetElement = function () {\n return this.inputElement;\n };\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 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.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 'aria-owns': this.element.id + '_options',\n 'role': 'combobox',\n 'aria-autocomplete': 'both',\n 'aria-labelledby': this.hiddenElement.id,\n 'aria-hasPopup': 'true',\n 'aria-expanded': 'false',\n 'aria-readonly': this.readonly.toString(),\n 'autocomplete': 'off',\n 'autocorrect': '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.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 return (this.isFiltering() ? this.inputWrapper : inputObject);\n };\n ComboBox.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\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 this.inlineSearch();\n }\n };\n ComboBox.prototype.getFocusElement = function () {\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = this.list.querySelector('.' + dropDownListClasses.selected);\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 activeItem = Search(inputValue, this.liCollections, 'StartsWith', true);\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 /**\n * Shows the spinner loader.\n * @returns void.\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 * @returns void.\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);\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.clear = function (e, property) {\n if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n _super.prototype.clear.call(this, 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 this.list.scrollTop = 0;\n var focusItem = this.list.querySelector('.' + dropDownListClasses.li);\n this.setHoverList(focusItem);\n }\n else {\n this.activeIndex = null;\n this.removeSelection();\n this.removeFocus();\n }\n };\n ComboBox.prototype.incrementalSearch = function (e) {\n this.showPopup();\n if (!isNullOrUndefined(this.listData)) {\n this.inlineSearch(e);\n e.preventDefault();\n }\n };\n ;\n ComboBox.prototype.setAutoFillSelection = function (currentValue) {\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 {\n Input.setValue(currentValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(0, this.inputElement.value.length);\n }\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.onBlur);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick);\n }\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 }\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 li = this.list.querySelector('.' + dropDownListClasses.focus);\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.clear(e);\n }\n else if (this.isTyped && !this.isSelected && isNullOrUndefined(li)) {\n this.customValue();\n }\n this.hidePopup();\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 ;\n ComboBox.prototype.targetFocus = function (e) {\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = false;\n }\n this.onFocus();\n };\n ComboBox.prototype.dropDownClick = function (e) {\n e.preventDefault();\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.dropDownClick.call(this, e);\n };\n ComboBox.prototype.customValue = function () {\n var value = this.getValueByText(this.inputElement.value);\n if (!this.allowCustom && this.inputElement.value !== '') {\n this.setProperties({ value: value });\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n else if (this.inputElement.value.trim() !== '') {\n var previousValue = this.value;\n if (isNullOrUndefined(value)) {\n var value_1 = this.inputElement.value === '' ? null : this.inputElement.value;\n var fields = this.fields;\n var eventArgs = void 0;\n eventArgs = { text: value_1, item: {} };\n if (!this.initial) {\n this.trigger('customValueSpecifier', eventArgs);\n }\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_1, dataItem);\n setValue(fields.value, value_1, 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 }\n else {\n this.isSelectCustom = false;\n this.setProperties({ value: value });\n }\n if (previousValue !== this.value) {\n this.onChangeEvent(null);\n }\n }\n else if (this.allowCustom) {\n this.isSelectCustom = true;\n }\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n ComboBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'combobox') {\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, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n else {\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\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 var comboProps = void 0;\n comboProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, comboProps.newProperty, comboProps.oldProperty);\n break;\n }\n }\n };\n /**\n * To initialize the control rendering.\n * @private\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 };\n ;\n /**\n * Return the module name of this component.\n * @private\n */\n ComboBox.prototype.getModuleName = function () {\n return 'combobox';\n };\n /**\n * Hides the popup if it is in open state.\n * @returns void.\n */\n ComboBox.prototype.hidePopup = function () {\n var inputValue = this.inputElement.value === '' ? null : 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 = this.list.querySelector('.' + dropDownListClasses.selected);\n if (dataItem.text === this.inputElement.value && !isNullOrUndefined(selected)) {\n if (this.isSelected) {\n this.onChangeEvent(null);\n this.isSelectCustom = false;\n }\n _super.prototype.hidePopup.call(this);\n return;\n }\n if (this.getModuleName() === 'combobox' && this.inputElement.value.trim() !== '') {\n var searchItem = Search(this.inputElement.value, this.liCollections, 'Equal', true);\n this.selectedLI = searchItem.item;\n if (isNullOrUndefined(searchItem.index)) {\n searchItem.index = Search(this.inputElement.value, this.liCollections, 'StartsWith', true).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();\n }\n }\n if (isNullOrUndefined(this.listData) && this.allowCustom && !isNullOrUndefined(inputValue) && inputValue !== this.value) {\n this.customValue();\n }\n _super.prototype.hidePopup.call(this);\n };\n /**\n * Sets the focus to the component for interaction.\n * @returns void.\n */\n ComboBox.prototype.focusIn = function () {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.focusIn.call(this);\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 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 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})();\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/// \nimport { Property, EventHandler, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { Event, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, attributes, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { ComboBox } from '../combo-box/combo-box';\nimport { highlightSearch } from '../common/highlight-search';\nimport { Search } from '../common/incremental-search';\nimport { FieldSettings } from '../drop-down-base/drop-down-base';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n/* tslint:enable */\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 function AutoComplete(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFiltered = false;\n return _this;\n }\n ;\n /**\n * Initialize the event handler\n * @private\n */\n AutoComplete.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\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) {\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 filterQuery.take(this.suggestionCount);\n }\n return filterQuery;\n };\n AutoComplete.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.isDataFetched = this.isSelectCustom = false;\n if (isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this, true);\n }\n this.queryString = this.filterInput.value;\n if (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);\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.isFiltered = true;\n _this.filterAction(dataSource, query, fields);\n },\n cancel: false\n };\n this.trigger('filtering', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (!this.isFiltered && !eventArgs.preventDefaultAction) {\n this.filterAction(this.dataSource, null, this.fields);\n }\n };\n AutoComplete.prototype.filterAction = function (dataSource, query, fields) {\n this.beforePopupOpen = true;\n if (this.queryString !== '' && (this.queryString.length >= this.minLength)) {\n this.resetList(dataSource, fields, query);\n }\n else {\n this.hidePopup();\n }\n };\n AutoComplete.prototype.clear = function (e, property) {\n if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n _super.prototype.clear.call(this, e);\n }\n if (this.beforePopupOpen) {\n this.hidePopup();\n }\n };\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])) {\n var items = [this.liCollections[0]];\n var searchItem = Search(this.inputElement.value, items, 'StartsWith', this.ignoreCase);\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 return;\n }\n if (!isNullOrUndefined(e) && e.type === 'keydown' && e.action !== 'enter' && 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) {\n this.preventAutoFill = false;\n _super.prototype.setAutoFill.call(this, li);\n }\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n }\n else {\n _super.prototype.setSelection.call(this, li, e);\n }\n };\n AutoComplete.prototype.listOption = function (dataSource, fieldsSettings) {\n var _this = this;\n var fields = _super.prototype.listOption.call(this, dataSource, fieldsSettings);\n if (isNullOrUndefined(fields.itemCreated)) {\n fields.itemCreated = function (e) {\n if (_this.highlight) {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }\n };\n }\n else {\n var itemCreated_1 = fields.itemCreated;\n fields.itemCreated = function (e) {\n if (_this.highlight) {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }\n itemCreated_1.apply(_this, [e]);\n };\n }\n return fields;\n };\n ;\n AutoComplete.prototype.isFiltering = function () {\n return true;\n };\n AutoComplete.prototype.renderPopup = function () {\n this.list.scrollTop = 0;\n _super.prototype.renderPopup.call(this);\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 AutoComplete.prototype.isSelectFocusItem = function (element) {\n return false;\n };\n /**\n * Search the entered text and show it in the suggestion list if available.\n * @returns void.\n */\n AutoComplete.prototype.showPopup = function () {\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();\n }\n else {\n this.resetList(this.dataSource, this.fields);\n }\n };\n /**\n * Hides the popup if it is in open state.\n * @returns void.\n */\n AutoComplete.prototype.hidePopup = function () {\n _super.prototype.hidePopup.call(this);\n this.activeIndex = -1;\n };\n /**\n * Dynamically change the value of properties.\n * @private\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 EventHandler.add(this.inputWrapper.buttons[0], 'click', this.dropDownClick, this);\n }\n else {\n detach(this.inputWrapper.buttons[0]);\n this.inputWrapper.buttons[0] = null;\n }\n break;\n default:\n var atcProps = void 0;\n atcProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, atcProps.newProperty, atcProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Return the module name of this component.\n * @private\n */\n AutoComplete.prototype.getModuleName = function () {\n return 'autocomplete';\n };\n /**\n * To initialize the control rendering\n * @private\n */\n AutoComplete.prototype.render = function () {\n _super.prototype.render.call(this);\n };\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 { EventHandler, closest } 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, setComplexFieldID } 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';\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 * @hidden\n */\n function Edit(parent, serviceLocator) {\n this.editCellType = {\n 'dropdownedit': DropDownEditCell, 'numericedit': NumericEditCell,\n 'datepickeredit': DatePickerEditCell, 'datetimepickeredit': DatePickerEditCell,\n 'booleanedit': BooleanEditCell, 'defaultedit': DefaultEditCell,\n 'templateedit': TemplateEditCell\n };\n this.editType = { 'Inline': InlineEdit, 'Normal': InlineEdit, 'Batch': BatchEdit, 'Dialog': DialogEdit };\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 _this = this;\n this.parent.columnModel.forEach(function (col) {\n if (_this.parent.editSettings.template || col.editTemplate) {\n var templteCell = 'templateedit';\n col.edit = extend(new _this.editCellType[templteCell](_this.parent), col.edit || {});\n }\n else {\n col.edit = extend(new _this.editCellType[col.editType && _this.editCellType[col.editType] ?\n col.editType : 'defaultedit'](_this.parent, _this.serviceLocator), col.edit || {});\n }\n });\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n */\n Edit.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n var newProp = e.properties;\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 Edit.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getContent(), 'touchstart', this.tapEvent, this);\n };\n Edit.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getContent(), 'touchstart', this.tapEvent);\n };\n Edit.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.parent.notify(events.doubleTap, e);\n }\n }\n };\n Edit.prototype.getUserAgent = function () {\n var userAgent = window.navigator.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n /**\n * Edits any bound record in the Grid by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\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 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 (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 * Cancels edited state.\n */\n Edit.prototype.closeEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog\n && this.parent.element.querySelectorAll('.e-updatedtd').length) {\n this.showDialog('CancelEdit', this.dialogObj);\n return;\n }\n this.editModule.closeEdit();\n this.refreshToolbar();\n this.parent.notify('close-edit', {});\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 * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n */\n Edit.prototype.addRecord = function (data, index) {\n if (!this.parent.editSettings.allowAdding) {\n return;\n }\n this.editModule.addRecord(data, index);\n this.refreshToolbar();\n this.parent.notify('start-add', {});\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 * @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 */\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) {\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 * @param {HTMLTableRowElement} tr - Defines the table row element.\n */\n Edit.prototype.deleteRow = function (tr) {\n this.deleteRecord(null, this.parent.getCurrentViewRecords()[parseInt(tr.getAttribute('aria-rowindex'), 10)]);\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\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 * @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 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 * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\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 Edit.prototype.batchCancel = function () {\n this.closeEdit();\n };\n /**\n * Bulk saves added, edited, and deleted records in the batch mode.\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 * @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 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 * @return {boolean}\n */\n Edit.prototype.editFormValidate = function () {\n if (this.formObj) {\n return this.formObj.validate();\n }\n return false;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n * @return {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 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 Edit.prototype.saveCell = function () {\n this.editModule.saveCell();\n };\n Edit.prototype.endEditing = function () {\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' && value && value.length) {\n val = new Date(value);\n }\n else if (value === '') {\n val = null;\n }\n break;\n }\n return val;\n };\n Edit.prototype.destroyToolTip = function () {\n var elements = [].slice.call(this.parent.element.querySelectorAll('.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'), cssClass: 'e-primary', isPrimary: true }\n },\n {\n click: this.dlgCancel.bind(this),\n buttonModel: { cssClass: 'e-flat', 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), buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-flat', 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 };\n options.buttons = btnOptions;\n var obj = new Dialog(options);\n obj.appendTo(div);\n return obj;\n };\n Edit.prototype.dlgCancel = function () {\n this.dialogObj.hide();\n };\n Edit.prototype.dlgOk = function (e) {\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 /**\n * @hidden\n */\n Edit.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.initialEnd, this.initialEnd, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.autoCol, this.updateColTypeObj, this);\n this.parent.on(events.tooltipDestroy, this.destroyToolTip, this);\n this.parent.on(events.preventBatch, this.preventBatch, this);\n this.parent.on(events.destroyForm, this.destroyForm, this);\n this.actionBeginFunction = this.onActionBegin.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.parent.on(events.initialEnd, this.wireEvents, this);\n };\n /**\n * @hidden\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.initialEnd, this.initialEnd);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.autoCol, this.updateColTypeObj);\n this.parent.off(events.tooltipDestroy, this.destroyToolTip);\n this.parent.off(events.preventBatch, this.preventBatch);\n this.parent.off(events.destroyForm, this.destroyForm);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.off(events.initialEnd, this.unwireEvents);\n };\n Edit.prototype.actionComplete = function (e) {\n var actions = ['add', 'beginEdit', 'save', 'delete', 'cancel'];\n if (actions.indexOf(e.requestType) < 0) {\n this.parent.isEdit = false;\n }\n this.refreshToolbar();\n };\n /**\n * @hidden\n */\n Edit.prototype.getCurrentEditedData = function (form, editedData) {\n var _this = this;\n var gObj = this.parent;\n if (gObj.editSettings.template) {\n [].slice.call(form.elements).forEach(function (element) {\n if (element.hasAttribute('name')) {\n var field = setComplexFieldID(element.getAttribute('name'));\n var column = gObj.getColumnByField(field) || { field: field, type: element.getAttribute('type') };\n var value = void 0;\n if (column.type === 'checkbox' || column.type === 'boolean') {\n value = element.checked;\n }\n else if (element.value) {\n value = element.value;\n if (element.ej2_instances &&\n element.ej2_instances.length &&\n !isNullOrUndefined(element.ej2_instances[0].value)) {\n element.blur();\n value = element.ej2_instances[0].value;\n }\n }\n if (column.edit && typeof column.edit.read === 'string') {\n value = getValue(column.edit.read, window)(element, value);\n }\n else if (column.edit && column.edit.read) {\n value = column.edit.read(element, value);\n }\n value = gObj.editModule.getValueFromType(column, value);\n DataUtil.setValue(column.field, value, editedData);\n }\n });\n return editedData;\n }\n gObj.columnModel.filter(function (col) { return col.editTemplate; }).forEach(function (col) {\n if (form[getComplexFieldID(col.field)]) {\n var inputElements = [].slice.call(form[getComplexFieldID(col.field)]);\n inputElements = inputElements.length ? inputElements : [form[getComplexFieldID(col.field)]];\n inputElements.forEach(function (input) {\n var value = _this.getValue(col, input);\n DataUtil.setValue(col.field, value, editedData);\n });\n }\n });\n var inputs = [].slice.call(form.querySelectorAll('.e-field'));\n for (var i = 0, len = inputs.length; i < len; i++) {\n var col = gObj.getColumnByUid(inputs[i].getAttribute('e-mappinguid'));\n if (col && col.field) {\n var value = this.getValue(col, inputs[i]);\n DataUtil.setValue(col.field, value, editedData);\n }\n }\n return editedData;\n };\n Edit.prototype.getValue = function (col, input) {\n var 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 return value;\n };\n /**\n * @hidden\n */\n Edit.prototype.onActionBegin = function (e) {\n var restrictedRequestTypes = ['filterafteropen', 'filterbeforeopen', 'filterchoicerequest', 'save'];\n if (this.parent.editSettings.mode !== 'Batch' && this.formObj && !this.formObj.isDestroyed\n && restrictedRequestTypes.indexOf(e.requestType) === -1) {\n this.destroyWidgets();\n this.destroyForm();\n }\n };\n /**\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 }\n cols = cols ? cols : this.parent.getColumns();\n if (cols.some(function (column) { return !isNullOrUndefined(column.editTemplate); })) {\n this.parent.destroyTemplate(['editTemplate']);\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 [].slice.call(this.formObj.element.elements).forEach(function (element) {\n if (element.hasAttribute('name')) {\n if (element.ej2_instances &&\n element.ej2_instances.length &&\n !element.ej2_instances[0].isDestroyed) {\n element.ej2_instances[0].destroy();\n }\n }\n });\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyForm = function () {\n this.destroyToolTip();\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n this.destroyToolTip();\n };\n /**\n * To destroy the editing.\n * @return {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('.e-gridheader') &&\n gridElement.querySelector('.e-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 this.unwireEvents();\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')) {\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, 'e-gridcontent') || (this.parent.frozenRows\n && parentsUntil(e.target, 'e-headercontent')))\n && !document.querySelectorAll('.e-popup-open').length) {\n e.preventDefault();\n this.endEdit();\n }\n break;\n case 'escape':\n this.closeEdit();\n break;\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 * @hidden\n */\n Edit.prototype.applyFormValidation = function (cols) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var form = this.parent.editSettings.mode !== 'Dialog' ?\n gObj.element.querySelector('.e-gridform') :\n document.querySelector('#' + gObj.element.id + '_dialogEdit_wrapper').querySelector('.e-gridform');\n var mForm = gObj.element.querySelectorAll('.e-gridform')[1];\n var rules = {};\n var mRules = {};\n cols = cols ? cols : gObj.getColumns();\n cols.forEach(function (col, index) {\n if (!col.visible) {\n return;\n }\n if (index < frzCols && col.validationRules) {\n rules[getComplexFieldID(col.field)] = col.validationRules;\n }\n else if (index >= frzCols && col.validationRules) {\n mRules[getComplexFieldID(col.field)] = col.validationRules;\n }\n });\n if (frzCols && this.parent.editSettings.mode !== 'Dialog') {\n this.parent.editModule.mFormObj = this.createFormObj(mForm, mRules);\n }\n else {\n rules = extend(rules, mRules);\n }\n this.parent.editModule.formObj = this.createFormObj(form, rules);\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 _this.valErrorPlacement(inputElement, error);\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('#' + 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 if (this.parent.editSettings.mode !== 'Dialog') {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(inputElement, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n return this.parent.editSettings.mode !== 'Dialog' ? isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable() :\n document.querySelector('#' + this.parent.element.id + '_dialogEdit_wrapper');\n };\n Edit.prototype.validationComplete = function (args) {\n if (this.parent.isEdit) {\n var elem = this.getElemTable(args.element).querySelector('#' + args.inputName + '_Error');\n if (elem) {\n if (args.status === 'failure') {\n elem.style.display = '';\n }\n else {\n elem.style.display = 'none';\n }\n }\n }\n };\n Edit.prototype.createTooltip = function (element, error, name, display) {\n var gcontent = this.parent.getContent().firstElementChild;\n var isScroll = gcontent.scrollHeight > gcontent.clientHeight || gcontent.scrollWidth > gcontent.clientWidth;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isFHdr;\n if (isInline) {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(element, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n var fCont = this.parent.getContent().querySelector('.e-frozencontent');\n var table = isInline ?\n (isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable()) :\n document.querySelector('#' + this.parent.element.id + '_dialogEdit_wrapper').querySelector('.e-dlg-content');\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-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 - (this.parent.getFrozenColumns() ? 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 var content = this.parent.createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow;\n if (this.parent.editSettings.newRowPosition === 'Bottom' && this.editModule.args.requestType === 'add') {\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 table.appendChild(div);\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 div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n if (!isScroll && isInline && !this.parent.allowPaging) {\n gcontent.style.position = 'static';\n var pos = calculateRelativeBasedPosition(input, div);\n div.style.top = pos.top + inputClient.height + 9 + 'px';\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom' && this.editModule.args.requestType === 'add') {\n div.style.bottom = inputClient.height + 9 + 'px';\n div.style.top = null;\n }\n };\n /**\n * @hidden\n */\n Edit.prototype.checkColumnIsGrouped = function (col) {\n return !col.visible && !(this.parent.groupSettings.columns.indexOf(col.field) > -1);\n };\n return Edit;\n}());\nexport { Edit };\n/** @hidden */\nexport var Global;\n(function (Global) {\n Global.timer = null;\n})(Global || (Global = {}));\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/// \nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nimport { Popup, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { attributes, setValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, extend } from '@syncfusion/ej2-base';\nimport { EventHandler, Property, Event, compile, L10n } from '@syncfusion/ej2-base';\nimport { Animation, Browser, prepend } from '@syncfusion/ej2-base';\nimport { Search } from '../common/incremental-search';\nimport { append, addClass, removeClass, setStyleAttribute, closest, detach, remove } from '@syncfusion/ej2-base';\nimport { getUniqueID, formatUnit, isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\n/* tslint:disable */\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { createFloatLabel, removeFloating, floatLabelFocus, floatLabelBlur } from './float-label';\n/* tslint:enable */\nvar FOCUS = 'e-input-focus';\nvar DISABLED = 'e-disabled';\nvar OVER_ALL_WRAPPER = 'e-multiselect e-input-group';\nvar ELEMENT_WRAPPER = 'e-multi-select-wrapper';\nvar ELEMENT_MOBILE_WRAPPER = 'e-mob-wrapper';\nvar HIDE_LIST = 'e-hide-listitem';\nvar DELIMITER_VIEW = 'e-delim-view';\nvar CHIP_WRAPPER = 'e-chips-collection';\nvar CHIP = 'e-chips';\nvar CHIP_CONTENT = 'e-chipcontent';\nvar CHIP_CLOSE = 'e-chips-close';\nvar CHIP_SELECTED = 'e-chip-selected';\nvar SEARCHBOX_WRAPPER = 'e-searcher';\nvar DELIMITER_VIEW_WRAPPER = 'e-delimiter';\nvar ZERO_SIZE = 'e-zero-size';\nvar REMAIN_WRAPPER = 'e-remain';\nvar CLOSEICON_CLASS = 'e-chips-close e-close-hooker';\nvar DELIMITER_WRAPPER = 'e-delim-values';\nvar POPUP_WRAPPER = 'e-ddl e-popup e-multi-select-list-wrapper';\nvar INPUT_ELEMENT = 'e-dropdownbase';\nvar RTL_CLASS = 'e-rtl';\nvar CLOSE_ICON_HIDE = 'e-close-icon-hide';\nvar MOBILE_CHIP = 'e-mob-chip';\nvar FOOTER = 'e-ddl-footer';\nvar HEADER = 'e-ddl-header';\nvar DISABLE_ICON = 'e-ddl-disable-icon';\nvar SPINNER_CLASS = 'e-ms-spinner-icon';\nvar HIDDEN_ELEMENT = 'e-multi-hidden';\nvar destroy = 'destroy';\nvar dropdownIcon = 'e-input-group-icon e-ddl-icon';\nvar iconAnimation = 'e-icon-anim';\nvar TOTAL_COUNT_WRAPPER = 'e-delim-total';\n/**\n * The Multiselect allows the user to pick a more than one value from list of predefined values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MultiSelect = /** @class */ (function (_super) {\n __extends(MultiSelect, _super);\n /**\n * Constructor for creating the DropDownList widget.\n */\n function MultiSelect(option, element) {\n var _this = _super.call(this, option, element) || this;\n _this.isValidKey = false;\n _this.selectAllEventData = [];\n _this.selectAllEventEle = [];\n _this.scrollFocusStatus = false;\n _this.keyDownStatus = false;\n return _this;\n }\n ;\n MultiSelect.prototype.enableRTL = function (state) {\n if (state) {\n this.overAllWrapper.classList.add(RTL_CLASS);\n }\n else {\n this.overAllWrapper.classList.remove(RTL_CLASS);\n }\n if (this.popupObj) {\n this.popupObj.enableRtl = state;\n this.popupObj.dataBind();\n }\n };\n MultiSelect.prototype.requiredModules = function () {\n var modules = [];\n if (this.mode === 'CheckBox') {\n this.allowCustomValue = false;\n this.hideSelectedItem = false;\n this.closePopupOnSelect = false;\n this.allowFiltering = true;\n modules.push({\n member: 'CheckBoxSelection',\n args: [this]\n });\n }\n return modules;\n };\n MultiSelect.prototype.updateHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n switch (htmlAttr) {\n case 'class':\n this.overAllWrapper.classList.add(this.htmlAttributes[htmlAttr]);\n this.popupWrapper.classList.add(this.htmlAttributes[htmlAttr]);\n break;\n case 'disabled':\n this.enable(false);\n break;\n case 'placeholder':\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n break;\n default:\n var defaultAttr = ['id'];\n var validateAttr = ['name', 'required', 'aria-required', 'form'];\n var containerAttr = ['title', 'role', 'style', 'class'];\n if (defaultAttr.indexOf(htmlAttr) > -1) {\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (containerAttr.indexOf(htmlAttr) > -1) {\n this.overAllWrapper.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n break;\n }\n }\n }\n };\n MultiSelect.prototype.updateReadonly = function (state) {\n if (state || this.mode === 'CheckBox') {\n this.inputElement.setAttribute('readonly', 'true');\n }\n else {\n this.inputElement.removeAttribute('readonly');\n }\n };\n MultiSelect.prototype.updateClearButton = function (state) {\n if (state) {\n if (this.overAllClear.parentNode) {\n this.overAllClear.style.display = '';\n }\n else {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n this.componentWrapper.classList.remove(CLOSE_ICON_HIDE);\n }\n else {\n this.overAllClear.style.display = 'none';\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n };\n MultiSelect.prototype.updateCssClass = function () {\n if (this.cssClass) {\n this.popupWrapper.classList.add(this.cssClass);\n this.overAllWrapper.classList.add(this.cssClass);\n }\n };\n MultiSelect.prototype.onPopupShown = function () {\n if (Browser.isDevice && (this.mode === 'CheckBox' && this.allowFiltering)) {\n var proxy_1 = this;\n window.onpopstate = function () {\n proxy_1.hidePopup();\n };\n history.pushState({}, '');\n }\n var animModel = { name: 'FadeIn', duration: 100 };\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.focusAtFirstListItem();\n document.body.appendChild(this.popupObj.element);\n if (this.mode === 'CheckBox' || this.showDropDownIcon) {\n addClass([this.overAllWrapper], [iconAnimation]);\n }\n this.refreshPopup();\n this.popupObj.show(eventArgs.animation, (this.zIndex === 1000) ? this.element : null);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n if (!this.isFirstClick) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n }\n this.isFirstClick = true;\n }\n this.refreshListItems(null);\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n };\n MultiSelect.prototype.setScrollPosition = function () {\n if (((!this.hideSelectedItem && this.mode !== 'CheckBox') || (this.mode === 'CheckBox' && !this.enableSelectionOrder)) &&\n (!isNullOrUndefined(this.value) && (this.value.length > 0))) {\n var valueEle = this.hideSelectedItem ?\n this.ulElement.querySelector('li[data-value=\"' + this.value[this.value.length - 1] + '\"]')\n : this.list.querySelector('li[data-value=\"' + this.value[this.value.length - 1] + '\"]');\n if (!isNullOrUndefined(valueEle)) {\n this.scrollBottom(valueEle);\n }\n }\n };\n MultiSelect.prototype.focusAtFirstListItem = function () {\n if (this.ulElement && this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li)) {\n var element = void 0;\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n return;\n }\n else {\n element = this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\n }\n if (element !== null) {\n this.removeFocus();\n this.addListFocus(element);\n }\n }\n };\n MultiSelect.prototype.focusAtLastListItem = function (data) {\n var activeElement;\n if (data) {\n activeElement = Search(data, this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n if (this.value && this.value.length) {\n Search(this.value[this.value.length - 1], this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n activeElement = null;\n }\n }\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.scrollBottom(activeElement.item, activeElement.index);\n }\n };\n MultiSelect.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-multiselectable': 'true',\n 'aria-activedescendant': 'null',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false'\n };\n return ariaAttributes;\n };\n MultiSelect.prototype.updateListARIA = function () {\n attributes(this.ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n var disableStatus = (this.inputElement.disabled) ? true : false;\n attributes(this.inputElement, this.getAriaAttributes());\n if (disableStatus) {\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n };\n MultiSelect.prototype.removelastSelection = function (e) {\n var elements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n var value = elements[elements.length - 1].getAttribute('data-value');\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n this.removeValue(value, e);\n this.removeChipSelection();\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n if (this.mainList && this.listData) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n this.renderPopup();\n this.onPopupShown();\n };\n MultiSelect.prototype.targetElement = function () {\n this.targetInputElement = this.inputElement;\n if (this.mode === 'CheckBox') {\n this.notify('targetElement', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n return this.targetInputElement.value;\n };\n MultiSelect.prototype.getForQuery = function (valuecheck) {\n var predicate;\n var field = isNullOrUndefined(this.fields.value) ? this.fields.text : this.fields.value;\n for (var i = 0; i < valuecheck.length; i++) {\n if (i === 0) {\n predicate = new Predicate(field, 'equal', valuecheck[i]);\n }\n else {\n predicate = predicate.or(field, 'equal', valuecheck[i]);\n }\n }\n return new Query().where(predicate);\n };\n MultiSelect.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n var proxy = this;\n var valuecheck = [];\n if (!isNullOrUndefined(this.value) && !this.allowCustomValue) {\n for (var i = 0; i < this.value.length; i++) {\n var checkEle = ((this.allowFiltering && !isNullOrUndefined(this.mainList)) ?\n this.mainList : ulElement).querySelector('li[data-value=\"' + proxy.value[i] + '\"]');\n if (!checkEle) {\n valuecheck.push(proxy.value[i]);\n }\n }\n }\n if (valuecheck.length > 0 && this.dataSource instanceof DataManager && !isNullOrUndefined(this.value)) {\n this.dataSource.executeQuery(this.getForQuery(valuecheck)).then(function (e) {\n proxy.addItem(e.result, list.length);\n proxy.updateActionList(ulElement, list, e);\n });\n }\n else {\n this.updateActionList(ulElement, list, e);\n }\n };\n MultiSelect.prototype.updateActionList = function (ulElement, list, e, isUpdated) {\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n if (!this.mainList && !this.mainData) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.mainData = list;\n this.mainListCollection = this.liCollections;\n }\n else if (!isNullOrUndefined(this.mainData) && this.mainData.length === 0) {\n this.mainData = list;\n }\n if ((this.remoteCustomValue || list.length <= 0) && this.allowCustomValue && this.inputFocus && this.allowFiltering) {\n this.checkForCustomValue(this.tempQuery, this.fields);\n return;\n }\n if (this.value && this.value.length && ((this.mode !== 'CheckBox' && this.inputElement.value !== '') ||\n this.mode === 'CheckBox')) {\n this.refreshSelection();\n }\n this.updateListARIA();\n this.unwireListEvents();\n this.wireListEvents();\n if (!isNullOrUndefined(this.setInitialValue)) {\n this.setInitialValue();\n }\n if (!isNullOrUndefined(this.selectAllAction)) {\n this.selectAllAction();\n }\n if (this.setDynValue) {\n if (!isNullOrUndefined(this.text) && (isNullOrUndefined(this.value) || this.value.length === 0)) {\n this.initialTextUpdate();\n }\n this.initialValueUpdate();\n this.initialUpdate();\n this.refreshPlaceHolder();\n this.updateValueState(null, this.value, null);\n }\n this.renderPopup();\n if (this.beforePopupOpen) {\n this.beforePopupOpen = false;\n this.onPopupShown();\n }\n };\n MultiSelect.prototype.refreshSelection = function () {\n var value;\n var element;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n value = this.value[index];\n element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n if (element) {\n addClass([element], className);\n if (this.hideSelectedItem && element.previousSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group)\n && (!element.nextElementSibling ||\n element.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n addClass([element.previousElementSibling], className);\n }\n if (this.hideSelectedItem && this.fields.groupBy && !element.previousElementSibling.classList.contains(HIDE_LIST)) {\n this.hideGroupItem(value);\n }\n if (this.hideSelectedItem && element.classList.contains(dropDownBaseClasses.focus)) {\n removeClass([element], dropDownBaseClasses.focus);\n var listEle = element.parentElement.querySelectorAll('.' +\n dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')');\n if (listEle.length > 0) {\n addClass([listEle[0]], dropDownBaseClasses.focus);\n }\n else {\n this.ulElement = this.ulElement.cloneNode ? this.ulElement.cloneNode(true) : this.ulElement;\n this.l10nUpdate();\n addClass([this.list], dropDownBaseClasses.noData);\n }\n }\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox' && element.classList.contains('e-active')) {\n var ariaValue = element.firstElementChild.getAttribute('aria-checked');\n if (isNullOrUndefined(ariaValue) || ariaValue === 'false') {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n li: element,\n e: null\n };\n this.notify('updatelist', args);\n }\n }\n }\n }\n }\n this.checkSelectAll();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.hideGroupItem = function (value) {\n var element;\n var element1;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n element1 = element = this.ulElement.querySelector('li[data-value=\"' + value + '\"]');\n var i = 0;\n var j = 0;\n var temp = true;\n var temp1 = true;\n do {\n if (element && element.previousElementSibling\n && (!element.previousElementSibling.classList.contains(HIDE_LIST) &&\n element.previousElementSibling.classList.contains(dropDownBaseClasses.li))) {\n temp = false;\n }\n if (!temp || !element || (element.previousElementSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group))) {\n i = 10;\n }\n else {\n element = element.previousElementSibling;\n }\n if (element1 && element1.nextElementSibling\n && (!element1.nextElementSibling.classList.contains(HIDE_LIST) &&\n element1.nextElementSibling.classList.contains(dropDownBaseClasses.li))) {\n temp1 = false;\n }\n if (!temp1 || !element1 || (element1.nextElementSibling\n && element1.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n j = 10;\n }\n else {\n element1 = element1.nextElementSibling;\n }\n } while (i < 10 || j < 10);\n if (temp && temp1 && !element.previousElementSibling.classList.contains(HIDE_LIST)) {\n addClass([element.previousElementSibling], className);\n }\n else if (temp && temp1 && element.previousElementSibling.classList.contains(HIDE_LIST)) {\n removeClass([element.previousElementSibling], className);\n }\n };\n MultiSelect.prototype.checkSelectAll = function () {\n var searchCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.li).length;\n var searchActiveCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.selected).length;\n if ((searchCount === searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'check' });\n }\n if ((searchCount !== searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n };\n MultiSelect.prototype.openClick = function (e) {\n if (!this.openOnClick && this.mode !== 'CheckBox') {\n if (this.targetElement() !== '') {\n this.showPopup();\n }\n else {\n this.hidePopup();\n }\n }\n else if (!this.openOnClick && this.mode === 'CheckBox' && !this.isPopupOpen()) {\n this.showPopup();\n }\n };\n MultiSelect.prototype.KeyUp = function (e) {\n var _this = this;\n if (this.mode === 'CheckBox' && !this.openOnClick) {\n var char = String.fromCharCode(e.keyCode);\n var isWordCharacter = char.match(/\\w/);\n if (!isNullOrUndefined(isWordCharacter)) {\n this.isValidKey = true;\n }\n }\n this.isValidKey = (this.isPopupOpen() && e.keyCode === 8) || this.isValidKey;\n if (this.isValidKey) {\n this.isValidKey = false;\n this.expandTextbox();\n this.showOverAllClear();\n switch (e.keyCode) {\n default:\n if (!this.isPopupOpen() && this.openOnClick) {\n this.showPopup();\n }\n this.openClick(e);\n if (this.checkTextLength() && !this.allowFiltering && (e.keyCode !== 8)) {\n this.focusAtFirstListItem();\n }\n else {\n var text = this.targetElement();\n this.keyCode = e.keyCode;\n if (this.allowFiltering) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.targetElement(),\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isFiltered = true;\n _this.remoteFilterAction = true;\n _this.dataUpdater(dataSource, query, fields);\n },\n event: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isFiltered && !eventArgs_1.preventDefaultAction) {\n this.filterAction = true;\n this.dataUpdater(this.dataSource, null, this.fields);\n }\n }\n else if (this.allowCustomValue) {\n var query = new Query();\n query = (text !== '') ? query.where(this.fields.text, 'startswith', text, this.ignoreCase, this.ignoreAccent) : query;\n this.dataUpdater(this.mainData, query, this.fields);\n break;\n }\n else {\n var liCollections = void 0;\n liCollections = this.list.querySelectorAll('li.' + dropDownBaseClasses.li + ':not(.e-hide-listitem)');\n var activeElement = Search(this.targetElement(), liCollections, 'StartsWith', this.ignoreCase);\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.list.scrollTop =\n activeElement.item.offsetHeight * activeElement.index;\n }\n else if (this.targetElement() !== '') {\n this.removeFocus();\n }\n else {\n this.focusAtFirstListItem();\n }\n }\n }\n }\n }\n };\n MultiSelect.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n if (this.filterAction) {\n if (this.targetElement() !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.targetElement(), this.ignoreCase, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.targetElement(), this.ignoreCase, this.ignoreAccent);\n }\n }\n return filterQuery;\n }\n else {\n return query ? query : this.query ? this.query : new Query();\n }\n };\n MultiSelect.prototype.dataUpdater = function (dataSource, query, fields) {\n this.isDataFetched = false;\n if (this.targetElement().trim() === '') {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n if (this.backCommand) {\n this.remoteCustomValue = false;\n this.onActionComplete(list, this.mainData);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n if (this.keyCode !== 8) {\n this.focusAtFirstListItem();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n }\n }\n else {\n this.resetList(dataSource, fields, query);\n if (this.allowCustomValue) {\n if (!(dataSource instanceof DataManager)) {\n this.checkForCustomValue(query, fields);\n }\n else {\n this.remoteCustomValue = true;\n this.tempQuery = query;\n }\n }\n }\n this.refreshPopup();\n if (this.mode === 'CheckBox') {\n this.removeFocus();\n }\n };\n MultiSelect.prototype.checkForCustomValue = function (query, fields) {\n var dataChecks = !this.getValueByText(this.inputElement.value, this.ignoreCase);\n if (this.allowCustomValue && dataChecks) {\n var value = this.inputElement.value;\n var customData = (!isNullOrUndefined(this.mainData) && this.mainData.length > 0) ?\n this.mainData[0] : this.mainData;\n if (typeof (customData) !== 'string') {\n var dataItem = {};\n setValue(fields.text, value, dataItem);\n setValue(fields.value, value, dataItem);\n var tempData = JSON.parse(JSON.stringify(this.listData));\n tempData.splice(0, 0, dataItem);\n this.resetList(tempData, fields ? fields : this.fields, query);\n }\n else {\n var tempData = [this.inputElement.value];\n this.resetList(tempData, fields ? fields : this.fields);\n }\n }\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.getNgDirective = function () {\n return 'EJS-MULTISELECT';\n };\n MultiSelect.prototype.wrapperClick = function (e) {\n this.setDynValue = false;\n if (this.readonly || !this.enabled) {\n return;\n }\n if (e.target === this.overAllClear) {\n e.preventDefault();\n return;\n }\n if (!this.inputFocus && this.mode !== 'CheckBox') {\n this.dispatchEvent(this.inputElement, 'focus');\n }\n if (!this.inputFocus && this.mode === 'CheckBox') {\n this.focusIn(e);\n }\n if (e.target && e.target.classList.toString().indexOf(CHIP_CLOSE) !== -1) {\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n return;\n }\n if (!this.isPopupOpen() &&\n (this.openOnClick || (this.showDropDownIcon && e.target && e.target.className === dropdownIcon))) {\n this.showPopup();\n }\n else {\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.showOverAllClear();\n this.inputFocus = true;\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\n }\n }\n e.preventDefault();\n };\n MultiSelect.prototype.enable = function (state) {\n if (state) {\n this.overAllWrapper.classList.remove(DISABLED);\n this.inputElement.removeAttribute('disabled');\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.overAllWrapper.classList.add(DISABLED);\n this.inputElement.setAttribute('disabled', 'true');\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n if (this.enabled !== state) {\n this.enabled = state;\n }\n this.hidePopup();\n };\n MultiSelect.prototype.onBlur = function (eve) {\n var target;\n if (!isNullOrUndefined(eve)) {\n target = eve.relatedTarget;\n }\n if (this.popupObj && document.body.contains(this.popupObj.element) && this.popupObj.element.contains(target)) {\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n }\n if (this.mode === 'CheckBox' && Browser.isIE && !isNullOrUndefined(eve)) {\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n return;\n }\n if (this.scrollFocusStatus) {\n if (!isNullOrUndefined(eve)) {\n eve.preventDefault();\n }\n this.inputElement.focus();\n this.scrollFocusStatus = false;\n return;\n }\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n if (this.mode !== 'Box' && this.mode !== 'CheckBox') {\n this.refreshListItems(null);\n this.updateDelimView();\n }\n this.updateValueState(eve, this.value, this.tempValues);\n this.dispatchEvent(this.hiddenElement, 'change');\n this.overAllClear.style.display = 'none';\n if (this.isPopupOpen()) {\n this.hidePopup();\n }\n this.makeTextBoxEmpty();\n this.trigger('blur');\n this.focused = true;\n if (Browser.isDevice && this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.removeChipFocus();\n }\n this.removeChipSelection();\n this.refreshInputHight();\n floatLabelBlur(this.overAllWrapper, this.componentWrapper, this.value, this.floatLabelType, this.placeholder);\n this.refreshPlaceHolder();\n if (this.allowFiltering && !isNullOrUndefined(this.mainList)) {\n this.ulElement = this.mainList;\n }\n };\n MultiSelect.prototype.refreshInputHight = function () {\n if (!this.value || !this.value.length) {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n else {\n this.searchWrapper.classList.add(ZERO_SIZE);\n }\n };\n MultiSelect.prototype.validateValues = function (newValue, oldValue) {\n return JSON.stringify(newValue.slice().sort()) !== JSON.stringify(oldValue.slice().sort());\n };\n MultiSelect.prototype.updateValueState = function (event, newVal, oldVal) {\n var newValue = newVal ? newVal : [];\n var oldValue = oldVal ? oldVal : [];\n if (this.initStatus && this.validateValues(newValue, oldValue)) {\n var eventArgs = {\n e: event,\n oldValue: oldVal,\n value: newVal,\n isInteracted: event ? true : false,\n element: this.element\n };\n this.trigger('change', eventArgs);\n }\n };\n MultiSelect.prototype.getPagingCount = function () {\n var height = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.offsetHeight / parseInt(height, 10));\n };\n MultiSelect.prototype.pageUpSelection = function (steps) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var previousItem;\n previousItem = steps >= 0 ? collection[steps + 1] : collection[0];\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n ;\n MultiSelect.prototype.pageDownSelection = function (steps) {\n var list = this.getItems();\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var previousItem;\n previousItem = steps <= collection.length ? collection[steps - 1] : collection[collection.length - 1];\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n MultiSelect.prototype.getItems = function () {\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n return this.ulElement ? this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')') : null;\n };\n MultiSelect.prototype.focusIn = function (e) {\n if (this.enabled && !this.readonly) {\n this.showOverAllClear();\n this.inputFocus = true;\n if (!this.value) {\n this.tempValues = this.value;\n }\n else {\n this.tempValues = this.value.slice();\n }\n if (this.value && this.value.length) {\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n if (this.mode !== 'CheckBox') {\n this.viewWrapper.style.display = 'none';\n }\n }\n if (this.mode !== 'CheckBox') {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.focused) {\n this.inputElement.focus();\n var args = { isInteracted: e ? true : false, event: e };\n this.trigger('focus', args);\n this.focused = false;\n }\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\n floatLabelFocus(this.overAllWrapper, this.componentWrapper);\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n return true;\n }\n else {\n return false;\n }\n };\n MultiSelect.prototype.showDelimWrapper = function () {\n if (this.mode === 'CheckBox') {\n this.viewWrapper.style.display = '';\n }\n else {\n this.delimiterWrapper.style.display = '';\n }\n this.componentWrapper.classList.add(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.hideDelimWrapper = function () {\n this.delimiterWrapper.style.display = 'none';\n this.componentWrapper.classList.remove(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.expandTextbox = function () {\n var size = 5;\n if (this.placeholder) {\n size = size > this.inputElement.placeholder.length ? size : this.inputElement.placeholder.length;\n }\n if (this.inputElement.value.length > size) {\n this.inputElement.size = this.inputElement.value.length;\n }\n else {\n this.inputElement.size = size;\n }\n };\n MultiSelect.prototype.isPopupOpen = function () {\n return ((this.popupWrapper !== null) && (this.popupWrapper.parentElement !== null));\n };\n MultiSelect.prototype.refreshPopup = function () {\n if (this.popupObj && this.mobFilter) {\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n this.popupObj.refreshPosition(this.overAllWrapper);\n }\n };\n MultiSelect.prototype.checkTextLength = function () {\n return this.targetElement().length < 1;\n };\n MultiSelect.prototype.popupKeyActions = function (keyCode) {\n switch (keyCode) {\n case 38:\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n break;\n case 40:\n if (!this.isPopupOpen()) {\n this.showPopup();\n }\n break;\n }\n };\n MultiSelect.prototype.updateAriaAttribute = function () {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (!isNullOrUndefined(focusedItem)) {\n this.inputElement.setAttribute('aria-activedescendant', focusedItem.id);\n }\n };\n MultiSelect.prototype.onKeyDown = function (e) {\n if (this.readonly || !this.enabled && this.mode !== 'CheckBox') {\n return;\n }\n this.keyDownStatus = true;\n if (e.keyCode > 111 && e.keyCode < 124) {\n return;\n }\n if (e.altKey) {\n this.popupKeyActions(e.keyCode);\n e.preventDefault();\n return;\n }\n else if (this.isPopupOpen()) {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n var activeIndex = void 0;\n switch (e.keyCode) {\n case 36:\n case 35: break;\n case 33:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageUpSelection(activeIndex - this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 34:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageDownSelection(activeIndex + this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 38:\n this.arrowUp(e);\n break;\n case 40:\n this.arrowDown(e);\n break;\n case 27:\n e.preventDefault();\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n case 13:\n e.preventDefault();\n if (this.mode !== 'CheckBox') {\n this.selectByKey(e);\n }\n return;\n case 32:\n this.spaceKeySelection(e);\n return;\n case 9:\n e.preventDefault();\n this.hidePopup();\n this.inputElement.focus();\n this.overAllWrapper.classList.add(FOCUS);\n }\n }\n else {\n switch (e.keyCode) {\n case 13:\n case 9:\n case 16:\n case 17:\n case 20:\n return;\n case 40:\n if (this.openOnClick) {\n this.showPopup();\n }\n break;\n case 27:\n e.preventDefault();\n this.escapeAction();\n return;\n }\n }\n if (this.checkTextLength()) {\n this.keyNavigation(e);\n }\n if (this.mode === 'CheckBox' && this.enableSelectionOrder) {\n this.checkBackCommand(e);\n }\n this.expandTextbox();\n this.refreshPopup();\n };\n MultiSelect.prototype.arrowDown = function (e) {\n e.preventDefault();\n this.moveByList(1);\n this.keyAction = true;\n if (document.activeElement.classList.contains('e-input-filter')) {\n this.list.focus();\n EventHandler.add(this.list, 'keydown', this.onKeyDown, this);\n }\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.arrowUp = function (e) {\n e.preventDefault();\n this.keyAction = true;\n var list = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var focuseElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var index = Array.prototype.slice.call(list).indexOf(focuseElem);\n if (index <= 0) {\n this.keyAction = false;\n this.notify('inputFocus', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'focus' });\n }\n else {\n this.list.focus();\n }\n this.moveByList(-1);\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.spaceKeySelection = function (e) {\n if (this.mode === 'CheckBox') {\n if (!document.activeElement.classList.contains('e-input-filter')) {\n e.preventDefault();\n this.keyAction = true;\n this.list.focus();\n }\n this.selectByKey(e);\n }\n };\n MultiSelect.prototype.checkBackCommand = function (e) {\n if (e.keyCode === 8 && this.targetElement() === '') {\n this.backCommand = false;\n }\n else {\n this.backCommand = true;\n }\n };\n MultiSelect.prototype.keyNavigation = function (e) {\n if ((this.mode !== 'Delimiter' && this.mode !== 'CheckBox') && this.value && this.value.length) {\n switch (e.keyCode) {\n case 37: //left arrow \n e.preventDefault();\n this.moveBy(-1, e);\n break;\n case 39: //right arrow \n e.preventDefault();\n this.moveBy(1, e);\n break;\n case 8:\n this.removelastSelection(e);\n break;\n case 46: //del\n this.removeSelectedChip(e);\n break;\n }\n }\n else if (e.keyCode === 8 && this.mode === 'Delimiter') {\n if (this.value && this.value.length) {\n e.preventDefault();\n var temp = this.value[this.value.length - 1];\n this.removeValue(temp, e);\n this.updateDelimeter(this.delimiterChar);\n this.focusAtLastListItem(temp);\n }\n }\n };\n MultiSelect.prototype.selectByKey = function (e) {\n this.removeChipSelection();\n this.selectListByKey(e);\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n };\n MultiSelect.prototype.escapeAction = function () {\n var temp = this.tempValues ? this.tempValues.slice() : [];\n if (this.value && this.validateValues(this.value, temp)) {\n this.value = temp;\n this.initialValueUpdate();\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n this.refreshPlaceHolder();\n if (this.value.length) {\n this.showOverAllClear();\n }\n else {\n this.hideOverAllClear();\n }\n }\n this.makeTextBoxEmpty();\n };\n MultiSelect.prototype.scrollBottom = function (selectedLI, activeIndex) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop);\n boxRange = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset) {\n this.list.scrollTop = nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n MultiSelect.prototype.scrollTop = function (selectedLI, activeIndex) {\n var nextOffset = selectedLI.offsetTop - this.list.scrollTop;\n var nextBottom = selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.offsetHeight - this.list.scrollTop);\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = selectedLI.offsetTop - (this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n };\n MultiSelect.prototype.selectListByKey = function (e) {\n var li = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li !== null) {\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (this.isValidLI(li) && limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.makeTextBoxEmpty();\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(li.textContent);\n }\n this.refreshPopup();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshListItems = function (data) {\n if ((this.allowFiltering || this.allowCustomValue) && this.mainList && this.listData) {\n var list = void 0;\n if (this.sortOrder === 'Descending' || this.sortOrder === 'Ascending') {\n list = this.ulElement.cloneNode ? this.ulElement.cloneNode(true) : this.ulElement;\n }\n else {\n list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n }\n this.onActionComplete(list, this.mainData);\n this.focusAtLastListItem(data);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n }\n };\n MultiSelect.prototype.removeSelectedChip = function (e) {\n var selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n var temp;\n if (selectedElem !== null) {\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n temp = selectedElem.nextElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp, e);\n }\n this.removeValue(selectedElem.getAttribute('data-value'), e);\n this.makeTextBoxEmpty();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n };\n MultiSelect.prototype.moveByTop = function (state) {\n var elements = this.list.querySelectorAll('li.' + dropDownBaseClasses.li);\n var index;\n if (elements.length > 1) {\n this.removeFocus();\n index = state ? 0 : (elements.length - 1);\n this.addListFocus(elements[index]);\n this.scrollBottom(elements[index], index);\n }\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.moveByList = function (position) {\n if (this.list) {\n var elements = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var selectedElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var temp = -1;\n if (elements.length) {\n for (var index = 0; index < elements.length; index++) {\n if (elements[index] === selectedElem) {\n temp = index;\n break;\n }\n }\n if (position > 0) {\n if (temp < (elements.length - 1)) {\n this.removeFocus();\n this.addListFocus(elements[++temp]);\n this.scrollBottom(elements[temp], temp);\n }\n }\n else {\n if (temp > 0) {\n this.removeFocus();\n this.addListFocus(elements[--temp]);\n this.scrollTop(elements[temp], temp);\n }\n }\n }\n }\n };\n MultiSelect.prototype.moveBy = function (position, e) {\n var elements;\n var selectedElem;\n var temp;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n if (selectedElem === null) {\n if (position < 0) {\n this.addChipSelection(elements[elements.length - 1], e);\n }\n }\n else {\n if (position < 0) {\n temp = selectedElem.previousElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp, e);\n }\n }\n else {\n temp = selectedElem.nextElementSibling;\n this.removeChipSelection();\n if (temp !== null) {\n this.addChipSelection(temp, e);\n }\n }\n }\n };\n MultiSelect.prototype.chipClick = function (e) {\n if (this.enabled) {\n var elem = closest(e.target, '.' + CHIP);\n this.removeChipSelection();\n this.addChipSelection(elem, e);\n }\n };\n MultiSelect.prototype.removeChipSelection = function () {\n if (this.chipCollectionWrapper) {\n this.removeChipFocus();\n }\n };\n MultiSelect.prototype.addChipSelection = function (element, e) {\n addClass([element], CHIP_SELECTED);\n this.trigger('chipSelection', e);\n };\n MultiSelect.prototype.onChipRemove = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.enabled && !this.readonly) {\n var element = e.target.parentElement;\n var customVal = element.getAttribute('data-value');\n var value = this.getFormattedValue(customVal);\n if (this.allowCustomValue && ((customVal !== 'false' && value === false) ||\n (!isNullOrUndefined(value) && value.toString() === 'NaN'))) {\n value = customVal;\n }\n if (this.isPopupOpen() && this.mode !== 'CheckBox') {\n this.hidePopup();\n }\n if (!this.inputFocus) {\n this.inputElement.focus();\n }\n this.removeValue(value, e);\n if (isNullOrUndefined(this.list.querySelector('li[data-value=\"' + value + '\"]')) && this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.makeTextBoxEmpty = function () {\n this.inputElement.value = '';\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshPlaceHolder = function () {\n if (this.placeholder && this.floatLabelType === 'Never') {\n if (this.value && this.value.length) {\n this.inputElement.placeholder = '';\n }\n else {\n this.inputElement.placeholder = this.placeholder;\n }\n }\n else {\n this.setFloatLabelType();\n }\n this.expandTextbox();\n };\n MultiSelect.prototype.removeValue = function (value, eve, length) {\n var index = this.value.indexOf(this.getFormattedValue(value));\n if (index === -1 && this.allowCustomValue && !isNullOrUndefined(value)) {\n index = this.value.indexOf(value.toString());\n }\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (index !== -1) {\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n var val = this.getDataByValue(value);\n var eventArgs = {\n e: eve,\n item: element,\n itemData: val,\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('removing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.value.splice(index, 1);\n this.setProperties({ value: [].concat([], this.value) }, true);\n if (element !== null) {\n var hideElement = this.mainList.querySelector('li[data-value=\"' + value + '\"]');\n element.setAttribute('aria-selected', 'false');\n removeClass([element], className);\n if (hideElement) {\n hideElement.setAttribute('aria-selected', 'false');\n removeClass([element, hideElement], className);\n }\n this.notify('activeList', {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox', li: element,\n e: this, index: index\n });\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: eve });\n attributes(this.inputElement, { 'aria-activedescendant': element.id });\n if ((this.value.length !== this.mainData.length) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n }\n if (this.hideSelectedItem && this.fields.groupBy) {\n this.hideGroupItem(value);\n }\n this.updateMainList(true, value);\n this.removeChip(value);\n this.updateChipStatus();\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit < this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n removeClass(collection, 'e-disable');\n }\n this.trigger('removed', eventArgs);\n if (length) {\n this.selectAllEventData.push(val);\n this.selectAllEventEle.push(element);\n }\n if (length === 1) {\n var args = {\n event: eve,\n items: this.selectAllEventEle,\n itemData: this.selectAllEventData,\n isInteracted: eve ? true : false,\n isChecked: false\n };\n this.trigger('selectedAll', args);\n this.selectAllEventData = [];\n this.selectAllEventEle = [];\n }\n }\n };\n MultiSelect.prototype.updateMainList = function (state, value) {\n if (this.allowFiltering) {\n var element2 = this.mainList.querySelector('li[data-value=\"' + value + '\"]');\n if (element2) {\n if (state) {\n element2.setAttribute('aria-selected', 'false');\n removeClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n else {\n element2.setAttribute('aria-selected', 'true');\n addClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'true');\n addClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n }\n }\n };\n MultiSelect.prototype.removeChip = function (value) {\n if (this.chipCollectionWrapper) {\n var element = this.chipCollectionWrapper.querySelector('span[data-value=\"' + value + '\"]');\n if (element) {\n remove(element);\n }\n }\n };\n MultiSelect.prototype.updateChipStatus = function () {\n if (this.value.length) {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n (this.chipCollectionWrapper.style.display = '');\n }\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n this.showOverAllClear();\n }\n else {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(this.delimiterWrapper)) {\n (this.delimiterWrapper.style.display = 'none');\n }\n this.hideOverAllClear();\n }\n };\n MultiSelect.prototype.addValue = function (value, text, eve) {\n if (!this.value) {\n this.value = [];\n }\n this.setProperties({ value: [].concat([], this.value, [value]) }, true);\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n this.removeFocus();\n if (element) {\n this.addListFocus(element);\n this.addListSelection(element);\n }\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.addChip(text, value, eve);\n }\n if (this.hideSelectedItem && this.fields.groupBy) {\n this.hideGroupItem(value);\n }\n this.updateChipStatus();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.checkMaxSelection = function () {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit === this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n addClass(collection, 'e-disable');\n }\n };\n MultiSelect.prototype.dispatchSelect = function (value, eve, element, isNotTrigger, length) {\n if (this.initStatus && !isNotTrigger) {\n var val = this.getDataByValue(value);\n var eventArgs = {\n e: eve,\n item: element,\n itemData: val,\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return true;\n }\n if (length) {\n this.selectAllEventData.push(val);\n this.selectAllEventEle.push(element);\n }\n if (length === 1) {\n var args = {\n event: eve,\n items: this.selectAllEventEle,\n itemData: this.selectAllEventData,\n isInteracted: eve ? true : false,\n isChecked: true\n };\n this.trigger('selectedAll', args);\n this.selectAllEventData = [];\n }\n }\n return false;\n };\n MultiSelect.prototype.addChip = function (text, value, e) {\n if (this.chipCollectionWrapper) {\n var item = this.getChip(text, value, e);\n if (item.cancel) {\n return;\n }\n this.chipCollectionWrapper.appendChild(item.element);\n }\n };\n MultiSelect.prototype.removeChipFocus = function () {\n var elements;\n var closeElements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n closeElements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP_CLOSE.split(' ')[0]);\n removeClass(elements, CHIP_SELECTED);\n if (Browser.isDevice) {\n for (var index = 0; index < closeElements.length; index++) {\n closeElements[index].style.display = 'none';\n }\n }\n };\n MultiSelect.prototype.onMobileChipInteraction = function (e) {\n var chipElem = closest(e.target, '.' + CHIP);\n var chipClose = chipElem.querySelector('span.' + CHIP_CLOSE.split(' ')[0]);\n if (this.enabled && !this.readonly) {\n if (!chipElem.classList.contains(CHIP_SELECTED)) {\n this.removeChipFocus();\n chipClose.style.display = '';\n chipElem.classList.add(CHIP_SELECTED);\n }\n this.refreshPopup();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.getChip = function (data, value, e) {\n var itemData = { text: value, value: value };\n var chip = this.createElement('span', {\n className: CHIP,\n attrs: { 'data-value': value, 'title': data }\n });\n var chipContent = this.createElement('span', { className: CHIP_CONTENT });\n var chipClose = this.createElement('span', { className: CHIP_CLOSE });\n if (this.mainData) {\n itemData = this.getDataByValue(value);\n }\n if (this.valueTemplate && !isNullOrUndefined(itemData)) {\n var compiledString = compile(this.valueTemplate);\n for (var _i = 0, _a = compiledString(itemData); _i < _a.length; _i++) {\n var item = _a[_i];\n chipContent.appendChild(item);\n }\n }\n else {\n chipContent.innerHTML = data;\n }\n chip.appendChild(chipContent);\n var eventArgs = {\n isInteracted: e ? true : false,\n itemData: itemData,\n e: e,\n setClass: function (classes) {\n addClass([chip], classes);\n },\n cancel: false\n };\n this.trigger('tagging', eventArgs);\n if (eventArgs.cancel) {\n return { cancel: true, element: chip };\n }\n if (Browser.isDevice) {\n chip.classList.add(MOBILE_CHIP);\n append([chipClose], chip);\n chipClose.style.display = 'none';\n EventHandler.add(chip, 'click', this.onMobileChipInteraction, this);\n }\n else {\n EventHandler.add(chip, 'mousedown', this.chipClick, this);\n if (this.showClearButton) {\n chip.appendChild(chipClose);\n }\n }\n EventHandler.add(chipClose, 'mousedown', this.onChipRemove, this);\n return { cancel: false, element: chip };\n };\n MultiSelect.prototype.calcPopupWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = (this.componentWrapper.offsetWidth) * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n MultiSelect.prototype.mouseIn = function () {\n if (this.enabled && !this.readonly) {\n this.showOverAllClear();\n }\n };\n MultiSelect.prototype.mouseOut = function () {\n if (!this.inputFocus) {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldProperty = fields.properties;\n this.listCurrentOptions = (fields.text !== null || fields.value !== null) ? {\n fields: fieldProperty, showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n extend(this.listCurrentOptions, this.listCurrentOptions, fields, true);\n if (this.mode === 'CheckBox') {\n this.notify('listoption', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', dataSource: dataSource, fieldProperty: fieldProperty });\n }\n return this.listCurrentOptions;\n };\n MultiSelect.prototype.renderPopup = function () {\n var _this = this;\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n if (!this.popupObj) {\n var args = { cancel: false };\n this.trigger('beforeOpen', args);\n if (args.cancel) {\n return;\n }\n document.body.appendChild(this.popupWrapper);\n var overAllHeight = parseInt(this.popupHeight, 10);\n this.popupWrapper.style.visibility = 'hidden';\n if (this.headerTemplate) {\n this.setHeaderTemplate();\n overAllHeight -= this.header.offsetHeight;\n }\n append([this.list], this.popupWrapper);\n if (this.footerTemplate) {\n this.setFooterTemplate();\n overAllHeight -= this.footer.offsetHeight;\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight -= this.selectAllHeight;\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll && (!this.headerTemplate || !this.footerTemplate)) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n if (this.headerTemplate && this.header) {\n overAllHeight -= this.header.offsetHeight;\n }\n if (this.footerTemplate && this.footer) {\n overAllHeight -= this.footer.offsetHeight;\n }\n }\n if (this.mode === 'CheckBox') {\n var args_1 = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n popupElement: this.popupWrapper\n };\n this.notify('searchBox', args_1);\n overAllHeight -= this.searchBoxHeight;\n addClass([this.popupWrapper], 'e-checkbox');\n }\n if (this.popupHeight !== 'auto') {\n this.list.style.maxHeight = formatUnit(overAllHeight);\n this.popupWrapper.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n this.list.style.maxHeight = formatUnit(this.popupHeight);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.calcPopupWidth(), targetType: 'relative', position: { X: 'left', Y: 'bottom' },\n relateTo: this.overAllWrapper, collision: { X: 'flip', Y: 'flip' }, offsetY: 1,\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n close: function () {\n if (_this.popupObj.element.parentElement) {\n detach(_this.popupObj.element);\n }\n },\n open: function () {\n _this.setScrollPosition();\n _this.notify('inputFocus', { module: 'CheckBoxSelection', enable: _this.mode === 'CheckBox', value: 'focus' });\n }\n });\n this.popupObj.close();\n this.popupWrapper.style.visibility = '';\n if (this.mode === 'CheckBox' && Browser.isDevice) {\n this.notify('deviceSearchBox', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n }\n };\n MultiSelect.prototype.setHeaderTemplate = function () {\n var compiledString;\n if (this.header) {\n this.header.remove();\n }\n this.header = this.createElement('div');\n addClass([this.header], HEADER);\n compiledString = compile(this.headerTemplate);\n var elements = compiledString({});\n for (var temp = 0; temp < elements.length; temp++) {\n this.header.appendChild(elements[temp]);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n prepend([this.header], this.popupWrapper);\n }\n else {\n append([this.header], this.popupWrapper);\n }\n EventHandler.add(this.header, 'mousedown', this.onListMouseDown, this);\n };\n MultiSelect.prototype.setFooterTemplate = function () {\n var compiledString;\n if (this.footer) {\n this.footer.remove();\n }\n this.footer = this.createElement('div');\n addClass([this.footer], FOOTER);\n compiledString = compile(this.footerTemplate);\n var elements = compiledString({});\n for (var temp = 0; temp < elements.length; temp++) {\n this.footer.appendChild(elements[temp]);\n }\n append([this.footer], this.popupWrapper);\n EventHandler.add(this.footer, 'mousedown', this.onListMouseDown, this);\n };\n MultiSelect.prototype.ClearAll = function (e) {\n if (this.enabled && !this.readonly) {\n var temp = void 0;\n var tempValues = this.value ? this.value.slice() : [];\n if (this.value) {\n for (temp = this.value[0]; this.value.length !== 0; temp = this.value[0]) {\n this.removeValue(temp, e);\n }\n }\n if (this.mainList && this.listData && this.allowFiltering) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n }\n this.focusAtFirstListItem();\n this.updateDelimeter(this.delimiterChar);\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.makeTextBoxEmpty();\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n if (!this.inputFocus) {\n this.updateValueState(e, this.value, tempValues);\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n }\n if (this.mode === 'CheckBox') {\n this.refreshPlaceHolder();\n this.refreshInputHight();\n }\n e.preventDefault();\n }\n };\n MultiSelect.prototype.windowResize = function () {\n this.refreshPopup();\n if (!this.inputFocus && this.viewWrapper && this.viewWrapper.parentElement) {\n this.updateDelimView();\n }\n };\n MultiSelect.prototype.resetValueHandler = function (e) {\n var formElement = closest(this.inputElement, 'form');\n if (formElement && e.target === formElement) {\n this.value = null;\n }\n };\n MultiSelect.prototype.wireEvent = function () {\n EventHandler.add(this.componentWrapper, 'mousedown', this.wrapperClick, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n EventHandler.add(this.inputElement, 'focus', this.focusIn, this);\n EventHandler.add(this.inputElement, 'keydown', this.onKeyDown, this);\n EventHandler.add(this.inputElement, 'keyup', this.KeyUp, this);\n if (this.mode !== 'CheckBox') {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n }\n EventHandler.add(this.inputElement, 'blur', this.onBlur, this);\n EventHandler.add(this.componentWrapper, 'mousemove', this.mouseIn, this);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\n EventHandler.add(this.componentWrapper, 'mouseout', this.mouseOut, this);\n EventHandler.add(this.overAllClear, 'mouseup', this.ClearAll, this);\n };\n MultiSelect.prototype.onInput = function () {\n if (this.keyDownStatus) {\n this.isValidKey = true;\n }\n else {\n this.isValidKey = false;\n }\n this.keyDownStatus = false;\n };\n MultiSelect.prototype.preRender = function () {\n this.initializeData();\n _super.prototype.preRender.call(this);\n };\n MultiSelect.prototype.initializeData = function () {\n this.mainListCollection = [];\n this.beforePopupOpen = false;\n this.filterAction = false;\n this.remoteFilterAction = false;\n this.isFirstClick = false;\n this.mobFilter = true;\n this.isFiltered = false;\n this.focused = true;\n this.initial = true;\n this.backCommand = true;\n };\n MultiSelect.prototype.updateData = function (delimiterChar) {\n var data = '';\n var delim = this.mode === 'Delimiter' || this.mode === 'CheckBox';\n var text = [];\n var temp;\n var tempData = this.listData;\n this.listData = this.mainData;\n this.hiddenElement.innerHTML = '';\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n if (this.listData) {\n temp = this.getTextByValue(this.value[index]);\n }\n else {\n temp = this.value[index];\n }\n data += temp + delimiterChar + ' ';\n text.push(temp);\n this.hiddenElement.innerHTML += '';\n }\n }\n this.setProperties({ text: text.toString() }, true);\n if (delim) {\n this.delimiterWrapper.innerHTML = data;\n }\n this.listData = tempData;\n };\n MultiSelect.prototype.initialTextUpdate = function () {\n if (!isNullOrUndefined(this.text)) {\n var textArr = this.text.split(this.delimiterChar);\n var textVal = [];\n for (var index = 0; textArr.length > index; index++) {\n var val = this.getValueByText(textArr[index]);\n if (!isNullOrUndefined(val)) {\n textVal.push(val);\n }\n else if (this.allowCustomValue) {\n textVal.push(textArr[index]);\n }\n }\n if (textVal && textVal.length) {\n this.setProperties({ value: textVal }, true);\n }\n }\n else {\n this.setProperties({ value: null }, true);\n }\n };\n MultiSelect.prototype.initialValueUpdate = function () {\n if (this.list) {\n var text = void 0;\n var textField = void 0;\n var valueField = void 0;\n var element = void 0;\n var value = void 0;\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.innerHTML = '';\n }\n this.removeListSelection();\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n value = this.value[index];\n element = this.hideSelectedItem ? this.ulElement.querySelector('li[data-value=\"' + value + '\"]')\n : this.list.querySelector('li[data-value=\"' + value + '\"]');\n text = this.getTextByValue(value);\n if ((element && (element.getAttribute('aria-selected') !== 'true')) ||\n (element && (element.getAttribute('aria-selected') === 'true' && this.hideSelectedItem) &&\n (this.mode === 'Box' || this.mode === 'Default'))) {\n this.addChip(text, value);\n this.addListSelection(element);\n }\n else if (value && this.allowCustomValue) {\n var indexItem = this.listData.length;\n var newValue = {};\n setValue(this.fields.text, value, newValue);\n setValue(this.fields.value, value, newValue);\n this.addItem(newValue, indexItem);\n this.addChip(text, value);\n this.addListSelection(element);\n }\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.updateValueState(null, this.value, this.tempValues);\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll && isNullOrUndefined(this.value)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n if (!this.inputFocus) {\n if (this.mode === 'Box') {\n this.chipCollectionWrapper.style.display = '';\n }\n else if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n }\n }\n };\n MultiSelect.prototype.isValidLI = function (li) {\n return (li && !li.classList.contains(dropDownBaseClasses.disabled) && !li.classList.contains(dropDownBaseClasses.group) &&\n li.classList.contains(dropDownBaseClasses.li));\n };\n ;\n MultiSelect.prototype.updateListSelection = function (li, e, length) {\n var customVal = li.getAttribute('data-value');\n var value = this.getFormattedValue(customVal);\n if (this.allowCustomValue && ((customVal !== 'false' && value === false) ||\n (!isNullOrUndefined(value) && value.toString() === 'NaN'))) {\n value = customVal;\n }\n var text = this.getTextByValue(value);\n this.removeHover();\n if (!this.value || this.value.indexOf(value) === -1) {\n var argsCancel = this.dispatchSelect(value, e, li, (li.getAttribute('aria-selected') === 'true'), length);\n if (argsCancel) {\n return;\n }\n if ((this.allowCustomValue || this.allowFiltering) && !this.mainList.querySelector('li[data-value=\"' + value + '\"]')) {\n var temp = li.cloneNode(true);\n var data = this.getDataByValue(value);\n append([temp], this.mainList);\n this.mainData.push(data);\n var eventArgs = {\n newData: data,\n cancel: false\n };\n this.trigger('customValueSelection', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.remoteCustomValue = false;\n this.addValue(value, text, e);\n }\n else {\n this.removeValue(value, e, length);\n }\n };\n MultiSelect.prototype.removeListSelection = function () {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n var selectedItems = this.list.querySelectorAll('.' + className);\n var temp = selectedItems.length;\n if (selectedItems && selectedItems.length) {\n removeClass(selectedItems, className);\n while (temp > 0) {\n selectedItems[temp - 1].setAttribute('aria-selected', 'false');\n temp--;\n }\n }\n if (!isNullOrUndefined(this.mainList)) {\n var selectItems = this.mainList.querySelectorAll('.' + className);\n var temp1 = selectItems.length;\n if (selectItems && selectItems.length) {\n removeClass(selectItems, className);\n while (temp1 > 0) {\n selectItems[temp1 - 1].setAttribute('aria-selected', 'false');\n if (this.mode === 'CheckBox') {\n selectItems[temp1 - 1].firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([selectItems[temp1 - 1].firstElementChild.lastElementChild], 'e-check');\n }\n temp1--;\n }\n }\n }\n };\n ;\n MultiSelect.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.removeFocus = function () {\n if (this.list) {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.focus);\n var mainlist = this.mainList.querySelectorAll('.' + dropDownBaseClasses.focus);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.focus);\n removeClass(mainlist, dropDownBaseClasses.focus);\n }\n }\n };\n ;\n MultiSelect.prototype.addListHover = function (li) {\n if (this.enabled && this.isValidLI(li)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.addListFocus = function (element) {\n if (this.enabled && this.isValidLI(element)) {\n this.removeFocus();\n addClass([element], dropDownBaseClasses.focus);\n }\n };\n MultiSelect.prototype.addListSelection = function (element) {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (this.isValidLI(element) && !element.classList.contains(dropDownBaseClasses.hover)) {\n addClass([element], className);\n this.updateMainList(false, element.getAttribute('data-value'));\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox') {\n var ariaCheck = element.firstElementChild.getAttribute('aria-checked');\n if (ariaCheck === 'false' || isNullOrUndefined(ariaCheck)) {\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n }\n }\n this.notify('activeList', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n if (this.chipCollectionWrapper !== null) {\n this.removeChipSelection();\n }\n attributes(this.inputElement, { 'aria-activedescendant': element.id });\n }\n };\n MultiSelect.prototype.updateDelimeter = function (delimChar) {\n this.updateData(delimChar);\n };\n MultiSelect.prototype.onMouseClick = function (e) {\n this.scrollFocusStatus = false;\n var target = e.target;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (this.isValidLI(li)) {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if ((this.allowCustomValue || this.allowFiltering) && this.mainList && this.listData) {\n if (this.mode !== 'CheckBox') {\n this.focusAtLastListItem(li.getAttribute('data-value'));\n }\n this.refreshSelection();\n }\n else {\n this.makeTextBoxEmpty();\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.checkSelectAll();\n this.refreshPopup();\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n else {\n e.preventDefault();\n }\n this.makeTextBoxEmpty();\n }\n else {\n e.preventDefault();\n }\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(isNullOrUndefined(li) ? null : li.textContent);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.addListHover(currentLi);\n };\n MultiSelect.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n MultiSelect.prototype.onListMouseDown = function (e) {\n e.preventDefault();\n this.scrollFocusStatus = true;\n };\n MultiSelect.prototype.onDocumentClick = function (e) {\n if (this.mode !== 'CheckBox') {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, '#' + this.popupObj.element.id)) &&\n !this.overAllWrapper.contains(e.target)) {\n this.scrollFocusStatus = false;\n }\n else {\n this.scrollFocusStatus = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n }\n }\n };\n MultiSelect.prototype.wireListEvents = function () {\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n EventHandler.add(this.list, 'mousedown', this.onListMouseDown, this);\n EventHandler.add(this.list, 'mouseup', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n };\n ;\n MultiSelect.prototype.unwireListEvents = function () {\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n if (this.list) {\n EventHandler.remove(this.list, 'mousedown', this.onListMouseDown);\n EventHandler.remove(this.list, 'mouseup', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n }\n };\n ;\n MultiSelect.prototype.hideOverAllClear = function () {\n if (!this.value || !this.value.length || this.inputElement.value === '') {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.showOverAllClear = function () {\n if (((this.value && this.value.length) || this.inputElement.value !== '') && this.showClearButton) {\n this.overAllClear.style.display = '';\n }\n else {\n this.overAllClear.style.display = 'none';\n }\n };\n /**\n * Shows the spinner loader.\n * @returns void.\n */\n MultiSelect.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n if (this.overAllClear.style.display !== 'none') {\n this.spinnerElement = this.overAllClear;\n }\n else {\n this.spinnerElement = this.createElement('span', { className: CLOSEICON_CLASS + ' ' + SPINNER_CLASS });\n this.componentWrapper.appendChild(this.spinnerElement);\n }\n createSpinner({ target: this.spinnerElement, width: Browser.isDevice ? '16px' : '14px' }, this.createElement);\n addClass([this.spinnerElement], DISABLE_ICON);\n showSpinner(this.spinnerElement);\n }\n };\n /**\n * Hides the spinner loader.\n * @returns void.\n */\n MultiSelect.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], DISABLE_ICON);\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 MultiSelect.prototype.updateDelimView = function () {\n if (this.delimiterWrapper) {\n this.hideDelimWrapper();\n }\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n this.viewWrapper.style.display = '';\n this.viewWrapper.style.width = '';\n this.viewWrapper.classList.remove(TOTAL_COUNT_WRAPPER);\n if (this.value && this.value.length) {\n var data = '';\n var temp = void 0;\n var tempData = void 0;\n var tempIndex = 1;\n var wrapperleng = void 0;\n var remaining = void 0;\n var downIconWidth = 0;\n var overAllContainer = void 0;\n this.viewWrapper.innerHTML = '';\n var l10nLocale = {\n noRecordsTemplate: 'No Records Found',\n actionFailureTemplate: 'The Request Failed',\n overflowCountTemplate: '+${count} more..',\n totalCountTemplate: '${count} selected'\n };\n var l10n = new L10n('dropdowns', l10nLocale, this.locale);\n var remainContent = l10n.getConstant('overflowCountTemplate');\n var raminElement = this.createElement('span', {\n className: REMAIN_WRAPPER\n });\n var compiledString = compile(remainContent);\n var totalCompiledString = compile(l10n.getConstant('totalCountTemplate'));\n raminElement.appendChild(compiledString({ 'count': this.value.length })[0]);\n this.viewWrapper.appendChild(raminElement);\n var remainSize = raminElement.offsetWidth;\n remove(raminElement);\n if (this.showDropDownIcon) {\n downIconWidth = this.dropIcon.offsetWidth +\n parseInt(window.getComputedStyle(this.dropIcon).marginRight, 10);\n }\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; !isNullOrUndefined(this.value[index]); index++) {\n data += (index === 0) ? '' : this.delimiterChar + ' ';\n temp = this.getOverflowVal(index);\n data += temp;\n temp = this.viewWrapper.innerHTML;\n this.viewWrapper.innerHTML = data;\n wrapperleng = this.viewWrapper.offsetWidth;\n overAllContainer = this.componentWrapper.offsetWidth -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingLeft, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingRight, 10);\n if ((wrapperleng + downIconWidth) > overAllContainer) {\n if (tempData !== undefined && tempData !== '') {\n temp = tempData;\n index = tempIndex + 1;\n }\n this.viewWrapper.innerHTML = temp;\n remaining = this.value.length - index;\n wrapperleng = this.viewWrapper.offsetWidth;\n while (((wrapperleng + remainSize + downIconWidth) > overAllContainer) && wrapperleng !== 0\n && this.viewWrapper.innerHTML !== '') {\n var textArr = this.viewWrapper.innerHTML.split(this.delimiterChar);\n textArr.pop();\n this.viewWrapper.innerHTML = textArr.join(this.delimiterChar);\n remaining++;\n wrapperleng = this.viewWrapper.offsetWidth;\n }\n break;\n }\n else if ((wrapperleng + remainSize + downIconWidth) <= overAllContainer) {\n tempData = data;\n tempIndex = index;\n }\n else if (index === 0) {\n tempData = '';\n tempIndex = -1;\n }\n }\n }\n if (remaining > 0) {\n var totalWidth = overAllContainer - downIconWidth;\n this.viewWrapper.appendChild(this.updateRemainTemplate(raminElement, this.viewWrapper, remaining, compiledString, totalCompiledString, totalWidth));\n this.updateRemainingText(raminElement, downIconWidth, remaining, compiledString, totalCompiledString);\n }\n }\n else {\n this.viewWrapper.innerHTML = '';\n this.viewWrapper.style.display = 'none';\n }\n };\n MultiSelect.prototype.updateRemainTemplate = function (raminElement, viewWrapper, remaining, compiledString, totalCompiledString, totalWidth) {\n if (viewWrapper.firstChild && viewWrapper.firstChild.nodeType === 3 && viewWrapper.firstChild.nodeValue === '') {\n viewWrapper.removeChild(viewWrapper.firstChild);\n }\n raminElement.innerHTML = '';\n raminElement.appendChild((viewWrapper.firstChild && viewWrapper.firstChild.nodeType === 3) ?\n compiledString({ 'count': remaining })[0] :\n totalCompiledString({ 'count': remaining })[0]);\n if (viewWrapper.firstChild && viewWrapper.firstChild.nodeType === 3) {\n viewWrapper.classList.remove(TOTAL_COUNT_WRAPPER);\n }\n else {\n viewWrapper.classList.add(TOTAL_COUNT_WRAPPER);\n if (totalWidth) {\n viewWrapper.style.width = totalWidth + 'px';\n }\n }\n return raminElement;\n };\n MultiSelect.prototype.updateRemainingText = function (raminElement, downIconWidth, remaining, compiledString, totalCompiledString) {\n var overAllContainer = this.componentWrapper.offsetWidth -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingLeft, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingRight, 10);\n var wrapperleng = this.viewWrapper.offsetWidth;\n if (((wrapperleng + downIconWidth) >= overAllContainer) && wrapperleng !== 0 && this.viewWrapper.firstChild &&\n this.viewWrapper.firstChild.nodeType === 3) {\n while (((wrapperleng + downIconWidth) > overAllContainer) && wrapperleng !== 0 && this.viewWrapper.firstChild &&\n this.viewWrapper.firstChild.nodeType === 3) {\n var textArr = this.viewWrapper.firstChild.nodeValue.split(this.delimiterChar);\n textArr.pop();\n this.viewWrapper.firstChild.nodeValue = textArr.join(this.delimiterChar);\n if (this.viewWrapper.firstChild.nodeValue === '') {\n this.viewWrapper.removeChild(this.viewWrapper.firstChild);\n }\n remaining++;\n wrapperleng = this.viewWrapper.offsetWidth;\n }\n var totalWidth = overAllContainer - downIconWidth;\n this.updateRemainTemplate(raminElement, this.viewWrapper, remaining, compiledString, totalCompiledString, totalWidth);\n }\n };\n MultiSelect.prototype.getOverflowVal = function (index) {\n var temp;\n if (this.mainData && this.mainData.length) {\n if (this.mode === 'CheckBox') {\n var newTemp = this.listData;\n this.listData = this.mainData;\n temp = this.getTextByValue(this.value[index]);\n this.listData = newTemp;\n }\n else {\n temp = this.getTextByValue(this.value[index]);\n }\n }\n else {\n temp = this.value[index];\n }\n return temp;\n };\n MultiSelect.prototype.unWireEvent = function () {\n EventHandler.remove(this.componentWrapper, 'mousedown', this.wrapperClick);\n EventHandler.remove(window, 'resize', this.windowResize);\n EventHandler.remove(this.inputElement, 'focus', this.focusIn);\n EventHandler.remove(this.inputElement, 'keydown', this.onKeyDown);\n if (this.mode !== 'CheckBox') {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.KeyUp);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.onBlur);\n EventHandler.remove(this.componentWrapper, 'mousemove', this.mouseIn);\n EventHandler.remove(this.componentWrapper, 'mouseout', this.mouseOut);\n EventHandler.remove(this.overAllClear, 'mousedown', this.ClearAll);\n };\n MultiSelect.prototype.selectAllItem = function (state, event) {\n var li;\n li = this.list.querySelectorAll(state ?\n 'li.e-list-item:not([aria-selected=\"true\"]):not(.e-reorder-hide)' :\n 'li[aria-selected=\"true\"]:not(.e-reorder-hide)');\n var length = li.length;\n if (li && li.length) {\n while (length > 0) {\n this.updateListSelection(li[length - 1], event, length);\n length--;\n }\n }\n if (this.mode !== 'Box' && !this.isPopupOpen()) {\n this.updateDelimView();\n }\n else {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n MultiSelect.prototype.updateDataSource = function (prop) {\n if (isNullOrUndefined(this.list)) {\n this.renderPopup();\n }\n else {\n this.resetList(this.dataSource);\n }\n if (this.value && this.value.length) {\n this.setProperties({ 'value': this.value });\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.onLoadSelect = function () {\n this.setDynValue = true;\n this.renderPopup();\n };\n MultiSelect.prototype.selectAllItems = function (state, event) {\n var _this = this;\n if (isNullOrUndefined(this.list)) {\n this.selectAllAction = function () {\n if (_this.mode === 'CheckBox' && _this.showSelectAll) {\n var args = {\n module: 'CheckBoxSelection',\n enable: _this.mode === 'CheckBox',\n value: state ? 'check' : 'uncheck'\n };\n _this.notify('checkSelectAll', args);\n }\n _this.selectAllItem(state, event);\n _this.selectAllAction = null;\n };\n _super.prototype.render.call(this);\n }\n else {\n this.selectAllAction = null;\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n var args = {\n value: state ? 'check' : 'uncheck',\n enable: this.mode === 'CheckBox',\n module: 'CheckBoxSelection'\n };\n this.notify('checkSelectAll', args);\n }\n this.selectAllItem(state, event);\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n MultiSelect.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ;\n /**\n * Dynamically change the value of properties.\n * @private\n */\n MultiSelect.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource))) {\n this.mainList = null;\n this.mainData = null;\n }\n if (this.getModuleName() === 'multiselect') {\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 'query':\n case 'dataSource':\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n if (!isNullOrUndefined(this.popupObj)) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttribute();\n break;\n case 'showClearButton':\n this.updateClearButton(newProp.showClearButton);\n break;\n case 'text':\n this.updateVal(this.value, this.value, 'text');\n break;\n case 'value':\n this.updateVal(this.value, oldProp.value, 'value');\n break;\n case 'width':\n setStyleAttribute(this.overAllWrapper, { 'width': formatUnit(newProp.width) });\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n break;\n case 'placeholder':\n this.refreshPlaceHolder();\n break;\n case 'filterBarPlaceholder':\n this.notify('filterBarPlaceholder', { filterBarPlaceholder: newProp.filterBarPlaceholder });\n break;\n case 'delimiterChar':\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateData(newProp.delimiterChar);\n break;\n case 'cssClass':\n this.popupWrapper.classList.remove(oldProp.cssClass);\n this.overAllWrapper.classList.remove(oldProp.cssClass);\n this.updateCssClass();\n break;\n case 'enableRtl':\n this.enableRTL(newProp.enableRtl);\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n case 'readonly':\n this.updateReadonly(newProp.readonly);\n this.hidePopup();\n break;\n case 'enabled':\n this.hidePopup();\n this.enable(newProp.enabled);\n break;\n case 'showSelectAll':\n if (this.popupObj) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n break;\n case 'showDropDownIcon':\n this.dropDownIcon();\n break;\n case 'floatLabelType':\n this.setFloatLabelType();\n break;\n case 'enableSelectionOrder':\n break;\n case 'selectAllText':\n this.notify('selectAllText', false);\n break;\n case 'popupHeight':\n case 'headerTemplate':\n case 'footerTemplate':\n if (this.popupObj) {\n this.popupObj.destroy();\n this.popupObj = null;\n }\n this.renderPopup();\n break;\n default:\n var msProps = void 0;\n msProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, msProps.newProperty, msProps.oldProperty);\n break;\n }\n }\n };\n MultiSelect.prototype.updateVal = function (newProp, oldProp, prop) {\n if (!this.list) {\n this.onLoadSelect();\n }\n else if (!this.inputFocus) {\n if (prop === 'text') {\n this.initialTextUpdate();\n newProp = this.value;\n }\n this.initialValueUpdate();\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.refreshInputHight();\n this.refreshPlaceHolder();\n this.updateValueState(null, newProp, oldProp);\n }\n };\n /**\n * Hides the popup, if the popup in a open state.\n * @returns void\n */\n MultiSelect.prototype.hidePopup = function () {\n var delay = 100;\n if (this.isPopupOpen()) {\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n var eventArgs = { popup: this.popupObj, cancel: false, animation: animModel };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.beforePopupOpen = false;\n this.overAllWrapper.classList.remove(iconAnimation);\n this.popupObj.hide(new Animation(eventArgs.animation));\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.notify('inputFocus', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'clear' });\n this.popupObj.hide();\n removeClass([document.body, this.popupObj.element], 'e-popup-full-page');\n EventHandler.remove(this.list, 'keydown', this.onKeyDown);\n }\n };\n /**\n * Shows the popup, if the popup in a closed state.\n * @returns void\n */\n MultiSelect.prototype.showPopup = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.ulElement) {\n this.beforePopupOpen = true;\n _super.prototype.render.call(this);\n return;\n }\n var mainLiLength = this.ulElement.querySelectorAll('li.' + 'e-list-item').length;\n var liLength = this.ulElement.querySelectorAll('li.'\n + dropDownBaseClasses.li + '.' + HIDE_LIST).length;\n if (mainLiLength > 0 && (mainLiLength === liLength) && (liLength === this.mainData.length)) {\n this.beforePopupOpen = false;\n return;\n }\n this.onPopupShown();\n };\n /**\n * Based on the state parameter, entire list item will be selected/deselected.\n * parameter\n * `true` - Selects entire list items.\n * `false` - Un Selects entire list items.\n * @returns void\n */\n MultiSelect.prototype.selectAll = function (state) {\n this.selectAllItems(state);\n };\n MultiSelect.prototype.getModuleName = function () {\n return 'multiselect';\n };\n ;\n /**\n * To Initialize the control rendering\n * @private\n */\n MultiSelect.prototype.render = function () {\n var _this = this;\n this.setDynValue = this.initStatus = false;\n this.searchWrapper = this.createElement('span', { className: SEARCHBOX_WRAPPER });\n this.viewWrapper = this.createElement('span', { className: DELIMITER_VIEW + ' ' + DELIMITER_WRAPPER, styles: 'display:none;' });\n this.overAllClear = this.createElement('span', {\n className: CLOSEICON_CLASS, styles: 'display:none;'\n });\n this.componentWrapper = this.createElement('div', { className: ELEMENT_WRAPPER });\n this.overAllWrapper = this.createElement('div', { className: OVER_ALL_WRAPPER });\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], 'e-checkbox');\n }\n if (Browser.isDevice) {\n this.componentWrapper.classList.add(ELEMENT_MOBILE_WRAPPER);\n }\n this.overAllWrapper.style.width = formatUnit(this.width);\n this.overAllWrapper.appendChild(this.componentWrapper);\n this.popupWrapper = this.createElement('div', { id: this.element.id + '_popup', className: POPUP_WRAPPER });\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.delimiterWrapper = this.createElement('span', { className: DELIMITER_WRAPPER, styles: 'display:none' });\n this.componentWrapper.appendChild(this.delimiterWrapper);\n }\n else {\n this.chipCollectionWrapper = this.createElement('span', {\n className: CHIP_WRAPPER,\n styles: 'display:none'\n });\n this.componentWrapper.appendChild(this.chipCollectionWrapper);\n }\n if (this.mode !== 'Box') {\n this.componentWrapper.appendChild(this.viewWrapper);\n }\n this.componentWrapper.appendChild(this.searchWrapper);\n if (this.showClearButton && !Browser.isDevice) {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n else {\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n this.dropDownIcon();\n this.inputElement = this.createElement('input', {\n className: INPUT_ELEMENT,\n attrs: {\n spellcheck: 'false',\n type: 'text',\n autocomplete: 'off',\n tabindex: '0'\n }\n });\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.overAllWrapper);\n this.searchWrapper.appendChild(this.inputElement);\n }\n else {\n this.element.parentElement.insertBefore(this.overAllWrapper, this.element);\n this.searchWrapper.appendChild(this.inputElement);\n this.searchWrapper.appendChild(this.element);\n this.element.removeAttribute('tabindex');\n }\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n else if (this.floatLabelType === 'Never') {\n this.refreshPlaceHolder();\n }\n this.element.style.opacity = '';\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement = this.createElement('select', {\n attrs: { 'aria-hidden': 'true', 'class': HIDDEN_ELEMENT, 'tabindex': '-1', 'multiple': 'true' }\n });\n this.componentWrapper.appendChild(this.hiddenElement);\n this.validationAttribute(this.element, this.hiddenElement);\n if (this.mode !== 'CheckBox') {\n this.hideOverAllClear();\n }\n this.wireEvent();\n this.enable(this.enabled);\n this.enableRTL(this.enableRtl);\n if ((this.value && this.value.length) || !isNullOrUndefined(this.text)) {\n this.renderPopup();\n }\n if (!isNullOrUndefined(this.text) && (isNullOrUndefined(this.value) || this.value.length === 0)) {\n this.initialTextUpdate();\n }\n if (this.value && this.value.length) {\n if (!(this.dataSource instanceof DataManager)) {\n this.initialValueUpdate();\n this.initialUpdate();\n }\n else {\n this.setInitialValue = function () {\n _this.initStatus = false;\n _this.initialValueUpdate();\n _this.initialUpdate();\n _this.setInitialValue = null;\n _this.initStatus = true;\n };\n }\n }\n else {\n this.initialUpdate();\n }\n this.initStatus = true;\n this.checkAutoFocus();\n };\n MultiSelect.prototype.checkAutoFocus = function () {\n if (this.element.hasAttribute('autofocus')) {\n this.focusIn();\n }\n };\n MultiSelect.prototype.setFloatLabelType = function () {\n removeFloating(this.overAllWrapper, this.componentWrapper, this.searchWrapper, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n };\n MultiSelect.prototype.dropDownIcon = function () {\n if (this.showDropDownIcon) {\n this.dropIcon = this.createElement('span', { className: dropdownIcon });\n this.componentWrapper.appendChild(this.dropIcon);\n addClass([this.componentWrapper], ['e-down-icon']);\n }\n else {\n if (!isNullOrUndefined(this.dropIcon)) {\n this.dropIcon.parentElement.removeChild(this.dropIcon);\n removeClass([this.componentWrapper], ['e-down-icon']);\n }\n }\n };\n MultiSelect.prototype.initialUpdate = function () {\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateCssClass();\n this.updateHTMLAttribute();\n this.updateReadonly(this.readonly);\n this.refreshInputHight();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n MultiSelect.prototype.destroy = function () {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n this.notify(destroy, {});\n this.unwireListEvents();\n this.unWireEvent();\n this.list = null;\n this.popupObj = null;\n this.mainList = null;\n this.mainData = null;\n _super.prototype.destroy.call(this);\n var temp = ['readonly', 'aria-disabled', 'aria-placeholder', 'placeholder'];\n var length = temp.length;\n while (length > 0) {\n this.inputElement.removeAttribute(temp[length - 1]);\n length--;\n }\n this.element.style.display = 'block';\n if (this.overAllWrapper.parentElement) {\n if (this.overAllWrapper.parentElement.tagName === this.getNgDirective()) {\n remove(this.overAllWrapper);\n }\n else {\n this.overAllWrapper.parentElement.insertBefore(this.element, this.overAllWrapper);\n remove(this.overAllWrapper);\n }\n }\n };\n ;\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], MultiSelect.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], MultiSelect.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowCustomValue\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(1000)\n ], MultiSelect.prototype, \"maximumSelectionLength\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"value\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"hideSelectedItem\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"closePopupOnSelect\", void 0);\n __decorate([\n Property('Default')\n ], MultiSelect.prototype, \"mode\", void 0);\n __decorate([\n Property(',')\n ], MultiSelect.prototype, \"delimiterChar\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showDropDownIcon\", void 0);\n __decorate([\n Property('Never')\n ], MultiSelect.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showSelectAll\", void 0);\n __decorate([\n Property('Select All')\n ], MultiSelect.prototype, \"selectAllText\", void 0);\n __decorate([\n Property('Unselect All')\n ], MultiSelect.prototype, \"unSelectAllText\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"enableSelectionOrder\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"openOnClick\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"selectedAll\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"chipSelection\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"tagging\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"customValueSelection\", void 0);\n MultiSelect = __decorate([\n NotifyPropertyChanges\n ], MultiSelect);\n return MultiSelect;\n}(DropDownBase));\nexport { MultiSelect };\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 * @hidden\n */\n function PagerDropDown(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get 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 * @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', { className: 'e-constant', innerHTML: this.pagerModule.getLocalizedLabel('pagerDropDown') });\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 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 * @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.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerAllDropDown');\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 if (this.pagerCons.innerHTML !== this.pagerModule.getLocalizedLabel('pagerDropDown')) {\n this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerDropDown');\n }\n }\n this.pagerModule.dataBind();\n this.pagerModule.trigger('dropDownChanged', { pageSize: this.dropDownListObject.value });\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[i] = typeof item[i] === 'number' ? item[i].toString() : item[i];\n }\n return item;\n };\n PagerDropDown.prototype.setDropDownValue = function (prop, value) {\n if (this.dropDownListObject) {\n this.dropDownListObject[prop] = 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 * @method destroy\n * @return {void}\n * @hidden\n */\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 * @param {Pager} pagerModule?\n * @returns defaultType\n * @hidden\n */\n function ExternalMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get 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 * @hidden\n */\n ExternalMessage.prototype.render = function () {\n this.element = createElement('div', { className: 'e-pagerexternalmsg', attrs: { 'aria-label': 'Pager external message' } });\n this.pagerModule.element.appendChild(this.element);\n this.refresh();\n };\n /**\n * Refreshes the external message of Pager.\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 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 ExternalMessage.prototype.showMessage = function () {\n this.element.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {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 } from '../base/util';\nimport * as events from '../base/constant';\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 * @hidden\n */\n function Page(parent, pageSettings) {\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 * @private\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * The function used to render pager from grid pageSettings\n * @return {void}\n * @hidden\n */\n Page.prototype.render = function () {\n var gObj = this.parent;\n var pagerObj;\n this.pagerDestroy();\n if (!isNullOrUndefined(this.parent.pagerTemplate)) {\n this.pageSettings.template = this.parent.pagerTemplate;\n }\n this.element = this.parent.createElement('div', { className: 'e-gridpager' });\n 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 this.pagerObj = new Pager(pagerObj);\n };\n Page.prototype.onSelect = function (e) {\n this.pageSettings.pageSize = e.pageSize;\n this.pageSettings.currentPage = 1;\n };\n Page.prototype.addAriaAttr = function () {\n var _this = this;\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[i].setAttribute('aria-owns', this.parent.getContentTable().id);\n }\n else {\n links[i].setAttribute('aria-owns', this.parent.element.getAttribute('id') + '_content_table');\n }\n var numericContainerDiv = this.parent.createElement('div');\n numericContainerDiv.appendChild(links[i]);\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 classList.forEach(function (value) {\n var element = _this.element.querySelector(value);\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 * @return {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 * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.pagerObj.goToPage(pageNo);\n };\n /**\n * The function used to update pageSettings model\n * @return {void}\n * @hidden\n */\n Page.prototype.updateModel = function (e) {\n this.parent.pageSettings.totalRecordsCount = e.count;\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {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 * @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) {\n if (!this.isForceCancel) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.goToPage, arg1: e.currentPage });\n this.isForceCancel = true;\n this.pagerObj.currentPage = gObj.pageSettings.currentPage;\n this.pagerObj.dataBind();\n }\n else {\n this.isForceCancel = false;\n }\n e.cancel = true;\n return;\n }\n gObj.prevPageMoving = false;\n var prevPage = this.pageSettings.currentPage;\n this.pageSettings.currentPage = e.currentPage;\n this.parent.notify(events.modelChanged, {\n requestType: 'paging',\n previousPage: prevPage,\n currentPage: e.currentPage,\n type: events.actionBegin\n });\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 * @param {string} message - Defines the message to update.\n * @return {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 (e) {\n this.parent.element.appendChild(this.element);\n this.parent.setGridPager(this.element);\n this.pagerObj.appendTo(this.element);\n };\n Page.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n this.appendToElement();\n }\n };\n /**\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 };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.handlers.load, this);\n this.parent.on(events.initialEnd, this.handlers.end, this); //For initial rendering\n this.parent.on(events.dataReady, this.handlers.ready, this);\n this.parent.on(events.pageComplete, this.handlers.complete, this);\n this.parent.on(events.uiUpdate, this.handlers.updateLayout, this);\n this.parent.on(events.inBoundModelChanged, this.handlers.inboundChange, this);\n this.parent.on(events.keyPressed, this.handlers.keyPress, this);\n };\n /**\n * @hidden\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.handlers.load);\n this.parent.off(events.initialEnd, this.handlers.end); //For initial rendering\n this.parent.off(events.dataReady, this.handlers.ready);\n this.parent.off(events.pageComplete, this.handlers.complete);\n this.parent.off(events.uiUpdate, this.handlers.updateLayout);\n this.parent.off(events.inBoundModelChanged, this.handlers.inboundChange);\n this.parent.off(events.keyPressed, this.handlers.keyPress);\n };\n /**\n * To destroy the pager\n * @return {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n this.pagerDestroy();\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","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 } 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';\n/**\n * FilterCellRenderer class which responsible for building filter cell.\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 * @returns string\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 * @param {Cell} cell\n * @param {Object} data\n */\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 element = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate');\n appendChildren(node, element);\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\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 if (!column.visible) {\n node.classList.add('e-hide');\n }\n this.appendHtml(node, innerDIV);\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 * @param {Element} node\n * @param {string|Element} innerHTML\n * @returns Element\n */\n FilterCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\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';\n/**\n * `filter operators` render boolean column.\n * @hidden\n */\nvar FlMenuOptrUI = /** @class */ (function () {\n function FlMenuOptrUI(parent, customFltrOperators, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.customFilterOperators = customFltrOperators;\n }\n /**\n * @hidden\n */\n FlMenuOptrUI.prototype.renderOperatorUI = function (dlgConetntEle, target, column, dlgObj) {\n this.dialogObj = dlgObj;\n var optr = column.type + 'Operator';\n this.optrData = this.customOptr = (!isNullOrUndefined(this.parent.filterSettings.operators) &&\n !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 open: this.dropDownOpen.bind(this),\n text: selectedValue\n });\n this.dropOptr.appendTo('#' + column.uid + '-floptr');\n };\n FlMenuOptrUI.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\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 selValue = this.optrData[0].text;\n }\n return selValue;\n };\n /**\n * @hidden\n */\n FlMenuOptrUI.prototype.getFlOperator = function () {\n return this.dropOptr.value;\n };\n return FlMenuOptrUI;\n}());\nexport { FlMenuOptrUI };\n","import { AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getZIndexCalcualtion } from '../base/util';\n/**\n * `string filterui` render string column.\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 }\n StringFilterUI.prototype.create = function (args) {\n var data;\n var floptr;\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.actObj = new AutoComplete(this.getAutoCompleteOptions(args));\n this.actObj.appendTo(this.instance);\n };\n StringFilterUI.prototype.getAutoCompleteOptions = function (args) {\n var _this = this;\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = { value: isForeignColumn ? args.column.foreignKeyValue : args.column.field };\n return {\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n query: this.parent.query.clone(),\n sortOrder: 'Ascending',\n open: this.openPopup.bind(this),\n cssClass: 'e-popup-flmenu',\n focus: function () {\n _this.actObj.filterType = args.getOptrInstance.getFlOperator();\n },\n autofill: true,\n placeholder: args.localizeText.getConstant('EnterValue'),\n actionComplete: function (e) {\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObj) {\n return mapObj[_this.actObj.fields.value];\n }).indexOf(obj[_this.actObj.fields.value]) === index;\n });\n }\n };\n };\n StringFilterUI.prototype.write = function (args) {\n var columns = this.filterSettings.columns;\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', false);\n };\n StringFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return StringFilterUI;\n}());\nexport { StringFilterUI };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\n/**\n * `numberfilterui` render number column.\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 }\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({\n format: args.column.format,\n locale: this.parent.locale,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('EnterValue'),\n enableRtl: this.parent.enableRtl,\n });\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.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 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 } from '@syncfusion/ej2-base';\n/**\n * `boolfilterui` render boolean column.\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 }\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({\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: 'e-popup-flmenu',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n actionComplete: function (e) {\n e.result = DataUtil.distinct(e.result, fields, true);\n }\n });\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.text = 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 return BooleanFilterUI;\n}());\nexport { BooleanFilterUI };\n","import { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getCustomDateFormat } from '../base/util';\n/**\n * `datefilterui` render date column.\n * @hidden\n */\nvar DateFilterUI = /** @class */ (function () {\n function DateFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.fltrSettings = filterSettings;\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') {\n this.datePickerObj = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n });\n }\n else if (args.column.type === 'datetime') {\n this.datePickerObj = new DateTimePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n });\n }\n this.datePickerObj.appendTo(this.inputElem);\n };\n DateFilterUI.prototype.write = function (args) {\n var columns = this.fltrSettings.columns;\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 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 } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * `filter menu` render boolean column.\n * @hidden\n */\nvar FilterMenuRenderer = /** @class */ (function () {\n function FilterMenuRenderer(parent, filterSettings, serviceLocator, customFltrOperators, fltrObj) {\n this.isDialogOpen = false;\n this.colTypes = {\n 'string': StringFilterUI, 'number': NumberFilterUI, 'date': 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 }\n FilterMenuRenderer.prototype.openDialog = function (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 () {\n if (!this.dlgObj) {\n return;\n }\n var elem = document.getElementById(this.dlgObj.element.id);\n if (this.dlgObj && !this.dlgObj.isDestroyed && elem) {\n this.parent.notify(events.filterMenuClose, { field: this.col.field });\n this.isDialogOpen = false;\n this.dlgObj.destroy();\n remove(elem);\n }\n };\n FilterMenuRenderer.prototype.renderDlgContent = function (target, column) {\n var args = {\n requestType: events.filterBeforeOpen, filterModel: this,\n columnName: column.field, columnType: column.type\n };\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.parent.element.appendChild(this.dlgDiv);\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, cssClass: 'e-flmenu-okbtn'\n }\n },\n {\n click: this.clearBtnClick.bind(this, column),\n buttonModel: { content: this.l10n.getConstant('ClearButton'), 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: 'e-filter-popup'\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n FilterMenuRenderer.prototype.dialogCreated = function (target, column) {\n if (!Browser.isDevice) {\n getFilterMenuPostion(target, this.dlgObj, this.parent);\n }\n this.renderFilterUI(target, column);\n this.parent.notify(events.filterDialogCreated, {});\n this.dlgObj.element.style.maxHeight = '350px';\n this.dlgObj.show();\n if (!column.filterTemplate) {\n this.writeMethod(column, this.dlgObj.element.querySelector('#' + column.uid + '-flmenu'));\n }\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: column.field, columnType: column.type\n };\n this.isDialogOpen = true;\n this.parent.trigger(events.actionComplete, args);\n };\n FilterMenuRenderer.prototype.renderFilterUI = function (target, col) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-flmenu-maindiv');\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);\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 args = { target: valueDiv, column: column, getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj };\n var instanceofFilterUI = new this.colTypes[column.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (column.filterTemplate) {\n var fltrData = {};\n fltrData[column.field] = fObj.values[column.field];\n if (column.foreignKeyValue) {\n fltrData[column.foreignKeyValue] = fObj.values[column.foreignKeyValue];\n }\n var col = 'column';\n fltrData[col] = column;\n var compElement = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate');\n appendChildren(valueDiv, compElement);\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.field === column.field || col.foreignKeyValue === column.field) {\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 flOptrValue;\n var targ = this.dlgObj.element.querySelector('.e-flmenu-valuediv input');\n 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 fltrValue = element.children[0].ej2_instances[0].value;\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 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 var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var column = this.parent.element.querySelector('[e-mappinguid=\"' + col.uid + '\"]').parentElement;\n var flIcon = column.querySelector(iconClass);\n if (flIcon) {\n flIcon.classList.add('e-filtered');\n }\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 ? '.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 return FilterMenuRenderer;\n}());\nexport { FilterMenuRenderer };\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 } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isVisible, closest, attributes, detach, classList, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { selectAll, setStyleAttribute as setStyle } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, getUniqueID, formatUnit, Collection, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Browser } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nvar CLS_VERTICAL = 'e-vertical';\nvar CLS_ITEMS = 'e-toolbar-items';\nvar CLS_ITEM = 'e-toolbar-item';\nvar CLS_RTL = 'e-rtl';\nvar CLS_SEPARATOR = 'e-separator';\nvar CLS_POPUPICON = 'e-popup-up-icon';\nvar CLS_POPUPDOWN = 'e-popup-down-icon';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_POPUPTEXT = 'e-toolbar-text';\nvar CLS_TBARTEXT = 'e-popup-text';\nvar CLS_TBAROVERFLOW = 'e-overflow-show';\nvar CLS_POPOVERFLOW = 'e-overflow-hide';\nvar CLS_TBARBTN = 'e-tbar-btn';\nvar CLS_TBARNAV = 'e-hor-nav';\nvar CLS_TBARSCRLNAV = 'e-scroll-nav';\nvar CLS_TBARRIGHT = 'e-toolbar-right';\nvar CLS_TBARLEFT = 'e-toolbar-left';\nvar CLS_TBARCENTER = 'e-toolbar-center';\nvar CLS_TBARPOS = 'e-tbar-pos';\nvar CLS_HSCROLLCNT = 'e-hscroll-content';\nvar CLS_VSCROLLCNT = 'e-vscroll-content';\nvar CLS_POPUPNAV = 'e-hor-nav';\nvar CLS_POPUPCLASS = 'e-toolbar-pop';\nvar CLS_POPUP = 'e-toolbar-popup';\nvar CLS_TBARBTNTEXT = 'e-tbar-btn-text';\nvar CLS_TBARNAVACT = 'e-nav-active';\nvar CLS_TBARIGNORE = 'e-ignore';\nvar CLS_POPPRI = 'e-popup-alone';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_MULTIROW = 'e-toolbar-multirow';\nvar CLS_MULTIROWPOS = 'e-multirow-pos';\nvar CLS_MULTIROW_SEPARATOR = 'e-multirow-separator';\nvar CLS_EXTENDABLE_ITEM = 'e-extended-item';\nvar CLS_EXTENDABLE_SEPARATOR = 'e-extended-separator';\nvar CLS_EXTEANDABLE_TOOLBAR = 'e-extended-toolbar';\nvar CLS_EXTENDABLECLASS = 'e-toolbar-extended';\nvar CLS_EXTENDPOPUP = 'e-expended-nav';\nvar CLS_EXTENDEDPOPOPEN = 'e-tbar-extended';\n/**\n * An item object that is used to configure Toolbar commands.\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, \"id\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], Item.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property('None')\n ], Item.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], Item.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], Item.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], Item.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], Item.prototype, \"align\", void 0);\n __decorate([\n Event()\n ], Item.prototype, \"click\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n/**\n * The Toolbar control contains a group of commands that are aligned horizontally.\n * ```html\n *
    \n * \n * ```\n */\nvar Toolbar = /** @class */ (function (_super) {\n __extends(Toolbar, _super);\n /**\n * Initializes a new instance of the Toolbar class.\n * @param options - Specifies Toolbar model properties as options.\n * @param element - Specifies the element that is rendered as a Toolbar.\n */\n function Toolbar(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Contains the keyboard configuration of the Toolbar.\n */\n _this.keyConfigs = {\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n popupOpen: 'enter',\n popupClose: 'escape',\n tab: 'tab',\n home: 'home',\n end: 'end',\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void.\n */\n Toolbar.prototype.destroy = function () {\n var _this = this;\n var ele = this.element;\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n this.tempId.forEach(function (ele) {\n if (!isNOU(_this.element.querySelector(ele))) {\n document.body.appendChild(_this.element.querySelector(ele)).style.display = 'none';\n }\n });\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n if (this.trgtEle) {\n ele.appendChild(this.ctrlTem);\n }\n this.clearProperty();\n this.popObj = null;\n this.tbarAlign = null;\n this.remove(this.element, 'e-toolpop');\n ele.removeAttribute('style');\n ['aria-disabled', 'aria-orientation', 'aria-haspopup', 'role'].forEach(function (attrb) {\n _this.element.removeAttribute(attrb);\n });\n };\n /**\n * Initialize the event handler\n * @private\n */\n Toolbar.prototype.preRender = function () {\n var eventArgs = { enableCollision: true, scrollStep: this.scrollStep };\n this.trigger('beforeCreate', eventArgs);\n this.enableCollision = eventArgs.enableCollision;\n this.scrollStep = eventArgs.scrollStep;\n this.scrollModule = null;\n this.popObj = null;\n this.tempId = [];\n this.tbarItemsCol = this.items;\n this.isVertical = this.element.classList.contains(CLS_VERTICAL) ? true : false;\n this.popupPriCount = 0;\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n window.addEventListener('resize', this.resize.bind(this));\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n EventHandler.add(this.element, 'keydown', this.docKeyDown, this);\n this.element.setAttribute('tabIndex', '0');\n };\n Toolbar.prototype.docKeyDown = function (e) {\n if (e.target.tagName === 'INPUT') {\n return;\n }\n var popCheck = !isNOU(this.popObj) && isVisible(this.popObj.element) && this.overflowMode !== 'Extended';\n if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && popCheck) {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n var keyCheck = (e.keyCode === 40 || e.keyCode === 38 || e.keyCode === 35 || e.keyCode === 36);\n if (keyCheck) {\n e.preventDefault();\n }\n };\n Toolbar.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n this.destroyScroll();\n this.keyModule.destroy();\n EventHandler.remove(document, 'scroll', this.docEvent);\n EventHandler.remove(this.element, 'keydown', this.docKeyDown);\n EventHandler.remove(document, 'click', this.docEvent);\n };\n Toolbar.prototype.clearProperty = function () {\n this.tbarEle = [];\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n };\n Toolbar.prototype.docEvent = function (e) {\n var popEle = closest(e.target, '.e-popup');\n if (this.popObj && isVisible(this.popObj.element) && !popEle && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n };\n Toolbar.prototype.destroyScroll = function () {\n if (this.scrollModule) {\n if (this.tbarAlign) {\n this.add(this.scrollModule.element, CLS_TBARPOS);\n }\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Toolbar.prototype.destroyItems = function () {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) {\n detach(el);\n });\n var tbarItems = this.element.querySelector('.' + CLS_ITEMS);\n if (this.tbarAlign) {\n [].slice.call(tbarItems.children).forEach(function (el) {\n detach(el);\n });\n this.tbarAlign = false;\n this.remove(tbarItems, CLS_TBARPOS);\n }\n this.clearProperty();\n };\n Toolbar.prototype.destroyMode = function () {\n if (this.scrollModule) {\n this.remove(this.scrollModule.element, CLS_RTL);\n this.destroyScroll();\n }\n this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n this.remove(this.element, CLS_EXTEANDABLE_TOOLBAR);\n var tempEle = this.element.querySelector('.e-toolbar-multirow');\n if (tempEle) {\n this.remove(tempEle, CLS_MULTIROW);\n }\n if (this.popObj) {\n this.popupRefresh(this.popObj.element, true);\n }\n };\n Toolbar.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Toolbar.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n Toolbar.prototype.elementFocus = function (ele) {\n var fChild = ele.firstElementChild;\n if (fChild) {\n fChild.focus();\n this.activeEleSwitch(ele);\n }\n else {\n ele.focus();\n }\n };\n Toolbar.prototype.clstElement = function (tbrNavChk, trgt) {\n var clst;\n if (tbrNavChk && this.popObj && isVisible(this.popObj.element)) {\n clst = this.popObj.element.querySelector('.' + CLS_ITEM);\n }\n else if (this.element === trgt || tbrNavChk) {\n clst = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' )');\n }\n else {\n clst = closest(trgt, '.' + CLS_ITEM);\n }\n return clst;\n };\n Toolbar.prototype.keyHandling = function (clst, e, trgt, navChk, scrollChk) {\n var popObj = this.popObj;\n var rootEle = this.element;\n var popAnimate = { name: 'FadeOut', duration: 100 };\n switch (e.action) {\n case 'moveRight':\n if (this.isVertical) {\n return;\n }\n if (rootEle === trgt) {\n this.elementFocus(clst);\n }\n else if (!navChk) {\n this.eleFocus(clst, 'next');\n }\n break;\n case 'moveLeft':\n if (this.isVertical) {\n return;\n }\n if (!navChk) {\n this.eleFocus(clst, 'previous');\n }\n break;\n case 'home':\n case 'end':\n var ele = void 0;\n var nodes = void 0;\n if (clst) {\n var popupCheck = closest(clst, '.e-popup');\n if (popupCheck) {\n if (isVisible(this.popObj.element)) {\n nodes = [].slice.call(popupCheck.children);\n if (e.action === 'home') {\n ele = nodes[0];\n }\n else {\n ele = nodes[nodes.length - 1];\n }\n }\n }\n else {\n nodes = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM);\n if (e.action === 'home') {\n ele = nodes[0];\n }\n else {\n ele = nodes[nodes.length - 1];\n }\n }\n if (ele) {\n this.elementFocus(ele);\n }\n }\n break;\n case 'moveUp':\n case 'moveDown':\n var value = e.action === 'moveUp' ? 'previous' : 'next';\n if (!this.isVertical) {\n if (popObj && closest(trgt, '.e-popup')) {\n var popEle = popObj.element;\n var popFrstEle = popEle.firstElementChild;\n if ((value === 'previous' && popFrstEle === clst) || (value === 'next' && popEle.lastElementChild === clst)) {\n return;\n }\n else {\n this.eleFocus(clst, value);\n }\n }\n else if (e.action === 'moveDown' && popObj && isVisible(popObj.element)) {\n this.elementFocus(clst);\n }\n }\n else {\n if (e.action === 'moveUp') {\n this.eleFocus(clst, 'previous');\n }\n else {\n this.eleFocus(clst, 'next');\n }\n }\n break;\n case 'tab':\n if (!scrollChk && !navChk) {\n var ele_1 = clst.firstElementChild;\n if (rootEle === trgt) {\n if (this.activeEle) {\n this.activeEle.focus();\n }\n else {\n this.activeEleRemove(ele_1);\n ele_1.focus();\n }\n this.element.removeAttribute('tabindex');\n }\n }\n break;\n case 'popupClose':\n if (popObj && this.overflowMode !== 'Extended') {\n popObj.hide(popAnimate);\n }\n break;\n case 'popupOpen':\n if (!navChk) {\n return;\n }\n if (popObj && !isVisible(popObj.element)) {\n popObj.element.style.top = rootEle.offsetHeight + 'px';\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n else {\n popObj.hide(popAnimate);\n }\n break;\n }\n };\n Toolbar.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n if (trgt.tagName === 'INPUT' || trgt.tagName === 'TEXTAREA' || this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n e.preventDefault();\n var clst;\n var tbrNavChk = trgt.classList.contains(CLS_TBARNAV);\n var tbarScrollChk = trgt.classList.contains(CLS_TBARSCRLNAV);\n clst = this.clstElement(tbrNavChk, trgt);\n if (clst || tbarScrollChk) {\n this.keyHandling(clst, e, trgt, tbrNavChk, tbarScrollChk);\n }\n };\n /**\n * Specifies the value to disable/enable the Toolbar component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, Toolbar will be enabled (false) or disabled (true).\n * @returns void.\n */\n Toolbar.prototype.disable = function (value) {\n var rootEle = this.element;\n value ? rootEle.classList.add(CLS_DISABLE) : rootEle.classList.remove(CLS_DISABLE);\n rootEle.setAttribute('tabindex', !value ? '0' : '-1');\n if (this.activeEle) {\n this.activeEle.setAttribute('tabindex', !value ? '0' : '-1');\n }\n if (this.scrollModule) {\n this.scrollModule.disable(value);\n }\n if (this.popObj) {\n if (isVisible(this.popObj.element) && this.overflowMode !== 'Extended') {\n this.popObj.hide();\n }\n rootEle.querySelector('#' + rootEle.id + '_nav').setAttribute('tabindex', !value ? '0' : '-1');\n }\n };\n Toolbar.prototype.eleFocus = function (closest, pos) {\n var sib = Object(closest)[pos + 'ElementSibling'];\n var contains = function (el) {\n return el.classList.contains(CLS_SEPARATOR) || el.classList.contains(CLS_DISABLE);\n };\n if (sib) {\n var skipEle = contains(sib);\n if (skipEle) {\n if (Object(sib)[pos + 'ElementSibling']) {\n sib = Object(sib)[pos + 'ElementSibling'];\n skipEle = contains(sib);\n if (skipEle) {\n this.eleFocus(sib, pos);\n return;\n }\n }\n else {\n return;\n }\n }\n this.elementFocus(sib);\n }\n else if (this.tbarAlign) {\n var elem = Object(closest.parentElement)[pos + 'ElementSibling'];\n if (!isNOU(elem) && elem.children.length === 0) {\n elem = Object(elem)[pos + 'ElementSibling'];\n }\n if (!isNOU(elem) && elem.children.length > 0) {\n if (pos === 'next') {\n var el = elem.querySelector('.' + CLS_ITEM);\n if (contains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n el.firstElementChild.focus();\n this.activeEleSwitch(el);\n }\n }\n else {\n var el = elem.lastElementChild;\n if (contains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n this.elementFocus(el);\n }\n }\n }\n }\n };\n Toolbar.prototype.clickHandler = function (e) {\n var trgt = e.target;\n var clsList = trgt.classList;\n var ele = this.element;\n var isPopupElement = !isNOU(closest(trgt, '.' + CLS_POPUPCLASS));\n var popupNav = closest(trgt, ('.' + CLS_TBARNAV));\n if (!popupNav) {\n popupNav = trgt;\n }\n if (!ele.children[0].classList.contains('e-hscroll') && !ele.children[0].classList.contains('e-vscroll')\n && (clsList.contains(CLS_TBARNAV))) {\n clsList = trgt.querySelector('.e-icons').classList;\n }\n if (clsList.contains(CLS_POPUPICON) || clsList.contains(CLS_POPUPDOWN)) {\n this.popupClickHandler(ele, popupNav, CLS_RTL);\n }\n var itemObj;\n var clst = closest(e.target, '.' + CLS_ITEM);\n if ((isNOU(clst) || clst.classList.contains(CLS_DISABLE)) && !popupNav.classList.contains(CLS_TBARNAV)) {\n return;\n }\n if (clst) {\n itemObj = this.items[this.tbarEle.indexOf(clst)];\n }\n var eventArgs = { originalEvent: e, item: itemObj };\n if (itemObj && !isNOU(itemObj.click)) {\n this.trigger('items[' + this.tbarEle.indexOf(clst) + '].click', eventArgs);\n }\n if (!eventArgs.cancel) {\n this.trigger('clicked', eventArgs);\n }\n if (!isNOU(this.popObj) && isPopupElement && !eventArgs.cancel && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n };\n ;\n Toolbar.prototype.popupClickHandler = function (ele, popupNav, CLS_RTL) {\n var popObj = this.popObj;\n if (isVisible(popObj.element)) {\n popupNav.classList.remove(CLS_TBARNAVACT);\n popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n else {\n if (ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = true;\n popObj.position = { X: 'left', Y: 'top' };\n }\n if (popObj.offsetX === 0 && !ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = false;\n popObj.position = { X: 'right', Y: 'top' };\n }\n popObj.dataBind();\n popObj.refreshPosition();\n popObj.element.style.top = this.getElementOffsetY() + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '0px';\n }\n popupNav.classList.add(CLS_TBARNAVACT);\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Toolbar.prototype.render = function () {\n this.initialize();\n this.renderControl();\n this.separator();\n this.wireEvents();\n };\n Toolbar.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n if (Browser.info.name !== 'msie' || this.height !== 'auto' || this.overflowMode === 'MultiRow') {\n setStyle(this.element, { 'height': height });\n }\n setStyle(this.element, { 'width': width });\n var ariaAttr = {\n 'role': 'toolbar', 'aria-disabled': 'false', 'aria-haspopup': 'false',\n 'aria-orientation': !this.isVertical ? 'horizontal' : 'vertical',\n };\n attributes(this.element, ariaAttr);\n };\n Toolbar.prototype.renderControl = function () {\n this.trgtEle = (this.element.children.length > 0) ? this.element.querySelector('div') : null;\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n this.renderItems();\n this.renderOverflowMode();\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.popObj.element.childElementCount > 1 && this.checkPopupRefresh(this.element, this.popObj.element)) {\n this.popupRefresh(this.popObj.element, false);\n }\n };\n /** @hidden */\n Toolbar.prototype.changeOrientation = function () {\n var ele = this.element;\n if (this.isVertical) {\n ele.classList.remove(CLS_VERTICAL);\n this.isVertical = false;\n if (this.height === 'auto' || this.height === '100%') {\n ele.style.height = this.height;\n }\n ele.setAttribute('aria-orientation', 'horizontal');\n }\n else {\n ele.classList.add(CLS_VERTICAL);\n this.isVertical = true;\n ele.setAttribute('aria-orientation', 'vertical');\n setStyle(this.element, { 'height': formatUnit(this.height), 'width': formatUnit(this.width) });\n }\n this.destroyMode();\n this.refreshOverflow();\n };\n Toolbar.prototype.initScroll = function (element, innerItems) {\n if (!this.scrollModule && this.checkOverflow(element, innerItems[0])) {\n if (this.tbarAlign) {\n this.element.querySelector('.' + CLS_ITEMS + ' .' + CLS_TBARCENTER).removeAttribute('style');\n }\n if (this.isVertical) {\n this.scrollModule = new VScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl }, innerItems[0]);\n }\n else {\n this.scrollModule = new HScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl }, innerItems[0]);\n }\n this.remove(this.scrollModule.element, CLS_TBARPOS);\n setStyle(this.element, { overflow: 'hidden' });\n }\n };\n Toolbar.prototype.itemWidthCal = function (items) {\n var _this = this;\n var width = 0;\n var style;\n [].slice.call(selectAll('.' + CLS_ITEM, items)).forEach(function (el) {\n if (isVisible(el)) {\n style = window.getComputedStyle(el);\n width += _this.isVertical ? el.offsetHeight : el.offsetWidth;\n width += parseFloat(_this.isVertical ? style.marginTop : style.marginRight);\n width += parseFloat(_this.isVertical ? style.marginBottom : style.marginLeft);\n }\n });\n return width;\n };\n Toolbar.prototype.getScrollCntEle = function (innerItem) {\n var trgClass = (this.isVertical) ? '.e-vscroll-content' : '.e-hscroll-content';\n return innerItem.querySelector(trgClass);\n };\n Toolbar.prototype.checkOverflow = function (element, innerItem) {\n if (isNOU(element) || isNOU(innerItem) || !isVisible(element)) {\n return false;\n }\n var eleWidth = this.isVertical ? element.offsetHeight : element.offsetWidth;\n var itemWidth = this.isVertical ? innerItem.offsetHeight : innerItem.offsetWidth;\n if (this.tbarAlign || this.scrollModule || (eleWidth === itemWidth)) {\n itemWidth = this.itemWidthCal(this.scrollModule ? this.getScrollCntEle(innerItem) : innerItem);\n }\n var popNav = element.querySelector('.' + CLS_TBARNAV);\n var scrollNav = element.querySelector('.' + CLS_TBARSCRLNAV);\n var navEleWidth = 0;\n if (popNav) {\n navEleWidth = this.isVertical ? popNav.offsetHeight : popNav.offsetWidth;\n }\n else if (scrollNav) {\n navEleWidth = this.isVertical ? (scrollNav.offsetHeight * (2)) : (scrollNav.offsetWidth * 2);\n }\n if (itemWidth > eleWidth - navEleWidth) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Refresh the whole Toolbar component without re-rendering.\n * - It is used to manually refresh the Toolbar overflow modes such as scrollable, popup, multi row, and extended.\n * - It will refresh the Toolbar component after loading items dynamically.\n * @returns void.\n */\n Toolbar.prototype.refreshOverflow = function () {\n this.resize();\n };\n Toolbar.prototype.renderOverflowMode = function () {\n var ele = this.element;\n var innerItems = ele.querySelector('.' + CLS_ITEMS);\n var priorityCheck = this.popupPriCount > 0;\n if (ele && ele.children.length > 0) {\n this.offsetWid = ele.offsetWidth;\n this.remove(this.element, 'e-toolpop');\n if (Browser.info.name === 'msie' && this.height === 'auto') {\n ele.style.height = '';\n }\n switch (this.overflowMode) {\n case 'Scrollable':\n if (isNOU(this.scrollModule)) {\n this.initScroll(ele, ele.getElementsByClassName(CLS_ITEMS));\n }\n break;\n case 'Popup':\n this.add(this.element, 'e-toolpop');\n if (this.tbarAlign) {\n this.removePositioning();\n }\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n this.element.querySelector('.' + CLS_TBARNAV).setAttribute('tabIndex', '0');\n }\n if (this.tbarAlign) {\n this.add(innerItems, CLS_TBARPOS);\n this.itemPositioning();\n }\n break;\n case 'MultiRow':\n this.add(innerItems, CLS_MULTIROW);\n if (this.checkOverflow(ele, innerItems) && this.tbarAlign) {\n this.removePositioning();\n this.add(innerItems, CLS_MULTIROWPOS);\n }\n if (ele.style.overflow === 'hidden') {\n ele.style.overflow = '';\n }\n if (Browser.info.name === 'msie' || ele.style.height !== 'auto') {\n ele.style.height = 'auto';\n }\n break;\n case 'Extended':\n this.add(this.element, CLS_EXTEANDABLE_TOOLBAR);\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n this.element.querySelector('.' + CLS_TBARNAV).setAttribute('tabIndex', '0');\n }\n }\n }\n };\n Toolbar.prototype.separator = function () {\n var element = this.element;\n var eleItem = [].slice.call(element.querySelectorAll('.' + CLS_SEPARATOR));\n var eleInlineItem;\n var multiVar = element.querySelector('.' + CLS_MULTIROW_SEPARATOR);\n var extendVar = element.querySelector('.' + CLS_EXTENDABLE_SEPARATOR);\n eleInlineItem = this.overflowMode === 'MultiRow' ? multiVar : extendVar;\n if (eleInlineItem !== null) {\n if (this.overflowMode === 'MultiRow') {\n eleInlineItem.classList.remove(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleInlineItem.classList.remove(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n for (var i = 0; i <= eleItem.length - 1; i++) {\n if (eleItem[i].offsetLeft < 30 && eleItem[i].offsetLeft !== 0) {\n if (this.overflowMode === 'MultiRow') {\n eleItem[i].classList.add(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleItem[i].classList.add(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n }\n };\n Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var vertical = this.isVertical;\n if (!innerNav) {\n this.createPopupIcon(ele);\n }\n innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var innerNavDom = (vertical ? innerNav.offsetHeight : innerNav.offsetWidth);\n var eleWidth = ((vertical ? ele.offsetHeight : ele.offsetWidth) - (innerNavDom));\n this.element.classList.remove('e-rtl');\n setStyle(this.element, { direction: 'initial' });\n this.checkPriority(ele, innerEle, eleWidth, true);\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n this.element.style.removeProperty('direction');\n this.createPopup();\n };\n Toolbar.prototype.pushingPoppedEle = function (tbarObj, popupPri, ele, eleHeight, sepHeight) {\n var element = tbarObj.element;\n var nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n var nodeIndex = 0;\n var poppedEle = [].slice.call(selectAll('.' + CLS_POPUP, element.querySelector('.' + CLS_ITEMS)));\n var nodePri = 0;\n poppedEle.forEach(function (el, index) {\n nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n if (el.classList.contains(CLS_TBAROVERFLOW) && nodes.length > 0) {\n if (tbarObj.tbResize && nodes.length > index) {\n ele.insertBefore(el, nodes[index]);\n ++nodePri;\n }\n else {\n ele.insertBefore(el, ele.children[nodes.length]);\n ++nodePri;\n }\n }\n else if (el.classList.contains(CLS_TBAROVERFLOW)) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (tbarObj.tbResize && el.classList.contains(CLS_POPOVERFLOW) && ele.children.length > 0 && nodes.length === 0) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (el.classList.contains(CLS_POPOVERFLOW)) {\n popupPri.push(el);\n }\n else if (tbarObj.tbResize) {\n ele.insertBefore(el, ele.childNodes[nodeIndex + nodePri]);\n ++nodeIndex;\n }\n else {\n ele.appendChild(el);\n }\n if (el.classList.contains(CLS_SEPARATOR)) {\n setStyle(el, { display: '', height: sepHeight + 'px' });\n }\n else {\n setStyle(el, { display: '', height: eleHeight + 'px' });\n }\n });\n popupPri.forEach(function (el) {\n ele.appendChild(el);\n });\n var tbarEle = selectAll('.' + CLS_ITEM, element.querySelector('.' + CLS_ITEMS));\n for (var i = tbarEle.length - 1; i >= 0; i--) {\n var tbarElement = tbarEle[i];\n if (tbarElement.classList.contains(CLS_SEPARATOR) && this.overflowMode !== 'Extended') {\n setStyle(tbarElement, { display: 'none' });\n }\n else {\n break;\n }\n }\n };\n Toolbar.prototype.createPopup = function () {\n var element = this.element;\n var eleHeight;\n var eleItem;\n var sepHeight;\n var sepItem;\n if (this.overflowMode === 'Extended') {\n sepItem = element.querySelector('.' + CLS_SEPARATOR + ':not(.' + CLS_POPUP + ')');\n sepHeight = (element.style.height === 'auto' || element.style.height === '') ? null : sepItem.offsetHeight;\n }\n eleItem = element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_POPUP + ')');\n eleHeight = (element.style.height === 'auto' || element.style.height === '') ? null : (eleItem && eleItem.offsetHeight);\n var ele;\n var popupPri = [];\n if (element.querySelector('#' + element.id + '_popup.' + CLS_POPUPCLASS)) {\n ele = element.querySelector('#' + element.id + '_popup.' + CLS_POPUPCLASS);\n }\n else {\n var extendEle = this.createElement('div', {\n id: element.id + '_popup', className: CLS_POPUPCLASS + ' ' + CLS_EXTENDABLECLASS\n });\n var popupEle = this.createElement('div', { id: element.id + '_popup', className: CLS_POPUPCLASS });\n ele = this.overflowMode === 'Extended' ? extendEle : popupEle;\n }\n this.pushingPoppedEle(this, popupPri, ele, eleHeight, sepHeight);\n this.popupInit(element, ele);\n };\n Toolbar.prototype.getElementOffsetY = function () {\n return (this.overflowMode === 'Extended' && window.getComputedStyle(this.element).getPropertyValue('box-sizing') === 'border-box' ?\n this.element.clientHeight : this.element.offsetHeight);\n };\n Toolbar.prototype.popupInit = function (element, ele) {\n if (!this.popObj) {\n element.appendChild(ele);\n setStyle(this.element, { overflow: '' });\n var eleStyles = window.getComputedStyle(this.element);\n var popup = new Popup(null, {\n relateTo: this.element,\n offsetY: (this.isVertical) ? 0 : this.getElementOffsetY(),\n enableRtl: this.enableRtl,\n open: this.popupOpen.bind(this),\n close: this.popupClose.bind(this),\n collision: { Y: this.enableCollision ? 'flip' : 'none' },\n position: this.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }\n });\n popup.appendTo(ele);\n if (this.overflowMode === 'Extended') {\n popup.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n popup.offsetX = 0;\n }\n EventHandler.add(document, 'scroll', this.docEvent.bind(this));\n EventHandler.add(document, 'click ', this.docEvent.bind(this));\n popup.element.style.maxHeight = popup.element.offsetHeight + 'px';\n if (this.isVertical) {\n popup.element.style.visibility = 'hidden';\n }\n popup.hide();\n this.popObj = popup;\n this.element.setAttribute('aria-haspopup', 'true');\n }\n else {\n var popupEle = this.popObj.element;\n setStyle(popupEle, { maxHeight: '', display: 'block' });\n setStyle(popupEle, { maxHeight: popupEle.offsetHeight + 'px', display: '' });\n }\n };\n Toolbar.prototype.tbarPopupHandler = function (isOpen) {\n if (this.overflowMode === 'Extended') {\n isOpen ? this.add(this.element, CLS_EXTENDEDPOPOPEN) : this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n }\n };\n Toolbar.prototype.popupOpen = function (e) {\n var popObj = this.popObj;\n if (!this.isVertical) {\n popObj.offsetY = this.getElementOffsetY();\n popObj.dataBind();\n }\n var popupEle = this.popObj.element;\n var toolEle = this.popObj.element.parentElement;\n var popupNav = toolEle.querySelector('.' + CLS_TBARNAV);\n setStyle(popObj.element, { height: 'auto', maxHeight: '' });\n popObj.element.style.maxHeight = popObj.element.offsetHeight + 'px';\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '';\n }\n var popupElePos = popupEle.offsetTop + popupEle.offsetHeight + calculatePosition(toolEle).top;\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n this.tbarPopupHandler(true);\n var scrollVal = isNOU(window.scrollY) ? 0 : window.scrollY;\n if (!this.isVertical && ((window.innerHeight + scrollVal) < popupElePos) && (this.element.offsetTop < popupEle.offsetHeight)) {\n var overflowHeight = (popupEle.offsetHeight - ((popupElePos - window.innerHeight - scrollVal) + 5));\n popObj.height = overflowHeight + 'px';\n for (var i = 0; i <= popupEle.childElementCount; i++) {\n var ele = popupEle.children[i];\n if (ele.offsetTop + ele.offsetHeight > overflowHeight) {\n overflowHeight = ele.offsetTop;\n break;\n }\n }\n setStyle(popObj.element, { maxHeight: overflowHeight + 'px' });\n }\n else if (this.isVertical) {\n var tbEleData = this.element.getBoundingClientRect();\n setStyle(popObj.element, { maxHeight: (tbEleData.top + this.element.offsetHeight) + 'px', bottom: 0, visibility: '' });\n }\n };\n Toolbar.prototype.popupClose = function (e) {\n var element = this.element;\n var popupNav = element.querySelector('.' + CLS_TBARNAV);\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.remove(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPDOWN], [CLS_POPUPICON]);\n this.tbarPopupHandler(false);\n };\n Toolbar.prototype.checkPriority = function (ele, inEle, eleWidth, pre) {\n var popPriority = this.popupPriCount > 0;\n var len = inEle.length;\n var eleWid = eleWidth;\n var eleOffset;\n var checkoffset;\n var sepCheck = 0;\n var itemCount = 0;\n var itemPopCount = 0;\n var checkClass = function (ele, val) {\n var rVal = false;\n val.forEach(function (cls) {\n if (ele.classList.contains(cls)) {\n rVal = true;\n }\n });\n return rVal;\n };\n for (var i = len - 1; i >= 0; i--) {\n var mrgn = void 0;\n var compuStyle = window.getComputedStyle(inEle[i]);\n if (this.isVertical) {\n mrgn = parseFloat((compuStyle).marginTop);\n mrgn += parseFloat((compuStyle).marginBottom);\n }\n else {\n mrgn = parseFloat((compuStyle).marginRight);\n mrgn += parseFloat((compuStyle).marginLeft);\n }\n var fstEleCheck = inEle[i] === this.tbarEle[0];\n if (fstEleCheck) {\n this.tbarEleMrgn = mrgn;\n }\n eleOffset = this.isVertical ? inEle[i].offsetHeight : inEle[i].offsetWidth;\n var eleWid_1 = fstEleCheck ? (eleOffset + mrgn) : eleOffset;\n if (checkClass(inEle[i], [CLS_POPPRI]) && popPriority) {\n inEle[i].classList.add(CLS_POPUP);\n if (this.isVertical) {\n setStyle(inEle[i], { display: 'none', minHeight: eleWid_1 + 'px' });\n }\n else {\n setStyle(inEle[i], { display: 'none', minWidth: eleWid_1 + 'px' });\n }\n itemPopCount++;\n }\n if (this.isVertical) {\n checkoffset = (inEle[i].offsetTop + inEle[i].offsetHeight + mrgn) > eleWidth;\n }\n else {\n checkoffset = (inEle[i].offsetLeft + inEle[i].offsetWidth + mrgn) > eleWidth;\n }\n if (checkoffset) {\n if (inEle[i].classList.contains(CLS_SEPARATOR)) {\n if (this.overflowMode === 'Extended') {\n if (itemCount === itemPopCount) {\n var sepEle = inEle[i];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[i].classList.add(CLS_POPUP);\n itemPopCount++;\n }\n }\n itemCount++;\n }\n else if (this.overflowMode === 'Popup') {\n if (sepCheck > 0 && itemCount === itemPopCount) {\n var sepEle = inEle[i + itemCount + (sepCheck - 1)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n setStyle(sepEle, { display: 'none' });\n }\n }\n sepCheck++;\n itemCount = 0;\n itemPopCount = 0;\n }\n }\n else {\n itemCount++;\n }\n if (inEle[i].classList.contains(CLS_TBAROVERFLOW) && pre) {\n eleWidth -= ((this.isVertical ? inEle[i].offsetHeight : inEle[i].offsetWidth) + (mrgn));\n }\n else if (!checkClass(inEle[i], [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[i].classList.add(CLS_POPUP);\n if (this.isVertical) {\n setStyle(inEle[i], { display: 'none', minHeight: eleWid_1 + 'px' });\n }\n else {\n setStyle(inEle[i], { display: 'none', minWidth: eleWid_1 + 'px' });\n }\n itemPopCount++;\n }\n else {\n eleWidth -= ((this.isVertical ? inEle[i].offsetHeight : inEle[i].offsetWidth) + (mrgn));\n }\n }\n }\n if (pre) {\n var popedEle = selectAll('.' + CLS_ITEM + ':not(.' + CLS_POPUP + ')', this.element);\n this.checkPriority(ele, popedEle, eleWid, false);\n }\n };\n Toolbar.prototype.createPopupIcon = function (element) {\n var id = element.id.concat('_nav');\n var className = 'e-' + element.id.concat('_nav ' + CLS_POPUPNAV);\n className = this.overflowMode === 'Extended' ? className + ' ' + CLS_EXTENDPOPUP : className;\n var nav = this.createElement('div', { id: id, className: className });\n if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n nav.classList.add('e-ie-align');\n }\n var navItem = this.createElement('div', { className: CLS_POPUPDOWN + ' e-icons' });\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n };\n Toolbar.prototype.tbarPriRef = function (inEle, indx, sepPri, el, des, elWid, wid, ig) {\n var ignoreCount = ig;\n var popEle = this.popObj.element;\n var query = '.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_TBAROVERFLOW + ')';\n var priEleCnt = selectAll('.' + CLS_POPUP + ':not(.' + CLS_TBAROVERFLOW + ')', popEle).length;\n var checkClass = function (ele, val) {\n return ele.classList.contains(val);\n };\n if (selectAll(query, inEle).length === 0) {\n var eleSep = inEle.children[indx - (indx - sepPri) - 1];\n var ignoreCheck = (!isNOU(eleSep) && checkClass(eleSep, CLS_TBARIGNORE));\n if ((!isNOU(eleSep) && checkClass(eleSep, CLS_SEPARATOR) && !isVisible(eleSep)) || ignoreCheck) {\n var sepDisplay = 'none';\n eleSep.style.display = 'inherit';\n var eleSepWidth = eleSep.offsetWidth + (parseFloat(window.getComputedStyle(eleSep).marginRight) * 2);\n var prevSep = eleSep.previousElementSibling;\n if ((elWid + eleSepWidth) < wid || des) {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n if (!isNOU(prevSep)) {\n prevSep.style.display = '';\n }\n }\n else {\n if (prevSep.classList.contains(CLS_SEPARATOR)) {\n prevSep.style.display = sepDisplay;\n }\n }\n eleSep.style.display = '';\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n }\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - priEleCnt]);\n }\n };\n Toolbar.prototype.popupRefresh = function (popupEle, destroy) {\n var _this = this;\n var ele = this.element;\n var isVer = this.isVertical;\n var popNav = ele.querySelector('.' + CLS_TBARNAV);\n var innerEle = ele.querySelector('.' + CLS_ITEMS);\n if (isNOU(popNav)) {\n return;\n }\n innerEle.removeAttribute('style');\n popupEle.style.display = 'block';\n var dimension;\n if (isVer) {\n dimension = ele.offsetHeight - (popNav.offsetHeight + innerEle.offsetHeight);\n }\n else {\n dimension = ele.offsetWidth - (popNav.offsetWidth + innerEle.offsetWidth);\n }\n var popupEleWidth = 0;\n [].slice.call(popupEle.children).forEach(function (el) {\n popupEleWidth += _this.popupEleWidth(el);\n setStyle(el, { 'position': '' });\n });\n if ((dimension + (isVer ? popNav.offsetHeight : popNav.offsetWidth)) > (popupEleWidth) && this.popupPriCount === 0) {\n destroy = true;\n }\n this.popupEleRefresh(dimension, popupEle, destroy);\n popupEle.style.display = '';\n if (popupEle.children.length === 0 && popNav && this.popObj) {\n detach(popNav);\n popNav = null;\n this.popObj.destroy();\n detach(this.popObj.element);\n this.popObj = null;\n ele.setAttribute('aria-haspopup', 'false');\n ele.classList.remove('e-toolpop');\n }\n };\n Toolbar.prototype.ignoreEleFetch = function (index, innerEle) {\n var ignoreEle = [].slice.call(innerEle.querySelectorAll('.' + CLS_TBARIGNORE));\n var ignoreInx = [];\n var count = 0;\n if (ignoreEle.length > 0) {\n ignoreEle.forEach(function (ele) {\n ignoreInx.push([].slice.call(innerEle.children).indexOf(ele));\n });\n }\n else {\n return 0;\n }\n ignoreInx.forEach(function (val) {\n if (val <= index) {\n count++;\n }\n });\n return count;\n };\n Toolbar.prototype.checkPopupRefresh = function (root, popEle) {\n popEle.style.display = 'block';\n var elWid = this.popupEleWidth(popEle.firstElementChild);\n popEle.firstElementChild.style.removeProperty('Position');\n var tbarWidth = root.offsetWidth - root.querySelector('.' + CLS_TBARNAV).offsetWidth;\n var tbarItemsWid = root.querySelector('.' + CLS_ITEMS).offsetWidth;\n popEle.style.removeProperty('display');\n if (tbarWidth > (elWid + tbarItemsWid)) {\n return true;\n }\n return false;\n };\n Toolbar.prototype.popupEleWidth = function (el) {\n el.style.position = 'absolute';\n var elWidth = this.isVertical ? el.offsetHeight : el.offsetWidth;\n var btnText = el.querySelector('.' + CLS_TBARBTNTEXT);\n if (el.classList.contains('e-tbtn-align') || el.classList.contains(CLS_TBARTEXT)) {\n var btn = el.children[0];\n if (!isNOU(btnText) && el.classList.contains(CLS_TBARTEXT)) {\n btnText.style.display = 'none';\n }\n else if (!isNOU(btnText) && el.classList.contains(CLS_POPUPTEXT)) {\n btnText.style.display = 'block';\n }\n btn.style.minWidth = '0%';\n elWidth = parseFloat(!this.isVertical ? el.style.minWidth : el.style.minHeight);\n btn.style.minWidth = '';\n btn.style.minHeight = '';\n if (!isNOU(btnText)) {\n btnText.style.display = '';\n }\n }\n return elWidth;\n };\n Toolbar.prototype.popupEleRefresh = function (width, popupEle, destroy) {\n var popPriority = this.popupPriCount > 0;\n var eleSplice = this.tbarEle;\n var priEleCnt;\n var index;\n var checkOverflow;\n var innerEle = this.element.querySelector('.' + CLS_ITEMS);\n var ignoreCount = 0;\n var _loop_1 = function (el) {\n if (el.classList.contains(CLS_POPPRI) && popPriority && !destroy) {\n return \"continue\";\n }\n var elWidth = this_1.popupEleWidth(el);\n if (el === this_1.tbarEle[0]) {\n elWidth += this_1.tbarEleMrgn;\n }\n el.style.position = '';\n if (elWidth < width || destroy) {\n setStyle(el, { minWidth: '', height: '', minHeight: '' });\n if (!el.classList.contains(CLS_POPOVERFLOW)) {\n el.classList.remove(CLS_POPUP);\n }\n index = this_1.tbarEle.indexOf(el);\n if (this_1.tbarAlign) {\n var pos = this_1.items[index].align;\n index = this_1.tbarAlgEle[(pos + 's').toLowerCase()].indexOf(el);\n eleSplice = this_1.tbarAlgEle[(pos + 's').toLowerCase()];\n innerEle = this_1.element.querySelector('.' + CLS_ITEMS + ' .' + 'e-toolbar-' + pos.toLowerCase());\n }\n var sepBeforePri_1 = 0;\n if (this_1.overflowMode !== 'Extended') {\n eleSplice.slice(0, index).forEach(function (el) {\n if (el.classList.contains(CLS_TBAROVERFLOW) || el.classList.contains(CLS_SEPARATOR)) {\n if (el.classList.contains(CLS_SEPARATOR)) {\n el.style.display = '';\n width -= el.offsetWidth;\n }\n sepBeforePri_1++;\n }\n });\n }\n ignoreCount = this_1.ignoreEleFetch(index, innerEle);\n if (el.classList.contains(CLS_TBAROVERFLOW)) {\n this_1.tbarPriRef(innerEle, index, sepBeforePri_1, el, destroy, elWidth, width, ignoreCount);\n width -= el.offsetWidth;\n }\n else if (index === 0) {\n innerEle.insertBefore(el, innerEle.firstChild);\n width -= el.offsetWidth;\n }\n else {\n priEleCnt = selectAll('.' + CLS_TBAROVERFLOW, this_1.popObj.element).length;\n innerEle.insertBefore(el, innerEle.children[(index + ignoreCount) - priEleCnt]);\n width -= el.offsetWidth;\n }\n el.style.height = '';\n }\n else {\n return \"break\";\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = [].slice.call(popupEle.children); _i < _a.length; _i++) {\n var el = _a[_i];\n var state_1 = _loop_1(el);\n if (state_1 === \"break\")\n break;\n }\n checkOverflow = this.checkOverflow(this.element, this.element.getElementsByClassName(CLS_ITEMS)[0]);\n if (checkOverflow && !destroy) {\n this.renderOverflowMode();\n }\n };\n Toolbar.prototype.removePositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n this.remove(item, CLS_TBARPOS);\n var innerItem = [].slice.call(item.childNodes);\n innerItem[1].removeAttribute('style');\n innerItem[2].removeAttribute('style');\n };\n Toolbar.prototype.refreshPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n this.add(item, CLS_TBARPOS);\n this.itemPositioning();\n };\n Toolbar.prototype.itemPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n var margin;\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n var innerItem;\n if (this.scrollModule) {\n var trgClass = (this.isVertical) ? CLS_VSCROLLCNT : CLS_HSCROLLCNT;\n innerItem = [].slice.call(item.querySelector('.' + trgClass).children);\n }\n else {\n innerItem = [].slice.call(item.childNodes);\n }\n if (this.isVertical) {\n margin = innerItem[0].offsetHeight + innerItem[2].offsetHeight;\n }\n else {\n margin = innerItem[0].offsetWidth + innerItem[2].offsetWidth;\n }\n var tbarWid = this.isVertical ? this.element.offsetHeight : this.element.offsetWidth;\n if (popupNav) {\n tbarWid -= (this.isVertical ? popupNav.offsetHeight : popupNav.offsetWidth);\n var popWid = (this.isVertical ? popupNav.offsetHeight : popupNav.offsetWidth) + 'px';\n innerItem[2].removeAttribute('style');\n if (this.isVertical) {\n this.enableRtl ? innerItem[2].style.top = popWid : innerItem[2].style.bottom = popWid;\n }\n else {\n this.enableRtl ? innerItem[2].style.left = popWid : innerItem[2].style.right = popWid;\n }\n }\n if (tbarWid <= margin) {\n return;\n }\n var value = (((tbarWid - margin)) - (!this.isVertical ? innerItem[1].offsetWidth : innerItem[1].offsetHeight)) / 2;\n innerItem[1].removeAttribute('style');\n var mrgn = ((!this.isVertical ? innerItem[0].offsetWidth : innerItem[0].offsetHeight) + value) + 'px';\n if (this.isVertical) {\n this.enableRtl ? innerItem[1].style.marginBottom = mrgn : innerItem[1].style.marginTop = mrgn;\n }\n else {\n this.enableRtl ? innerItem[1].style.marginRight = mrgn : innerItem[1].style.marginLeft = mrgn;\n }\n };\n Toolbar.prototype.tbarItemAlign = function (item, itemEle, pos) {\n var _this = this;\n if (item.showAlwaysInPopup && item.overflow !== 'Show') {\n return;\n }\n var alignDiv = [];\n alignDiv.push(this.createElement('div', { className: CLS_TBARLEFT }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARCENTER }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARRIGHT }));\n if (pos === 0 && item.align !== 'Left') {\n alignDiv.forEach(function (ele) {\n itemEle.appendChild(ele);\n });\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n else if (item.align !== 'Left') {\n var alignEle = itemEle.childNodes;\n var leftAlign_1 = alignDiv[0];\n [].slice.call(alignEle).forEach(function (el) {\n _this.tbarAlgEle.lefts.push(el);\n leftAlign_1.appendChild(el);\n });\n itemEle.appendChild(leftAlign_1);\n itemEle.appendChild(alignDiv[1]);\n itemEle.appendChild(alignDiv[2]);\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n };\n Toolbar.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.trgtEle.cloneNode(true);\n this.add(this.trgtEle, CLS_ITEMS);\n this.tbarEle = [];\n var innerEle = [].slice.call(this.trgtEle.children);\n innerEle.forEach(function (ele) {\n if (ele.tagName === 'DIV') {\n _this.tbarEle.push(ele);\n ele.setAttribute('aria-disabled', 'false');\n _this.add(ele, CLS_ITEM);\n }\n });\n };\n Toolbar.prototype.renderItems = function () {\n var ele = this.element;\n var itemEleDom;\n var innerItem;\n var innerPos;\n var items = this.items;\n if (ele && ele.children.length > 0) {\n itemEleDom = ele.querySelector('.' + CLS_ITEMS);\n }\n if (this.trgtEle != null) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n if (!itemEleDom) {\n itemEleDom = this.createElement('div', { className: CLS_ITEMS });\n }\n for (var i = 0; i < items.length; i++) {\n innerItem = this.renderSubComponent(items[i], i);\n if (this.tbarEle.indexOf(innerItem) === -1) {\n this.tbarEle.push(innerItem);\n }\n if (!this.tbarAlign) {\n this.tbarItemAlign(items[i], itemEleDom, i);\n }\n innerPos = itemEleDom.querySelector('.e-toolbar-' + items[i].align.toLowerCase());\n if (innerPos) {\n if (!(items[i].showAlwaysInPopup && items[i].overflow !== 'Show')) {\n this.tbarAlgEle[(items[i].align + 's').toLowerCase()].push(innerItem);\n }\n innerPos.appendChild(innerItem);\n }\n else {\n itemEleDom.appendChild(innerItem);\n }\n }\n ele.appendChild(itemEleDom);\n }\n };\n Toolbar.prototype.setAttr = function (attr, element) {\n var key = Object.keys(attr);\n var keyVal;\n for (var i = 0; i < key.length; i++) {\n keyVal = key[i];\n keyVal === 'class' ? this.add(element, attr[keyVal]) : element.setAttribute(keyVal, attr[keyVal]);\n }\n };\n /**\n * Enables or disables the specified Toolbar item.\n * @param {HTMLElement|NodeList} items - DOM element or an array of items to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the command should be enabled or disabled.\n * By default, `isEnable` is set to true.\n * @returns void.\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n var elements = items;\n var len = elements.length;\n if (isNOU(isEnable)) {\n isEnable = true;\n }\n var enable = function (isEnable, ele) {\n if (isEnable) {\n ele.classList.remove(CLS_DISABLE);\n ele.setAttribute('aria-disabled', 'false');\n }\n else {\n ele.classList.add(CLS_DISABLE);\n ele.setAttribute('aria-disabled', 'true');\n }\n };\n if (len && len > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n enable(isEnable, ele);\n }\n isEnable ? removeClass(elements, CLS_DISABLE) : addClass(elements, CLS_DISABLE);\n }\n else {\n var ele = void 0;\n ele = (len && len === 1) ? elements[0] : items;\n enable(isEnable, ele);\n }\n };\n /**\n * Adds new items to the Toolbar that accepts an array as Toolbar items.\n * @param {ItemsModel[]} items - DOM element or an array of items to be added to the Toolbar.\n * @param {number} index - Number value that determines where the command is to be added. By default, index is 0.\n * @returns void.\n */\n Toolbar.prototype.addItems = function (items, index) {\n var innerItems;\n var itemsDiv = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(itemsDiv)) {\n this.itemsRerender(items);\n return;\n }\n var innerEle;\n var itemAgn = 'Left';\n if (isNOU(index)) {\n index = 0;\n }\n items.forEach(function (e) {\n if (!isNOU(e.align) && e.align !== 'Left' && itemAgn === 'Left') {\n itemAgn = e.align;\n }\n });\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (isNOU(item.type)) {\n item.type = 'Button';\n }\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n item.align = itemAgn;\n innerEle = this.renderSubComponent(item, index);\n if (this.tbarEle.length >= index && innerItems.length >= 0) {\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var algIndex = item.align[0] === 'L' ? 0 : item.align[0] === 'C' ? 1 : 2;\n var ele = void 0;\n if (!this.tbarAlign && itemAgn !== 'Left') {\n this.tbarItemAlign(item, itemsDiv, 1);\n this.tbarAlign = true;\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n ele.appendChild(innerEle);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].push(innerEle);\n this.refreshPositioning();\n }\n else if (this.tbarAlign) {\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n ele.insertBefore(innerEle, ele.children[index]);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].splice(index, 0, innerEle);\n this.refreshPositioning();\n }\n else if (innerItems.length === 0) {\n innerItems = selectAll('.' + CLS_ITEMS, this.element);\n innerItems[0].appendChild(innerEle);\n }\n else {\n innerItems[0].parentNode.insertBefore(innerEle, innerItems[index]);\n }\n this.items.splice(index, 0, item);\n this.tbarEle.splice(index, 0, innerEle);\n index++;\n this.offsetWid = itemsDiv.offsetWidth;\n }\n }\n itemsDiv.style.width = '';\n this.renderOverflowMode();\n };\n /**\n * Removes the items from the Toolbar. Acceptable arguments are index of item/HTMLElement/node list.\n * @param {number|HTMLElement|NodeList|HTMLElement[]} args\n * Index or DOM element or an Array of item which is to be removed from the Toolbar.\n * @returns void.\n */\n Toolbar.prototype.removeItems = function (args) {\n var elements = args;\n var index;\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (typeof (elements) === 'number') {\n index = parseInt(args.toString(), 10);\n this.removeItemByIndex(index, innerItems);\n }\n else {\n if (elements && elements.length > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n index = this.tbarEle.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n }\n }\n else {\n var ele = (elements && elements.length && elements.length === 1) ? elements[0] : args;\n index = innerItems.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n }\n }\n this.resize();\n };\n Toolbar.prototype.removeItemByIndex = function (index, innerItems) {\n if (this.tbarEle[index] && innerItems[index]) {\n var eleIdx = this.tbarEle.indexOf(innerItems[index]);\n if (this.tbarAlign) {\n var indexAgn = void 0;\n indexAgn = this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].indexOf(this.tbarEle[eleIdx]);\n this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].splice(indexAgn, 1);\n }\n detach(innerItems[index]);\n this.items.splice(eleIdx, 1);\n this.tbarEle.splice(eleIdx, 1);\n }\n };\n Toolbar.prototype.templateRender = function (templateProp, innerEle, item, index) {\n var itemType = item.type;\n var eleObj = templateProp;\n var isComponent;\n if (typeof (templateProp) === 'object') {\n isComponent = typeof (eleObj.appendTo) === 'function';\n }\n if (typeof (templateProp) === 'string' || !isComponent) {\n var templateFn = void 0;\n var val = templateProp;\n val = (typeof (templateProp) === 'string') ? templateProp.trim() : templateProp;\n var e = void 0;\n try {\n if (typeof (templateProp) === 'object' && !isNOU(templateProp.tagName)) {\n innerEle.appendChild(templateProp);\n }\n else if (document.querySelectorAll(val).length) {\n var ele = document.querySelector(val);\n var tempStr = ele.outerHTML.trim();\n innerEle.appendChild(ele);\n ele.style.display = '';\n if (!isNOU(tempStr)) {\n this.tempId.push(val);\n }\n }\n }\n catch (e) {\n templateFn = templateCompiler(val);\n }\n var tempArray = void 0;\n if (!isNOU(templateFn)) {\n tempArray = templateFn({}, this, 'template');\n }\n if (!isNOU(tempArray) && tempArray.length > 0) {\n [].slice.call(tempArray).forEach(function (ele) {\n if (!isNOU(ele.tagName)) {\n ele.style.display = '';\n }\n innerEle.appendChild(ele);\n });\n }\n }\n else if (itemType === 'Input') {\n var ele = this.createElement('input');\n item.id ? (ele.id = item.id) : (ele.id = getUniqueID('tbr-ipt'));\n innerEle.appendChild(ele);\n eleObj.appendTo(ele);\n }\n this.add(innerEle, CLS_TEMPLATE);\n this.tbarEle.push(innerEle);\n };\n Toolbar.prototype.buttonRendering = function (item, innerEle) {\n var dom = this.createElement('button', { className: CLS_TBARBTN });\n dom.setAttribute('type', 'button');\n var textStr = item.text;\n var iconCss;\n var iconPos;\n item.id ? (dom.id = item.id) : dom.id = getUniqueID('e-tbr-btn');\n var btnTxt = this.createElement('div', { className: 'e-tbar-btn-text' });\n if (textStr) {\n btnTxt.innerHTML = textStr;\n dom.appendChild(btnTxt);\n dom.classList.add('e-tbtn-txt');\n }\n else {\n this.add(innerEle, 'e-tbtn-align');\n }\n if (item.prefixIcon || item.suffixIcon) {\n if ((item.prefixIcon && item.suffixIcon) || item.prefixIcon) {\n iconCss = item.prefixIcon + ' e-icons';\n iconPos = 'Left';\n }\n else {\n iconCss = item.suffixIcon + ' e-icons';\n iconPos = 'Right';\n }\n }\n var btnObj = new Button({ iconCss: iconCss, iconPosition: iconPos });\n btnObj.createElement = this.createElement;\n btnObj.appendTo(dom);\n if (item.width) {\n setStyle(dom, { 'width': formatUnit(item.width) });\n }\n return dom;\n };\n Toolbar.prototype.renderSubComponent = function (item, index) {\n var innerEle;\n var dom;\n innerEle = this.createElement('div', { className: CLS_ITEM });\n innerEle.setAttribute('aria-disabled', 'false');\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n if (item.htmlAttributes) {\n this.setAttr(item.htmlAttributes, innerEle);\n }\n if (item.tooltipText) {\n var tempDom = this.createElement('div', { innerHTML: item.tooltipText });\n innerEle.setAttribute('title', tempDom.textContent);\n }\n if (item.cssClass) {\n innerEle.className = innerEle.className + ' ' + item.cssClass;\n }\n if (item.template) {\n this.templateRender(item.template, innerEle, item, index);\n }\n else {\n switch (item.type) {\n case 'Button':\n dom = this.buttonRendering(item, innerEle);\n dom.setAttribute('tabindex', '-1');\n innerEle.appendChild(dom);\n innerEle.addEventListener('click', this.itemClick.bind(this));\n break;\n case 'Separator':\n this.add(innerEle, CLS_SEPARATOR);\n break;\n }\n }\n if (item.showTextOn) {\n var sTxt = item.showTextOn;\n if (sTxt === 'Toolbar') {\n this.add(innerEle, CLS_POPUPTEXT);\n this.add(innerEle, 'e-tbtn-align');\n }\n else if (sTxt === 'Overflow') {\n this.add(innerEle, CLS_TBARTEXT);\n }\n }\n if (item.overflow) {\n var overflow = item.overflow;\n if (overflow === 'Show') {\n this.add(innerEle, CLS_TBAROVERFLOW);\n }\n else if (overflow === 'Hide') {\n if (!innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPOVERFLOW);\n }\n }\n }\n if (item.overflow !== 'Show' && item.showAlwaysInPopup && !innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPPRI);\n this.popupPriCount++;\n }\n return innerEle;\n };\n Toolbar.prototype.itemClick = function (e) {\n this.activeEleSwitch(e.currentTarget);\n };\n Toolbar.prototype.activeEleSwitch = function (ele) {\n this.activeEleRemove(ele.firstElementChild);\n this.activeEle.focus();\n };\n Toolbar.prototype.activeEleRemove = function (curEle) {\n if (!isNOU(this.activeEle)) {\n this.activeEle.setAttribute('tabindex', '-1');\n }\n this.activeEle = curEle;\n if (isNOU(this.trgtEle) && !curEle.parentElement.classList.contains(CLS_TEMPLATE)) {\n curEle.removeAttribute('tabindex');\n }\n else {\n this.activeEle.setAttribute('tabindex', '0');\n }\n };\n Toolbar.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.itemsRerender = function (newProp) {\n this.items = this.tbarItemsCol;\n this.destroyMode();\n this.destroyItems();\n this.items = newProp;\n this.tbarItemsCol = this.items;\n this.renderItems();\n this.renderOverflowMode();\n };\n Toolbar.prototype.resize = function () {\n var ele = this.element;\n this.tbResize = true;\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.overflowMode === 'Popup') {\n this.popObj.hide();\n }\n var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n if (!checkOverflow) {\n this.destroyScroll();\n var multirowele = ele.querySelector('.' + CLS_ITEMS);\n if (!isNOU(multirowele)) {\n this.remove(multirowele, CLS_MULTIROWPOS);\n this.add(multirowele, CLS_TBARPOS);\n }\n }\n if (checkOverflow && this.scrollModule && (this.offsetWid === ele.offsetWidth)) {\n return;\n }\n if (this.offsetWid > ele.offsetWidth || checkOverflow) {\n this.renderOverflowMode();\n }\n if (this.popObj) {\n if (this.overflowMode === 'Extended') {\n var eleStyles = window.getComputedStyle(this.element);\n this.popObj.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n }\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.popupRefresh(this.popObj.element, false);\n if (this.tbarAlign) {\n this.refreshPositioning();\n }\n }\n this.offsetWid = ele.offsetWidth;\n this.tbResize = false;\n this.separator();\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 * @param {ToolbarModel} newProp\n * @param {ToolbarModel} oldProp\n * @returns void\n * @private\n */\n Toolbar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var tEle = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProb = Object.keys(newProp.items);\n for (var i = 0; i < changedProb.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var property = Object.keys(newProp.items[index])[0];\n var oldProperty = Object(oldProp.items[index])[property];\n var newProperty = Object(newProp.items[index])[property];\n if (this.tbarAlign || property === 'align') {\n this.refresh();\n break;\n }\n var popupPriCheck = property === 'showAlwaysInPopup' && !newProperty;\n var booleanCheck = property === 'overflow' && this.popupPriCount !== 0;\n if ((popupPriCheck) || (this.items[index].showAlwaysInPopup) && booleanCheck) {\n --this.popupPriCount;\n }\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var itemCol = [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, tEle));\n detach(itemCol[index]);\n this.tbarEle.splice(index, 1);\n this.addItems([this.items[index]], index);\n this.items.splice(index, 1);\n if (this.items[index].template) {\n this.tbarEle.splice(this.items.length, 1);\n }\n }\n }\n else {\n this.itemsRerender(newProp.items);\n }\n break;\n case 'width':\n var wid = tEle.offsetWidth;\n setStyle(tEle, { 'width': formatUnit(newProp.width) });\n this.renderOverflowMode();\n if (this.popObj && wid < tEle.offsetWidth) {\n this.popupRefresh(this.popObj.element, false);\n }\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'overflowMode':\n this.destroyMode();\n this.renderOverflowMode();\n if (this.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n this.refreshOverflow();\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.add(tEle, CLS_RTL) : this.remove(tEle, CLS_RTL);\n if (!isNOU(this.scrollModule)) {\n newProp.enableRtl ? this.add(this.scrollModule.element, CLS_RTL) : this.remove(this.scrollModule.element, CLS_RTL);\n }\n if (!isNOU(this.popObj)) {\n newProp.enableRtl ? this.add(this.popObj.element, CLS_RTL) : this.remove(this.popObj.element, CLS_RTL);\n }\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n break;\n }\n }\n };\n /**\n * Shows or hides the Toolbar item that is in the specified index.\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (true) or show (false). By default, value is false.\n * @returns void.\n */\n Toolbar.prototype.hideItem = function (index, value) {\n if (this.tbarEle[index]) {\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (value === true) {\n innerItems[index].classList.add(CLS_HIDDEN);\n }\n else {\n innerItems[index].classList.remove(CLS_HIDDEN);\n }\n this.refreshOverflow();\n }\n };\n __decorate([\n Collection([], Item)\n ], Toolbar.prototype, \"items\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"height\", void 0);\n __decorate([\n Property('Scrollable')\n ], Toolbar.prototype, \"overflowMode\", void 0);\n __decorate([\n Property(false)\n ], Toolbar.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"beforeCreate\", void 0);\n Toolbar = __decorate([\n NotifyPropertyChanges\n ], Toolbar);\n return Toolbar;\n}(Component));\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})();\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, KeyboardEvents, rippleEffect } from '@syncfusion/ej2-base';\nimport { getUniqueID, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { addClass, isVisible, closest, attributes, classList, detach, select } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Collection, Animation } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, selectAll } from '@syncfusion/ej2-base';\nvar CLS_ACRDN_ROOT = 'e-acrdn-root';\nvar CLS_ROOT = 'e-accordion';\nvar CLS_ITEM = 'e-acrdn-item';\nvar CLS_ITEMFOCUS = 'e-item-focus';\nvar CLS_ITEMHIDE = 'e-hide';\nvar CLS_HEADER = 'e-acrdn-header';\nvar CLS_HEADERICN = 'e-acrdn-header-icon';\nvar CLS_HEADERCTN = 'e-acrdn-header-content';\nvar CLS_CONTENT = 'e-acrdn-panel';\nvar CLS_CTENT = 'e-acrdn-content';\nvar CLS_TOOGLEICN = 'e-toggle-icon';\nvar CLS_COLLAPSEICN = 'e-tgl-collapse-icon e-icons';\nvar CLS_EXPANDICN = 'e-expand-icon';\nvar CLS_RTL = 'e-rtl';\nvar CLS_CTNHIDE = 'e-content-hide';\nvar CLS_SLCT = 'e-select';\nvar CLS_SLCTED = 'e-selected';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_ANIMATE = 'e-animate';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_TOGANIMATE = 'e-toggle-animation';\nvar CLS_NEST = 'e-nested';\nvar CLS_EXPANDSTATE = 'e-expand-state';\nvar AccordionActionSettings = /** @class */ (function (_super) {\n __extends(AccordionActionSettings, _super);\n function AccordionActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], AccordionActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AccordionActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], AccordionActionSettings.prototype, \"easing\", void 0);\n return AccordionActionSettings;\n}(ChildProperty));\nexport { AccordionActionSettings };\nvar AccordionAnimationSettings = /** @class */ (function (_super) {\n __extends(AccordionAnimationSettings, _super);\n function AccordionAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, AccordionActionSettings)\n ], AccordionAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, AccordionActionSettings)\n ], AccordionAnimationSettings.prototype, \"expand\", void 0);\n return AccordionAnimationSettings;\n}(ChildProperty));\nexport { AccordionAnimationSettings };\n/**\n * An item object that is used to configure Accordion items.\n */\nvar AccordionItem = /** @class */ (function (_super) {\n __extends(AccordionItem, _super);\n function AccordionItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"content\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"header\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], AccordionItem.prototype, \"expanded\", void 0);\n return AccordionItem;\n}(ChildProperty));\nexport { AccordionItem };\n/**\n * The Accordion is a vertically collapsible content panel that displays one or more panels at a time within the available space.\n * ```html\n *
    \n * \n * ```\n */\nvar Accordion = /** @class */ (function (_super) {\n __extends(Accordion, _super);\n /**\n * Initializes a new instance of the Accordion class.\n * @param options - Specifies Accordion model properties as options.\n * @param element - Specifies the element that is rendered as an Accordion.\n */\n function Accordion(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Contains the keyboard configuration of the Accordion.\n */\n _this.keyConfigs = {\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n enter: 'enter',\n space: 'space',\n home: 'home',\n end: 'end',\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n Accordion.prototype.destroy = function () {\n var _this = this;\n var ele = this.element;\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n this.isDestroy = true;\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 while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n if (this.trgtEle) {\n while (this.ctrlTem.firstChild) {\n ele.appendChild(this.ctrlTem.firstChild);\n }\n }\n ele.classList.remove(CLS_ACRDN_ROOT);\n ele.removeAttribute('style');\n ['aria-disabled', 'aria-multiselectable', 'role', 'data-ripple'].forEach(function (attrb) {\n _this.element.removeAttribute(attrb);\n });\n };\n Accordion.prototype.preRender = function () {\n var nested = closest(this.element, '.' + CLS_CONTENT);\n this.isNested = false;\n this.templateEle = [];\n if (!this.isDestroy) {\n this.isDestroy = false;\n }\n if (!isNOU(nested)) {\n nested.classList.add(CLS_NEST);\n this.isNested = true;\n }\n else {\n this.element.classList.add(CLS_ACRDN_ROOT);\n }\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n if (!this.enablePersistence || isNOU(this.expandedItems)) {\n this.expandedItems = [];\n }\n };\n Accordion.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Accordion.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n /**\n * To initialize the control rendering\n * @private\n */\n Accordion.prototype.render = function () {\n this.initialize();\n this.renderControl();\n this.wireEvents();\n };\n Accordion.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n setStyle(this.element, { 'width': width, 'height': height });\n var ariaAttr = {\n 'aria-disabled': 'false', 'role': 'presentation', 'aria-multiselectable': 'true'\n };\n if (this.expandedItems.length > 0) {\n this.initExpand = this.expandedItems;\n }\n attributes(this.element, ariaAttr);\n if (this.expandMode === 'Single') {\n this.element.setAttribute('aria-multiselectable', 'false');\n }\n };\n Accordion.prototype.renderControl = function () {\n this.trgtEle = (this.element.children.length > 0) ? select('div', this.element) : null;\n this.renderItems();\n this.initItemExpand();\n };\n Accordion.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n if (!isNOU(this.keyModule)) {\n this.keyModule.destroy();\n }\n };\n Accordion.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n if (!this.isNested && !this.isDestroy) {\n rippleEffect(this.element, { selector: '.' + CLS_HEADER });\n }\n if (!this.isNested) {\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n }\n };\n Accordion.prototype.focusIn = function (e) {\n e.target.parentElement.classList.add(CLS_ITEMFOCUS);\n };\n Accordion.prototype.focusOut = function (e) {\n e.target.parentElement.classList.remove(CLS_ITEMFOCUS);\n };\n Accordion.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.element.cloneNode(true);\n var innerEles = this.element.children;\n var content;\n addClass([].slice.call(innerEles), [CLS_ITEM]);\n [].slice.call(innerEles).forEach(function (el) {\n el.id = getUniqueID('acrdn_item');\n if (el.children.length > 0) {\n _this.add(el.children[0], CLS_HEADER);\n var header = el.children[0];\n attributes(header, { 'tabindex': '0', 'role': 'heading', 'aria-level': innerEles.length.toString() });\n header.id = getUniqueID('acrdn_header');\n EventHandler.add(header, 'focus', _this.focusIn, _this);\n EventHandler.add(header, 'blur', _this.focusOut, _this);\n var headerEle = header.firstElementChild;\n if (headerEle) {\n headerEle.classList.add(CLS_HEADERCTN);\n }\n content = el.children[1];\n if (content) {\n content.id = getUniqueID('acrdn_panel');\n header.setAttribute('aria-controls', content.id);\n content.style.display = '';\n el.classList.add(CLS_SLCT);\n el.children[0].appendChild(_this.toggleIconGenerate());\n classList(content, [CLS_CONTENT, CLS_CTNHIDE], []);\n attributes(content, { 'aria-labelledby': header.id, 'aria-hidden': 'true' });\n content = content.firstElementChild;\n if (content) {\n content.classList.add(CLS_CTENT);\n content.style.display = '';\n }\n }\n }\n });\n };\n Accordion.prototype.toggleIconGenerate = function () {\n var tglIcon = this.createElement('div', { className: CLS_TOOGLEICN });\n var hdrColIcon = this.createElement('span', { className: CLS_COLLAPSEICN });\n tglIcon.appendChild(hdrColIcon);\n return tglIcon;\n };\n Accordion.prototype.initItemExpand = function () {\n var len = this.initExpand.length;\n if (len === 0) {\n return;\n }\n if (this.expandMode === 'Single') {\n this.expandItem(true, this.initExpand[len - 1]);\n }\n else {\n for (var i = 0; i < len; i++) {\n this.expandItem(true, this.initExpand[i]);\n }\n }\n };\n Accordion.prototype.renderItems = function () {\n var _this = this;\n var ele = this.element;\n var innerItem;\n if (isNOU(this.initExpand)) {\n this.initExpand = [];\n }\n var items = this.items;\n if (!isNOU(this.trgtEle)) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n items.forEach(function (item, index) {\n innerItem = _this.renderInnerItem(item, index);\n ele.appendChild(innerItem);\n if (innerItem.childElementCount > 0) {\n EventHandler.add(innerItem.querySelector('.' + CLS_HEADER), 'focus', _this.focusIn, _this);\n EventHandler.add(innerItem.querySelector('.' + CLS_HEADER), 'blur', _this.focusOut, _this);\n }\n });\n }\n };\n Accordion.prototype.clickHandler = function (e) {\n var _this = this;\n var trgt = e.target;\n var eventArgs = {};\n var index;\n var tglIcon;\n var acrdEle = closest(trgt, '.' + CLS_ROOT);\n if (acrdEle !== this.element) {\n return;\n }\n trgt.classList.add('e-target');\n var acrdnItem = closest(trgt, '.' + CLS_ITEM);\n var acrdnHdr = closest(trgt, '.' + CLS_HEADER);\n var acrdnCtn = closest(trgt, '.' + CLS_CONTENT);\n if (acrdnItem && (isNOU(acrdnHdr) || isNOU(acrdnCtn))) {\n acrdnHdr = acrdnItem.children[0];\n acrdnCtn = acrdnItem.children[1];\n }\n if (acrdnHdr) {\n tglIcon = select('.' + CLS_TOOGLEICN, acrdnHdr);\n }\n var acrdnCtnItem;\n if (acrdnCtn) {\n acrdnCtnItem = closest(acrdnCtn, '.' + CLS_ITEM);\n }\n var acrdActive = [];\n index = this.getIndexByItem(acrdnItem);\n if (acrdnCtnItem) {\n eventArgs.item = this.items[this.getIndexByItem(acrdnCtnItem)];\n }\n eventArgs.originalEvent = e;\n var ctnCheck = !isNOU(tglIcon) && isNOU(this.trgtEle) && acrdnItem.childElementCount <= 1;\n if (ctnCheck && (isNOU(acrdnCtn) || !isNOU(select('.' + CLS_HEADER + ' .' + CLS_TOOGLEICN, acrdnCtnItem)))) {\n acrdnItem.appendChild(this.contentRendering(index));\n this.ariaAttrUpdate(acrdnItem);\n }\n this.trigger('clicked', eventArgs);\n var cntclkCheck = (acrdnCtn && !isNOU(select('.e-target', acrdnCtn)));\n cntclkCheck = cntclkCheck && (isNOU(select('.' + CLS_ROOT, acrdnCtn)) || !(closest(trgt, '.' + CLS_ROOT) === this.element));\n trgt.classList.remove('e-target');\n if (trgt.classList.contains(CLS_CONTENT) || trgt.classList.contains(CLS_CTENT) || cntclkCheck) {\n return;\n }\n [].slice.call(this.element.children).forEach(function (el) {\n if (el.classList.contains(CLS_ACTIVE)) {\n acrdActive.push(el);\n }\n });\n var acrdAniEle = [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM + ' [' + CLS_ANIMATE + ']'));\n if (acrdAniEle.length > 0) {\n for (var _i = 0, acrdAniEle_1 = acrdAniEle; _i < acrdAniEle_1.length; _i++) {\n var el = acrdAniEle_1[_i];\n acrdActive.push(el.parentElement);\n }\n }\n var sameContentCheck = acrdActive.indexOf(acrdnCtnItem) !== -1 && acrdnCtn.getAttribute('e-animate') === 'true';\n var sameHeader = false;\n if (!isNOU(acrdnItem) && !isNOU(acrdnHdr)) {\n var acrdnCtn_1 = select('.' + CLS_CONTENT, acrdnItem);\n var acrdnRoot = closest(acrdnItem, '.' + CLS_ACRDN_ROOT);\n var expandState = acrdnRoot.querySelector('.' + CLS_EXPANDSTATE);\n if (isNOU(acrdnCtn_1)) {\n return;\n }\n sameHeader = (expandState === acrdnItem);\n if (isVisible(acrdnCtn_1) && (!sameContentCheck || acrdnCtnItem.classList.contains(CLS_SLCTED))) {\n this.collapse(acrdnCtn_1);\n }\n else {\n if ((acrdActive.length > 0) && this.expandMode === 'Single' && !sameContentCheck) {\n acrdActive.forEach(function (el) {\n _this.collapse(select('.' + CLS_CONTENT, el));\n el.classList.remove(CLS_EXPANDSTATE);\n });\n }\n this.expand(acrdnCtn_1);\n }\n if (!isNOU(expandState) && !sameHeader) {\n expandState.classList.remove(CLS_EXPANDSTATE);\n }\n }\n };\n Accordion.prototype.eleMoveFocus = function (action, root, trgt) {\n var clst;\n var clstItem = closest(trgt, '.' + CLS_ITEM);\n if (trgt === root) {\n clst = ((action === 'moveUp' ? trgt.lastElementChild : trgt).querySelector('.' + CLS_HEADER));\n }\n else if (trgt.classList.contains(CLS_HEADER)) {\n clstItem = (action === 'moveUp' ? clstItem.previousElementSibling : clstItem.nextElementSibling);\n if (clstItem) {\n clst = select('.' + CLS_HEADER, clstItem);\n }\n }\n if (clst) {\n clst.focus();\n }\n };\n Accordion.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n var header = closest(e.target, CLS_HEADER);\n if (isNOU(header) && !trgt.classList.contains(CLS_ROOT) && !trgt.classList.contains(CLS_HEADER)) {\n return;\n }\n var clst;\n var root = this.element;\n var content;\n switch (e.action) {\n case 'moveUp':\n this.eleMoveFocus(e.action, root, trgt);\n break;\n case 'moveDown':\n this.eleMoveFocus(e.action, root, trgt);\n break;\n case 'space':\n case 'enter':\n content = trgt.nextElementSibling;\n if (!isNOU(content) && content.classList.contains(CLS_CONTENT)) {\n if (content.getAttribute('e-animate') !== 'true') {\n trgt.click();\n }\n }\n else {\n trgt.click();\n }\n break;\n case 'home':\n case 'end':\n clst = e.action === 'home' ? root.firstElementChild.children[0] : root.lastElementChild.children[0];\n clst.focus();\n break;\n }\n };\n Accordion.prototype.headerEleGenerate = function () {\n var header = this.createElement('div', { className: CLS_HEADER, id: getUniqueID('acrdn_header') });\n var ariaAttr = {\n 'tabindex': '0', 'role': 'heading', 'aria-expanded': 'false', 'aria-selected': 'false',\n 'aria-disabled': 'false', 'aria-level': this.items.length.toString()\n };\n attributes(header, ariaAttr);\n return header;\n };\n Accordion.prototype.renderInnerItem = function (item, index) {\n var innerEle;\n innerEle = this.createElement('div', { className: CLS_ITEM });\n innerEle.id = getUniqueID('acrdn_item');\n if (item.header) {\n var ctnEle = this.headerEleGenerate();\n var hdrEle = this.createElement('div', { className: CLS_HEADERCTN });\n ctnEle.appendChild(hdrEle);\n ctnEle.appendChild(this.fetchElement(hdrEle, item.header, index, true));\n innerEle.appendChild(ctnEle);\n }\n var hdr = select('.' + CLS_HEADER, innerEle);\n if (item.expanded && !isNOU(index) && (!this.enablePersistence)) {\n if (this.initExpand.indexOf(index) === -1) {\n this.initExpand.push(index);\n }\n }\n if (item.cssClass) {\n innerEle.classList.add(item.cssClass);\n }\n if (item.iconCss) {\n var hdrIcnEle = this.createElement('div', { className: CLS_HEADERICN });\n var icon = this.createElement('span', { className: item.iconCss + ' e-icons' });\n hdrIcnEle.appendChild(icon);\n if (isNOU(hdr)) {\n hdr = this.headerEleGenerate();\n hdr.appendChild(hdrIcnEle);\n innerEle.appendChild(hdr);\n }\n else {\n hdr.insertBefore(hdrIcnEle, hdr.childNodes[0]);\n }\n }\n if (item.content) {\n var hdrIcon = this.toggleIconGenerate();\n if (isNOU(hdr)) {\n hdr = this.headerEleGenerate();\n innerEle.appendChild(hdr);\n }\n hdr.appendChild(hdrIcon);\n this.add(innerEle, CLS_SLCT);\n }\n return innerEle;\n };\n Accordion.prototype.fetchElement = function (ele, value, index, isHeader) {\n var templateFn;\n var temString;\n try {\n if (document.querySelectorAll(value).length) {\n var eleVal = document.querySelector(value);\n temString = eleVal.outerHTML.trim();\n ele.appendChild(eleVal);\n eleVal.style.display = '';\n }\n }\n catch (e) {\n templateFn = templateCompiler(value);\n }\n var tempArray;\n if (!isNOU(templateFn)) {\n tempArray = templateFn();\n }\n if (!isNOU(tempArray) && tempArray.length > 0 && !(isNOU(tempArray[0].tagName) && tempArray.length === 1)) {\n [].slice.call(tempArray).forEach(function (el) {\n if (!isNOU(el.tagName)) {\n el.style.display = '';\n }\n ele.appendChild(el);\n });\n }\n else if (ele.childElementCount === 0) {\n ele.innerHTML = value;\n }\n if (!isNOU(temString)) {\n this.templateEle.push(value);\n }\n return ele;\n };\n Accordion.prototype.ariaAttrUpdate = function (itemEle) {\n var header = select('.' + CLS_HEADER, itemEle);\n var content = select('.' + CLS_CONTENT, itemEle);\n header.setAttribute('aria-controls', content.id);\n content.setAttribute('aria-labelledby', header.id);\n };\n Accordion.prototype.contentRendering = function (index) {\n var content = this.items[index].content;\n var itemcnt = this.createElement('div', { className: CLS_CONTENT + ' ' + CLS_CTNHIDE, id: getUniqueID('acrdn_panel') });\n attributes(itemcnt, { 'aria-hidden': 'true' });\n var ctn = this.createElement('div', { className: CLS_CTENT });\n itemcnt.appendChild(this.fetchElement(ctn, content, index, false));\n return itemcnt;\n };\n Accordion.prototype.expand = function (trgt) {\n var eventArgs;\n var trgtItemEle = closest(trgt, '.' + CLS_ITEM);\n if (isNOU(trgt) || (isVisible(trgt) && trgt.getAttribute('e-animate') !== 'true') || trgtItemEle.classList.contains(CLS_DISABLE)) {\n return;\n }\n var acrdnRoot = closest(trgtItemEle, '.' + CLS_ACRDN_ROOT);\n var expandState = acrdnRoot.querySelector('.' + CLS_EXPANDSTATE);\n var animation = {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing\n };\n var icon = select('.' + CLS_TOOGLEICN, trgtItemEle).firstElementChild;\n eventArgs = { element: trgtItemEle,\n item: this.items[this.getIndexByItem(trgtItemEle)],\n index: this.getIndexByItem(trgtItemEle),\n content: trgtItemEle.querySelector('.' + CLS_CONTENT),\n isExpanded: true };\n var eff = animation.name;\n this.trigger('expanding', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n icon.classList.add(CLS_TOGANIMATE);\n this.expandedItemsPush(trgtItemEle);\n if (!isNOU(expandState)) {\n expandState.classList.remove(CLS_EXPANDSTATE);\n }\n trgtItemEle.classList.add(CLS_EXPANDSTATE);\n if ((animation.name === 'None')) {\n this.expandProgress('begin', icon, trgt, trgtItemEle, eventArgs);\n this.expandProgress('end', icon, trgt, trgtItemEle, eventArgs);\n return;\n }\n this.expandAnimation(eff, icon, trgt, trgtItemEle, animation, eventArgs);\n };\n Accordion.prototype.expandAnimation = function (ef, icn, trgt, trgtItemEle, animate, args) {\n var _this = this;\n var height;\n var trgtHgt;\n this.lastActiveItemId = trgtItemEle.id;\n if (ef === 'SlideDown') {\n animate.begin = function () {\n _this.expandProgress('begin', icn, trgt, trgtItemEle, args);\n trgt.style.position = 'absolute';\n height = trgtItemEle.offsetHeight;\n trgtHgt = trgt.offsetHeight;\n trgt.style.maxHeight = (trgt.offsetHeight) + 'px';\n trgtItemEle.style.maxHeight = '';\n };\n animate.progress = function () {\n trgtItemEle.style.minHeight = (height + trgt.offsetHeight) + 'px';\n };\n animate.end = function () {\n setStyle(trgt, { 'position': '', 'maxHeight': '' });\n trgtItemEle.style.minHeight = '';\n _this.expandProgress('end', icn, trgt, trgtItemEle, args);\n };\n }\n else {\n animate.begin = function () {\n _this.expandProgress('begin', icn, trgt, trgtItemEle, args);\n };\n animate.end = function () {\n _this.expandProgress('end', icn, trgt, trgtItemEle, args);\n };\n }\n new Animation(animate).animate(trgt);\n };\n Accordion.prototype.expandProgress = function (progress, icon, trgt, trgtItemEle, eventArgs) {\n this.remove(trgt, CLS_CTNHIDE);\n this.add(trgtItemEle, CLS_SLCTED);\n this.add(icon, CLS_EXPANDICN);\n if (progress === 'end') {\n this.add(trgtItemEle, CLS_ACTIVE);\n trgt.setAttribute('aria-hidden', 'false');\n attributes(trgt.previousElementSibling, { 'aria-selected': 'true', 'aria-expanded': 'true' });\n icon.classList.remove(CLS_TOGANIMATE);\n this.trigger('expanded', eventArgs);\n }\n };\n Accordion.prototype.expandedItemsPush = function (item) {\n var index = this.getIndexByItem(item);\n if (this.expandedItems.indexOf(index) === -1) {\n this.expandedItems.push(index);\n }\n };\n Accordion.prototype.getIndexByItem = function (item) {\n return [].slice.call(this.element.children).indexOf(item);\n };\n Accordion.prototype.expandedItemsPop = function (item) {\n var index = this.getIndexByItem(item);\n this.expandedItems.splice(this.expandedItems.indexOf(index), 1);\n };\n Accordion.prototype.collapse = function (trgt) {\n var eventArgs;\n var trgtItemEle = closest(trgt, '.' + CLS_ITEM);\n if (isNOU(trgt) || !isVisible(trgt) || trgtItemEle.classList.contains(CLS_DISABLE)) {\n return;\n }\n var animation = {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n };\n var icon = select('.' + CLS_TOOGLEICN, trgtItemEle).firstElementChild;\n eventArgs = { element: trgtItemEle,\n item: this.items[this.getIndexByItem(trgtItemEle)],\n index: this.getIndexByItem(trgtItemEle),\n content: trgtItemEle.querySelector('.' + CLS_CONTENT),\n isExpanded: false };\n var eff = animation.name;\n this.trigger('expanding', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.expandedItemsPop(trgtItemEle);\n trgtItemEle.classList.add(CLS_EXPANDSTATE);\n icon.classList.add(CLS_TOGANIMATE);\n if ((animation.name === 'None')) {\n this.collapseProgress('begin', icon, trgt, trgtItemEle, eventArgs);\n this.collapseProgress('end', icon, trgt, trgtItemEle, eventArgs);\n return;\n }\n this.collapseAnimation(eff, trgt, trgtItemEle, icon, animation, eventArgs);\n };\n Accordion.prototype.collapseAnimation = function (ef, trgt, trgtItEl, icn, animate, args) {\n var _this = this;\n var height;\n var trgtHeight;\n var itemHeight;\n var remain;\n this.lastActiveItemId = trgtItEl.id;\n if (ef === 'SlideUp') {\n animate.begin = function () {\n itemHeight = trgtItEl.offsetHeight;\n trgtItEl.style.minHeight = itemHeight + 'px';\n trgt.style.position = 'absolute';\n height = trgtItEl.offsetHeight;\n trgtHeight = trgt.offsetHeight;\n trgt.style.maxHeight = trgtHeight + 'px';\n _this.collapseProgress('begin', icn, trgt, trgtItEl, args);\n };\n animate.progress = function () {\n remain = ((height - (trgtHeight - trgt.offsetHeight)));\n if (remain < itemHeight) {\n trgtItEl.style.minHeight = remain + 'px';\n }\n };\n animate.end = function () {\n trgt.style.display = 'none';\n _this.collapseProgress('end', icn, trgt, trgtItEl, args);\n trgtItEl.style.minHeight = '';\n setStyle(trgt, { 'position': '', 'maxHeight': '', 'display': '' });\n };\n }\n else {\n animate.begin = function () {\n _this.collapseProgress('begin', icn, trgt, trgtItEl, args);\n };\n animate.end = function () {\n _this.collapseProgress('end', icn, trgt, trgtItEl, args);\n };\n }\n new Animation(animate).animate(trgt);\n };\n Accordion.prototype.collapseProgress = function (progress, icon, trgt, trgtItemEle, eventArgs) {\n this.remove(icon, CLS_EXPANDICN);\n this.remove(trgtItemEle, CLS_SLCTED);\n if (progress === 'end') {\n this.add(trgt, CLS_CTNHIDE);\n icon.classList.remove(CLS_TOGANIMATE);\n this.remove(trgtItemEle, CLS_ACTIVE);\n trgt.setAttribute('aria-hidden', 'true');\n attributes(trgt.previousElementSibling, { 'aria-selected': 'false', 'aria-expanded': 'false' });\n this.trigger('expanded', eventArgs);\n }\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Accordion.prototype.getModuleName = function () {\n return 'accordion';\n };\n Accordion.prototype.itemAttribUpdate = function () {\n var itemEle = [].slice.call(this.element.children);\n var itemLen = this.items.length;\n itemEle.forEach(function (ele) {\n select('.' + CLS_HEADER, ele).setAttribute('aria-level', '' + itemLen);\n });\n };\n /**\n * Adds new item to the Accordion with the specified index of the Accordion.\n * @param {AccordionItemModel} item - Item array that is to be added to the Accordion.\n * @param {number} index - Number value that determines where the item should be added.\n * By default, item is added at the last index if the index is not specified.\n * @returns void\n */\n Accordion.prototype.addItem = function (item, index) {\n var ele = this.element;\n if (isNOU(index)) {\n index = this.items.length;\n }\n if (ele.childElementCount >= index) {\n this.items.splice(index, 0, item);\n var innerItemEle = this.renderInnerItem(item, index);\n if (ele.childElementCount === index) {\n ele.appendChild(innerItemEle);\n }\n else {\n ele.insertBefore(innerItemEle, ele.children[index]);\n }\n EventHandler.add(innerItemEle.querySelector('.' + CLS_HEADER), 'focus', this.focusIn, this);\n EventHandler.add(innerItemEle.querySelector('.' + CLS_HEADER), 'blur', this.focusOut, this);\n this.itemAttribUpdate();\n }\n this.expandedItems = [];\n this.expandedItemRefresh(ele);\n if (item.expanded) {\n this.expandItem(true, index);\n }\n };\n Accordion.prototype.expandedItemRefresh = function (ele) {\n var _this = this;\n [].slice.call(ele.children).forEach(function (el) {\n if (el.classList.contains(CLS_SLCTED)) {\n _this.expandedItemsPush(el);\n }\n });\n };\n /**\n * Dynamically removes item from Accordion.\n * @param {number} index - Number value that determines which item should be removed.\n * @returns void.\n */\n Accordion.prototype.removeItem = function (index) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n detach(ele);\n this.items.splice(index, 1);\n this.itemAttribUpdate();\n this.expandedItems = [];\n this.expandedItemRefresh(this.element);\n };\n /**\n * Sets focus to the specified index item header in Accordion.\n * @param {number} index - Number value that determines which item should be focused.\n * @returns void.\n */\n Accordion.prototype.select = function (index) {\n var ele = this.element.children[index];\n if (isNOU(ele) || isNOU(select('.' + CLS_HEADER, ele))) {\n return;\n }\n ele.children[0].focus();\n };\n /**\n * Shows or hides the specified item from Accordion.\n * @param {number} index - Number value that determines which item should be hidden/shown.\n * @param {Boolean} isHidden - Boolean value that determines the action either hide (true) or show (false). Default value is false.\n * If the `isHidden` value is false, the item is shown or else item it is hidden.\n * @returns void.\n */\n Accordion.prototype.hideItem = function (index, isHidden) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n if (isNOU(isHidden)) {\n isHidden = true;\n }\n isHidden ? this.add(ele, CLS_ITEMHIDE) : this.remove(ele, CLS_ITEMHIDE);\n };\n /**\n * Enables/Disables the specified Accordion item.\n * @param {number} index - Number value that determines which item should be enabled/disabled.\n * @param {boolean} isEnable - Boolean value that determines the action as enable (true) or disable (false).\n * If the `isEnable` value is true, the item is enabled or else it is disabled.\n * @returns void.\n */\n Accordion.prototype.enableItem = function (index, isEnable) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n var eleHeader = ele.firstElementChild;\n if (isEnable) {\n this.remove(ele, CLS_DISABLE);\n attributes(eleHeader, { 'tabindex': '0', 'aria-disabled': 'false' });\n eleHeader.focus();\n }\n else {\n if (ele.classList.contains(CLS_ACTIVE)) {\n this.expandItem(false, index);\n this.eleMoveFocus('movedown', this.element, eleHeader);\n }\n this.add(ele, CLS_DISABLE);\n eleHeader.setAttribute('aria-disabled', 'true');\n eleHeader.removeAttribute('tabindex');\n }\n };\n /**\n * Expands/Collapses the specified Accordion item.\n * @param {boolean} isExpand - Boolean value that determines the action as expand or collapse.\n * @param {number} index - Number value that determines which item should be expanded/collapsed.`index` is optional parameter.\n * Without Specifying index, based on the `isExpand` value all Accordion item can be expanded or collapsed.\n * @returns void.\n */\n Accordion.prototype.expandItem = function (isExpand, index) {\n var _this = this;\n var root = this.element;\n if (isNOU(index)) {\n if (this.expandMode === 'Single' && isExpand) {\n var ele = root.children[root.childElementCount - 1];\n this.itemExpand(isExpand, ele, this.getIndexByItem(ele));\n }\n else {\n var item = select('#' + this.lastActiveItemId, this.element);\n [].slice.call(this.element.children).forEach(function (el) {\n _this.itemExpand(isExpand, el, _this.getIndexByItem(el));\n el.classList.remove(CLS_EXPANDSTATE);\n });\n var expandedItem = select('.' + CLS_EXPANDSTATE, this.element);\n if (expandedItem) {\n expandedItem.classList.remove(CLS_EXPANDSTATE);\n }\n if (item) {\n item.classList.add(CLS_EXPANDSTATE);\n }\n }\n }\n else {\n var ele = this.element.children[index];\n if (isNOU(ele) || !ele.classList.contains(CLS_SLCT) || (ele.classList.contains(CLS_ACTIVE) && isExpand)) {\n return;\n }\n else {\n if (this.expandMode === 'Single') {\n this.expandItem(false);\n }\n this.itemExpand(isExpand, ele, index);\n }\n }\n };\n Accordion.prototype.itemExpand = function (isExpand, ele, index) {\n var ctn = ele.children[1];\n if (ele.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (isNOU(ctn) && isExpand) {\n ctn = this.contentRendering(index);\n ele.appendChild(ctn);\n this.ariaAttrUpdate(ele);\n }\n else if (isNOU(ctn)) {\n return;\n }\n isExpand ? this.expand(ctn) : this.collapse(ctn);\n };\n Accordion.prototype.destroyItems = function () {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) { detach(el); });\n };\n Accordion.prototype.updateItem = function (item, index) {\n if (!isNOU(item)) {\n var itemObj = this.items[index];\n this.items.splice(index, 1);\n detach(item);\n this.addItem(itemObj, index);\n }\n };\n Accordion.prototype.getPersistData = function () {\n var keyEntity = ['expandedItems'];\n return this.addOnPersist(keyEntity);\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 * @param {AccordionModel} newProp\n * @param {AccordionModel} oldProp\n * @returns void\n * @private\n */\n Accordion.prototype.onPropertyChanged = function (newProp, oldProp) {\n var acrdn = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProp = Object.keys(newProp.items);\n for (var j = 0; j < changedProp.length; j++) {\n var index = parseInt(Object.keys(newProp.items)[j], 10);\n var property = Object.keys(newProp.items[index])[0];\n var item = selectAll('.' + CLS_ITEM, this.element)[index];\n var oldVal = Object(oldProp.items[index])[property];\n var newVal = Object(newProp.items[index])[property];\n var temp = property;\n if (temp === 'header' || temp === 'iconCss' || temp === 'expanded' || ((temp === 'content') && (oldVal === ''))) {\n this.updateItem(item, index);\n }\n if (property === 'cssClass' && !isNOU(item)) {\n item.classList.remove(oldVal);\n item.classList.add(newVal);\n }\n if (property === 'content' && !isNOU(item) && item.children.length === 2) {\n if (item.classList.contains(CLS_SLCTED)) {\n this.expandItem(false, index);\n }\n detach(item.querySelector('.' + CLS_CONTENT));\n }\n }\n }\n else {\n this.destroyItems();\n this.renderItems();\n this.initItemExpand();\n }\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.add(acrdn, CLS_RTL) : this.remove(acrdn, CLS_RTL);\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'width':\n setStyle(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'expandMode':\n if (newProp.expandMode === 'Single') {\n this.element.setAttribute('aria-multiselectable', 'false');\n if (this.expandedItems.length > 1) {\n this.expandItem(false);\n }\n }\n else {\n this.element.setAttribute('aria-multiselectable', 'true');\n }\n break;\n }\n }\n };\n __decorate([\n Collection([], AccordionItem)\n ], Accordion.prototype, \"items\", void 0);\n __decorate([\n Property('100%')\n ], Accordion.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Accordion.prototype, \"height\", void 0);\n __decorate([\n Property('Multiple')\n ], Accordion.prototype, \"expandMode\", void 0);\n __decorate([\n Complex({}, AccordionAnimationSettings)\n ], Accordion.prototype, \"animation\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"destroyed\", void 0);\n Accordion = __decorate([\n NotifyPropertyChanges\n ], Accordion);\n return Accordion;\n}(Component));\nexport { Accordion };\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/// \nimport { attributes, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, Complex } from '@syncfusion/ej2-base';\nimport { MenuBase, FieldSettings } from '../common/menu-base';\nvar VMENU = 'e-vertical';\nvar SCROLLABLE = 'e-scrollable';\n/**\n * The Menu is a graphical user interface that serve as navigation headers for your application or site.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Menu = /** @class */ (function (_super) {\n __extends(Menu, _super);\n /**\n * Constructor for creating the component.\n * @private\n */\n function Menu(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.tempItems = [];\n return _this;\n }\n /**\n * Get module name.\n * @returns string\n * @private\n */\n Menu.prototype.getModuleName = function () {\n return 'menu';\n };\n /**\n * For internal use only - prerender processing.\n * @private\n */\n Menu.prototype.preRender = function () {\n this.isMenu = true;\n if (this.template) {\n try {\n if (document.querySelectorAll(this.template).length) {\n this.template = document.querySelector(this.template).innerHTML.trim();\n this.clearChanges();\n }\n }\n catch (e) {\n /* action on catch */\n }\n }\n else {\n this.tempItems = this.items;\n this.items = [];\n this.tempItems.map(this.createMenuItems, this);\n this.setProperties({ items: this.items }, true);\n this.tempItems = [];\n }\n _super.prototype.preRender.call(this);\n };\n Menu.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n attributes(this.element, { 'role': 'menubar', 'tabindex': '0' });\n if (this.orientation === 'Vertical') {\n this.element.classList.add(VMENU);\n this.element.setAttribute('aria-orientation', 'vertical');\n }\n else {\n if (Browser.isDevice && !this.enableScrolling) {\n this.element.parentElement.classList.add(SCROLLABLE);\n }\n }\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {MenuModel} newProp\n * @param {MenuModel} oldProp\n * @returns void\n */\n Menu.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 'orientation':\n if (newProp.orientation === 'Vertical') {\n this.element.classList.add(VMENU);\n this.element.setAttribute('aria-orientation', 'vertical');\n }\n else {\n this.element.classList.remove(VMENU);\n this.element.removeAttribute('aria-orientation');\n }\n break;\n }\n }\n };\n Menu.prototype.createMenuItems = function (item, index) {\n var pIdField;\n var record = { items: [] };\n var idx;\n var i;\n var items = this.items;\n var fields = ['itemId', 'text', 'iconCss', 'url', 'separator', 'children'];\n pIdField = this.getField('parentId');\n for (i = 0; i < fields.length; i++) {\n var field = this.getField(fields[i]);\n if (item[field]) {\n record[field] = item[field];\n }\n }\n if (item[pIdField]) {\n idx = this.getIndex(item[pIdField].toString(), true);\n for (i = 0; i < idx.length; i++) {\n if (!items[idx[i]].items) {\n items[idx[i]].items = [];\n }\n items = items[idx[i]].items;\n }\n items.push(record);\n }\n else {\n this.items.push(record);\n }\n };\n __decorate([\n Property('Horizontal')\n ], Menu.prototype, \"orientation\", void 0);\n __decorate([\n Property(null)\n ], Menu.prototype, \"template\", void 0);\n __decorate([\n Property(false)\n ], Menu.prototype, \"enableScrolling\", void 0);\n __decorate([\n Complex({}, FieldSettings)\n ], Menu.prototype, \"fields\", void 0);\n Menu = __decorate([\n NotifyPropertyChanges\n ], Menu);\n return Menu;\n}(MenuBase));\nexport { Menu };\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 } 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 } from '@syncfusion/ej2-base';\nimport { EventHandler, rippleEffect, Touch, compile, Animation } from '@syncfusion/ej2-base';\nimport { Toolbar } from '../toolbar/toolbar';\nvar CLS_TAB = 'e-tab';\nvar CLS_HEADER = 'e-tab-header';\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_HORIZONTAL = 'e-horizontal';\nvar CLS_VTAB = 'e-vertical-tab';\nvar CLS_VERTICAL = 'e-vertical';\nvar CLS_VLEFT = 'e-vertical-left';\nvar CLS_VRIGHT = 'e-vertical-right';\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 };\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('')\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 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 * @param options - Specifies Tab model properties as options.\n * @param 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.animateOptions = {};\n _this.animObj = new Animation(_this.animateOptions);\n _this.maxHeight = 0;\n _this.title = 'Close';\n _this.lastIndex = 0;\n _this.isAdd = false;\n _this.isIconAlone = false;\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 * @returns void\n */\n Tab.prototype.destroy = function () {\n var _this = this;\n if (!isNOU(this.tbObj)) {\n this.tbObj.destroy();\n }\n this.unWireEvents();\n ['role', 'aria-disabled', 'aria-activedescendant', 'tabindex', 'aria-orientation'].forEach(function (val) {\n _this.element.removeAttribute(val);\n });\n this.expTemplateContent();\n if (!this.isTemplate) {\n this.element.innerHTML = '';\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 _super.prototype.destroy.call(this);\n this.trigger('destroyed');\n };\n /**\n * Initialize component\n * @private\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.isSwipeed = false;\n this.itemIndexArray = [];\n this.templateEle = [];\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, { role: 'tablist', 'aria-disabled': 'false', 'aria-activedescendant': '' });\n this.setCssClass(this.element, css, true);\n this.updatePopAnimationConfig();\n };\n /**\n * Initialize the component rendering\n * @private\n */\n Tab.prototype.render = function () {\n this.btnCls = this.createElement('span', { className: CLS_ICONS + ' ' + CLS_ICON_CLOSE, attrs: { title: this.title } });\n this.renderContainer();\n this.wireEvents();\n this.initRender = false;\n };\n Tab.prototype.renderContainer = function () {\n var ele = this.element;\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 var scrCnt = void 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 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 = select('.' + CLS_HEADER, this.element);\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).innerHTML);\n }\n if (count > 0) {\n this.hdrEle.innerHTML = '';\n this.hdrEle.appendChild(this.createElement('div', { className: CLS_ITEMS }));\n hdrItems.forEach(function (item, index) {\n _this.lastIndex = index;\n var attr = {\n className: CLS_ITEM, id: CLS_ITEM + '_' + index,\n attrs: { role: 'tab', 'aria-controls': CLS_CONTENT + '_' + index, 'aria-selected': 'false' }\n };\n var txt = _this.createElement('span', {\n className: CLS_TEXT, innerHTML: item, 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', { className: CLS_WRAP, innerHTML: cont, attrs: { tabIndex: '-1' } });\n select('.' + CLS_ITEMS, _this.element).appendChild(_this.createElement('div', attr));\n selectAll('.' + CLS_ITEM, _this.element)[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 });\n this.tbObj.createElement = this.createElement;\n this.tbObj.appendTo(this.hdrEle);\n this.updateOrientationAttribute();\n this.setCloseButton(this.showCloseButton);\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 contents.item(i).className += CLS_ITEM;\n attributes(contents.item(i), { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + i });\n contents.item(i).id = CLS_CONTENT + '_' + 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 tbCount = selectAll('.' + CLS_TB_ITEM, this.element).length;\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.iconPosition)) ? '' : item.header.iconPosition;\n var css = (isNOU(item.header.iconCss)) ? '' : item.header.iconCss;\n if (isNOU(item.header) || isNOU(item.header.text) || ((item.header.text.length === 0) && (css === ''))) {\n spliceArray.push(i);\n return;\n }\n var txt = item.header.text;\n _this.lastIndex = ((tbCount === 0) ? i : ((_this.isReplace) ? (index + i) : (_this.lastIndex + 1)));\n var disabled = (item.disabled) ? ' ' + CLS_DISABLE + ' ' + CLS_OVERLAY : '';\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);\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 wrapAttrs = (item.disabled) ? {} : { tabIndex: '-1' };\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.lastIndex);\n }\n else {\n _this.itemIndexArray.splice((index + i), 0, CLS_ITEM + '_' + _this.lastIndex);\n }\n var attrObj = {\n id: CLS_ITEM + '_' + _this.lastIndex, role: 'tab', 'aria-selected': 'false'\n };\n var tItem = { htmlAttributes: attrObj, template: wrap };\n tItem.cssClass = item.cssClass + ' ' + disabled + ' ' + ((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 (this.isIconAlone) ? this.element.classList.add(CLS_ICON_TAB) : this.element.classList.remove(CLS_ICON_TAB);\n return tItems;\n };\n Tab.prototype.removeActiveClass = function (id) {\n var hdrActEle = selectAll(':root .' + CLS_HEADER + ' .' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element)[0];\n if (this.headerPlacement === 'Bottom') {\n hdrActEle = selectAll(':root .' + CLS_HEADER + ' .' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element.children[1])[0];\n }\n if (!isNOU(hdrActEle)) {\n hdrActEle.classList.remove(CLS_ACTIVE);\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.cloneNode(true), selectAll('.' + CLS_TB_POPUP, this.tbPop)[0]);\n ele.outerHTML = '';\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.cloneNode(true));\n this.actEleId = target.id;\n target.outerHTML = '';\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.updateOrientationAttribute = function () {\n attributes(this.element, { 'aria-orientation': (this.isVertical() ? 'vertical' : 'horizontal') });\n };\n Tab.prototype.setCloseButton = function (val) {\n var trg = select('.' + CLS_HEADER, this.element);\n (val === true) ? trg.classList.add(CLS_CLOSE_SHOW) : trg.classList.remove(CLS_CLOSE_SHOW);\n this.tbObj.refreshOverflow();\n this.refreshActElePosition();\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 = { name: 'SlideLeftOut',\n duration: this.animation.previous.duration, timingFunction: this.animation.previous.easing };\n }\n else {\n animation = null;\n }\n }\n else {\n if (this.animation.next.effect === 'SlideRightIn') {\n animation = { name: 'SlideRightOut',\n duration: this.animation.next.duration, timingFunction: this.animation.next.easing };\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 itemCollection = [].slice.call(this.element.querySelector('.' + CLS_CONTENT).children);\n var oldCnt;\n itemCollection.forEach(function (item) {\n if (item.id === _this.prevActiveEle) {\n oldCnt = item;\n }\n });\n var prevEle = this.tbItem[prevIndex];\n var no = this.extIndex(this.tbItem[this.selectedItem].id);\n var newCnt = this.getTrgContent(this.cntEle, no);\n if (isNOU(oldCnt) && !isNOU(prevEle)) {\n var idNo = this.extIndex(prevEle.id);\n oldCnt = this.getTrgContent(this.cntEle, idNo);\n }\n this.prevActiveEle = newCnt.id;\n if (this.initRender || value === false || this.animation === {} || isNOU(this.animation)) {\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.select(trgIndex);\n if (!isNOU(this.popEle)) {\n this.popObj.hide(this.hide);\n }\n }\n }\n };\n Tab.prototype.getEleIndex = function (item) {\n return Array.prototype.indexOf.call(selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element), item);\n };\n Tab.prototype.extIndex = function (id) {\n return id.replace(CLS_ITEM + '_', '');\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) {\n var tempEle = this.createElement('div');\n this.compileElement(tempEle, cnt, 'content');\n if (tempEle.childNodes.length !== 0) {\n ele.appendChild(tempEle);\n }\n };\n Tab.prototype.compileElement = function (ele, val, prop) {\n if (typeof val === 'string') {\n val = val.trim();\n }\n var templateFn = compile(val);\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) {\n this.compileElement(element, text, 'headerText');\n };\n Tab.prototype.getContent = function (ele, cnt, callType) {\n var eleStr;\n if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\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);\n }\n }\n else {\n this.templateCompile(ele, cnt);\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 + '_' + no, this.element);\n }\n else {\n ele = this.findEle(cntEle.children, CLS_CONTENT + '_' + 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 this.element.classList.add(CLS_VTAB);\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 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.tbObj.setProperties({ height: (this.isVertical() ? '100%' : 'auto'), width: (this.isVertical() ? 'auto' : '100%') }, true);\n this.tbObj.changeOrientation();\n this.updatePopAnimationConfig();\n }\n this.addVerticalClass();\n this.updateOrientationAttribute();\n this.select(this.selectedItem);\n };\n Tab.prototype.setOrientation = function (place, ele) {\n if (place === 'Bottom' && Array.prototype.indexOf.call(this.element.children, ele) !== 1) {\n this.element.appendChild(ele);\n }\n else {\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 (isNOU(this.cntEle)) {\n return;\n }\n var hdrEle = select('.' + CLS_HEADER, this.element);\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.offsetHeight - hdrEle.offsetHeight) + 'px' });\n }\n }\n }\n else if (this.heightAdjustMode === 'Fill') {\n setStyle(this.element, { 'height': '100%' });\n setStyle(this.cntEle, { 'height': 'auto' });\n }\n else if (this.heightAdjustMode === 'Auto') {\n var cnt = selectAll('.' + CLS_CONTENT + ' > .' + CLS_ITEM, this.element);\n if (this.isTemplate === true) {\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 + '_' + 0), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + 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');\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(ele));\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n }\n this.templateEle = [];\n this.getContent(ele, this.items[0].content, 'render');\n ele.classList.remove(CLS_ACTIVE);\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 trg;\n var bar;\n var scrollCnt;\n var trgHdrEle;\n if (this.headerPlacement === 'Bottom') {\n trgHdrEle = this.element.children[1];\n trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element.children[1]);\n }\n else {\n trgHdrEle = this.element.children[0];\n trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element);\n }\n if (trg === null) {\n return;\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 bar = select('.' + CLS_INDICATOR, trgHdrEle);\n 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 setStyle(bar, { 'top': '', 'height': '' });\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)) {\n this.bdrLine.classList.remove(CLS_HIDDEN);\n }\n };\n Tab.prototype.setActive = function (value) {\n this.tbItem = selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element);\n var trg = this.tbItem[value];\n if (value >= 0) {\n this.setProperties({ selectedItem: value }, true);\n }\n if (value < 0 || isNaN(value) || this.tbItem.length === 0) {\n return;\n }\n if (trg.classList.contains(CLS_ACTIVE)) {\n this.setActiveBorder();\n return;\n }\n if (!this.isTemplate) {\n var prev = this.tbItem[this.prevIndex];\n if (!isNOU(prev)) {\n prev.removeAttribute('aria-controls');\n }\n attributes(trg, { 'aria-controls': CLS_CONTENT + '_' + value });\n }\n var id = trg.id;\n this.removeActiveClass(id);\n trg.classList.add(CLS_ACTIVE);\n trg.setAttribute('aria-selected', 'true');\n var no = Number(this.extIndex(id));\n if (isNOU(this.prevActiveEle)) {\n this.prevActiveEle = CLS_CONTENT + '_' + no;\n }\n attributes(this.element, { 'aria-activedescendant': id });\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 + '_' + 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.extIndex(id), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + this.extIndex(id) }\n }));\n var eleTrg = this.getTrgContent(this.cntEle, this.extIndex(id));\n var itemIndex = Array.prototype.indexOf.call(this.itemIndexArray, trg.id);\n this.getContent(eleTrg, this.items[itemIndex].content, 'render');\n }\n else {\n item.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n this.setActiveBorder();\n var curActItem = select('.' + CLS_HEADER + ' #' + id, this.element);\n this.refreshItemVisibility(curActItem);\n curActItem.firstChild.focus();\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: trg,\n selectedIndex: value,\n selectedContent: select('#' + CLS_CONTENT + '_' + this.selectedID, this.content),\n isSwiped: this.isSwipeed\n };\n if (!this.initRender || this.selectedItem !== 0) {\n this.trigger('selected', eventArg);\n }\n };\n Tab.prototype.setItems = function (items) {\n this.isReplace = true;\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\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.wireEvents = function () {\n window.addEventListener('resize', this.refreshActElePosition.bind(this));\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 this.keyModule.destroy();\n this.tabKeyModule.destroy();\n if (!isNOU(this.cntEle)) {\n this.touchModule.destroy();\n }\n window.removeEventListener('resize', this.refreshActElePosition.bind(this));\n this.element.removeEventListener('mouseover', this.hoverHandler.bind(this));\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.select(trgIndex);\n }\n }\n };\n Tab.prototype.swipeHandler = function (e) {\n if (e.velocity < 3 && isNOU(e.originalEvent.changedTouches)) {\n return;\n }\n this.isSwipeed = 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.select(k);\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.select(i);\n break;\n }\n }\n }\n this.isSwipeed = 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 actEle = select('.' + CLS_HEADER + ' .' + CLS_ACTIVE, this.element);\n var tabItem = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', this.element);\n this.popEle = select('.' + CLS_HEADER + ' .' + CLS_TB_POP, this.element);\n if (!isNOU(this.popEle)) {\n this.popObj = this.popEle.ej2_instances[0];\n }\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', '-1');\n }\n if (this.popObj && isVisible(this.popObj.element)) {\n this.popObj.hide(this.hide);\n }\n actEle.children.item(0).setAttribute('tabindex', '0');\n break;\n case 'moveLeft':\n case 'moveRight':\n var item = closest(document.activeElement, '.' + CLS_TB_ITEM);\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 var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n if (this.showCloseButton === true && !isNOU(trgParent)) {\n var nxtSib = trgParent.nextSibling;\n if (!isNOU(nxtSib) && nxtSib.classList.contains(CLS_TB_ITEM)) {\n nxtSib.firstChild.focus();\n }\n this.removeTab(this.getEleIndex(trgParent));\n }\n this.setActiveBorder();\n break;\n }\n };\n Tab.prototype.refreshActElePosition = function () {\n var activeEle = select('.' + CLS_TB_ITEM + '.' + CLS_TB_POPUP + '.' + CLS_ACTIVE, this.element);\n if (!isNOU(activeEle)) {\n this.select(this.getEleIndex(activeEle));\n }\n this.refreshActiveBorder();\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 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.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 property = Object.keys(newProp.items[index])[0];\n var oldVal = Object(oldProp.items[index])[property];\n var newVal = Object(newProp.items[index])[property];\n var hdrItem = select('.' + CLS_TB_ITEMS + ' #' + CLS_ITEM + '_' + index, this.element);\n var cntItem = select('.' + CLS_CONTENT + ' #' + CLS_CONTENT + '_' + index, this.element);\n if (property === 'header') {\n var icon = this.items[index].header.iconCss;\n var textVal = this.items[index].header.text;\n if ((textVal === '') && (icon === '')) {\n this.removeTab(index);\n }\n else {\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 (property === '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 {\n cntItem.innerHTML = newVal;\n }\n }\n if (property === '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 (property === 'disabled') {\n this.enableTab(index, ((newVal === true) ? false : true));\n }\n }\n }\n else {\n this.lastIndex = 0;\n if (isNOU(this.tbObj)) {\n this.reRenderItems();\n }\n else {\n this.setItems(newProp.items);\n if (this.templateEle.length > 0) {\n this.expTemplateContent();\n }\n this.templateEle = [];\n select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element).innerHTML = '';\n this.select(this.selectedItem);\n }\n }\n };\n /**\n * Enables or disables the specified Tab item. On passing value as `false`, the item will be disabled.\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.firstChild.setAttribute('tabindex', '-1');\n }\n else {\n tbItems.classList.add(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstChild.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.setAttribute('aria-disabled', (value === true) ? 'false' : 'true');\n };\n /**\n * Adds new items to the Tab that accepts an array as Tab items.\n * @param {TabItemsModel[]} 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 lastEleIndex = 0;\n if (!this.isReplace) {\n this.trigger('adding', { addedItems: items });\n }\n this.hdrEle = select('.' + CLS_HEADER, this.element);\n if (isNOU(this.hdrEle)) {\n this.items = items;\n this.reRenderItems();\n return;\n }\n var itemsCount = selectAll('.' + 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_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.isAdd = true;\n var tabItems = this.parseObject(items, index);\n this.isAdd = false;\n var i = 0;\n var textValue;\n items.forEach(function (item, place) {\n textValue = item.header.text;\n if (!((isNOU(item.header) || isNOU(textValue) || (textValue.length === 0) && isNOU(item.header.iconCss)))) {\n _this.items.splice((index + i), 0, item);\n i++;\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 + '_' + no, className: CLS_ITEM, 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');\n }\n });\n this.tbObj.addItems(tabItems, 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 }\n };\n /**\n * Removes the items in the Tab from the specified index.\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 trg = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n var removeArgs = { removedItem: trg, removedIndex: index };\n this.trigger('removing', removeArgs);\n if (isNOU(trg)) {\n return;\n }\n this.tbObj.removeItems(index);\n this.items.splice(index, 1);\n this.itemIndexArray.splice(index, 1);\n this.refreshActiveBorder();\n var cntTrg = select('#' + CLS_CONTENT + '_' + this.extIndex(trg.id), select('.' + CLS_CONTENT, this.element));\n if (!isNOU(cntTrg)) {\n detach(cntTrg);\n }\n this.trigger('removed', removeArgs);\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 if (selectAll('.' + CLS_TB_ITEM, this.element).length === 0) {\n this.hdrEle.style.display = 'none';\n }\n this.enableAnimation = true;\n };\n /**\n * Shows or hides the Tab that is in the specified index.\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 if (items.length === 0) {\n this.select(index);\n }\n item.classList.remove(CLS_HIDDEN);\n }\n this.setActiveBorder();\n item.setAttribute('aria-hidden', '' + value);\n };\n /**\n * Specifies the index or HTMLElement to select an item from the Tab.\n * @param {number | HTMLElement} args - Index or DOM element is used for selecting an item from the Tab.\n * @returns void.\n */\n Tab.prototype.select = function (args) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.tbItem = selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element);\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', '-1');\n }\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: this.tbItem[this.selectedItem],\n selectedIndex: this.selectedItem,\n selectedContent: !isNOU(this.content) ? select('#' + CLS_CONTENT + '_' + this.selectedID, this.content) : null,\n selectingItem: trg,\n selectingIndex: args,\n selectingContent: !isNOU(this.content) ? select('#' + CLS_CONTENT + '_' + this.selectingID, this.content) : null,\n isSwiped: this.isSwipeed\n };\n if (!this.initRender || this.selectedItem !== 0) {\n this.trigger('selecting', eventArg);\n }\n if (eventArg.cancel) {\n return;\n }\n if (typeof args === 'number') {\n if (!isNOU(this.tbItem[args]) && this.tbItem[args].classList.contains(CLS_DISABLE)) {\n for (var i = args + 1; i < this.items.length; i++) {\n if (this.items[i].disabled === false) {\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 if (this.tbItem[args].classList.contains(CLS_TB_POPUP)) {\n this.setActive(this.popupHandler(this.tbItem[args]));\n }\n else {\n this.setActive(args);\n }\n }\n else {\n this.setActive(0);\n }\n }\n else if (args instanceof (HTMLElement)) {\n this.setActive(this.getEleIndex(args));\n }\n };\n /**\n * Specifies the value to disable/enable the Tab component.\n * When set to `true`, the component will be disabled.\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 * @returns string\n */\n Tab.prototype.getPersistData = function () {\n return this.addOnPersist(['selectedItem', 'actEleId']);\n };\n /**\n * Returns the current module name.\n * @returns string\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 * @param {TabModel} newProp\n * @param {TabModel} oldProp\n * @returns void\n * @private\n */\n Tab.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 '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 this.setCssClass(this.element, newProp.cssClass, true);\n break;\n case 'items':\n this.evalOnPropertyChangeItems(newProp, oldProp);\n break;\n case 'showCloseButton':\n this.setCloseButton(newProp.showCloseButton);\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.refreshActElePosition();\n break;\n case 'heightAdjustMode':\n this.setContentHeight(false);\n this.select(this.selectedItem);\n break;\n }\n }\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(false)\n ], Tab.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"showCloseButton\", 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, \"destroyed\", void 0);\n Tab = __decorate([\n NotifyPropertyChanges\n ], Tab);\n return Tab;\n}(Component));\nexport { Tab };\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, isUndefined, Browser, compile } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { rippleEffect, Animation } from '@syncfusion/ej2-base';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, closest, matches, detach, select, selectAll, isVisible, append } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined as isNOU, Touch, getValue, setValue } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-treeview';\nvar CONTROL = 'e-control';\nvar COLLAPSIBLE = 'e-icon-collapsible';\nvar EXPANDABLE = 'e-icon-expandable';\nvar LISTITEM = 'e-list-item';\nvar LISTTEXT = 'e-list-text';\nvar PARENTITEM = 'e-list-parent';\nvar HOVER = 'e-hover';\nvar ACTIVE = 'e-active';\nvar LOAD = 'e-icons-spinner';\nvar PROCESS = 'e-process';\nvar ICON = 'e-icons';\nvar TEXTWRAP = 'e-text-content';\nvar INPUT = 'e-input';\nvar INPUTGROUP = 'e-input-group';\nvar TREEINPUT = 'e-tree-input';\nvar EDITING = 'e-editing';\nvar RTL = 'e-rtl';\nvar DRAGITEM = 'e-drag-item';\nvar DROPPABLE = 'e-droppable';\nvar DRAGGING = 'e-dragging';\nvar SIBLING = 'e-sibling';\nvar DROPIN = 'e-drop-in';\nvar DROPNEXT = 'e-drop-next';\nvar DROPOUT = 'e-drop-out';\nvar NODROP = 'e-no-drop';\nvar FULLROWWRAP = 'e-fullrow-wrap';\nvar FULLROW = 'e-fullrow';\nvar SELECTED = 'e-selected';\nvar EXPANDED = 'e-expanded';\nvar NODECOLLAPSED = 'e-node-collapsed';\nvar DISABLE = 'e-disable';\nvar CONTENT = 'e-content';\nvar DOWNTAIL = 'e-downtail';\nvar DROPCOUNT = 'e-drop-count';\nvar CHECK = 'e-check';\nvar INDETERMINATE = 'e-stop';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar FOCUS = 'e-node-focus';\nvar IMAGE = 'e-list-img';\nvar BIGGER = 'e-bigger';\nvar SMALL = 'e-small';\nvar treeAriaAttr = {\n treeRole: 'tree',\n itemRole: 'treeitem',\n listRole: 'group',\n itemText: '',\n wrapperRole: '',\n};\n/**\n * Configures the fields to bind to the properties of node in the TreeView component.\n */\nvar FieldsSettings = /** @class */ (function (_super) {\n __extends(FieldsSettings, _super);\n function FieldsSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('child')\n ], FieldsSettings.prototype, \"child\", void 0);\n __decorate([\n Property([])\n ], FieldsSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('expanded')\n ], FieldsSettings.prototype, \"expanded\", void 0);\n __decorate([\n Property('hasChildren')\n ], FieldsSettings.prototype, \"hasChildren\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldsSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldsSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('id')\n ], FieldsSettings.prototype, \"id\", void 0);\n __decorate([\n Property('imageUrl')\n ], FieldsSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldsSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('parentID')\n ], FieldsSettings.prototype, \"parentID\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"query\", void 0);\n __decorate([\n Property('selected')\n ], FieldsSettings.prototype, \"selected\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"tableName\", void 0);\n __decorate([\n Property('text')\n ], FieldsSettings.prototype, \"text\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldsSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('navigateUrl')\n ], FieldsSettings.prototype, \"navigateUrl\", void 0);\n return FieldsSettings;\n}(ChildProperty));\nexport { FieldsSettings };\n/**\n * Configures animation settings for the TreeView component.\n */\nvar ActionSettings = /** @class */ (function (_super) {\n __extends(ActionSettings, _super);\n function ActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], ActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], ActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], ActionSettings.prototype, \"easing\", void 0);\n return ActionSettings;\n}(ChildProperty));\nexport { ActionSettings };\n/**\n * Configures the animation settings for expanding and collapsing nodes in TreeView.\n */\nvar NodeAnimationSettings = /** @class */ (function (_super) {\n __extends(NodeAnimationSettings, _super);\n function NodeAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"expand\", void 0);\n return NodeAnimationSettings;\n}(ChildProperty));\nexport { NodeAnimationSettings };\n/**\n * The TreeView component is used to represent hierarchical data in a tree like structure with advanced\n * functions to perform edit, drag and drop, selection with check-box, and more.\n * ```html\n *
    \n * ```\n * ```typescript\n * let treeObj: TreeView = new TreeView();\n * treeObj.appendTo('#tree');\n * ```\n */\nvar TreeView = /** @class */ (function (_super) {\n __extends(TreeView, _super);\n function TreeView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.preventExpand = false;\n _this.checkedElement = [];\n _this.disableNode = [];\n _this.mouseDownStatus = false;\n return _this;\n }\n TreeView_1 = TreeView;\n /**\n * Get component name.\n * @returns string\n * @private\n */\n TreeView.prototype.getModuleName = function () {\n return 'treeview';\n };\n /**\n * Initialize the event handler\n */\n TreeView.prototype.preRender = function () {\n var _this = this;\n this.checkActionNodes = [];\n this.dragStartAction = false;\n this.isAnimate = false;\n this.keyConfigs = {\n escape: 'escape',\n end: 'end',\n enter: 'enter',\n f2: 'f2',\n home: 'home',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlDown: 'ctrl+downarrow',\n ctrlUp: 'ctrl+uparrow',\n ctrlEnter: 'ctrl+enter',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n ctrlA: 'ctrl+A',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftEnter: 'shift+enter',\n shiftHome: 'shift+home',\n shiftEnd: 'shift+end',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n csEnter: 'ctrl+shift+enter',\n csHome: 'ctrl+shift+home',\n csEnd: 'ctrl+shift+end',\n space: 'space',\n };\n this.listBaseOption = {\n expandCollapse: true,\n showIcon: true,\n expandIconClass: EXPANDABLE,\n ariaAttributes: treeAriaAttr,\n expandIconPosition: 'Left',\n itemCreated: function (e) {\n _this.beforeNodeCreate(e);\n },\n };\n this.updateListProp(this.fields);\n this.aniObj = new Animation({});\n this.treeList = [];\n this.isLoaded = false;\n this.isInitalExpand = false;\n this.index = 0;\n this.setTouchClass();\n if (isNOU(this.selectedNodes)) {\n this.setProperties({ selectedNodes: [] }, true);\n }\n if (isNOU(this.checkedNodes)) {\n this.setProperties({ checkedNodes: [] }, true);\n }\n if (isNOU(this.expandedNodes)) {\n this.setProperties({ expandedNodes: [] }, true);\n }\n else {\n this.isInitalExpand = true;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n * @hidden\n */\n TreeView.prototype.getPersistData = function () {\n var keyEntity = ['selectedNodes', 'checkedNodes', 'expandedNodes'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TreeView.prototype.render = function () {\n this.initialRender = true;\n this.initialize();\n this.setDataBinding();\n this.setExpandOnType();\n this.setRipple();\n this.wireEditingEvents(this.allowEditing);\n this.setDragAndDrop(this.allowDragAndDrop);\n this.wireEvents();\n this.initialRender = false;\n };\n TreeView.prototype.initialize = function () {\n this.element.setAttribute('role', 'tree');\n this.element.setAttribute('tabindex', '0');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n this.setCssClass(null, this.cssClass);\n this.setEnableRtl();\n this.setFullRow(this.fullRowSelect);\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n };\n TreeView.prototype.setEnableRtl = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n TreeView.prototype.setRipple = function () {\n var tempStr = '.' + FULLROW + ',.' + TEXTWRAP;\n var rippleModel = {\n selector: tempStr,\n ignore: '.' + TEXTWRAP + ' > .' + ICON + ',.' + INPUTGROUP + ',.' + INPUT + ', .' + CHECKBOXWRAP\n };\n this.rippleFn = rippleEffect(this.element, rippleModel);\n var iconModel = {\n selector: '.' + TEXTWRAP + ' > .' + ICON,\n isCenterRipple: true,\n };\n this.rippleIconFn = rippleEffect(this.element, iconModel);\n };\n TreeView.prototype.setFullRow = function (isEnabled) {\n isEnabled ? addClass([this.element], FULLROWWRAP) : removeClass([this.element], FULLROWWRAP);\n };\n TreeView.prototype.setMultiSelect = function (isEnabled) {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (isEnabled) {\n firstUl.setAttribute('aria-multiselectable', 'true');\n }\n else {\n firstUl.removeAttribute('aria-multiselectable');\n }\n };\n TreeView.prototype.templateComplier = function (template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n };\n TreeView.prototype.setDataBinding = function () {\n var _this = this;\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager) {\n if (this.fields.dataSource.ready) {\n this.fields.dataSource.ready.then(function (e) {\n if (_this.fields.dataSource instanceof DataManager && _this.fields.dataSource.dataSource.offline) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n _this.renderItems(true);\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n }\n });\n }\n else {\n this.fields.dataSource.executeQuery(this.getQuery(this.fields)).then(function (e) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n _this.renderItems(true);\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n });\n }\n }\n else {\n this.treeList.pop();\n if (isNOU(this.fields.dataSource)) {\n this.rootData = this.treeData = [];\n }\n else {\n this.treeData = JSON.parse(JSON.stringify(this.fields.dataSource));\n this.setRootData();\n }\n this.isNumberTypeId = this.getType();\n this.renderItems(false);\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.getQuery = function (mapper, value) {\n if (value === void 0) { value = null; }\n var columns = [];\n var query;\n if (!mapper.query) {\n query = new Query();\n var prop = this.getActualProperties(mapper);\n for (var _i = 0, _a = Object.keys(prop); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col !== 'dataSource' && col !== 'tableName' && col !== 'child' && !!mapper[col]\n && columns.indexOf(mapper[col]) === -1) {\n columns.push(mapper[col]);\n }\n }\n query.select(columns);\n if (prop.hasOwnProperty('tableName')) {\n query.from(mapper.tableName);\n }\n }\n else {\n query = mapper.query.clone();\n }\n ListBase.addSorting(this.sortOrder, mapper.text, query);\n if (!isNOU(value) && !isNOU(mapper.parentID)) {\n query.where(mapper.parentID, 'equal', (this.isNumberTypeId ? parseFloat(value) : value));\n }\n return query;\n };\n TreeView.prototype.getType = function () {\n return this.treeData[0] ? ((typeof getValue(this.fields.id, this.treeData[0]) === 'number') ? true : false) : false;\n };\n TreeView.prototype.setRootData = function () {\n this.dataType = this.getDataType(this.treeData, this.fields);\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n var rootItems = this.getChildNodes(this.treeData, undefined, true);\n if (isNOU(rootItems)) {\n this.rootData = [];\n }\n else {\n this.rootData = rootItems;\n }\n }\n else {\n this.rootData = this.treeData;\n }\n };\n TreeView.prototype.renderItems = function (isSorted) {\n this.listBaseOption.ariaAttributes.level = 1;\n this.ulElement = ListBase.createList(this.createElement, isSorted ? this.rootData : this.getSortedData(this.rootData), this.listBaseOption);\n this.element.appendChild(this.ulElement);\n if (this.loadOnDemand === false) {\n var rootNodes = this.ulElement.querySelectorAll('.e-list-item');\n var i = 0;\n while (i < rootNodes.length) {\n this.renderChildNodes(rootNodes[i], true, null, true);\n i++;\n }\n }\n else {\n this.finalizeNode(this.element);\n }\n };\n TreeView.prototype.beforeNodeCreate = function (e) {\n if (this.showCheckBox) {\n var checkboxEle = createCheckBox(this.createElement, true, { cssClass: this.touchClass });\n var icon = select('div.' + ICON, e.item);\n var id = e.item.getAttribute('data-uid');\n e.item.childNodes[0].insertBefore(checkboxEle, e.item.childNodes[0].childNodes[isNOU(icon) ? 0 : 1]);\n var checkValue = getValue(e.fields.isChecked, e.curData);\n if (this.checkedNodes.indexOf(id) > -1) {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else if (!isNOU(checkValue) && checkValue.toString() === 'true') {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else {\n checkboxEle.setAttribute('aria-checked', 'false');\n }\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n EventHandler.add(frame, 'mousedown', this.frameMouseHandler, this);\n EventHandler.add(frame, 'mouseup', this.frameMouseHandler, this);\n }\n if (this.fullRowSelect) {\n this.createFullRow(e.item);\n }\n if (this.allowMultiSelection && !e.item.classList.contains(SELECTED)) {\n e.item.setAttribute('aria-selected', 'false');\n }\n var fields = e.fields;\n this.addActionClass(e, fields.selected, SELECTED);\n this.addActionClass(e, fields.expanded, EXPANDED);\n if (!isNOU(this.nodeTemplateFn)) {\n var textEle = e.item.querySelector('.' + LISTTEXT);\n textEle.innerHTML = '';\n append(this.nodeTemplateFn(e.curData), textEle);\n }\n var eventArgs = {\n node: e.item,\n nodeData: e.curData,\n text: e.text,\n };\n this.trigger('drawNode', eventArgs);\n };\n TreeView.prototype.frameMouseHandler = function (e) {\n var rippleSpan = select('.' + CHECKBOXRIPPLE, e.target.parentElement);\n rippleMouseHandler(e, rippleSpan);\n };\n TreeView.prototype.addActionClass = function (e, action, cssClass) {\n var data = e.curData;\n var actionValue = getValue(action, data);\n if (!isNOU(actionValue) && actionValue.toString() !== 'false') {\n e.item.classList.add(cssClass);\n }\n };\n TreeView.prototype.getDataType = function (ds, mapper) {\n if (this.fields.dataSource instanceof DataManager) {\n for (var i = 0; i < ds.length; i++) {\n if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i]))) {\n return 1;\n }\n }\n return 2;\n }\n for (var i = 0, len = ds.length; i < len; i++) {\n if ((typeof mapper.child === 'string') && !isNOU(getValue(mapper.child, ds[i]))) {\n return 2;\n }\n if (!isNOU(getValue(mapper.parentID, ds[i])) || !isNOU(getValue(mapper.hasChildren, ds[i]))) {\n return 1;\n }\n }\n return 1;\n };\n TreeView.prototype.getGroupedData = function (dataSource, groupBy) {\n var cusQuery = new Query().group(groupBy);\n var ds = ListBase.getDataSource(dataSource, cusQuery);\n var grpItem = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n grpItem.push(itemObj);\n }\n return grpItem;\n };\n TreeView.prototype.getSortedData = function (list) {\n if (list && this.sortOrder !== 'None') {\n list = ListBase.getDataSource(list, ListBase.addSorting(this.sortOrder, this.fields.text));\n }\n return list;\n };\n TreeView.prototype.finalizeNode = function (element) {\n var iNodes = selectAll('.' + IMAGE, element);\n for (var k = 0; k < iNodes.length; k++) {\n iNodes[k].setAttribute('alt', IMAGE);\n }\n if (this.isLoaded) {\n var sNodes = selectAll('.' + SELECTED, element);\n for (var i = 0; i < sNodes.length; i++) {\n this.selectNode(sNodes[i], null);\n break;\n }\n removeClass(sNodes, SELECTED);\n }\n var cNodes = selectAll('.' + LISTITEM + ':not(.' + EXPANDED + ')', element);\n for (var j = 0; j < cNodes.length; j++) {\n var icon = select('div.' + ICON, cNodes[j]);\n if (icon && icon.classList.contains(EXPANDABLE)) {\n this.disableExpandAttr(cNodes[j]);\n }\n }\n var eNodes = selectAll('.' + EXPANDED, element);\n if (!this.isInitalExpand) {\n for (var i = 0; i < eNodes.length; i++) {\n this.renderChildNodes(eNodes[i]);\n }\n }\n removeClass(eNodes, EXPANDED);\n this.updateList();\n if (this.isLoaded) {\n this.updateCheckedProp();\n }\n };\n TreeView.prototype.updateCheckedProp = function () {\n var _this = this;\n if (this.showCheckBox) {\n var nodes_1 = [].concat([], this.checkedNodes);\n this.checkedNodes.forEach(function (value, index) {\n var checkBox = _this.element.querySelector('[data-uid=\"' + value + '\"]');\n if (isNOU(checkBox)) {\n nodes_1 = nodes_1.filter(function (e) { return e !== value; });\n }\n });\n this.setProperties({ checkedNodes: nodes_1 }, true);\n }\n };\n TreeView.prototype.ensureIndeterminate = function () {\n if (this.autoCheck) {\n var liElement = selectAll('li', this.element);\n var ulElement = void 0;\n for (var i = 0; i < liElement.length; i++) {\n if (liElement[i].classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, liElement[i]);\n if (ulElement) {\n this.ensureParentCheckState(liElement[i]);\n }\n else {\n this.ensureChildCheckState(liElement[i]);\n }\n }\n }\n }\n else {\n var indeterminate = selectAll('.' + INDETERMINATE, this.element);\n for (var i = 0; i < indeterminate.length; i++) {\n indeterminate[i].classList.remove(INDETERMINATE);\n }\n }\n };\n TreeView.prototype.ensureParentCheckState = function (element) {\n if (!isNOU(element)) {\n if (element.classList.contains(ROOT)) {\n return;\n }\n var ulElement = element;\n if (element.classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, element);\n }\n var checkedNodes = selectAll('.' + CHECK, ulElement);\n var nodes = selectAll('.' + LISTITEM, ulElement);\n var checkBoxEle = element.getElementsByClassName(CHECKBOXWRAP)[0];\n if (nodes.length === checkedNodes.length) {\n this.changeState(checkBoxEle, 'check', null, true, true);\n }\n else if (checkedNodes.length > 0) {\n this.changeState(checkBoxEle, 'indeterminate', null, true, true);\n }\n else if (checkedNodes.length === 0) {\n this.changeState(checkBoxEle, 'uncheck', null, true, true);\n }\n var parentUL = closest(element, '.' + PARENTITEM);\n if (!isNOU(parentUL)) {\n var currentParent = closest(parentUL, '.' + LISTITEM);\n this.ensureParentCheckState(currentParent);\n }\n }\n };\n TreeView.prototype.ensureChildCheckState = function (element, e) {\n if (!isNOU(element)) {\n var childElement = select('.' + PARENTITEM, element);\n var checkBoxes = void 0;\n if (!isNOU(childElement)) {\n checkBoxes = selectAll('.' + CHECKBOXWRAP, childElement);\n var isChecked = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n var checkedState = void 0;\n for (var index = 0; index < checkBoxes.length; index++) {\n if (!isNOU(this.currentLoadData) && !isNOU(getValue(this.fields.isChecked, this.currentLoadData[index]))) {\n checkedState = getValue(this.fields.isChecked, this.currentLoadData[index]) ? 'check' : 'uncheck';\n if (this.ele !== -1) {\n checkedState = isChecked ? 'check' : 'uncheck';\n }\n }\n else {\n var isNodeChecked = checkBoxes[index].getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n checkedState = (!this.isLoaded && isNodeChecked) ? 'check' : (isChecked ? 'check' : 'uncheck');\n }\n this.changeState(checkBoxes[index], checkedState, e, true, true);\n }\n }\n }\n };\n TreeView.prototype.doCheckBoxAction = function (nodes, doCheck) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var checkBox = select('.' + PARENTITEM + ' .' + CHECKBOXWRAP, liEle);\n this.validateCheckNode(checkBox, !doCheck, liEle, null);\n }\n }\n else {\n var checkBoxes = selectAll('.' + CHECKBOXWRAP, this.element);\n for (var index = 0; index < checkBoxes.length; index++) {\n this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck');\n }\n }\n };\n TreeView.prototype.changeState = function (wrapper, state, e, isPrevent, isAdd) {\n var ariaState;\n var eventArgs;\n var currLi = closest(wrapper, '.' + LISTITEM);\n if (!isPrevent) {\n this.checkActionNodes = [];\n eventArgs = this.getCheckEvent(currLi, state, e);\n this.trigger('nodeChecking', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\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 this.addCheck(currLi);\n ariaState = 'true';\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n this.removeCheck(currLi);\n ariaState = 'false';\n }\n else if (state === 'indeterminate' && !frameSpan.classList.contains(INDETERMINATE) && this.autoCheck) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n this.removeCheck(currLi);\n ariaState = 'mixed';\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n if (isAdd) {\n var data = [].concat([], this.checkActionNodes);\n eventArgs = this.getCheckEvent(currLi, state, e);\n if (isUndefined(isPrevent)) {\n eventArgs.data = data;\n }\n }\n if (!isPrevent) {\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n eventArgs.data[0].checked = ariaState;\n this.trigger('nodeChecked', eventArgs);\n this.checkActionNodes = [];\n }\n }\n };\n TreeView.prototype.addCheck = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n };\n TreeView.prototype.removeCheck = function (liEle) {\n var index = this.checkedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.checkedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.getCheckEvent = function (currLi, action, e) {\n this.checkActionNodes.push(this.getNodeData(currLi));\n var nodeData = this.checkActionNodes;\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, data: nodeData };\n };\n TreeView.prototype.finalize = function () {\n var firstUl = select('.' + PARENTITEM, this.element);\n firstUl.setAttribute('role', treeAriaAttr.treeRole);\n this.setMultiSelect(this.allowMultiSelection);\n var firstNode = select('.' + LISTITEM, this.element);\n if (firstNode) {\n addClass([firstNode], FOCUS);\n this.updateIdAttr(null, firstNode);\n }\n this.hasPid = this.rootData[0] ? this.rootData[0].hasOwnProperty(this.fields.parentID) : false;\n this.doExpandAction();\n };\n TreeView.prototype.doExpandAction = function () {\n var eUids = this.expandedNodes;\n if (this.isInitalExpand && eUids.length > 0) {\n this.setProperties({ expandedNodes: [] }, true);\n if (this.fields.dataSource instanceof DataManager) {\n this.expandGivenNodes(eUids);\n }\n else {\n for (var i = 0; i < eUids.length; i++) {\n var eNode = select('[data-uid=\"' + eUids[i] + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null);\n }\n }\n }\n this.afterFinalized();\n }\n }\n else {\n this.afterFinalized();\n }\n };\n TreeView.prototype.expandGivenNodes = function (arr) {\n var proxy = this;\n this.expandCallback(arr[this.index], function () {\n proxy.index++;\n if (proxy.index < arr.length) {\n proxy.expandGivenNodes(arr);\n }\n else {\n proxy.afterFinalized();\n }\n });\n };\n TreeView.prototype.expandCallback = function (eUid, callback) {\n var eNode = select('[data-uid=\"' + eUid + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null, false, callback);\n }\n else {\n callback();\n }\n }\n else {\n callback();\n }\n };\n TreeView.prototype.afterFinalized = function () {\n this.doSelectionAction();\n this.updateCheckedProp();\n this.isLoaded = true;\n this.isAnimate = true;\n this.isInitalExpand = false;\n var eventArgs = { data: this.treeData };\n this.trigger('dataBound', eventArgs);\n };\n TreeView.prototype.doSelectionAction = function () {\n var sNodes = selectAll('.' + SELECTED, this.element);\n var sUids = this.selectedNodes;\n if (sUids.length > 0) {\n this.setProperties({ selectedNodes: [] }, true);\n for (var i = 0; i < sUids.length; i++) {\n var sNode = select('[data-uid=\"' + sUids[i] + '\"]', this.element);\n this.selectNode(sNode, null, true);\n if (!this.allowMultiSelection) {\n break;\n }\n }\n }\n else {\n this.selectGivenNodes(sNodes);\n }\n removeClass(sNodes, SELECTED);\n };\n TreeView.prototype.selectGivenNodes = function (sNodes) {\n for (var i = 0; i < sNodes.length; i++) {\n if (!sNodes[i].classList.contains('e-disable')) {\n this.selectNode(sNodes[i], null, true);\n }\n if (!this.allowMultiSelection) {\n break;\n }\n }\n };\n TreeView.prototype.clickHandler = function (event) {\n var target = event.originalEvent.target;\n EventHandler.remove(this.element, 'contextmenu', this.preventContextMenu);\n if (!target || this.dragStartAction) {\n return;\n }\n else {\n var classList = target.classList;\n var li = closest(target, '.' + LISTITEM);\n if (!li) {\n return;\n }\n else {\n this.removeHover();\n this.setFocusElement(li);\n if (this.showCheckBox && !li.classList.contains('e-disable')) {\n var checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNOU(checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, checkWrapper);\n this.validateCheckNode(checkWrapper, checkElement.classList.contains(CHECK), li, event.originalEvent);\n this.triggerClickEvent(event.originalEvent, li);\n return;\n }\n }\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(li, target, event);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, target, event);\n }\n else {\n if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n this.triggerClickEvent(event.originalEvent, li);\n }\n }\n };\n TreeView.prototype.nodeCheckingEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n this.checkActionNodes = [];\n var ariaState = !isCheck ? 'true' : 'false';\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n var eventArgs = this.getCheckEvent(currLi, isCheck ? 'uncheck' : 'check', e);\n this.trigger('nodeChecking', eventArgs);\n return eventArgs;\n };\n TreeView.prototype.nodeCheckedEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n var eventArgs = this.getCheckEvent(wrapper, isCheck ? 'uncheck' : 'check', e);\n eventArgs.data = eventArgs.data.splice(0, eventArgs.data.length - 1);\n this.trigger('nodeChecked', eventArgs);\n };\n TreeView.prototype.triggerClickEvent = function (e, li) {\n var eventArgs = {\n event: e,\n node: li,\n };\n this.trigger('nodeClicked', eventArgs);\n };\n TreeView.prototype.expandNode = function (currLi, icon, loaded) {\n var _this = this;\n if (icon.classList.contains(LOAD)) {\n this.hideSpinner(icon);\n }\n if (!this.initialRender) {\n icon.classList.add('interaction');\n }\n if (loaded !== true || (loaded === true && currLi.classList.contains('e-expanded'))) {\n if (this.preventExpand !== true) {\n removeClass([icon], EXPANDABLE);\n addClass([icon], COLLAPSIBLE);\n var start_1 = 0;\n var end_1 = 0;\n var proxy_1 = this;\n var ul_1 = select('.' + PARENTITEM, currLi);\n var liEle_1 = currLi;\n this.setHeight(liEle_1, ul_1);\n if (this.isAnimate) {\n this.aniObj.animate(ul_1, {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing,\n begin: function (args) {\n liEle_1.style.overflow = 'hidden';\n start_1 = liEle_1.offsetHeight;\n end_1 = select('.' + TEXTWRAP, currLi).offsetHeight;\n },\n progress: function (args) {\n args.element.style.display = 'block';\n proxy_1.animateHeight(args, start_1, end_1);\n },\n end: function (args) {\n args.element.style.display = 'block';\n _this.expandedNode(liEle_1, ul_1, icon);\n }\n });\n }\n else {\n this.expandedNode(liEle_1, ul_1, icon);\n }\n }\n }\n else {\n var ul = select('.' + PARENTITEM, currLi);\n ul.style.display = 'none';\n if (this.fields.dataSource instanceof DataManager === true) {\n this.preventExpand = false;\n }\n }\n if (this.initialRender) {\n icon.classList.add('interaction');\n }\n };\n TreeView.prototype.expandedNode = function (currLi, ul, icon) {\n ul.style.display = 'block';\n currLi.style.display = 'block';\n currLi.style.overflow = '';\n currLi.style.height = '';\n removeClass([icon], PROCESS);\n this.addExpand(currLi);\n if (this.isLoaded && this.expandArgs) {\n this.expandArgs = this.getExpandEvent(currLi, null);\n this.trigger('nodeExpanded', this.expandArgs);\n }\n };\n TreeView.prototype.addExpand = function (liEle) {\n liEle.setAttribute('aria-expanded', 'true');\n removeClass([liEle], NODECOLLAPSED);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.expandedNodes.indexOf(id) === -1) {\n this.expandedNodes.push(id);\n }\n };\n TreeView.prototype.collapseNode = function (currLi, icon, e) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n var colArgs;\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeCollapsing', colArgs);\n if (colArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n removeClass([icon], COLLAPSIBLE);\n addClass([icon], EXPANDABLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n if (this.isAnimate) {\n this.aniObj.animate(ul, {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n start = select('.' + TEXTWRAP, currLi).offsetHeight;\n end = liEle.offsetHeight;\n },\n progress: function (args) {\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n args.element.style.display = 'none';\n _this.collapsedNode(liEle, ul, icon, colArgs);\n }\n });\n }\n else {\n this.collapsedNode(liEle, ul, icon, colArgs);\n }\n };\n TreeView.prototype.collapsedNode = function (liEle, ul, icon, colArgs) {\n ul.style.display = 'none';\n liEle.style.overflow = '';\n liEle.style.height = '';\n removeClass([icon], PROCESS);\n this.removeExpand(liEle);\n if (this.isLoaded) {\n this.trigger('nodeCollapsed', colArgs);\n }\n };\n TreeView.prototype.removeExpand = function (liEle, toRemove) {\n if (toRemove) {\n liEle.removeAttribute('aria-expanded');\n }\n else {\n this.disableExpandAttr(liEle);\n }\n var index = this.expandedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.expandedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.disableExpandAttr = function (liEle) {\n liEle.setAttribute('aria-expanded', 'false');\n addClass([liEle], NODECOLLAPSED);\n };\n TreeView.prototype.setHeight = function (currLi, ul) {\n ul.style.display = 'block';\n ul.style.visibility = 'hidden';\n currLi.style.height = currLi.offsetHeight + 'px';\n ul.style.display = 'none';\n ul.style.visibility = '';\n };\n TreeView.prototype.animateHeight = function (args, start, end) {\n var remaining = (args.duration - args.timeStamp) / args.duration;\n var currentHeight = (end - start) * remaining + start;\n args.element.parentElement.style.height = currentHeight + 'px';\n };\n TreeView.prototype.renderChildNodes = function (parentLi, expandChild, callback, loaded) {\n var _this = this;\n var eicon = select('div.' + ICON, parentLi);\n if (isNOU(eicon)) {\n return;\n }\n this.showSpinner(eicon);\n var childItems;\n if (this.fields.dataSource instanceof DataManager) {\n var level = this.parents(parentLi, '.' + PARENTITEM).length;\n var mapper_1 = this.getChildFields(this.fields, level, 1);\n if (isNOU(mapper_1) || isNOU(mapper_1.dataSource)) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n return;\n }\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager && (this.fields.dataSource.dataSource.offline)) {\n this.treeList.pop();\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.loadChild(childItems, mapper_1, eicon, parentLi, expandChild, callback, loaded);\n }\n else {\n mapper_1.dataSource.executeQuery(this.getQuery(mapper_1, parentLi.getAttribute('data-uid'))).then(function (e) {\n _this.treeList.pop();\n childItems = e.result;\n _this.loadChild(childItems, mapper_1, eicon, parentLi, expandChild, callback, loaded);\n });\n }\n }\n else {\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n return;\n }\n else {\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, this.getSortedData(childItems), this.listBaseOption));\n this.expandNode(parentLi, eicon, loaded);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.disableTreeNodes(childItems);\n this.renderSubChild(parentLi, expandChild, loaded);\n }\n }\n };\n TreeView.prototype.loadChild = function (childItems, mapper, eicon, parentLi, expandChild, callback, loaded) {\n this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n }\n else {\n this.updateListProp(mapper);\n if (this.fields.dataSource instanceof DataManager && !this.fields.dataSource.dataSource.offline) {\n var id = parentLi.getAttribute('data-uid');\n var nodeData = this.getNodeObject(id);\n setValue('child', childItems, nodeData);\n }\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, childItems, this.listBaseOption));\n this.expandNode(parentLi, eicon, loaded);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.disableTreeNodes(childItems);\n this.renderSubChild(parentLi, expandChild, loaded);\n }\n if (callback) {\n callback();\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.disableTreeNodes = function (childItems) {\n var i = 0;\n while (i < childItems.length) {\n var id = childItems[i][this.fields.id].toString();\n if (this.disableNode !== undefined && this.disableNode.indexOf(id) !== -1) {\n this.doDisableAction([id]);\n }\n i++;\n }\n };\n TreeView.prototype.ensureCheckNode = function (element) {\n if (this.showCheckBox) {\n this.ele = (this.checkedElement) ? this.checkedElement.indexOf(element.getAttribute('data-uid')) : null;\n if (this.autoCheck) {\n this.ensureChildCheckState(element);\n this.ensureParentCheckState(element);\n }\n }\n this.currentLoadData = null;\n };\n TreeView.prototype.getFields = function (mapper, nodeLevel, dataLevel) {\n if (nodeLevel === dataLevel) {\n return mapper;\n }\n else {\n return this.getFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildFields = function (mapper, nodeLevel, dataLevel) {\n var childData;\n if (nodeLevel === dataLevel) {\n return this.getChildMapper(mapper);\n }\n else {\n return this.getChildFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildMapper = function (mapper) {\n return (typeof mapper.child === 'string' || isNOU(mapper.child)) ? mapper : mapper.child;\n };\n TreeView.prototype.getChildNodes = function (obj, parentId, isRoot) {\n if (isRoot === void 0) { isRoot = false; }\n var childNodes;\n if (isNOU(obj)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n return this.getChildGroup(this.groupedData, parentId, isRoot);\n }\n else {\n if (typeof this.fields.child === 'string') {\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, obj[i]);\n if (dataId && dataId.toString() === parentId) {\n return getValue(this.fields.child, obj[i]);\n }\n else if (!isNOU(getValue(this.fields.child, obj[i]))) {\n childNodes = this.getChildNodes(getValue(this.fields.child, obj[i]), parentId);\n if (childNodes !== undefined) {\n break;\n }\n }\n }\n }\n }\n return childNodes;\n };\n TreeView.prototype.getChildGroup = function (data, parentId, isRoot) {\n var childNodes;\n if (isNOU(data)) {\n return childNodes;\n }\n for (var i = 0, objlen = data.length; i < objlen; i++) {\n if (!isNOU(data[i][0]) && !isNOU(getValue(this.fields.parentID, data[i][0]))) {\n if (getValue(this.fields.parentID, data[i][0]).toString() === parentId) {\n return data[i];\n }\n }\n else if (isRoot) {\n return data[i];\n }\n else {\n return [];\n }\n }\n return childNodes;\n };\n TreeView.prototype.renderSubChild = function (element, expandChild, loaded) {\n if (expandChild) {\n var cIcons = selectAll('.' + EXPANDABLE, element);\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n if (element.querySelector('.e-icons') !== cIcons[i]) {\n var curLi = closest(icon, '.' + LISTITEM);\n this.expandArgs = this.getExpandEvent(curLi, null);\n if (loaded !== true) {\n this.trigger('nodeExpanding', this.expandArgs);\n }\n this.renderChildNodes(curLi, expandChild, null, loaded);\n }\n }\n }\n };\n TreeView.prototype.toggleSelect = function (li, e, multiSelect) {\n if (!li.classList.contains('e-disable')) {\n if (this.allowMultiSelection && ((e && e.ctrlKey) || multiSelect) && this.isActive(li)) {\n this.unselectNode(li, e);\n }\n else {\n this.selectNode(li, e, multiSelect);\n }\n }\n };\n TreeView.prototype.isActive = function (li) {\n return li.classList.contains(ACTIVE) ? true : false;\n };\n TreeView.prototype.selectNode = function (li, e, multiSelect) {\n if (isNOU(li) || (!this.allowMultiSelection && this.isActive(li) && !isNOU(e))) {\n this.setFocusElement(li);\n return;\n }\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n if (!this.allowMultiSelection || (!multiSelect && (!e || (e && !e.ctrlKey)))) {\n this.removeSelectAll();\n }\n if (this.allowMultiSelection && e && e.shiftKey) {\n if (!this.startNode) {\n this.startNode = li;\n }\n var startIndex = this.liList.indexOf(this.startNode);\n var endIndex = this.liList.indexOf(li);\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex; i <= endIndex; i++) {\n var currNode = this.liList[i];\n if (isVisible(currNode) && !currNode.classList.contains('e-disable')) {\n this.addSelect(currNode);\n }\n }\n }\n else {\n this.startNode = li;\n this.addSelect(li);\n }\n this.setFocusElement(li);\n if (this.isLoaded) {\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.unselectNode = function (li, e) {\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'un-select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.removeSelect(li);\n this.setFocusElement(li);\n if (this.isLoaded) {\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.setFocusElement = function (li) {\n if (!isNOU(li)) {\n var focusedNode = this.getFocusedNode();\n if (focusedNode) {\n removeClass([focusedNode], FOCUS);\n }\n addClass([li], FOCUS);\n this.updateIdAttr(focusedNode, li);\n }\n };\n TreeView.prototype.addSelect = function (liEle) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n this.selectedNodes.push(id);\n }\n };\n TreeView.prototype.removeSelect = function (liEle) {\n if (this.allowMultiSelection) {\n liEle.setAttribute('aria-selected', 'false');\n }\n else {\n liEle.removeAttribute('aria-selected');\n }\n removeClass([liEle], ACTIVE);\n var index = this.selectedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.selectedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.removeSelectAll = function () {\n var selectedLI = this.element.querySelectorAll('.' + ACTIVE);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.allowMultiSelection) {\n ele.setAttribute('aria-selected', 'false');\n }\n else {\n ele.removeAttribute('aria-selected');\n }\n }\n removeClass(selectedLI, ACTIVE);\n this.setProperties({ selectedNodes: [] }, true);\n };\n TreeView.prototype.getSelectEvent = function (currLi, action, e) {\n var nodeData = this.getNodeData(currLi);\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData };\n };\n TreeView.prototype.setExpandOnType = function () {\n this.expandOnType = (this.expandOn === 'Auto') ? (Browser.isDevice ? 'Click' : 'DblClick') : this.expandOn;\n };\n TreeView.prototype.expandHandler = function (e) {\n var target = e.originalEvent.target;\n if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n return;\n }\n else {\n this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n }\n };\n TreeView.prototype.expandCollapseAction = function (currLi, e) {\n var icon = select('div.' + ICON, currLi);\n if (!icon || icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n var classList = icon.classList;\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(currLi, icon, e);\n }\n else {\n this.collapseNode(currLi, icon, e);\n }\n }\n };\n TreeView.prototype.expandAction = function (currLi, icon, e, expandChild, callback) {\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n if (this.isLoaded) {\n this.expandArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeExpanding', this.expandArgs);\n if (this.expandArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n var ul = select('.' + PARENTITEM, currLi);\n if (ul && ul.nodeName === 'UL') {\n this.expandNode(currLi, icon);\n }\n else {\n this.renderChildNodes(currLi, expandChild, callback);\n }\n };\n TreeView.prototype.keyActionHandler = function (e) {\n var target = e.target;\n var focusedNode = this.getFocusedNode();\n if (target && target.classList.contains(INPUT)) {\n var inpEle = target;\n if (e.action === 'enter') {\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n else if (e.action === 'escape') {\n inpEle.value = this.oldText;\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n return;\n }\n e.preventDefault();\n var eventArgs = {\n cancel: false,\n event: e,\n node: focusedNode,\n };\n this.trigger('keyPress', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n switch (e.action) {\n case 'space':\n if (this.showCheckBox) {\n this.checkNode(e);\n }\n break;\n case 'moveRight':\n this.openNode(this.enableRtl ? false : true, e);\n break;\n case 'moveLeft':\n this.openNode(this.enableRtl ? true : false, e);\n break;\n case 'shiftDown':\n this.shiftKeySelect(true, e);\n break;\n case 'moveDown':\n case 'ctrlDown':\n case 'csDown':\n this.navigateNode(true);\n break;\n case 'shiftUp':\n this.shiftKeySelect(false, e);\n break;\n case 'moveUp':\n case 'ctrlUp':\n case 'csUp':\n this.navigateNode(false);\n break;\n case 'home':\n case 'shiftHome':\n case 'ctrlHome':\n case 'csHome':\n this.navigateRootNode(true);\n break;\n case 'end':\n case 'shiftEnd':\n case 'ctrlEnd':\n case 'csEnd':\n this.navigateRootNode(false);\n break;\n case 'enter':\n case 'ctrlEnter':\n case 'shiftEnter':\n case 'csEnter':\n this.toggleSelect(focusedNode, e);\n break;\n case 'f2':\n if (this.allowEditing && !focusedNode.classList.contains('e-disable')) {\n this.createTextbox(focusedNode, e);\n }\n break;\n case 'ctrlA':\n if (this.allowMultiSelection) {\n var sNodes = selectAll('.' + LISTITEM + ':not(.' + ACTIVE + ')', this.element);\n this.selectGivenNodes(sNodes);\n }\n break;\n }\n };\n TreeView.prototype.navigateToFocus = function (isUp) {\n var focusNode = this.getFocusedNode().querySelector('.' + TEXTWRAP);\n var pos = focusNode.getBoundingClientRect();\n var parent = this.getScrollParent(this.element);\n if (!isNOU(parent)) {\n var parentPos = parent.getBoundingClientRect();\n if (pos.bottom > parentPos.bottom) {\n parent.scrollTop += pos.bottom - parentPos.bottom;\n }\n else if (pos.top < parentPos.top) {\n parent.scrollTop -= parentPos.top - pos.top;\n }\n }\n var isVisible = this.isVisibleInViewport(focusNode);\n if (!isVisible) {\n focusNode.scrollIntoView(isUp);\n }\n };\n TreeView.prototype.isVisibleInViewport = function (txtWrap) {\n var pos = txtWrap.getBoundingClientRect();\n return (pos.top >= 0 && pos.left >= 0 && pos.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n pos.right <= (window.innerWidth || document.documentElement.clientWidth));\n };\n TreeView.prototype.getScrollParent = function (node) {\n if (isNOU(node)) {\n return null;\n }\n return (node.scrollHeight > node.clientHeight) ? node : this.getScrollParent(node.parentElement);\n };\n TreeView.prototype.shiftKeySelect = function (isTowards, e) {\n if (this.allowMultiSelection) {\n var focusedNode = this.getFocusedNode();\n var nextNode = isTowards ? this.getNextNode(focusedNode) : this.getPrevNode(focusedNode);\n this.removeHover();\n this.setFocusElement(nextNode);\n this.toggleSelect(nextNode, e, false);\n this.navigateToFocus(!isTowards);\n }\n else {\n this.navigateNode(isTowards);\n }\n };\n TreeView.prototype.checkNode = function (e) {\n var focusedNode = this.getFocusedNode();\n var checkWrap = select('.' + CHECKBOXWRAP, focusedNode);\n var isChecked = select(' .' + CHECKBOXFRAME, checkWrap).classList.contains(CHECK);\n if (!focusedNode.classList.contains('e-disable')) {\n this.validateCheckNode(checkWrap, isChecked, focusedNode, e);\n }\n };\n TreeView.prototype.validateCheckNode = function (checkWrap, isCheck, li, e) {\n var eventArgs = this.nodeCheckingEvent(checkWrap, isCheck, e);\n if (eventArgs.cancel) {\n return;\n }\n if (this.checkedElement.indexOf(li.getAttribute('data-uid')) === -1) {\n this.checkedElement.push(li.getAttribute('data-uid'));\n var child = this.getChildNodes(this.treeData, li.getAttribute('data-uid'));\n (child !== null) ? this.allCheckNode(child, this.checkedElement, null, null, false) : child = null;\n }\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n if (this.autoCheck) {\n this.ensureChildCheckState(li);\n this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n }\n this.nodeCheckedEvent(checkWrap, isCheck, e);\n };\n //This method can be used to get all child nodes of a parent by passing the children of a parent along with 'validateCheck' set to false\n TreeView.prototype.allCheckNode = function (child, newCheck, checked, childCheck, validateCheck) {\n if (child) {\n for (var length_1 = 0; length_1 < child.length; length_1++) {\n var childId = getValue(this.fields.id, child[length_1]);\n var check = this.element.querySelector('[data-uid=\"' + childId + '\"]');\n //Validates isChecked case while no UI interaction has been performed on the node or it's parent\n if (validateCheck !== false && this.checkedElement.indexOf(childId.toString()) === -1) {\n if (((check === null && !isNOU(child[length_1][this.fields.isChecked]) && newCheck.indexOf(childId.toString()) === -1)\n || childCheck === 0 || checked === 2)) {\n (child[length_1][this.fields.isChecked] !== false || checked === 2) ? newCheck.push(childId.toString())\n : childCheck = null;\n childCheck = (child[length_1][this.fields.isChecked] !== false || checked === 2) ? 0 : null;\n }\n }\n //Pushes child checked node done thro' UI interaction\n if (newCheck.indexOf(childId.toString()) === -1 && isNOU(checked)) {\n newCheck.push(childId.toString());\n }\n //Gets if any next level children are available for child nodes\n if (getValue(this.fields.hasChildren, child[length_1]) === true ||\n getValue(this.fields.child.toString(), child[length_1])) {\n var id = getValue(this.fields.id, child[length_1]);\n var childId_1 = this.getChildNodes(this.treeData, id.toString());\n if (childId_1) {\n (isNOU(validateCheck)) ? this.allCheckNode(childId_1, newCheck, checked, childCheck) :\n this.allCheckNode(childId_1, newCheck, checked, childCheck, validateCheck);\n childCheck = null;\n }\n }\n childCheck = null;\n }\n }\n };\n TreeView.prototype.openNode = function (toBeOpened, e) {\n var focusedNode = this.getFocusedNode();\n var icon = select('div.' + ICON, focusedNode);\n if (toBeOpened) {\n if (!icon) {\n return;\n }\n else if (icon.classList.contains(EXPANDABLE)) {\n this.expandAction(focusedNode, icon, e);\n }\n else {\n this.focusNextNode(focusedNode, true);\n }\n }\n else {\n if (icon && icon.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(focusedNode, icon, e);\n }\n else {\n var parentLi = closest(closest(focusedNode, '.' + PARENTITEM), '.' + LISTITEM);\n if (!parentLi) {\n return;\n }\n else {\n if (!parentLi.classList.contains('e-disable')) {\n this.setFocus(focusedNode, parentLi);\n this.navigateToFocus(true);\n }\n }\n }\n }\n };\n TreeView.prototype.navigateNode = function (isTowards) {\n var focusedNode = this.getFocusedNode();\n this.focusNextNode(focusedNode, isTowards);\n };\n TreeView.prototype.navigateRootNode = function (isBackwards) {\n var focusedNode = this.getFocusedNode();\n var rootNode = isBackwards ? this.getRootNode() : this.getEndNode();\n if (!rootNode.classList.contains('e-disable')) {\n this.setFocus(focusedNode, rootNode);\n this.navigateToFocus(isBackwards);\n }\n };\n TreeView.prototype.getFocusedNode = function () {\n var selectedItem;\n var fNode = select('.' + LISTITEM + '.' + FOCUS, this.element);\n if (isNOU(fNode)) {\n selectedItem = select('.' + LISTITEM, this.element);\n }\n return isNOU(fNode) ? (isNOU(selectedItem) ? this.element.firstElementChild : selectedItem) : fNode;\n };\n TreeView.prototype.focusNextNode = function (li, isTowards) {\n var nextNode = isTowards ? this.getNextNode(li) : this.getPrevNode(li);\n this.setFocus(li, nextNode);\n this.navigateToFocus(!isTowards);\n if (nextNode.classList.contains('e-disable')) {\n var lastChild = nextNode.lastChild;\n if (nextNode.previousSibling == null && nextNode.classList.contains('e-level-1')) {\n this.focusNextNode(nextNode, true);\n }\n else if (nextNode.nextSibling == null && nextNode.classList.contains('e-node-collapsed')) {\n this.focusNextNode(nextNode, false);\n }\n else if (nextNode.nextSibling == null && lastChild.classList.contains('e-text-content')) {\n this.focusNextNode(nextNode, false);\n }\n else {\n this.focusNextNode(nextNode, isTowards);\n }\n }\n };\n TreeView.prototype.getNextNode = function (li) {\n var index = this.liList.indexOf(li);\n var nextNode;\n do {\n index++;\n nextNode = this.liList[index];\n if (isNOU(nextNode)) {\n return li;\n }\n } while (!isVisible(nextNode));\n return nextNode;\n };\n TreeView.prototype.getPrevNode = function (li) {\n var index = this.liList.indexOf(li);\n var prevNode;\n do {\n index--;\n prevNode = this.liList[index];\n if (isNOU(prevNode)) {\n return li;\n }\n } while (!isVisible(prevNode));\n return prevNode;\n };\n TreeView.prototype.getRootNode = function () {\n var index = 0;\n var rootNode;\n do {\n rootNode = this.liList[index];\n index++;\n } while (!isVisible(rootNode));\n return rootNode;\n };\n TreeView.prototype.getEndNode = function () {\n var index = this.liList.length - 1;\n var endNode;\n do {\n endNode = this.liList[index];\n index--;\n } while (!isVisible(endNode));\n return endNode;\n };\n TreeView.prototype.setFocus = function (preNode, nextNode) {\n removeClass([preNode], [HOVER, FOCUS]);\n if (!nextNode.classList.contains('e-disable')) {\n addClass([nextNode], [HOVER, FOCUS]);\n this.updateIdAttr(preNode, nextNode);\n }\n };\n TreeView.prototype.updateIdAttr = function (preNode, nextNode) {\n this.element.removeAttribute('aria-activedescendant');\n if (preNode) {\n preNode.removeAttribute('id');\n }\n nextNode.setAttribute('id', this.element.id + '_active');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n };\n TreeView.prototype.focusIn = function () {\n if (!this.mouseDownStatus) {\n addClass([this.getFocusedNode()], HOVER);\n }\n this.mouseDownStatus = false;\n };\n TreeView.prototype.focusOut = function () {\n removeClass([this.getFocusedNode()], HOVER);\n };\n TreeView.prototype.onMouseOver = function (e) {\n var target = e.target;\n var classList = target.classList;\n var currentLi = closest(target, '.' + LISTITEM);\n if (!currentLi || classList.contains(PARENTITEM) || classList.contains(LISTITEM)) {\n this.removeHover();\n return;\n }\n else {\n if (currentLi && !currentLi.classList.contains('e-disable')) {\n this.setHover(currentLi);\n }\n }\n };\n TreeView.prototype.setHover = function (li) {\n if (!li.classList.contains(HOVER)) {\n this.removeHover();\n addClass([li], HOVER);\n }\n };\n ;\n TreeView.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n TreeView.prototype.removeHover = function () {\n var hoveredNode = selectAll('.' + HOVER, this.element);\n if (hoveredNode && hoveredNode.length) {\n removeClass(hoveredNode, HOVER);\n }\n };\n ;\n TreeView.prototype.getNodeData = function (currLi, fromDS) {\n if (!isNOU(currLi) && currLi.classList.contains(LISTITEM) &&\n !isNOU(closest(currLi, '.' + CONTROL)) && closest(currLi, '.' + CONTROL).classList.contains(ROOT)) {\n var id = currLi.getAttribute('data-uid');\n var text = this.getText(currLi, fromDS);\n var pNode = closest(currLi.parentNode, '.' + LISTITEM);\n var pid = pNode ? pNode.getAttribute('data-uid') : null;\n var selected = currLi.classList.contains(ACTIVE);\n var expanded = (currLi.getAttribute('aria-expanded') === 'true') ? true : false;\n var checked = null;\n if (this.showCheckBox) {\n checked = select('.' + CHECKBOXWRAP, currLi).getAttribute('aria-checked');\n }\n return { id: id, text: text, parentID: pid, selected: selected, expanded: expanded, isChecked: checked };\n }\n return { id: '', text: '', parentID: '', selected: '', expanded: '', isChecked: '' };\n };\n TreeView.prototype.getText = function (currLi, fromDS) {\n if (fromDS) {\n var nodeData = this.getNodeObject(currLi.getAttribute('data-uid'));\n var level = parseFloat(currLi.getAttribute('aria-level'));\n var nodeFields = this.getFields(this.fields, level, 1);\n return getValue(nodeFields.text, nodeData);\n }\n return select('.' + LISTTEXT, currLi).textContent;\n };\n TreeView.prototype.getExpandEvent = function (currLi, e) {\n var nodeData = this.getNodeData(currLi);\n return { cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData, event: e };\n };\n TreeView.prototype.reRenderNodes = function () {\n this.element.innerHTML = '';\n this.setTouchClass();\n this.setProperties({ selectedNodes: [], checkedNodes: [], expandedNodes: [] }, true);\n this.isLoaded = false;\n this.setDataBinding();\n };\n TreeView.prototype.setCssClass = function (oldClass, newClass) {\n if (!isNOU(oldClass) && oldClass !== '') {\n removeClass([this.element], oldClass.split(' '));\n }\n if (!isNOU(newClass) && newClass !== '') {\n addClass([this.element], newClass.split(' '));\n }\n };\n TreeView.prototype.editingHandler = function (e) {\n var target = e.target;\n if (!target || target.classList.contains(ROOT) || target.classList.contains(PARENTITEM) ||\n target.classList.contains(LISTITEM) || target.classList.contains(ICON) ||\n target.classList.contains(INPUT) || target.classList.contains(INPUTGROUP)) {\n return;\n }\n else {\n var liEle = closest(target, '.' + LISTITEM);\n this.createTextbox(liEle, e);\n }\n };\n TreeView.prototype.createTextbox = function (liEle, e) {\n var oldInpEle = select('.' + TREEINPUT, this.element);\n if (oldInpEle) {\n oldInpEle.blur();\n }\n var textEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var innerEle = this.createElement('input', { className: TREEINPUT, attrs: { value: this.oldText } });\n var eventArgs = this.getEditEvent(liEle, null, innerEle.outerHTML);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var inpWidth = textEle.offsetWidth + 5;\n var style = 'width:' + inpWidth + 'px';\n addClass([liEle], EDITING);\n textEle.innerHTML = eventArgs.innerHtml;\n var inpEle = select('.' + TREEINPUT, textEle);\n this.inputObj = Input.createInput({\n element: inpEle,\n properties: {\n enableRtl: this.enableRtl,\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('style', style);\n inpEle.focus();\n var inputEle = inpEle;\n inputEle.setSelectionRange(0, inputEle.value.length);\n this.wireInputEvents(inpEle);\n };\n TreeView.prototype.updateOldText = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n this.editData = this.getNodeObject(id);\n var level = parseFloat(liEle.getAttribute('aria-level'));\n this.editFields = this.getFields(this.fields, level, 1);\n this.oldText = getValue(this.editFields.text, this.editData);\n };\n TreeView.prototype.inputFocusOut = function (e) {\n if (!select('.' + TREEINPUT, this.element)) {\n return;\n }\n var target = e.target;\n var newText = target.value;\n var txtEle = closest(target, '.' + LISTTEXT);\n var liEle = closest(target, '.' + LISTITEM);\n detach(this.inputObj.container);\n this.appendNewText(liEle, txtEle, newText, true);\n };\n TreeView.prototype.appendNewText = function (liEle, txtEle, newText, isInput) {\n var eventArgs = this.getEditEvent(liEle, newText, null);\n this.trigger('nodeEdited', eventArgs);\n newText = eventArgs.cancel ? eventArgs.oldText : eventArgs.newText;\n var newData = setValue(this.editFields.text, newText, this.editData);\n if (!isNOU(this.nodeTemplateFn)) {\n txtEle.innerHTML = '';\n append(this.nodeTemplateFn(newData), txtEle);\n }\n else {\n txtEle.innerHTML = newText;\n }\n if (isInput) {\n removeClass([liEle], EDITING);\n txtEle.focus();\n }\n if (eventArgs.oldText !== newText) {\n this.triggerEvent();\n }\n };\n TreeView.prototype.getElement = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return this.element.querySelector('[data-uid=\"' + ele + '\"]');\n }\n else if (typeof ele === 'object') {\n return ele;\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getId = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return ele;\n }\n else if (typeof ele === 'object') {\n return ele.getAttribute('data-uid');\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getEditEvent = function (liEle, newText, inpEle) {\n var data = this.getNodeData(liEle);\n return { cancel: false, newText: newText, node: liEle, nodeData: data, oldText: this.oldText, innerHtml: inpEle };\n };\n TreeView.prototype.getNodeObject = function (id) {\n var childNodes;\n if (isNOU(id)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n for (var i = 0, objlen = this.treeData.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, this.treeData[i]);\n if (!isNOU(this.treeData[i]) && !isNOU(dataId) && dataId.toString() === id) {\n return this.treeData[i];\n }\n }\n }\n else {\n return this.getChildNodeObject(this.treeData, this.fields, id);\n }\n return childNodes;\n };\n TreeView.prototype.getChildNodeObject = function (obj, mapper, id) {\n var newList;\n if (isNOU(obj)) {\n return newList;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(mapper.id, obj[i]);\n if (obj[i] && dataId && dataId.toString() === id) {\n return obj[i];\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var child = 'child';\n newList = this.getChildNodeObject(getValue(child, obj[i]), this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n }\n return newList;\n };\n TreeView.prototype.setDragAndDrop = function (toBind) {\n if (toBind) {\n this.initializeDrag();\n }\n else {\n this.destroyDrag();\n }\n };\n TreeView.prototype.initializeDrag = function () {\n var _this = this;\n var virtualEle;\n var proxy = this;\n this.dragObj = new Draggable(this.element, {\n enableTailMode: true,\n enableAutoScroll: true,\n dragTarget: '.' + TEXTWRAP,\n helper: function (e) {\n _this.dragTarget = e.sender.target;\n var dragRoot = closest(_this.dragTarget, '.' + ROOT);\n var dragWrap = closest(_this.dragTarget, '.' + TEXTWRAP);\n _this.dragLi = closest(_this.dragTarget, '.' + LISTITEM);\n if (_this.fullRowSelect && !dragWrap && _this.dragTarget.classList.contains(FULLROW)) {\n dragWrap = _this.dragTarget.nextElementSibling;\n }\n if (!_this.dragTarget || !e.element.isSameNode(dragRoot) || !dragWrap ||\n _this.dragTarget.classList.contains(ROOT) || _this.dragTarget.classList.contains(PARENTITEM) ||\n _this.dragTarget.classList.contains(LISTITEM) || _this.dragLi.classList.contains('e-disable')) {\n return false;\n }\n var cloneEle = (dragWrap.cloneNode(true));\n if (isNOU(select('div.' + ICON, cloneEle))) {\n var icon = proxy.createElement('div', { className: ICON + ' ' + EXPANDABLE });\n cloneEle.insertBefore(icon, cloneEle.children[0]);\n }\n var cssClass = DRAGITEM + ' ' + ROOT + ' ' + _this.cssClass + ' ' + (_this.enableRtl ? RTL : '');\n virtualEle = proxy.createElement('div', { className: cssClass });\n virtualEle.appendChild(cloneEle);\n var nLen = _this.selectedNodes.length;\n if (nLen > 1 && _this.allowMultiSelection && _this.dragLi.classList.contains(ACTIVE)) {\n var cNode = proxy.createElement('span', { className: DROPCOUNT, innerHTML: '' + nLen });\n virtualEle.appendChild(cNode);\n }\n document.body.appendChild(virtualEle);\n document.body.style.cursor = '';\n _this.dragData = _this.getNodeData(_this.dragLi);\n return virtualEle;\n },\n dragStart: function (e) {\n addClass([_this.element], DRAGGING);\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, null, e.target, null, virtualEle, level);\n if (eventArgs.draggedNode.classList.contains(EDITING)) {\n eventArgs.cancel = true;\n }\n else {\n _this.trigger('nodeDragStart', eventArgs);\n }\n if (eventArgs.cancel) {\n detach(virtualEle);\n removeClass([_this.element], DRAGGING);\n _this.dragStartAction = false;\n }\n else {\n _this.dragStartAction = true;\n }\n },\n drag: function (e) {\n _this.dragObj.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20 } });\n _this.dragAction(e, virtualEle);\n },\n dragStop: function (e) {\n removeClass([_this.element], DRAGGING);\n _this.removeVirtualEle();\n var dropTarget = e.target;\n var preventTargetExpand = false;\n var dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n if (!dropTarget || !dropRoot) {\n detach(e.helper);\n document.body.style.cursor = '';\n }\n var listItem = closest(dropTarget, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget, null, e.helper, level);\n eventArgs.preventTargetExpand = preventTargetExpand;\n _this.trigger('nodeDragStop', eventArgs);\n _this.dragParent = eventArgs.draggedParentNode;\n _this.preventExpand = eventArgs.preventTargetExpand;\n if (eventArgs.cancel) {\n if (e.helper.parentNode) {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n }\n _this.dragStartAction = false;\n }\n });\n this.dropObj = new Droppable(this.element, {\n out: function (e) {\n if (!isNOU(e) && !e.target.classList.contains(SIBLING)) {\n document.body.style.cursor = 'not-allowed';\n }\n },\n over: function (e) {\n document.body.style.cursor = '';\n },\n drop: function (e) {\n _this.dropAction(e);\n }\n });\n };\n TreeView.prototype.dragAction = function (e, virtualEle) {\n var dropRoot = closest(e.target, '.' + DROPPABLE);\n var dropWrap = closest(e.target, '.' + TEXTWRAP);\n var icon = select('div.' + ICON, virtualEle);\n removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n this.removeVirtualEle();\n document.body.style.cursor = '';\n var classList = e.target.classList;\n if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n dropWrap = e.target.nextElementSibling;\n }\n if (dropRoot) {\n var dropLi = closest(e.target, '.' + LISTITEM);\n if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n if (dropLi && e && (e.event.offsetY < 7)) {\n addClass([icon], DROPNEXT);\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (1) : (0);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else if (dropLi && e && (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10))) {\n addClass([icon], DROPNEXT);\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (2) : (1);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else {\n addClass([icon], DROPIN);\n }\n }\n else if (e.target.nodeName === 'LI' && (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi))) {\n addClass([icon], DROPNEXT);\n this.renderVirtualEle(e);\n }\n else if (e.target.classList.contains(SIBLING)) {\n addClass([icon], DROPNEXT);\n }\n else {\n addClass([icon], DROPOUT);\n }\n }\n else {\n addClass([icon], NODROP);\n document.body.style.cursor = 'not-allowed';\n }\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = this.getDragEvent(e.event, this, e.target, e.target, null, virtualEle, level);\n if (eventArgs.dropIndicator) {\n removeClass([icon], eventArgs.dropIndicator);\n }\n this.trigger('nodeDragging', eventArgs);\n if (eventArgs.dropIndicator) {\n addClass([icon], eventArgs.dropIndicator);\n }\n };\n TreeView.prototype.dropAction = function (e) {\n var offsetY = e.event.offsetY;\n var dropTarget = e.target;\n var dragObj;\n var level;\n var drop = false;\n var dragInstance = e.dragData.draggable;\n for (var i = 0; i < dragInstance.ej2_instances.length; i++) {\n if (dragInstance.ej2_instances[i] instanceof TreeView_1) {\n dragObj = dragInstance.ej2_instances[i];\n break;\n }\n }\n if (dragObj && dragObj.dragTarget) {\n var dragTarget = dragObj.dragTarget;\n var dragLi = (closest(dragTarget, '.' + LISTITEM));\n var dropLi = (closest(dropTarget, '.' + LISTITEM));\n if (dropLi == null && dropTarget.classList.contains(ROOT)) {\n dropLi = dropTarget.firstElementChild;\n }\n detach(e.droppedElement);\n document.body.style.cursor = '';\n if (!dropLi || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n return;\n }\n if (dragObj.allowMultiSelection && dragLi.classList.contains(ACTIVE)) {\n var sNodes = selectAll('.' + ACTIVE, dragObj.element);\n for (var i = 0; i < sNodes.length; i++) {\n if (dropLi.isSameNode(sNodes[i]) || this.isDescendant(sNodes[i], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[i], dropLi, e, dragObj, offsetY);\n }\n }\n else {\n this.appendNode(dropTarget, dragLi, dropLi, e, dragObj, offsetY);\n }\n level = parseInt(dragLi.getAttribute('aria-level'), 10);\n drop = true;\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.dragData.draggedElement, null, level, drop));\n this.triggerEvent();\n };\n TreeView.prototype.appendNode = function (dropTarget, dragLi, dropLi, e, dragObj, offsetY) {\n if (!dragLi.classList.contains('e-disable') && !dropLi.classList.contains('e-disable')) {\n if (dropTarget.nodeName === 'LI') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else if (dropTarget.firstElementChild && dropTarget.classList.contains(ROOT)) {\n if (dropTarget.firstElementChild.nodeName === 'UL') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY);\n }\n }\n };\n TreeView.prototype.dropAsSiblingNode = function (dragLi, dropLi, e, dragObj) {\n var dropUl = closest(dropLi, '.' + PARENTITEM);\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var pre;\n if (e.target.offsetHeight > 0 && e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n dropUl.insertBefore(dragLi, pre ? e.target : e.target.nextElementSibling);\n this.moveData(dragLi, dropLi, dropUl, pre, dragObj);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.dropAsChildNode = function (dragLi, dropLi, dragObj, index, e, pos) {\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var dropParentUl = closest(dropLi, '.' + PARENTITEM);\n if (e && (pos < 7)) {\n dropParentUl.insertBefore(dragLi, dropLi);\n this.moveData(dragLi, dropLi, dropParentUl, true, dragObj);\n }\n else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10))) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n this.moveData(dragLi, dropLi, dropParentUl, false, dragObj);\n }\n else {\n var dropUl = this.expandParent(dropLi);\n var childLi = dropUl.childNodes[index];\n dropUl.insertBefore(dragLi, childLi);\n this.moveData(dragLi, childLi, dropUl, true, dragObj);\n }\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.moveData = function (dragLi, dropLi, dropUl, pre, dragObj) {\n var dropParentLi = closest(dropUl, '.' + LISTITEM);\n var id = this.getId(dragLi);\n var removedData = dragObj.updateChildField(dragObj.treeData, dragObj.fields, id, null, null, true);\n var refId = this.getId(dropLi);\n var index = this.getDataPos(this.treeData, this.fields, refId);\n var parentId = this.getId(dropParentLi);\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', true);\n var pos = isNOU(index) ? this.treeData.length : (pre ? index : index + 1);\n if (isNOU(parentId) && !this.hasPid) {\n delete removedData[0][this.fields.parentID];\n }\n else {\n var currPid = this.isNumberTypeId ? parseFloat(parentId) : parentId;\n setValue(this.fields.parentID, currPid, removedData[0]);\n }\n this.treeData.splice(pos, 0, removedData[0]);\n if (dragObj.element.id !== this.element.id) {\n var childData = dragObj.removeChildNodes(id);\n pos++;\n for (var i = 0, len = childData.length; i < len; i++) {\n this.treeData.splice(pos, 0, childData[i]);\n pos++;\n }\n dragObj.groupedData = dragObj.getGroupedData(dragObj.treeData, dragObj.fields.parentID);\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n else {\n this.addChildData(this.treeData, this.fields, parentId, removedData, pre ? index : index + 1);\n }\n };\n TreeView.prototype.expandParent = function (dropLi) {\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && this.preventExpand !== true) {\n this.expandAction(dropLi, dropIcon, null);\n }\n var dropUl = select('.' + PARENTITEM, dropLi);\n if (this.preventExpand === true && !dropUl && dropIcon) {\n this.renderChildNodes(dropLi);\n }\n dropUl = select('.' + PARENTITEM, dropLi);\n if (!isNOU(dropUl) && this.preventExpand === true) {\n dropUl.style.display = 'none';\n }\n if (!isNOU(dropUl) && this.preventExpand === false) {\n dropUl.style.display = 'block';\n }\n if (isNOU(dropUl) && this.preventExpand === true) {\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n if (icon) {\n icon.classList.add('e-icon-expandable');\n }\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n if (icon) {\n removeClass([icon], COLLAPSIBLE);\n }\n else {\n ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n }\n dropLi.setAttribute('aria-expanded', 'false');\n dropUl.style.display = 'none';\n }\n if (isNOU(dropUl)) {\n this.trigger('nodeExpanding', this.getExpandEvent(dropLi, null));\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n if (icon) {\n removeClass([icon], EXPANDABLE);\n }\n else {\n ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n icon = select('div.' + ICON, dropLi);\n removeClass([icon], EXPANDABLE);\n }\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n this.addExpand(dropLi);\n this.trigger('nodeExpanded', this.getExpandEvent(dropLi, null));\n }\n return dropUl;\n };\n TreeView.prototype.updateElement = function (dragParentUl, dragParentLi) {\n if (dragParentLi && dragParentUl.childElementCount === 0) {\n var dragIcon = select('div.' + ICON, dragParentLi);\n detach(dragParentUl);\n detach(dragIcon);\n var parentId = this.getId(dragParentLi);\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', null);\n this.removeExpand(dragParentLi, true);\n }\n };\n TreeView.prototype.updateAriaLevel = function (dragLi) {\n var level = this.parents(dragLi, '.' + PARENTITEM).length;\n dragLi.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, dragLi), level + 1);\n };\n TreeView.prototype.updateChildAriaLevel = function (element, level) {\n if (!isNOU(element)) {\n var cNodes = element.childNodes;\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n liEle.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, liEle), level + 1);\n }\n }\n };\n TreeView.prototype.renderVirtualEle = function (e) {\n var pre;\n if (e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (pre ? 1 : 2) : (pre ? 0 : 1);\n e.target.insertBefore(virEle, e.target.children[index]);\n };\n TreeView.prototype.removeVirtualEle = function () {\n var sibEle = select('.' + SIBLING);\n if (sibEle) {\n detach(sibEle);\n }\n };\n TreeView.prototype.destroyDrag = function () {\n if (this.dragObj && this.dropObj) {\n this.dragObj.destroy();\n this.dropObj.destroy();\n }\n };\n TreeView.prototype.getDragEvent = function (event, obj, dropTarget, target, dragNode, cloneEle, level, drop) {\n var dropLi = dropTarget ? closest(dropTarget, '.' + LISTITEM) : null;\n var dropData = dropLi ? this.getNodeData(dropLi) : null;\n var draggedNode = obj ? obj.dragLi : dragNode;\n var draggedNodeData = obj ? obj.dragData : null;\n var newParent = dropTarget ? this.parents(dropTarget, '.' + LISTITEM) : null;\n var dragLiParent = obj.dragLi.parentElement;\n var dragParent = obj.dragLi ? closest(dragLiParent, '.' + LISTITEM) : null;\n var targetParent = null;\n var indexValue = null;\n var iconCss = [DROPNEXT, DROPIN, DROPOUT, NODROP];\n var iconClass = null;\n var node = (drop === true) ? draggedNode : dropLi;\n var index = node ? closest(node, '.e-list-parent') : null;\n var i = 0;\n dragParent = (obj.dragLi && dragParent === null) ? closest(dragLiParent, '.' + ROOT) : dragParent;\n dragParent = (drop === true) ? this.dragParent : dragParent;\n if (cloneEle) {\n while (i < 4) {\n if (select('.' + ICON, cloneEle).classList.contains(iconCss[i])) {\n iconClass = iconCss[i];\n break;\n }\n i++;\n }\n }\n if (index) {\n var dropTar = 0;\n for (i = 0; i < index.childElementCount; i++) {\n dropTar = (drop !== true && index.children[i] === draggedNode && dropLi !== draggedNode) ? ++dropTar : dropTar;\n if ((drop !== true && index.children[i].classList.contains('e-hover'))) {\n indexValue = (event.offsetY >= 23) ? i + 1 : i;\n break;\n }\n else if (index.children[i] === node) {\n indexValue = (event.offsetY >= 23) ? i : i;\n break;\n }\n }\n indexValue = (dropTar !== 0) ? --indexValue : indexValue;\n }\n if (dropTarget) {\n if (newParent.length === 0) {\n targetParent = null;\n }\n else if (dropTarget.classList.contains(LISTITEM)) {\n targetParent = newParent[0];\n }\n else {\n targetParent = newParent[1];\n }\n }\n if (dropLi === draggedNode) {\n targetParent = dropLi;\n }\n if (dropTarget && target.offsetHeight <= 33 && event.offsetY < target.offsetHeight - 10 && event.offsetY > 6) {\n targetParent = dropLi;\n if (drop !== true) {\n level = ++level;\n var parent_1 = targetParent ? select('.e-list-parent', targetParent) : null;\n indexValue = (parent_1) ? parent_1.children.length : 0;\n if (!(this.fields.dataSource instanceof DataManager) && parent_1 === null && targetParent) {\n var parent_2 = targetParent.hasAttribute('data-uid') ?\n this.getChildNodes(this.fields.dataSource, targetParent.getAttribute('data-uid').toString()) : null;\n indexValue = (parent_2) ? parent_2.length : 0;\n }\n }\n }\n return {\n cancel: false,\n clonedNode: cloneEle,\n event: event,\n draggedNode: draggedNode,\n draggedNodeData: draggedNodeData,\n droppedNode: dropLi,\n droppedNodeData: dropData,\n dropIndex: indexValue,\n dropLevel: level,\n draggedParentNode: dragParent,\n dropTarget: targetParent,\n dropIndicator: iconClass,\n target: target,\n };\n };\n TreeView.prototype.addFullRow = function (toAdd) {\n var len = this.liList.length;\n if (toAdd) {\n for (var i = 0; i < len; i++) {\n this.createFullRow(this.liList[i]);\n }\n }\n else {\n for (var i = 0; i < len; i++) {\n var rowDiv = select('.' + FULLROW, this.liList[i]);\n detach(rowDiv);\n }\n }\n };\n TreeView.prototype.createFullRow = function (item) {\n var rowDiv = this.createElement('div', { className: FULLROW });\n item.insertBefore(rowDiv, item.childNodes[0]);\n };\n TreeView.prototype.addMultiSelect = function (toAdd) {\n if (toAdd) {\n var liEles = selectAll('.' + LISTITEM + ':not([aria-selected=\"true\"])', this.element);\n for (var _i = 0, liEles_1 = liEles; _i < liEles_1.length; _i++) {\n var ele = liEles_1[_i];\n ele.setAttribute('aria-selected', 'false');\n }\n }\n else {\n var liEles = selectAll('.' + LISTITEM + '[aria-selected=\"false\"]', this.element);\n for (var _a = 0, liEles_2 = liEles; _a < liEles_2.length; _a++) {\n var ele = liEles_2[_a];\n ele.removeAttribute('aria-selected');\n }\n }\n };\n TreeView.prototype.collapseByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var cNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n var icon = select('.' + COLLAPSIBLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.collapseNode(liEle, icon, null);\n }\n this.collapseByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.collapseAllNodes = function (excludeHiddenNodes) {\n var cIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + COLLAPSIBLE, this.element));\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.collapseNode(liEle, icon, null);\n }\n };\n TreeView.prototype.expandByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var eNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n var liEle = eNodes[i];\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.expandAction(liEle, icon, null);\n }\n this.expandByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.expandAllNodes = function (excludeHiddenNodes) {\n var eIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + EXPANDABLE, this.element));\n for (var i = 0, len = eIcons.length; i < len; i++) {\n var icon = eIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.expandAction(liEle, icon, null, true);\n }\n };\n TreeView.prototype.getVisibleNodes = function (excludeHiddenNodes, nodes) {\n var vNodes = Array.prototype.slice.call(nodes);\n if (excludeHiddenNodes) {\n for (var i = 0; i < vNodes.length; i++) {\n if (!isVisible(vNodes[i])) {\n vNodes.splice(i, 1);\n i--;\n }\n }\n }\n return vNodes;\n };\n TreeView.prototype.removeNode = function (node) {\n var dragParentUl = closest(node, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n detach(node);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateInstance();\n this.removeData(node);\n };\n TreeView.prototype.updateInstance = function () {\n this.updateList();\n this.updateSelectedNodes();\n this.updateExpandedNodes();\n };\n TreeView.prototype.updateList = function () {\n this.liList = Array.prototype.slice.call(selectAll('.' + LISTITEM, this.element));\n };\n TreeView.prototype.updateSelectedNodes = function () {\n this.setProperties({ selectedNodes: [] }, true);\n var sNodes = selectAll('.' + ACTIVE, this.element);\n this.selectGivenNodes(sNodes);\n };\n TreeView.prototype.updateExpandedNodes = function () {\n this.setProperties({ expandedNodes: [] }, true);\n var eNodes = selectAll('[aria-expanded=\"true\"]', this.element);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n this.addExpand(eNodes[i]);\n }\n };\n TreeView.prototype.removeData = function (node) {\n if (this.dataType === 1) {\n var dm = new DataManager(this.treeData);\n var id = this.getId(node);\n var data = {};\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = newId;\n dm.remove(this.fields.id, data);\n this.removeChildNodes(id);\n }\n else {\n var id = this.getId(node);\n this.updateChildField(this.treeData, this.fields, id, null, null, true);\n }\n };\n TreeView.prototype.removeChildNodes = function (parentId) {\n var cNodes = this.getChildGroup(this.groupedData, parentId, false);\n var childData = [];\n if (cNodes) {\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var dm = new DataManager(this.treeData);\n var id = getValue(this.fields.id, cNodes[i]).toString();\n var data = {};\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = currId;\n var nodeData = dm.remove(this.fields.id, data);\n childData.push(nodeData[0]);\n this.removeChildNodes(id);\n }\n }\n return childData;\n };\n TreeView.prototype.doGivenAction = function (nodes, selector, toExpand) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var icon = select('.' + selector, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n toExpand ? this.expandAction(liEle, icon, null) : this.collapseNode(liEle, icon, null);\n }\n }\n };\n TreeView.prototype.addGivenNodes = function (nodes, dropLi, index, isRemote, dropEle) {\n if (nodes.length === 0) {\n return;\n }\n var sNodes = this.getSortedData(nodes);\n var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n if (isRemote) {\n this.updateMapper(level);\n }\n var li = ListBase.createListItemFromJson(this.createElement, sNodes, this.listBaseOption, level);\n var dropUl;\n if (!dropEle) {\n dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n }\n else {\n dropUl = dropEle;\n }\n var refNode = dropUl.childNodes[index];\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[i], refNode);\n }\n var id = this.getId(dropLi);\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, id, 'hasChildren', true);\n var refId = this.getId(refNode);\n var pos = isNOU(refId) ? this.treeData.length : this.getDataPos(this.treeData, this.fields, refId);\n for (var j = 0; j < nodes.length; j++) {\n if (!isNOU(id)) {\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n setValue(this.fields.parentID, currId, nodes[j]);\n }\n this.treeData.splice(pos, 0, nodes[j]);\n pos++;\n }\n }\n else {\n this.addChildData(this.treeData, this.fields, id, nodes, index);\n }\n this.finalizeNode(dropUl);\n };\n TreeView.prototype.updateMapper = function (level) {\n var mapper = (level === 1) ? this.fields : this.getChildFields(this.fields, level - 1, 1);\n this.updateListProp(mapper);\n };\n TreeView.prototype.updateListProp = function (mapper) {\n var prop = this.getActualProperties(mapper);\n this.listBaseOption.fields = prop;\n this.listBaseOption.fields.url = prop.hasOwnProperty('navigateUrl') ? prop.navigateUrl : 'navigateUrl';\n };\n TreeView.prototype.getDataPos = function (obj, mapper, id) {\n var pos = null;\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n return i;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var data = getValue(mapper.child, obj[i]);\n pos = this.getDataPos(data, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var items = getValue('child', obj[i]);\n pos = this.getDataPos(items, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n }\n return pos;\n };\n TreeView.prototype.addChildData = function (obj, mapper, id, data, index) {\n var updated;\n if (isNOU(id)) {\n index = isNOU(index) ? obj.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n obj.splice(index, 0, data[k]);\n index++;\n }\n return updated;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n if ((typeof mapper.child === 'string' && obj[i].hasOwnProperty(mapper.child)) ||\n (this.fields.dataSource instanceof DataManager && obj[i].hasOwnProperty('child'))) {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n var childData = getValue(key, obj[i]);\n index = isNOU(index) ? childData.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n childData.splice(index, 0, data[k]);\n index++;\n }\n }\n else {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n obj[i][key] = data;\n }\n return true;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childObj = getValue(mapper.child, obj[i]);\n updated = this.addChildData(childObj, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var childData = getValue('child', obj[i]);\n updated = this.addChildData(childData, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n }\n return updated;\n };\n TreeView.prototype.doDisableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n var id = void 0;\n id = (nodes[i]) ? nodes[i].toString() : null;\n if (id && this.disableNode.indexOf(nodes[i].toString()) === -1) {\n this.disableNode.push(nodes[i].toString());\n }\n continue;\n }\n liEle.setAttribute('aria-disabled', 'true');\n addClass([liEle], DISABLE);\n }\n };\n TreeView.prototype.doEnableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n var id = (nodes[i]) ? nodes[i].toString() : null;\n if (id && this.disableNode.indexOf(id) !== -1) {\n this.disableNode.splice(this.disableNode.indexOf(id), 1);\n }\n continue;\n }\n liEle.removeAttribute('aria-disabled');\n removeClass([liEle], DISABLE);\n }\n };\n TreeView.prototype.setTouchClass = function () {\n var ele = closest(this.element, '.' + BIGGER);\n this.touchClass = isNOU(ele) ? '' : SMALL;\n };\n TreeView.prototype.updatePersistProp = function () {\n this.removeField(this.treeData, this.fields, ['selected', 'expanded']);\n var sleNodes = this.selectedNodes;\n for (var l = 0, slelen = sleNodes.length; l < slelen; l++) {\n this.updateField(this.treeData, this.fields, sleNodes[l], 'selected', true);\n }\n var enodes = this.expandedNodes;\n for (var k = 0, nodelen = enodes.length; k < nodelen; k++) {\n this.updateField(this.treeData, this.fields, enodes[k], 'expanded', true);\n }\n if (this.showCheckBox) {\n this.removeField(this.treeData, this.fields, ['isChecked']);\n var cnodes = this.checkedNodes;\n for (var m = 0, nodelen = cnodes.length; m < nodelen; m++) {\n this.updateField(this.treeData, this.fields, cnodes[m], 'isChecked', true);\n }\n }\n };\n TreeView.prototype.removeField = function (obj, mapper, names) {\n if (isNOU(obj) || isNOU(mapper)) {\n return;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n for (var j = 0; j < names.length; j++) {\n var field = this.getMapperProp(mapper, names[j]);\n if (!isNOU(obj[i][field])) {\n delete obj[i][field];\n }\n }\n if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n this.removeField(getValue(mapper.child, obj[i]), this.getChildMapper(mapper), names);\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n this.removeField(getValue('child', obj[i]), this.getChildMapper(mapper), names);\n }\n }\n };\n TreeView.prototype.getMapperProp = function (mapper, fieldName) {\n switch (fieldName) {\n case 'selected':\n return !isNOU(mapper.selected) ? mapper.selected : 'selected';\n case 'expanded':\n return !isNOU(mapper.expanded) ? mapper.expanded : 'expanded';\n case 'isChecked':\n return !isNOU(mapper.isChecked) ? mapper.isChecked : 'isChecked';\n case 'hasChildren':\n return !isNOU(mapper.hasChildren) ? mapper.hasChildren : 'hasChildren';\n default:\n return fieldName;\n }\n };\n TreeView.prototype.updateField = function (obj, mapper, id, key, value) {\n var childNodes;\n if (isNOU(id)) {\n return;\n }\n else if (this.dataType === 1) {\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', newId, false));\n setValue(this.getMapperProp(mapper, key), value, resultData[0]);\n }\n else {\n this.updateChildField(obj, mapper, id, key, value);\n }\n };\n TreeView.prototype.updateChildField = function (obj, mapper, id, key, value, remove) {\n var removedData;\n if (isNOU(obj)) {\n return removedData;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[i]);\n if (obj[i] && nodeId && nodeId.toString() === id) {\n if (remove) {\n removedData = obj.splice(i, 1);\n }\n else {\n setValue(this.getMapperProp(mapper, key), value, obj[i]);\n removedData = [];\n }\n return removedData;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n removedData = this.updateChildField(childData, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var childItems = getValue('child', obj[i]);\n removedData = this.updateChildField(childItems, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n }\n return removedData;\n };\n TreeView.prototype.triggerEvent = function () {\n var eventArgs = { data: this.treeData };\n this.trigger('dataSourceChanged', eventArgs);\n };\n TreeView.prototype.wireInputEvents = function (inpEle) {\n EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n };\n TreeView.prototype.wireEditingEvents = function (toBind) {\n if (toBind) {\n var proxy_2 = this;\n this.touchEditObj = new Touch(this.element, {\n tap: function (e) {\n if (e.tapCount === 2) {\n e.originalEvent.preventDefault();\n proxy_2.editingHandler(e.originalEvent);\n }\n }\n });\n }\n else {\n if (this.touchEditObj) {\n this.touchEditObj.destroy();\n }\n }\n };\n TreeView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n var proxy_3 = this;\n this.touchClickObj = new Touch(this.element, {\n tap: function (e) {\n e.originalEvent.preventDefault();\n proxy_3.clickHandler(e);\n }\n });\n }\n else {\n if (this.touchClickObj) {\n this.touchClickObj.destroy();\n }\n }\n };\n TreeView.prototype.wireExpandOnEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var proxy_4 = this;\n this.touchExpandObj = new Touch(this.element, {\n tap: function (e) {\n if (_this.expandOnType === 'Click' || (_this.expandOnType === 'DblClick' && e.tapCount === 2)) {\n proxy_4.expandHandler(e);\n }\n }\n });\n }\n else {\n if (this.touchExpandObj) {\n this.touchExpandObj.destroy();\n }\n }\n };\n TreeView.prototype.mouseDownHandler = function (e) {\n this.mouseDownStatus = true;\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (e.ctrlKey && this.allowMultiSelection) {\n EventHandler.add(this.element, 'contextmenu', this.preventContextMenu, this);\n }\n };\n ;\n TreeView.prototype.preventContextMenu = function (e) {\n e.preventDefault();\n };\n TreeView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'mousedown', this.mouseDownHandler, this);\n this.wireClickEvent(true);\n if (this.expandOnType !== 'None') {\n this.wireExpandOnEvent(true);\n }\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.element, 'mouseout', this.onMouseLeave, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n };\n TreeView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'mousedown', this.mouseDownHandler);\n this.wireClickEvent(false);\n this.wireExpandOnEvent(false);\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.element, 'mouseout', this.onMouseLeave);\n this.keyboardModule.destroy();\n };\n TreeView.prototype.parents = function (element, selector) {\n var matched = [];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, selector)) {\n matched.push(el);\n }\n el = el.parentNode;\n }\n return matched;\n };\n TreeView.prototype.isDescendant = function (parent, child) {\n var node = child.parentNode;\n while (!isNOU(node)) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n TreeView.prototype.showSpinner = function (element) {\n addClass([element], LOAD);\n createSpinner({\n target: element,\n width: Browser.isDevice ? 16 : 14\n }, this.createElement);\n showSpinner(element);\n };\n TreeView.prototype.hideSpinner = function (element) {\n hideSpinner(element);\n element.innerHTML = '';\n removeClass([element], LOAD);\n };\n TreeView.prototype.setCheckedNodes = function (nodes) {\n nodes = JSON.parse(JSON.stringify(nodes));\n this.uncheckAll(this.checkedNodes);\n if (nodes.length > 0) {\n this.checkAll(nodes);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {TreeView} newProp\n * @param {TreeView} oldProp\n * @returns void\n * @private\n */\n TreeView.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 'allowDragAndDrop':\n this.setDragAndDrop(this.allowDragAndDrop);\n break;\n case 'allowEditing':\n this.wireEditingEvents(this.allowEditing);\n break;\n case 'allowMultiSelection':\n if (this.selectedNodes.length > 1) {\n var sNode = this.getElement(this.selectedNodes[0]);\n this.isLoaded = false;\n this.removeSelectAll();\n this.selectNode(sNode, null);\n this.isLoaded = true;\n }\n this.setMultiSelect(this.allowMultiSelection);\n this.addMultiSelect(this.allowMultiSelection);\n break;\n case 'checkedNodes':\n if (this.showCheckBox) {\n this.checkedNodes = oldProp.checkedNodes;\n this.setCheckedNodes(newProp.checkedNodes);\n }\n break;\n case 'autoCheck':\n if (this.showCheckBox) {\n this.autoCheck = newProp.autoCheck;\n this.ensureIndeterminate();\n }\n break;\n case 'cssClass':\n this.setCssClass(oldProp.cssClass, newProp.cssClass);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'expandedNodes':\n this.isAnimate = false;\n this.setProperties({ expandedNodes: [] }, true);\n this.collapseAll();\n this.isInitalExpand = true;\n this.setProperties({ expandedNodes: isNOU(newProp.expandedNodes) ? [] : newProp.expandedNodes }, true);\n this.doExpandAction();\n this.isInitalExpand = false;\n this.isAnimate = true;\n break;\n case 'expandOn':\n this.wireExpandOnEvent(false);\n this.setExpandOnType();\n if (this.expandOnType !== 'None') {\n this.wireExpandOnEvent(true);\n }\n break;\n case 'fields':\n this.isAnimate = false;\n this.initialRender = true;\n this.updateListProp(this.fields);\n this.reRenderNodes();\n this.initialRender = false;\n this.isAnimate = true;\n break;\n case 'fullRowSelect':\n this.setFullRow(this.fullRowSelect);\n this.addFullRow(this.fullRowSelect);\n break;\n case 'loadOnDemand':\n if (this.loadOnDemand === false && !this.onLoaded) {\n var nodes = this.element.querySelectorAll('li');\n var i = 0;\n while (i < nodes.length) {\n this.renderChildNodes(nodes[i], true, null, true);\n i++;\n }\n this.onLoaded = true;\n }\n break;\n case 'nodeTemplate':\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n this.reRenderNodes();\n break;\n case 'selectedNodes':\n this.removeSelectAll();\n this.setProperties({ selectedNodes: newProp.selectedNodes }, true);\n this.doSelectionAction();\n break;\n case 'showCheckBox':\n this.reRenderNodes();\n break;\n case 'sortOrder':\n this.reRenderNodes();\n break;\n }\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n */\n TreeView.prototype.destroy = function () {\n this.element.removeAttribute('aria-activedescendant');\n this.element.removeAttribute('tabindex');\n this.unWireEvents();\n this.wireEditingEvents(false);\n this.rippleFn();\n this.rippleIconFn();\n this.setCssClass(this.cssClass, null);\n this.setDragAndDrop(false);\n this.setFullRow(false);\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Adds the collection of TreeView nodes based on target and index position. If target node is not specified,\n * then the nodes are added as children of the given parentID or in the root level of TreeView.\n * @param { { [key: string]: Object }[] } nodes - Specifies the array of JSON data that has to be added.\n * @param { string | Element } target - Specifies ID of TreeView node/TreeView node as target element.\n * @param { number } index - Specifies the index to place the newly added nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n */\n TreeView.prototype.addNodes = function (nodes, target, index, preventTargetExpand) {\n if (isNOU(nodes)) {\n return;\n }\n nodes = JSON.parse(JSON.stringify(nodes));\n var dropLi = this.getElement(target);\n this.preventExpand = preventTargetExpand;\n if (this.fields.dataSource instanceof DataManager) {\n var dropUl_1;\n var icon = dropLi ? dropLi.querySelector('.' + ICON) : null;\n var proxy_5 = this;\n if (dropLi && icon && icon.classList.contains(EXPANDABLE) &&\n dropLi.querySelector('.' + PARENTITEM) === null) {\n proxy_5.renderChildNodes(dropLi, null, function () {\n dropUl_1 = dropLi.querySelector('.' + PARENTITEM);\n proxy_5.addGivenNodes(nodes, dropLi, index, true, dropUl_1);\n proxy_5.triggerEvent();\n });\n }\n else {\n this.addGivenNodes(nodes, dropLi, index, true);\n this.triggerEvent();\n }\n }\n else if (this.dataType === 2) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n if (dropLi) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n nodes = this.getSortedData(nodes);\n for (var i = 0; i < nodes.length; i++) {\n var pid = getValue(this.fields.parentID, nodes[i]);\n dropLi = pid ? this.getElement(pid.toString()) : pid;\n this.addGivenNodes([nodes[i]], dropLi, index);\n }\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n this.triggerEvent();\n }\n };\n /**\n * Instead of clicking on the TreeView node for editing, we can enable it by using\n * `beginEdit` property. On passing the node ID or element through this property, the edit textBox\n * will be created for the particular node thus allowing us to edit it.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.beginEdit = function (node) {\n var ele = this.getElement(node);\n if (!isNOU(ele)) {\n this.createTextbox(ele, null);\n }\n };\n /**\n * Checks all the unchecked nodes. You can also check specific nodes by passing array of unchecked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.checkAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, true);\n }\n };\n /**\n * Collapses all the expanded TreeView nodes. You can collapse specific nodes by passing array of nodes as argument to this method.\n * You can also collapse all the nodes excluding the hidden nodes by setting **excludeHiddenNodes** to true. If you want to collapse\n * a specific level of nodes, set **level** as argument to collapseAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/ array of TreeView node.\n * @param {number} level - TreeView nodes will collapse up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes of TreeView when collapsing all nodes.\n */\n TreeView.prototype.collapseAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, COLLAPSIBLE, false);\n }\n else {\n if (level > 0) {\n this.collapseByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.collapseAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Disables the collection of nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.disableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doDisableAction(nodes);\n }\n };\n /**\n * Enables the collection of disabled nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.enableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doEnableAction(nodes);\n }\n };\n /**\n * Ensures visibility of the TreeView node by using node ID or node element.\n * When many TreeView nodes are present and we need to find a particular node, `ensureVisible` property\n * helps bring the node to visibility by expanding the TreeView and scrolling to the specific node.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView nodes.\n */\n TreeView.prototype.ensureVisible = function (node) {\n var liEle = this.getElement(node);\n if (isNOU(liEle)) {\n return;\n }\n var parents = this.parents(liEle, '.' + LISTITEM);\n this.expandAll(parents);\n setTimeout(function () { liEle.scrollIntoView(true); }, 450);\n };\n /**\n * Expands all the collapsed TreeView nodes. You can expand the specific nodes by passing the array of collapsed nodes\n * as argument to this method. You can also expand all the collapsed nodes by excluding the hidden nodes by setting\n * **excludeHiddenNodes** to true to this method. To expand a specific level of nodes, set **level** as argument to expandAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @param {number} level - TreeView nodes will expand up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes when expanding all nodes.\n */\n TreeView.prototype.expandAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, EXPANDABLE, true);\n }\n else {\n if (level > 0) {\n this.expandByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.expandAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Gets all the checked nodes including child, whether it is loaded or not.\n */\n TreeView.prototype.getAllCheckedNodes = function () {\n var checkNodes = this.checkedNodes;\n var newCheck = [];\n var i = 0;\n var id = this.fields.id;\n for (i; i < this.treeData.length; i++) {\n //Checks if isChecked is enabled while node is not loaded in DOM\n var checked = null;\n var childNode = null;\n var isLoaded = this.element.querySelector('[data-uid=\"' + this.treeData[i][id].toString() + '\"]');\n if (isLoaded && isLoaded.querySelector('.e-list-item') === null) {\n //Checks if isChecked is enabled for parent\n if (this.treeData[i][this.fields.isChecked] === true\n && this.checkedElement.indexOf(this.treeData[i][id].toString()) === -1) {\n newCheck.push(this.treeData[i][id].toString());\n checked = 2;\n }\n //Checks for child nodes with isChecked enabled\n if (checked !== 2) {\n checked = 1;\n }\n childNode = this.getChildNodes(this.treeData, this.treeData[i][id].toString());\n (childNode !== null) ? this.allCheckNode(childNode, newCheck, checked) : childNode = null;\n }\n }\n i = 0;\n //Gets checked nodes based on UI interaction\n while (i < checkNodes.length) {\n if (newCheck.indexOf(checkNodes[i]) !== -1) {\n i++;\n continue;\n }\n newCheck.push(checkNodes[i]);\n //Gets all child which is not loaded while parent is checked\n var parentNode = this.element.querySelector('[data-uid=\"' + checkNodes[i] + '\"]');\n if (parentNode && parentNode.querySelector('.e-list-item') === null) {\n var child = this.getChildNodes(this.treeData, checkNodes[i].toString());\n (child && this.autoCheck) ? this.allCheckNode(child, newCheck) : child = null;\n }\n i++;\n }\n return newCheck;\n };\n /**\n * Get the node's data such as id, text, parentID, selected, isChecked, and expanded by passing the node element or it's ID.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.getNode = function (node) {\n var ele = this.getElement(node);\n return this.getNodeData(ele, true);\n };\n /**\n * To get the updated data source of TreeView after performing some operation like drag and drop, node editing,\n * node selecting/unSelecting, node expanding/collapsing, node checking/unChecking, adding and removing node.\n * * If you pass the ID of TreeView node as arguments for this method then it will return the updated data source\n * of the corresponding node otherwise it will return the entire updated data source of TreeView.\n * * The updated data source also contains custom attributes if you specified in data source.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.getTreeData = function (node) {\n var id = this.getId(node);\n this.updatePersistProp();\n if (isNOU(id)) {\n return this.treeData;\n }\n else {\n var data = this.getNodeObject(id);\n return isNOU(data) ? [] : [data];\n }\n };\n /**\n * Moves the collection of nodes within the same TreeView based on target or its index position.\n * @param {string[] | Element[]} sourceNodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {number} index - Specifies the index to place the moved nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n */\n TreeView.prototype.moveNodes = function (sourceNodes, target, index, preventTargetExpand) {\n var dropLi = this.getElement(target);\n if (isNOU(dropLi)) {\n return;\n }\n for (var i = 0; i < sourceNodes.length; i++) {\n var dragLi = this.getElement(sourceNodes[i]);\n if (isNOU(dragLi) || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n continue;\n }\n this.preventExpand = preventTargetExpand;\n this.dropAsChildNode(dragLi, dropLi, this, index);\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n this.triggerEvent();\n };\n /**\n * Removes the collection of TreeView nodes by passing the array of node details as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.removeNodes = function (nodes) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n this.removeNode(liEle);\n }\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n this.triggerEvent();\n }\n };\n /**\n * Replaces the text of the TreeView node with the given text.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {string} newText - Specifies the new text of TreeView node.\n */\n TreeView.prototype.updateNode = function (target, newText) {\n if (isNOU(target) || isNOU(newText) || !this.allowEditing) {\n return;\n }\n var liEle = this.getElement(target);\n if (isNOU(liEle)) {\n return;\n }\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var eventArgs = this.getEditEvent(liEle, null, null);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.appendNewText(liEle, txtEle, newText, false);\n };\n /**\n * Unchecks all the checked nodes. You can also uncheck the specific nodes by passing array of checked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.uncheckAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, false);\n }\n };\n var TreeView_1;\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Complex({}, NodeAnimationSettings)\n ], TreeView.prototype, \"animation\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"checkedNodes\", void 0);\n __decorate([\n Property('')\n ], TreeView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"expandedNodes\", void 0);\n __decorate([\n Property('Auto')\n ], TreeView.prototype, \"expandOn\", void 0);\n __decorate([\n Complex({}, FieldsSettings)\n ], TreeView.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"fullRowSelect\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"loadOnDemand\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"nodeTemplate\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"selectedNodes\", void 0);\n __decorate([\n Property('None')\n ], TreeView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"autoCheck\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"drawNode\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"keyPress\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecking\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeClicked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragging\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStart\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStop\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDropped\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEdited\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEditing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanded\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanding\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelected\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelecting\", void 0);\n TreeView = TreeView_1 = __decorate([\n NotifyPropertyChanges\n ], TreeView);\n return TreeView;\n}(Component));\nexport { TreeView };\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, formatUnit, EventHandler, Event, isNullOrUndefined, closest } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, addClass, removeClass, Touch } from '@syncfusion/ej2-base';\nvar CONTROL = 'e-control';\nvar ROOT = 'e-sidebar';\nvar DOCKER = 'e-dock';\nvar CLOSE = 'e-close';\nvar OPEN = 'e-open';\nvar TRASITION = 'e-transition';\nvar DEFAULTBACKDROP = 'e-sidebar-overlay';\nvar CONTEXTBACKDROP = 'e-backdrop';\nvar RTL = 'e-rtl';\nvar RIGHT = 'e-right';\nvar LEFT = 'e-left';\nvar OVER = 'e-over';\nvar PUSH = 'e-push';\nvar SLIDE = 'e-slide';\nvar VISIBILITY = 'e-visibility';\nvar MAINCONTENTANIMATION = 'e-content-animation';\nvar DISABLEANIMATION = 'e-disable-animation';\nvar CONTEXT = 'e-sidebar-context';\nvar SIDEBARABSOLUTE = 'e-sidebar-absolute';\n/**\n * Sidebar is an expandable or collapsible\n * component that typically act as a side container to place the primary or secondary content alongside of the main content.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Sidebar = /** @class */ (function (_super) {\n __extends(Sidebar, _super);\n function Sidebar(options, element) {\n return _super.call(this, options, element) || this;\n }\n Sidebar.prototype.preRender = function () {\n this.setWidth();\n };\n Sidebar.prototype.render = function () {\n this.initialize();\n this.wireEvents();\n };\n Sidebar.prototype.initialize = function () {\n this.setTarget();\n this.addClass();\n this.setZindex();\n if (this.enableDock) {\n this.setDock();\n }\n if (this.isOpen) {\n this.show();\n }\n else {\n this.setMediaQuery();\n }\n this.setType(this.type);\n this.setCloseOnDocumentClick();\n this.setEnableRTL();\n };\n Sidebar.prototype.setEnableRTL = function () {\n this.enableRtl ? (addClass([this.element], RTL)) :\n (removeClass([this.element], RTL));\n };\n Sidebar.prototype.setTarget = function () {\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector(this.target) }, true);\n }\n if (this.target) {\n this.target.insertBefore(this.element, this.target.children[0]);\n addClass([this.element], SIDEBARABSOLUTE);\n addClass([this.target], CONTEXT);\n }\n };\n Sidebar.prototype.setCloseOnDocumentClick = function () {\n if (this.closeOnDocumentClick) {\n EventHandler.add(document, 'mousedown touchstart', this.documentclickHandler, this);\n }\n else {\n EventHandler.remove(document, 'mousedown touchstart', this.documentclickHandler);\n }\n };\n Sidebar.prototype.setWidth = function () {\n if (this.enableDock && this.position === 'Left') {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n else if (this.enableDock && this.position === 'Right') {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n else if (!this.enableDock) {\n setStyle(this.element, { 'width': this.setDimension(this.width) });\n }\n };\n Sidebar.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n Sidebar.prototype.setZindex = function () {\n setStyle(this.element, { 'z-index': '' + this.zIndex });\n };\n Sidebar.prototype.addClass = function () {\n var classELement = document.querySelector('.e-main-content');\n if (!isNullOrUndefined((classELement ||\n this.element.nextElementSibling))) {\n addClass([classELement || this.element.nextElementSibling], [MAINCONTENTANIMATION]);\n }\n if (!this.enableDock && this.type !== 'Auto') {\n addClass([this.element], [VISIBILITY]);\n }\n removeClass([this.element], [OPEN, CLOSE, RIGHT, LEFT, SLIDE, PUSH, OVER]);\n this.element.classList.add(ROOT);\n addClass([this.element], (this.position === 'Right') ? RIGHT : LEFT);\n if (this.type === 'Auto' && !Browser.isDevice && !this.enableDock) {\n addClass([this.element], OPEN);\n }\n else {\n addClass([this.element], CLOSE);\n }\n };\n Sidebar.prototype.destroyBackDrop = function () {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (this.target && this.showBackdrop && sibling) {\n removeClass([sibling], CONTEXTBACKDROP);\n }\n else if (this.showBackdrop && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n /**\n * Hide the Sidebar component, if it is in an open state.\n * @returns void\n */\n Sidebar.prototype.hide = function () {\n var closeArguments = { model: this, element: this.element, cancel: false };\n this.trigger('close', closeArguments);\n if (!closeArguments.cancel) {\n if (this.element.classList.contains(CLOSE)) {\n return;\n }\n if (this.element.classList.contains(OPEN)) {\n var changeArguments = { name: 'change', element: this.element };\n this.trigger('change', changeArguments);\n }\n addClass([this.element], CLOSE);\n removeClass([this.element], OPEN);\n this.enableDock ? setStyle(this.element, { 'width': formatUnit(this.dockSize) }) :\n setStyle(this.element, { 'width': formatUnit(this.width) });\n this.setDock();\n this.setType(this.type);\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (!this.enableDock && sibling) {\n sibling.style.transform = 'translateX(' + 0 + 'px)';\n this.position === 'Left' ? sibling.style.marginLeft = '0px' : sibling.style.marginRight = '0px';\n }\n this.destroyBackDrop();\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.remove('e-sidebar-overflow');\n }\n this.setProperties({ isOpen: false }, true);\n }\n };\n /**\n * Shows the Sidebar component, if it is in closed state.\n * @returns void\n */\n Sidebar.prototype.show = function () {\n var openArguments = { model: this, element: this.element, cancel: false };\n this.trigger('open', openArguments);\n if (!openArguments.cancel) {\n removeClass([this.element], VISIBILITY);\n if (this.element.classList.contains(OPEN)) {\n return;\n }\n if (this.element.classList.contains(CLOSE)) {\n var changeArguments = { name: 'change', element: this.element };\n this.trigger('change', changeArguments);\n }\n addClass([this.element], [OPEN, TRASITION]);\n setStyle(this.element, { 'transform': '' });\n removeClass([this.element], CLOSE);\n setStyle(this.element, { 'width': formatUnit(this.width) });\n var elementWidth = this.element.getBoundingClientRect().width;\n this.setType(this.type);\n this.createBackDrop();\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.add('e-sidebar-overflow');\n }\n this.setProperties({ isOpen: true }, true);\n }\n };\n Sidebar.prototype.setAnimation = function () {\n if (this.animate) {\n removeClass([this.element], DISABLEANIMATION);\n }\n else {\n addClass([this.element], DISABLEANIMATION);\n }\n };\n Sidebar.prototype.setDock = function () {\n if (this.enableDock && this.position === 'Left' && !this.getState()) {\n setStyle(this.element, { 'transform': 'translateX(' + -100 + '%) translateX(' + this.setDimension(this.dockSize) + ')' });\n }\n else if (this.enableDock && this.position === 'Right' && !this.getState()) {\n setStyle(this.element, { 'transform': 'translateX(' + 100 + '%) translateX(' + '-' + this.setDimension(this.dockSize) + ')' });\n }\n if (this.element.classList.contains(CLOSE) && this.enableDock) {\n setStyle(this.element, { 'width': this.setDimension(this.dockSize) });\n }\n };\n Sidebar.prototype.createBackDrop = function () {\n if (this.target && this.showBackdrop) {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n addClass([sibling], CONTEXTBACKDROP);\n }\n else if (this.showBackdrop && !this.modal && this.getState()) {\n this.modal = this.createElement('div');\n this.modal.className = DEFAULTBACKDROP;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n };\n Sidebar.prototype.getPersistData = function () {\n return this.addOnPersist(['type', 'position', 'isOpen']);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Sidebar.prototype.getModuleName = function () {\n return 'sidebar';\n };\n /**\n * Shows or hides the Sidebar based on the current state.\n * @returns void\n */\n Sidebar.prototype.toggle = function (e) {\n this.element.classList.contains(OPEN) ? this.hide() : this.show();\n };\n Sidebar.prototype.getState = function () {\n return this.element.classList.contains(OPEN) ? true : false;\n };\n Sidebar.prototype.setMediaQuery = function () {\n if (this.mediaQuery && this.mediaQuery.matches) {\n this.show();\n }\n else if (this.mediaQuery && this.getState()) {\n this.hide();\n }\n };\n Sidebar.prototype.resize = function (e) {\n if (this.type === 'Auto') {\n if (Browser.isDevice) {\n addClass([this.element], OVER);\n }\n else {\n addClass([this.element], PUSH);\n }\n }\n this.setMediaQuery();\n };\n Sidebar.prototype.documentclickHandler = function (e) {\n if (closest(e.target, '.' + CONTROL + '' + '.' + ROOT)) {\n return;\n }\n this.hide();\n };\n Sidebar.prototype.enableGestureHandler = function (args) {\n if (this.position === 'Left' && args.swipeDirection === 'Right' &&\n (args.startX <= 20 && args.distanceX >= 50 && args.velocity >= 0.5)) {\n this.show();\n }\n else if (this.position === 'Left' && args.swipeDirection === 'Left') {\n this.hide();\n }\n else if (this.position === 'Right' && args.swipeDirection === 'Right') {\n this.hide();\n }\n else if (this.position === 'Right' && args.swipeDirection === 'Left'\n && (window.innerWidth - args.startX <= 20 && args.distanceX >= 50 && args.velocity >= 0.5)) {\n this.show();\n }\n };\n Sidebar.prototype.setEnableGestures = function () {\n if (this.enableGestures) {\n this.mainContentEle = new Touch(document.body, { swipe: this.enableGestureHandler.bind(this) });\n this.sidebarEle = new Touch(this.element, { swipe: this.enableGestureHandler.bind(this) });\n }\n else {\n if (this.mainContentEle && this.sidebarEle) {\n this.mainContentEle.destroy();\n this.sidebarEle.destroy();\n }\n }\n };\n Sidebar.prototype.wireEvents = function () {\n this.setEnableGestures();\n window.addEventListener('resize', this.resize.bind(this));\n };\n Sidebar.prototype.unWireEvents = function () {\n window.removeEventListener('resize', this.resize.bind(this));\n EventHandler.remove(document, 'mousedown touchstart', this.documentclickHandler);\n if (this.mainContentEle) {\n this.mainContentEle.destroy();\n }\n if (this.sidebarEle) {\n this.sidebarEle.destroy();\n }\n };\n Sidebar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isOpen':\n this.isOpen ? this.show() : this.hide();\n break;\n case 'width':\n this.setWidth();\n if (!this.getState()) {\n this.setDock();\n }\n break;\n case 'animate':\n this.setAnimation();\n break;\n case 'type':\n removeClass([this.element], [VISIBILITY]);\n this.addClass();\n this.setType(this.type);\n break;\n case 'position':\n this.element.style.transform = '';\n this.setDock();\n if (sibling) {\n this.position === 'Left' ? sibling.style.marginRight = '0px' : sibling.style.marginLeft = '0px';\n }\n if (this.position === 'Right') {\n removeClass([this.element], LEFT);\n addClass([this.element], RIGHT);\n }\n else {\n removeClass([this.element], RIGHT);\n addClass([this.element], LEFT);\n }\n this.setType(this.type);\n break;\n case 'showBackdrop':\n if (this.showBackdrop) {\n this.createBackDrop();\n }\n else {\n if (this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n }\n break;\n case 'target':\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector(this.target) }, true);\n }\n if (isNullOrUndefined(this.target)) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([oldProp.target], CONTEXT);\n setStyle(sibling, { 'margin-left': 0, 'margin-right': 0 });\n document.body.insertAdjacentElement('afterbegin', this.element);\n }\n else {\n _super.prototype.refresh.call(this);\n }\n break;\n case 'closeOnDocumentClick':\n this.setCloseOnDocumentClick();\n break;\n case 'enableDock':\n if (!this.getState()) {\n this.setDock();\n }\n break;\n case 'zIndex':\n this.setZindex();\n break;\n case 'mediaQuery':\n this.setMediaQuery();\n break;\n case 'enableGestures':\n this.setEnableGestures();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n }\n }\n };\n Sidebar.prototype.setType = function (type) {\n var elementWidth = this.element.getBoundingClientRect().width;\n this.setZindex();\n if (this.enableDock) {\n addClass([this.element], DOCKER);\n }\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (sibling) {\n sibling.style.transform = 'translateX(' + 0 + 'px)';\n if (!Browser.isDevice && this.type !== 'Auto') {\n this.position === 'Left' ? sibling.style.marginLeft = '0px' : sibling.style.marginRight = '0px';\n }\n }\n var margin = this.position === 'Left' ? elementWidth + 'px' : elementWidth + 'px';\n var eleWidth = this.position === 'Left' ? elementWidth : -(elementWidth);\n removeClass([this.element], [PUSH, OVER, SLIDE]);\n switch (type) {\n case 'Push':\n addClass([this.element], [PUSH]);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n break;\n case 'Slide':\n addClass([this.element], [SLIDE]);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n sibling.style.transform = 'translateX(' + eleWidth + 'px)';\n }\n break;\n case 'Over':\n addClass([this.element], [OVER]);\n if (this.enableDock && this.element.classList.contains(CLOSE)) {\n if (sibling) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n }\n break;\n case 'Auto':\n addClass([this.element], [TRASITION]);\n if (Browser.isDevice) {\n if (sibling && (this.enableDock) && !this.getState()) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n addClass([this.element], PUSH);\n }\n else {\n addClass([this.element], OVER);\n }\n }\n else {\n addClass([this.element], PUSH);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n this.setProperties({ isOpen: true }, true);\n }\n this.createBackDrop();\n }\n };\n /**\n * Removes the control from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @returns void\n */\n Sidebar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], [OPEN, CLOSE, PUSH, SLIDE, OVER, LEFT, RIGHT, TRASITION]);\n if (this.target) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([this.target], CONTEXT);\n }\n this.destroyBackDrop();\n this.element.style.width = '';\n this.element.style.zIndex = '';\n this.element.style.transform = '';\n var sibling = document.querySelector('.e-main-content')\n || this.element.nextElementSibling;\n if (!isNullOrUndefined(sibling)) {\n sibling.style.margin = '';\n sibling.style.transform = '';\n }\n this.unWireEvents();\n };\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"dockSize\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"mediaQuery\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableDock\", void 0);\n __decorate([\n Property('en-US')\n ], Sidebar.prototype, \"locale\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"enableGestures\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"isOpen\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"animate\", void 0);\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"closeOnDocumentClick\", void 0);\n __decorate([\n Property('Left')\n ], Sidebar.prototype, \"position\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"target\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"showBackdrop\", void 0);\n __decorate([\n Property('Auto')\n ], Sidebar.prototype, \"type\", void 0);\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], Sidebar.prototype, \"zIndex\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"destroyed\", void 0);\n Sidebar = __decorate([\n NotifyPropertyChanges\n ], Sidebar);\n return Sidebar;\n}(Component));\nexport { Sidebar };\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 { parentsUntil, isActionPrevent, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\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 } from '../base/util';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\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 excel filtering module\n * @hidden\n */\n function ExcelFilter(parent, filterSettings, serviceLocator, customFltrOperators) {\n var _this = _super.call(this, parent, filterSettings, serviceLocator) || this;\n _this.customFilterOperators = customFltrOperators;\n _this.isExcel = true;\n return _this;\n }\n ExcelFilter.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', '', 'CustomFilter'],\n };\n options.date = options.number;\n options.datetime = options.number;\n var model = [];\n for (var i = 0; i < options[type].length; i++) {\n if (options[type][i].length) {\n if (operator) {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...',\n iconCss: 'e-icons e-icon-check ' + (operator === options[type][i].toLowerCase() ? '' : 'e-emptyicon')\n });\n }\n else {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...'\n });\n }\n }\n else {\n model.push({ separator: true });\n }\n }\n return model;\n };\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n ExcelFilter.prototype.destroy = function () {\n if (this.dlg) {\n this.unwireExEvents();\n _super.prototype.destroy.call(this);\n }\n if (this.cmenu && this.cmenu.parentElement) {\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.createMenu = function (type, isFiltered, isCheckIcon) {\n var options = { string: 'TextFilter', date: '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 var ul = this.parent.createElement('ul');\n var icon = isFiltered ? 'e-excl-filter-icon e-filtered' : 'e-excl-filter-icon';\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel('ClearFilter'), isFiltered ? '' : 'e-disabled', icon));\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 };\n ExcelFilter.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 }), li.firstChild);\n if (isSubMenu) {\n li.appendChild(this.parent.createElement('span', { className: 'e-icons e-caret' }));\n }\n return li;\n };\n ExcelFilter.prototype.wireExEvents = function () {\n EventHandler.add(this.dlg, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.dlg, 'click', this.clickExHandler, this);\n };\n ExcelFilter.prototype.unwireExEvents = function () {\n EventHandler.remove(this.dlg, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.dlg, 'click', this.clickExHandler);\n };\n ExcelFilter.prototype.clickExHandler = function (e) {\n var menuItem = parentsUntil(e.target, 'e-menu-item');\n if (menuItem && this.getLocalizedLabel('ClearFilter') === menuItem.innerText.trim()) {\n this.clearFilter();\n this.closeDialog();\n }\n };\n ExcelFilter.prototype.destroyCMenu = function () {\n if (this.menuObj && !this.menuObj.isDestroyed) {\n this.menuObj.destroy();\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.hoverHandler = function (e) {\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.isCMenuOpen = false;\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 beforeClose: this.preventClose\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 (Browser.isDevice) {\n var contextRect = this.getContextBounds(this.menuObj);\n pos.top = (window.innerHeight - contextRect.height) / 2;\n pos.left = (window.innerWidth - contextRect.width) / 2;\n this.closeDialog();\n }\n else {\n pos.top = window.scrollY + client.top;\n pos.left = this.getCMenuYPosition(this.dlg, this.menuObj);\n }\n this.menuObj.open(pos.top, pos.left, e.target);\n }\n };\n ExcelFilter.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 ExcelFilter.prototype.preventClose = function (args) {\n if (args.event instanceof MouseEvent && args.event.target.classList.contains('e-submenu')) {\n args.cancel = true;\n }\n };\n ExcelFilter.prototype.getContextBounds = function (context) {\n var elementVisible = this.menuObj.element.style.display;\n this.menuObj.element.style.display = 'block';\n return this.menuObj.element.getBoundingClientRect();\n };\n ExcelFilter.prototype.getCMenuYPosition = function (target, context) {\n var contextWidth = this.getContextBounds(context).width;\n var targetPosition = target.getBoundingClientRect();\n var leftPos = targetPosition.right + contextWidth - this.parent.element.clientWidth;\n return (leftPos < 1) ? (targetPosition.right + 1) : (targetPosition.left - contextWidth - 1);\n };\n ExcelFilter.prototype.openDialog = function (options) {\n var _this = this;\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\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));\n this.dlg.insertBefore(this.menu, this.dlg.firstChild);\n this.dlg.classList.add('e-excelfilter');\n this.dlg.classList.remove('e-checkboxfilter');\n this.cmenu = this.parent.createElement('ul', { className: 'e-excel-menu' });\n this.wireExEvents();\n };\n ExcelFilter.prototype.closeDialog = function () {\n _super.prototype.closeDialog.call(this);\n };\n ExcelFilter.prototype.selectHandler = function (e) {\n if (e.item) {\n this.menuItem = e.item;\n this.renderDialogue(e);\n }\n };\n ExcelFilter.prototype.renderDialogue = function (e) {\n var _this = this;\n var target = e.element;\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 this.parent.element.appendChild(this.dlgDiv);\n this.dlgObj = new Dialog({\n header: this.getLocalizedLabel('CustomFilter'),\n isModal: true,\n overlayClick: this.removeDialog.bind(this),\n showCloseIcon: true,\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 row.querySelector('#' + _this.options.column.field + '-xlfl-frstvalue').focus();\n }\n else {\n row.cells[1].querySelector('input:not([type=hidden])').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, cssClass: 'e-xlfl-okbtn'\n }\n },\n {\n click: this.removeDialog.bind(this),\n buttonModel: { content: this.getLocalizedLabel('CancelButton'), cssClass: 'e-xlfl-cancelbtn' }\n }],\n content: mainDiv,\n width: 430,\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n ExcelFilter.prototype.removeDialog = function () {\n this.removeObjects([this.dropOptr, this.datePicker, this.dateTimePicker, this.actObj, this.numericTxtObj, this.dlgObj]);\n remove(this.dlgDiv);\n };\n ExcelFilter.prototype.createdDialog = function (target, column) {\n this.renderCustomFilter(target, column);\n this.dlgObj.element.style.left = '0px';\n this.dlgObj.element.style.top = '0px';\n if (Browser.isDevice && window.innerWidth < 440) {\n this.dlgObj.element.style.width = '90%';\n }\n this.dlgObj.show();\n };\n ExcelFilter.prototype.renderCustomFilter = function (target, column) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-xlfl-maindiv');\n /* tslint:disable-next-line:max-line-length */\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 ExcelFilter.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 orRadio = this.dlgDiv.querySelector('#' + colValue + 'e-xlfl-secndpredicate').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.parent.filterSettings.ignoreAccent, sOperator.value, sValue.value);\n this.removeDialog();\n };\n /**\n * Filters grid row by column name with given options.\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 */\n ExcelFilter.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n var col = this.parent.getColumnByField(fieldName);\n var field = col.isForeignColumn() ? col.foreignKeyValue : fieldName;\n var fColl = [];\n var mPredicate;\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: firstOperator,\n value: firstValue,\n type: this.options.type\n });\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: firstOperator, arg3: firstValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: secondOperator, arg8: secondValue\n });\n return;\n }\n mPredicate = new Predicate(field, firstOperator.toLowerCase(), firstValue, !matchCase, ignoreAccent);\n if (secondValue) {\n secondOperator = !isNullOrUndefined(secondOperator) ? secondOperator : 'equal';\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: secondOperator,\n value: secondValue,\n type: this.options.type\n });\n /* tslint:disable-next-line:max-line-length */\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 (col.isForeignColumn()) {\n this.foreignKeyFilter(args, fColl, mPredicate);\n }\n else {\n this.options.handler(args);\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.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(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 this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n text: selectedValue,\n open: this.dropDownOpen.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.dropOptr.appendTo(optrInput);\n var operator = this.getSelectedValue(selectedValue);\n return { fieldElement: fieldElement, operator: operator };\n };\n ExcelFilter.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n ExcelFilter.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 ExcelFilter.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 {\n operator = isFirst ? 'equal' : undefined;\n }\n return this.getSelectedText(operator);\n };\n ExcelFilter.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 ExcelFilter.prototype.renderFilterUI = function (column, dlgConetntEle) {\n var predicates = this.existingPredicate[column];\n var table = this.parent.createElement('table', { className: 'e-xlfl-table' });\n dlgConetntEle.appendChild(table);\n var colGroup = this.parent.createElement('colGroup');\n colGroup.innerHTML = '';\n table.appendChild(colGroup);\n //Renders first dropdown\n /* tslint:disable-next-line:max-line-length */\n var optr = this.renderOperatorUI(column, table, '-xlfl-frstoptr', predicates, true);\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 //Renders second text box\n this.renderFlValueUI(column, optr, '-xlfl-secndvalue', predicates, false);\n };\n ExcelFilter.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 /* tslint:disable-next-line:max-line-length */\n var frstpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-frstpredicate' : column + 'e-xlfl-frstpredicate', attrs: { 'type': 'radio' } });\n /* tslint:disable-next-line:max-line-length */\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 /* tslint:disable-next-line:max-line-length */\n var andRadio = new RadioButton({ label: this.getLocalizedLabel('AND'), name: 'default', cssClass: 'e-xlfl-radio-and', checked: true, enableRtl: this.parent.enableRtl });\n // Initialize OR RadioButton component.\n /* tslint:disable-next-line:max-line-length */\n var orRadio = new RadioButton({ label: this.getLocalizedLabel('OR'), name: 'default', cssClass: 'e-xlfl-radio-or', enableRtl: this.parent.enableRtl });\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 };\n /* tslint:disable-next-line:no-any */\n ExcelFilter.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 obj.destroy();\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.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.filterSettings.columns.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.parent.getColumnByField(column);\n if (isFilteredCol && elementId === '-xlfl-frstvalue') {\n data = { column: predicates instanceof Array ? predicates[0] : predicates };\n var indx = this.options.column.columnData && fltrPredicates.length > 1 ?\n (this.options.column.columnData.length === 1 ? 0 : 1) : 0;\n data[this.options.field] = columnObj.foreignKeyValue ? this.options.column.columnData[indx][columnObj.foreignKeyValue] :\n fltrPredicates[indx].value;\n if (this.options.foreignKeyValue) {\n data[this.options.foreignKeyValue] = this.options.column.columnData[indx][columnObj.foreignKeyValue];\n }\n }\n var element = this.options.column.getFilterTemplate()(data, this.parent, 'filterTemplate');\n appendChildren(valueDiv, element);\n valueDiv.children[0].id = isComplex ? complexFieldName + elementId : column + elementId;\n value.appendChild(valueDiv);\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 }\n var types = {\n 'string': this.renderAutoComplete.bind(this),\n 'number': this.renderNumericTextBox.bind(this),\n 'date': 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 /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderMatchCase = function (column, tr, matchCase, elementId, predicates) {\n /* tslint:disable-next-line:max-line-length */\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 });\n // Render initialized CheckBox.\n checkbox.appendTo(matchCaseInput);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderDate = function (options, column, inputValue, fValue, isRtl) {\n var format = getCustomDateFormat(options.format, options.type);\n this.datePicker = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n });\n this.datePicker.appendTo(inputValue);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderDateTime = function (options, column, inputValue, fValue, isRtl) {\n var format = getCustomDateFormat(options.format, options.type);\n this.dateTimePicker = new DateTimePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n });\n this.dateTimePicker.appendTo(inputValue);\n };\n ExcelFilter.prototype.completeAction = function (e) {\n e.result = distinctStringValues(e.result);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderNumericTextBox = function (options, column, inputValue, fValue, isRtl) {\n this.numericTxtObj = new NumericTextBox({\n format: options.format,\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n value: fValue\n });\n this.numericTxtObj.appendTo(inputValue);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderAutoComplete = function (options, column, inputValue, fValue, isRtl) {\n var _this = this;\n var colObj = this.parent.getColumnByField(column);\n var isForeignColumn = colObj.isForeignColumn();\n var dataSource = isForeignColumn ? colObj.dataSource : options.dataSource;\n var fields = { value: isForeignColumn ? colObj.foreignKeyValue : column };\n var actObj = new AutoComplete({\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n query: this.parent.getQuery().clone(),\n sortOrder: 'Ascending',\n locale: this.parent.locale,\n autofill: true,\n focus: 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 placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n actionComplete: 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 ? _this.performComplexDataOperation(actObj.fields.value, mapObject)\n : mapObject[actObj.fields.value];\n }).indexOf(isComplex ? _this.performComplexDataOperation(actObj.fields.value, obj) :\n obj[_this.actObj.fields.value]) === index;\n });\n },\n value: fValue\n });\n actObj.appendTo(inputValue);\n this.actObj = actObj;\n };\n ExcelFilter.prototype.performComplexDataOperation = function (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[i]];\n duplicateMap = returnObj;\n }\n return returnObj;\n };\n /**\n * For internal use only - Get 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 } 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';\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 * @hidden\n */\n function Filter(parent, filterSettings, serviceLocator) {\n this.predicate = 'and';\n this.contentRefresh = true;\n this.values = {};\n this.cellText = {};\n this.nextFlMenuOpen = '';\n this.type = { 'Menu': FilterMenuRenderer, 'CheckBox': CheckBoxFilter, 'Excel': ExcelFilter };\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith'\n };\n this.fltrDlgDetails = { field: '', isOpen: false };\n this.actualPredicate = {};\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * To render filter bar when filtering enabled.\n * @return {void}\n * @hidden\n */\n Filter.prototype.render = function (e) {\n if (DataUtil.getObject('args.isFrozen', 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 row = void 0;\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 row = this.generateRow();\n row.data = this.values;\n this.parent.getHeaderContent().querySelector('thead').appendChild(rowRenderer.element);\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.querySelectorAll('.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 destroy the filter bar.\n * @return {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.destroy();\n }\n // tslint:disable-next-line:no-any\n if (!this.parent.refreshing) {\n this.filterSettings.columns = [];\n }\n this.updateFilterMsg();\n this.removeEventListener();\n this.unWireEvents();\n if (this.element) {\n remove(this.element);\n var filterBarElement = this.parent.getHeaderContent().querySelector('.e-filterbar');\n if (this.parent.getFrozenColumns() && filterBarElement) {\n remove(filterBarElement);\n }\n }\n };\n Filter.prototype.generateRow = function (index) {\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()) {\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 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 * @return {void}\n * @hidden\n */\n Filter.prototype.updateModel = function () {\n var col = this.parent.getColumnByField(this.fieldName);\n var field = col.isForeignColumn() ? col.foreignKeyValue : this.fieldName;\n this.currentFilterObject = {\n field: field, operator: this.operator, value: this.value, predicate: this.predicate,\n matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n };\n var index = this.getFilteredColsIndexByField(col);\n if (index > -1) {\n this.filterSettings.columns[index] = this.currentFilterObject;\n }\n else {\n this.filterSettings.columns.push(this.currentFilterObject);\n }\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[i].field === col.field || (col.isForeignColumn() && cols[i].field === col.foreignKeyValue)) {\n return i;\n }\n }\n return -1;\n };\n /**\n * To trigger action complete event.\n * @return {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.keyUpHandler, this);\n };\n Filter.prototype.unWireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), 'keyup', this.keyUpHandler);\n };\n Filter.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\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 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.updateFilterMsg();\n this.contentRefresh = true;\n }\n };\n /**\n * @hidden\n */\n Filter.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\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 EventHandler.add(document, 'click', this.clickHandler, this);\n this.parent.on(events.filterOpen, this.columnMenuFilter, this);\n this.parent.on(events.click, this.filterIconClickHandler, this);\n };\n /**\n * @hidden\n */\n Filter.prototype.removeEventListener = function () {\n EventHandler.remove(document, 'click', this.clickHandler);\n if (this.parent.isDestroyed) {\n return;\n }\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 };\n Filter.prototype.filterMenuClose = function (args) {\n this.fltrDlgDetails.isOpen = false;\n };\n /**\n * Filters the Grid row by fieldName, filterOperator, and filterValue.\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 * @return {void}\n */\n Filter.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n var gObj = this.parent;\n var filterCell;\n this.column = gObj.getColumnByField(fieldName);\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 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.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.predicate = predicate || 'and';\n this.operator = filterOperator;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (this.column.type === 'number' || this.column.type === 'date') {\n this.matchCase = true;\n }\n gObj.getColumnHeaderByField(fieldName).setAttribute('aria-filtered', 'true');\n if (filterValue.length < 1 || this.checkForSkipInput(this.column, filterValue)) {\n this.filterStatusMsg = filterValue.length < 1 ? '' : this.l10n.getConstant('InvalidFilterMessage');\n this.updateFilterMsg();\n return;\n }\n if (filterCell && this.filterSettings.type === 'FilterBar' && filterCell.value !== filterValue) {\n filterCell.value = filterValue;\n }\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n this.values[this.column.field] = filterValue; //this line should be above updateModel\n }\n this.actualPredicate[this.fieldName] = [{\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 this.addFilteredClass(this.fieldName);\n if (this.checkAlreadyColFiltered(this.column.field)) {\n return;\n }\n this.updateModel();\n };\n Filter.prototype.applyColumnFormat = function (filterValue) {\n var getFlvalue = (this.column.type === 'date' || this.column.type === 'datetime') ?\n new Date(filterValue) : parseFloat(filterValue);\n this.values[this.column.field] = this.setFormatForFlColumn(getFlvalue, this.column);\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 if (this.contentRefresh) {\n this.parent.notify(events.modelChanged, {\n currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column ?\n this.column.field : undefined,\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionBegin\n });\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 '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.getColumnByField(this.filterSettings.columns[i].field) ||\n getColumnByForeignKeyValue(this.filterSettings.columns[i].field, this.parent.getForeignKeyColumns());\n var filterValue = this.filterSettings.columns[i].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[i].field;\n this.values[key] = this.filterSettings.columns[i].value;\n }\n var filterElement = this.getFilterBarElement(this.filterSettings.columns[i].field);\n if (filterElement) {\n if (!isNullOrUndefined(this.cellText[this.filterSettings.columns[i].field])) {\n filterElement.value = this.cellText[this.filterSettings.columns[i].field];\n }\n else {\n filterElement.value = this.filterSettings.columns[i].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[i].field);\n if (filterElement && filterElement.value !== '') {\n filterElement.value = '';\n delete this.values[col[i].field];\n }\n }\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 */\n Filter.prototype.refreshFilter = function () {\n this.refreshFilterSettings();\n this.updateFilterMsg();\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n Filter.prototype.clearFiltering = function () {\n var cols = getActualPropFromColl(this.filterSettings.columns);\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFiltering });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeFilteredColsByField(cols[i].field, false);\n }\n if (this.parent.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n var fltrElement = [].slice.call(this.parent.element.querySelectorAll('.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 var gObj = this.parent;\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.filterModule = new this.type[col.filter.type || this.parent.filterSettings.type](this.parent, gObj.filterSettings, this.serviceLocator, this.customOperators, this);\n var dataSource = col.filter.dataSource || gObj.getDataModule().dataManager;\n this.filterModule.openDialog({\n type: col.type, field: col.field, displayName: col.headerText,\n dataSource: dataSource, format: col.format,\n filteredColumns: gObj.filterSettings.columns, target: target,\n sortedColumns: gObj.sortSettings.columns, formatFn: col.getFormatter(),\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: this.parent.localeObj\n });\n };\n /**\n * Removes filtered column by field name.\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 * @return {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 for (var i = 0, len = cols.length; i < len; i++) {\n var column = this.parent.getColumnByField(field) ||\n getColumnByForeignKeyValue(field, this.parent.getForeignKeyColumns());\n if (cols[i].field === field || cols[i].field === column.foreignKeyValue) {\n if (this.filterSettings.type === 'FilterBar' && !isClearFilterBar) {\n var selector = '[id=\\'' + cols[i].field + '_filterBarcell\\']';\n fCell = this.parent.getHeaderContent().querySelector(selector);\n if (fCell) {\n fCell.value = '';\n delete this.values[field];\n }\n }\n cols.splice(i, 1);\n var fltrElement = this.parent.getColumnHeaderByField(column.field);\n fltrElement.removeAttribute('aria-filtered');\n if (this.filterSettings.type !== 'FilterBar') {\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n fltrElement.querySelector(iconClass).classList.remove('e-filtered');\n }\n this.isRemove = true;\n if (this.actualPredicate[field]) {\n delete this.actualPredicate[field];\n }\n if (this.values[field]) {\n delete this.values[field];\n }\n this.parent.notify(events.modelChanged, {\n requestType: 'filtering', type: events.actionBegin, currentFilterObject: {\n field: column.field, operator: this.operator, value: this.value, predicate: this.predicate,\n matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n }, currentFilterColumn: column\n });\n break;\n }\n }\n this.updateFilterMsg();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\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 ((this.filterSettings.mode === 'Immediate' || e.keyCode === 13) && e.keyCode !== 9) {\n this.value = target.value.trim();\n this.processFilter(e);\n }\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 formater = this.serviceLocator.getService('valueFormatter');\n var column = void 0;\n var value = 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.getColumnByField(columns[index].field) ||\n getColumnByForeignKeyValue(columns[index].field, this.parent.getForeignKeyColumns());\n if (index) {\n this.filterStatusMsg += ' && ';\n }\n if (!isNullOrUndefined(column.format)) {\n var flValue = (column.type === 'date' || column.type === 'datetime') ?\n new Date(this.values[column.field]) :\n this.values[column.field];\n if (!(column.type === 'date' || column.type === 'datetime')) {\n var formater_1 = this.serviceLocator.getService('valueFormatter');\n getFormatFlValue = formater_1.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 var skipInput;\n if (column.type === 'number') {\n skipInput = ['=', ' ', '!'];\n if (DataUtil.operatorSymbols[value] || skipInput.indexOf(value) > -1) {\n isSkip = true;\n }\n }\n else if (column.type === 'string') {\n skipInput = ['>', '<', '=', '!'];\n for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {\n var val = value_1[_i];\n if (skipInput.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.getFrozenColumns()) {\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.filterByColumn(this.column.field, this.operator, this.value, this.predicate, this.matchCase, this.ignoreAccent);\n filterElement.value = filterValue;\n this.updateFilterMsg();\n };\n Filter.prototype.validateFilterValue = function (value) {\n var gObj = this.parent;\n var skipInput;\n var index;\n this.matchCase = true;\n switch (this.column.type) {\n case 'number':\n this.operator = this.filterOperators.equal;\n skipInput = ['>', '<', '=', '!'];\n for (var i = 0; i < value.length; i++) {\n if (skipInput.indexOf(value[i]) > -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 (value.charAt(0) === '*') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(value.length - 1) === '%') {\n this.value = this.value.slice(0, -1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(0) === '%') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.endsWith;\n }\n else {\n this.operator = this.filterOperators.startsWith;\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 this.operator = this.filterOperators.equal;\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 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 (e) {\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 ];\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: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: numOptr,\n dateOperator: numOptr,\n datetimeOperator: numOptr,\n booleanOperator: [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ]\n };\n };\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 var gClient = gObj.element.getBoundingClientRect();\n var fClient = target.getBoundingClientRect();\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.filterDialogOpen(this.column, target, fClient.right - gClient.left, fClient.bottom - gClient.top);\n }\n };\n Filter.prototype.clickHandler = function (e) {\n if (this.filterSettings.mode === 'Immediate' || this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel') {\n var gObj = this.parent;\n var target = e.target;\n var datepickerEle = target.classList.contains('e-day'); // due to datepicker popup cause\n if (parentsUntil(target, 'e-filter-popup') || target.classList.contains('e-filtermenudiv')) {\n return;\n }\n else if (this.filterModule &&\n (!parentsUntil(target, 'e-popup-wrapper')\n && (!closest(target, '.e-filter-item.e-menu-item'))\n && (!parentsUntil(target, 'e-popup'))) && !datepickerEle) {\n this.filterModule.closeDialog(target);\n }\n if (this.filterSettings.mode === 'Immediate' && target.classList.contains('e-clear-icon')) {\n var targetText = target.previousElementSibling;\n this.removeFilteredColsByField(targetText.id.slice(0, -14)); //Length of _filterBarcell = 14\n }\n }\n };\n Filter.prototype.filterHandler = function (args) {\n var filterIconElement;\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[i].field === this.filterSettings.columns[j].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 iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n 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 this.parent.renderModule.refresh(); //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 for (var i = 0; i < cols.length; i++) {\n this.column = this.parent.getColumnByField(cols[i].field) ||\n getColumnByForeignKeyValue(cols[i].field, this.parent.getForeignKeyColumns());\n var fieldName = cols[i].field;\n if (!this.parent.getColumnByField(cols[i].field)) {\n fieldName = getColumnByForeignKeyValue(cols[i].field, this.parent.getForeignKeyColumns()).field;\n }\n /* tslint:disable-next-line:max-line-length */\n this.refreshFilterIcon(fieldName, cols[i].operator, cols[i].value, cols[i].type, cols[i].predicate, cols[i].matchCase, cols[i].ignoreAccent);\n }\n };\n /* tslint:disable-next-line:max-line-length */\n Filter.prototype.refreshFilterIcon = function (fieldName, operator, value, type, predicate, matchCase, ignoreAccent) {\n this.actualPredicate[fieldName] = [{\n field: fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: operator,\n value: value,\n type: type\n }];\n this.addFilteredClass(fieldName);\n };\n Filter.prototype.addFilteredClass = function (fieldName) {\n var filterIconElement;\n if (this.parent.showColumnMenu) {\n filterIconElement = this.parent.getColumnHeaderByField(fieldName).querySelector('.e-columnmenu');\n }\n else {\n filterIconElement = this.parent.getColumnHeaderByField(fieldName).querySelector('.e-icon-filter');\n }\n if (filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n };\n return Filter;\n}());\nexport { Filter };\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 } from '../base/util';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\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 * @hidden\n * @private\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for the Grid resize module\n * @hidden\n */\n function Resize(parent) {\n this.tapped = false;\n this.isDblClk = true;\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 * @param {string|string[]} fName - Defines the field name.\n * @return {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.findColumn(columnName);\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 = 'e-gridcontent';\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 frzCols = gObj.getFrozenColumns();\n if (!isNullOrUndefined(gObj.getFooterContent())) {\n footerTable = gObj.getFooterContentTable();\n }\n if (frzCols) {\n if (index < frzCols) {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \")\");\n }\n else {\n headerTable = gObj.getHeaderContent().querySelector('.e-movableheader').children[0];\n contentTable = gObj.getContent().querySelector('.e-movablecontent').children[0];\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex - frzCols].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + ((columnIndex - frzCols) + 1) + \")\");\n }\n }\n else {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \"):not(.e-groupcaption)\");\n }\n var indentWidthClone = headerTable.querySelector('tr').querySelectorAll('.e-grouptopleftcell');\n if (indentWidthClone.length > 0) {\n for (var i = 0; i < indentWidthClone.length; i++) {\n indentWidth += indentWidthClone[i].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 for (var i = 0; i < contentTextClone.length; i++) {\n contentText[i] = contentTextClone[i].cloneNode(true);\n }\n var wHeader = this.createTable(headerTable, headerText, headerDivTag);\n var wContent = this.createTable(contentTable, contentText, contentDivTag);\n var columnbyindex = gObj.getColumns()[index];\n var result;\n var width = (wHeader > wContent) ? columnbyindex.width = formatUnit(wHeader) : columnbyindex.width = formatUnit(wContent);\n this.widthService.setColumnWidth(gObj.getColumns()[index]);\n result = gObj.getColumns().some(function (x) { return x.width === null || x.width === undefined || x.width.length <= 0; });\n if (result === false) {\n gObj.getColumns().forEach(function (element) {\n if (element.visible) {\n tWidth = tWidth + parseFloat(element.width);\n }\n });\n }\n var calcTableWidth = tWidth + indentWidth;\n if (tWidth > 0 && !gObj.getFrozenColumns()) {\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.widthService.setColumnWidth(new Column({ width: '30px' }));\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 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 * @return {void}\n * @hidden\n */\n Resize.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-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 * @private\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n Resize.prototype.findColumn = function (fName) {\n var _this = this;\n fName.forEach(function (element) {\n var fieldName = element;\n var columnIndex = _this.parent.getColumnIndexByField(fieldName);\n if (_this.parent.getColumns()[columnIndex].visible === true) {\n _this.resizeColumn(fieldName, columnIndex);\n }\n });\n };\n /**\n * To create table for autofit\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');\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 text.forEach(function (element) {\n var tr = myTr.cloneNode();\n tr.className = table.querySelector('tr').className;\n tr.appendChild(element);\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 * @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 };\n /**\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 };\n /**\n * @hidden\n */\n Resize.prototype.render = function () {\n this.unwireEvents();\n this.wireEvents();\n this.setHandlerHeight();\n };\n Resize.prototype.refreshHeight = function () {\n this.getResizeHandlers().forEach(function (ele) {\n if (ele.parentElement.offsetHeight > 0) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n }\n });\n this.setHandlerHeight();\n };\n Resize.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), Browser.touchStartEvent, this.resizeStart, 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.resizeStart);\n EventHandler.remove(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit);\n };\n Resize.prototype.getResizeHandlers = function () {\n return this.parent.getFrozenColumns() ?\n [].slice.call(this.parent.getHeaderContent().querySelectorAll('.' + resizeClassList.root))\n : [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + resizeClassList.root));\n };\n Resize.prototype.setHandlerHeight = function () {\n [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + resizeClassList.suppress)).forEach(function (ele) {\n ele.style.height = ele.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.resizeStart = function (e) {\n if (e.target.classList.contains('e-rhandler')) {\n if (!this.helper) {\n if (this.getScrollBarWidth() === 0) {\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 }\n this.refreshStackedColumnWidth();\n this.element = e.target;\n if (this.parent.getVisibleFrozenColumns()) {\n var mtbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n var ftbody = this.parent.getContent().querySelector('.e-frozencontent').querySelector('tbody');\n var mtr = mtbody.querySelectorAll('tr');\n var ftr = ftbody.querySelectorAll('tr');\n for (var i = 0; i < mtr.length; i++) {\n if (this.parent.rowHeight) {\n mtr[i].style.height = this.parent.rowHeight + 'px';\n ftr[i].style.height = this.parent.rowHeight + 'px';\n }\n else {\n mtr[i].style.removeProperty('height');\n ftr[i].style.removeProperty('height');\n }\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.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(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 = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.resizeStart, args);\n if (args.cancel) {\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 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.getColData = function (column, mousemove) {\n return {\n width: parseFloat(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 if (this.parent.allowTextWrap) {\n this.element.style.height = this.element.parentElement.offsetHeight + 'px';\n this.setHelperHeight();\n }\n var pageX = this.getPointX(e);\n var mousemove = this.parent.enableRtl ? -(pageX - this.pageX) : (pageX - this.pageX);\n var colData = this.getColData(this.column, mousemove);\n var width = this.getWidth(colData.width, colData.minWidth, colData.maxWidth);\n if ((!this.parent.enableRtl && this.minMove >= pageX) || (this.parent.enableRtl && this.minMove <= pageX)) {\n width = this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 0;\n this.pageX = pageX = this.minMove;\n }\n if (width !== parseFloat(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 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.updateHelper();\n }\n this.isDblClk = false;\n };\n Resize.prototype.calulateColumnsWidth = function (columns, isUpdate, mousemove) {\n var finalColumns = [];\n var _loop_1 = function (col) {\n var totalWidth = 0;\n columns.forEach(function (col) {\n totalWidth += parseFloat(col.width.toString());\n });\n var colData = this_1.getColData(col, (parseFloat(col.width)) * mousemove / totalWidth);\n var colWidth = this_1.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 var this_1 = this;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n _loop_1(col);\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 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 = {\n e: e,\n column: this.column\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.getFrozenColumns()) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\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.getHeaderTable().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 height = 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 frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (rect.parentElement.children.length !== frzCols) {\n tr.splice(0, tr.length / 2);\n }\n else {\n tr.splice(tr.length / 2, tr.length / 2);\n }\n }\n for (var i = tr.indexOf(rect.parentElement); i < tr.length; i++) {\n height += tr[i].offsetHeight;\n }\n var pos = this.calcPos(rect);\n pos.left += (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2);\n this.helper.style.cssText = 'height: ' + height + 'px; top: ' + pos.top + 'px; left:' + Math.floor(pos.left) + 'px;';\n };\n Resize.prototype.getScrollBarWidth = function (height) {\n var ele = this.parent.getFrozenColumns() ? this.parent.getContent().querySelector('.e-movablecontent')\n : 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 = Math.floor(this.calcPos(rect).left + (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2));\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.getFrozenColumns()) {\n var table = closest(rect, '.e-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 = elem.offsetParent || 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 if (this.getUserAgent() && this.isDblClk) {\n if (!this.tapped) {\n this.tapped = setTimeout(this.timeoutHandler(), 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 { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest as closestElement, removeClass, classList, remove } from '@syncfusion/ej2-base';\nimport { getElementIndex, inArray, parentsUntil, getPosition, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\n/**\n *\n * The `Reorder` module is used for reordering columns.\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for the Grid reorder module\n * @hidden\n */\n function Reorder(parent) {\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.reorderComplete, this.onActionComplete, this);\n this.parent.on(events.columnDrag, this.drag, this);\n this.parent.on(events.columnDragStart, this.dragStart, this);\n this.parent.on(events.columnDragStop, this.dragStop, this);\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.headerRefreshed, this.createReorderElement, this);\n }\n Reorder.prototype.chkDropPosition = function (srcElem, destElem) {\n var col = this.parent.getColumnByUid(destElem.firstElementChild.getAttribute('e-mappinguid'));\n var bool = col ? !col.lockColumn : true;\n return (srcElem.parentElement.isEqualNode(destElem.parentElement) || (this.parent.getFrozenColumns()\n && Array.prototype.indexOf.call(closestElement(srcElem, 'thead').children, srcElem.parentElement)\n === Array.prototype.indexOf.call(closestElement(destElem, 'thead').children, destElem.parentElement)))\n && this.targetParentContainerIndex(srcElem, destElem) > -1 && bool;\n };\n Reorder.prototype.chkDropAllCols = function (srcElem, destElem) {\n var isFound;\n var headers = this.getHeaderCells();\n var header;\n while (!isFound && headers.length > 0) {\n header = headers.pop();\n isFound = srcElem !== header && this.targetParentContainerIndex(srcElem, destElem) > -1;\n }\n return isFound;\n };\n Reorder.prototype.findColParent = function (col, cols, parent) {\n parent = parent;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (col === cols[i]) {\n return true;\n }\n else if (cols[i].columns) {\n var cnt = parent.length;\n parent.push(cols[i]);\n if (!this.findColParent(col, cols[i].columns, parent)) {\n parent.splice(cnt, parent.length - cnt);\n }\n else {\n return true;\n }\n }\n }\n return false;\n };\n Reorder.prototype.getColumnsModel = function (cols) {\n var columnModel = [];\n var subCols = [];\n for (var i = 0, len = cols.length; i < len; i++) {\n columnModel.push(cols[i]);\n if (cols[i].columns) {\n subCols = subCols.concat(cols[i].columns);\n }\n }\n if (subCols.length) {\n columnModel = columnModel.concat(this.getColumnsModel(subCols));\n }\n return columnModel;\n };\n Reorder.prototype.headerDrop = function (e) {\n var gObj = this.parent;\n var dropElement = this.element.querySelector('.e-headercelldiv') || this.element.querySelector('.e-stackedheadercelldiv');\n var uId = dropElement.getAttribute('e-mappinguid');\n var column = gObj.getColumnByUid(uId);\n if (!closestElement(e.target, 'th') || (!isNullOrUndefined(column) && (!column.allowReordering || column.lockColumn))) {\n return;\n }\n var destElem = closestElement(e.target, '.e-headercell');\n var destElemDiv = destElem.querySelector('.e-headercelldiv') || destElem.querySelector('.e-stackedheadercelldiv');\n var destElemUid = destElemDiv.getAttribute('e-mappinguid');\n if (!isNullOrUndefined(destElemUid)) {\n var destColumn = gObj.getColumnByUid(destElemUid);\n if (isNullOrUndefined(destColumn) || !destColumn.allowReordering || destColumn.lockColumn) {\n return;\n }\n }\n if (destElem && !(!this.chkDropPosition(this.element, destElem) || !this.chkDropAllCols(this.element, destElem))) {\n if (this.parent.enableColumnVirtualization) {\n var columns = this.parent.columns;\n var sourceUid_1 = this.element.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var col = this.parent.getColumns(true).filter(function (col) { return col.uid === sourceUid_1; });\n var colMatchIndex_1 = null;\n var column_1 = col[0];\n var destUid_1 = destElem.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var bool = columns.some(function (col, index) {\n if (col.uid === destUid_1) {\n colMatchIndex_1 = index;\n return col.uid === destUid_1;\n }\n return false;\n });\n if (!isNullOrUndefined(colMatchIndex_1)) {\n this.moveColumns(colMatchIndex_1, column_1);\n }\n }\n else {\n var newIndex = this.targetParentContainerIndex(this.element, destElem);\n var uid = this.element.firstElementChild.getAttribute('e-mappinguid');\n this.destElement = destElem;\n if (uid) {\n this.moveColumns(newIndex, this.parent.getColumnByUid(uid));\n }\n else {\n var headers = this.getHeaderCells();\n var oldIdx = getElementIndex(this.element, headers);\n var columns = this.getColumnsModel(this.parent.columns);\n var column_2 = columns[oldIdx];\n this.moveColumns(newIndex, column_2);\n }\n }\n }\n };\n Reorder.prototype.isActionPrevent = function (gObj) {\n return isActionPrevent(gObj);\n };\n Reorder.prototype.moveColumns = function (destIndex, column, reorderByColumn) {\n var gObj = this.parent;\n if (this.isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.moveColumns, arg1: destIndex, arg2: column });\n return;\n }\n var parent = this.getColParent(column, this.parent.columns);\n var cols = parent ? parent.columns : this.parent.columns;\n var srcIdx = inArray(column, cols);\n if (((this.parent.getFrozenColumns() && parent) || this.parent.lockcolPositionCount) && !reorderByColumn) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].field === column.field) {\n srcIdx = i;\n break;\n }\n }\n var col = this.parent.getColumnByUid(this.destElement.firstElementChild.getAttribute('e-mappinguid'));\n if (col) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].field === col.field) {\n destIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].headerText === this.destElement.innerText.trim()) {\n destIndex = i;\n }\n }\n }\n }\n if (!gObj.allowReordering || srcIdx === destIndex || srcIdx === -1 || destIndex === -1) {\n return;\n }\n cols.splice(destIndex, 0, cols.splice(srcIdx, 1)[0]);\n gObj.getColumns(true);\n gObj.notify(events.columnPositionChanged, { fromIndex: destIndex, toIndex: srcIdx });\n gObj.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'reorder'\n });\n };\n Reorder.prototype.targetParentContainerIndex = function (srcElem, destElem) {\n var headers = this.getHeaderCells();\n var cols = this.parent.columns;\n var flatColumns = this.getColumnsModel(cols);\n var parent = this.getColParent(flatColumns[getElementIndex(srcElem, headers)], cols);\n cols = parent ? parent.columns : cols;\n return inArray(flatColumns[getElementIndex(destElem, headers)], cols);\n };\n Reorder.prototype.getHeaderCells = function () {\n var frozenColumns = this.parent.getFrozenColumns();\n if (frozenColumns || this.parent.lockcolPositionCount) {\n var fTh = void 0;\n var mTh = void 0;\n var fHeaders = [];\n var fRows = [].slice.call(this.parent.getHeaderTable().querySelectorAll('.e-columnheader'));\n if (frozenColumns) {\n var mRows = [].slice.call(this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelectorAll('.e-columnheader'));\n for (var i = 0; i < fRows.length; i++) {\n fTh = [].slice.call(fRows[i].getElementsByClassName('e-headercell'));\n mTh = [].slice.call(mRows[i].getElementsByClassName('e-headercell'));\n var isAvail = void 0;\n for (var k = 0; k < fTh.length; k++) {\n for (var j = 0; j < mTh.length; j++) {\n if (mTh[j].innerText === fTh[k].innerText) {\n isAvail = true;\n break;\n }\n }\n if (!isAvail) {\n fHeaders = fHeaders.concat([fTh[k]]);\n }\n }\n for (var j = 0; j < mTh.length; j++) {\n fHeaders.push(mTh[j]);\n }\n }\n }\n else {\n for (var i = 0; i < fRows.length; i++) {\n mTh = [].slice.call(fRows[i].getElementsByClassName('e-headercell'));\n for (var k = 0; k < mTh.length; k++) {\n var isAvail = void 0;\n for (var j = k + 1; j < mTh.length; j++) {\n if (mTh[j].innerText === mTh[k].innerText) {\n isAvail = true;\n break;\n }\n }\n if (!isAvail) {\n fHeaders = fHeaders.concat([mTh[k]]);\n }\n }\n }\n }\n return fHeaders;\n }\n else {\n return [].slice.call(this.parent.element.getElementsByClassName('e-headercell'));\n }\n };\n Reorder.prototype.getColParent = function (column, columns) {\n var parents = [];\n this.findColParent(column, columns, parents);\n return parents[parents.length - 1];\n };\n Reorder.prototype.reorderSingleColumn = function (fromFName, toFName) {\n var fColumn = this.parent.getColumnByField(fromFName);\n var toColumn = this.parent.getColumnByField(toFName);\n if ((!isNullOrUndefined(fColumn) && (!fColumn.allowReordering || fColumn.lockColumn)) ||\n (!isNullOrUndefined(toColumn) && (!toColumn.allowReordering || fColumn.lockColumn))) {\n return;\n }\n var column = this.parent.getColumnByField(toFName);\n var parent = this.getColParent(column, this.parent.columns);\n var columns = parent ? parent.columns : this.parent.columns;\n var destIndex = inArray(column, columns);\n if (destIndex > -1) {\n this.moveColumns(destIndex, this.parent.getColumnByField(fromFName), true);\n }\n };\n Reorder.prototype.reorderMultipleColumns = function (fromFNames, toFName) {\n var toIndex = this.parent.getColumnIndexByField(toFName);\n var toColumn = this.parent.getColumnByField(toFName);\n if (toIndex < 0 || (!isNullOrUndefined(toColumn) && (!toColumn.allowReordering || toColumn.lockColumn))) {\n return;\n }\n for (var i = 0; i < fromFNames.length; i++) {\n var column = this.parent.getColumnByField(fromFNames[i]);\n if (!isNullOrUndefined(column) && (!column.allowReordering || column.lockColumn)) {\n return;\n }\n }\n for (var i = 0; i < fromFNames.length; i++) {\n var column = this.parent.getColumnByIndex(toIndex);\n var parent_1 = this.getColParent(column, this.parent.columns);\n var columns = parent_1 ? parent_1.columns : this.parent.columns;\n var destIndex = inArray(column, columns);\n if (destIndex > -1) {\n this.moveColumns(destIndex, this.parent.getColumnByField(fromFNames[i]), true);\n }\n if (this.parent.getColumnIndexByField(fromFNames[i + 1]) >= destIndex) {\n toIndex++; //R to L\n }\n }\n };\n /**\n * Changes the position of the Grid columns by field names.\n * @param {string | string[]} fromFName - Defines the origin field names.\n * @param {string} toFName - Defines the destination field name.\n * @return {void}\n */\n Reorder.prototype.reorderColumns = function (fromFName, toFName) {\n typeof fromFName === 'string' ? this.reorderSingleColumn(fromFName, toFName) : this.reorderMultipleColumns(fromFName, toFName);\n };\n Reorder.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.createReorderElement();\n }\n };\n Reorder.prototype.createReorderElement = function () {\n var header = this.parent.element.querySelector('.e-headercontent');\n this.upArrow = header.appendChild(this.parent\n .createElement('div', { className: 'e-icons e-icon-reorderuparrow e-reorderuparrow', attrs: { style: 'display:none' } }));\n this.downArrow = header.appendChild(this.parent\n .createElement('div', { className: 'e-icons e-icon-reorderdownarrow e-reorderdownarrow', attrs: { style: 'display:none' } }));\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Reorder.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.e-gridheader') &&\n !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n remove(this.upArrow);\n remove(this.downArrow);\n this.parent.off(events.headerDrop, this.headerDrop);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.reorderComplete, this.onActionComplete);\n this.parent.off(events.columnDrag, this.drag);\n this.parent.off(events.columnDragStart, this.dragStart);\n this.parent.off(events.columnDragStop, this.dragStop);\n this.parent.off(events.headerRefreshed, this.createReorderElement);\n //call ejdrag and drop destroy\n };\n Reorder.prototype.drag = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (!e.column.allowReordering || e.column.lockColumn) {\n return;\n }\n var closest = closestElement(target, '.e-headercell:not(.e-stackedHeaderCell)');\n var cloneElement = gObj.element.querySelector('.e-cloneproperties');\n var isLeft = this.x > getPosition(e.event).x + gObj.getContent().firstElementChild.scrollLeft;\n removeClass(gObj.getHeaderTable().querySelectorAll('.e-reorderindicate'), ['e-reorderindicate']);\n this.setDisplay('none');\n this.stopTimer();\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n this.updateScrollPostion(e.event);\n if (closest && !closest.isEqualNode(this.element)) {\n target = closest;\n //consider stacked, detail header cell \n if (!(!this.chkDropPosition(this.element, target) || !this.chkDropAllCols(this.element, target))) {\n this.updateArrowPosition(target, isLeft);\n classList(target, ['e-allowDrop', 'e-reorderindicate'], []);\n }\n else if (!(gObj.allowGrouping && parentsUntil(e.target, 'e-groupdroparea'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n }\n gObj.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: e.column });\n };\n Reorder.prototype.updateScrollPostion = function (e) {\n var _this = this;\n var frzCols = this.parent.getFrozenColumns();\n var x = getPosition(e).x;\n var cliRect = this.parent.element.getBoundingClientRect();\n var cliRectBaseLeft = frzCols ? this.parent.element.querySelector('.e-movableheader')\n .getBoundingClientRect().left : cliRect.left;\n var cliRectBaseRight = cliRect.right;\n var scrollElem = frzCols ? this.parent.getContent().querySelector('.e-movablecontent')\n : this.parent.getContent().firstElementChild;\n if (x > cliRectBaseLeft && x < cliRectBaseLeft + 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, true); }, 50);\n }\n else if (x < cliRectBaseRight && x > cliRectBaseRight - 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, false); }, 50);\n }\n };\n Reorder.prototype.setScrollLeft = function (scrollElem, isLeft) {\n var scrollLeft = scrollElem.scrollLeft;\n scrollElem.scrollLeft = scrollElem.scrollLeft + (isLeft ? -5 : 5);\n if (scrollLeft !== scrollElem.scrollLeft) {\n this.setDisplay('none');\n }\n };\n Reorder.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Reorder.prototype.updateArrowPosition = function (target, isLeft) {\n var cliRect = target.getBoundingClientRect();\n var cliRectBase = this.parent.element.getBoundingClientRect();\n if ((isLeft && cliRect.left < cliRectBase.left) || (!isLeft && cliRect.right > cliRectBase.right)) {\n return;\n }\n this.upArrow.style.top = cliRect.top + cliRect.height - cliRectBase.top + 'px';\n this.downArrow.style.top = cliRect.top - cliRectBase.top - 4 + 'px';\n this.upArrow.style.left = this.downArrow.style.left = (isLeft ? cliRect.left : cliRect.right) - cliRectBase.left - 4 + 'px';\n this.setDisplay('');\n };\n Reorder.prototype.dragStart = function (e) {\n var gObj = this.parent;\n var target = e.target;\n this.element = target.classList.contains('e-headercell') ? target :\n parentsUntil(target, 'e-headercell');\n if (!e.column.allowReordering || e.column.lockColumn) {\n return;\n }\n this.x = getPosition(e.event).x + gObj.getContent().firstElementChild.scrollLeft;\n gObj.trigger(events.columnDragStart, {\n target: target, draggableType: 'headercell', column: e.column\n });\n };\n Reorder.prototype.dragStop = function (e) {\n var gObj = this.parent;\n this.setDisplay('none');\n this.stopTimer();\n if (!e.cancel) {\n gObj.trigger(events.columnDrop, { target: e.target, draggableType: 'headercell', column: e.column });\n }\n removeClass(gObj.getHeaderTable().querySelectorAll('.e-reorderindicate'), ['e-reorderindicate']);\n };\n Reorder.prototype.setDisplay = function (display) {\n this.upArrow.style.display = display;\n this.downArrow.style.display = display;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Draggable } from '@syncfusion/ej2-base';\nimport { removeClass } from '@syncfusion/ej2-base';\nimport { remove, closest as closestElement, classList } from '@syncfusion/ej2-base';\nimport { parentsUntil, removeElement, getPosition, addRemoveActiveClasses } from '../base/util';\nimport * as events from '../base/constant';\nimport { Scroll } from '../actions/scroll';\n/**\n *\n * Reorder module is used to handle row reordering.\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for the Grid print module\n * @hidden\n */\n function RowDD(parent) {\n var _this = this;\n this.selectedRows = [];\n this.isOverflowBorder = true;\n this.selectedRowColls = [];\n this.isRefresh = true;\n /* tslint:disable-next-line:max-line-length */\n // tslint:disable-next-line:max-func-body-length\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var visualElement = _this.parent.createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-grid e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + gObj.element.offsetWidth\n });\n var table = _this.parent.createElement('table', { styles: 'width:' + gObj.element.offsetWidth });\n var tbody = _this.parent.createElement('tbody');\n if (document.getElementsByClassName('e-griddragarea').length ||\n (gObj.rowDropSettings.targetID && (!e.sender.target.classList.contains('e-selectionbackground')\n && gObj.selectionSettings.type !== 'Single')) ||\n (!gObj.rowDropSettings.targetID && !parentsUntil(e.sender.target, 'e-rowdragdrop'))) {\n return false;\n }\n if (gObj.rowDropSettings.targetID &&\n gObj.selectionSettings.mode === 'Row' && gObj.selectionSettings.type === 'Single') {\n gObj.selectRow(parseInt(e.sender.target.parentElement.getAttribute('aria-rowindex'), 10));\n }\n var args = {\n selectedRow: gObj.getSelectedRows(), dragelement: target,\n cloneElement: visualElement, cancel: false\n };\n var selectedRows = gObj.getSelectedRows();\n gObj.trigger(events.rowDragStartHelper, args);\n var cancel = 'cancel';\n var cloneElement = 'cloneElement';\n if (args[cancel]) {\n visualElement = args[cloneElement];\n return visualElement;\n }\n _this.startedRow = closestElement(target, 'tr').cloneNode(true);\n removeElement(_this.startedRow, '.e-indentcell');\n removeElement(_this.startedRow, '.e-detailrowcollapse');\n removeElement(_this.startedRow, '.e-detailrowexpand');\n _this.removeCell(_this.startedRow, 'e-gridchkbox');\n var exp = new RegExp('e-active', 'g'); //high contrast issue\n _this.startedRow.innerHTML = _this.startedRow.innerHTML.replace(exp, '');\n tbody.appendChild(_this.startedRow);\n if (gObj.getSelectedRows().length > 1) {\n var dropCountEle = _this.parent.createElement('span', {\n className: 'e-dropitemscount', innerHTML: '' + selectedRows.length,\n });\n visualElement.appendChild(dropCountEle);\n }\n var ele = closestElement(target, 'tr').querySelector('.e-icon-rowdragicon');\n if (ele) {\n ele.classList.add('e-dragstartrow');\n }\n table.appendChild(tbody);\n visualElement.appendChild(table);\n gObj.element.appendChild(visualElement);\n return visualElement;\n };\n this.dragStart = function (e) {\n var gObj = _this.parent;\n if (document.getElementsByClassName('e-griddragarea').length) {\n return;\n }\n var target = e.target;\n var spanCssEle = _this.parent.element.querySelector('.e-dropitemscount');\n if (_this.parent.getSelectedRecords().length > 1 && spanCssEle) {\n spanCssEle.style.left = _this.parent.element.querySelector('.e-cloneproperties table')\n .offsetWidth - 5 + 'px';\n }\n gObj.trigger(events.rowDragStart, {\n rows: gObj.getSelectedRows(),\n target: e.target, draggableType: 'rows', data: gObj.getSelectedRecords()\n });\n var dropElem = document.getElementById(gObj.rowDropSettings.targetID);\n if (gObj.rowDropSettings.targetID && dropElem && dropElem.ej2_instances &&\n dropElem.ej2_instances[0].getModuleName() === 'grid') {\n dropElem.ej2_instances[0].getContent().classList.add('e-allowRowDrop');\n }\n };\n this.drag = function (e) {\n var gObj = _this.parent;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n var target = _this.getElementFromPosition(cloneElement, e.event);\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur', 'e-movecur']);\n _this.isOverflowBorder = true;\n _this.hoverState = gObj.enableHover;\n var trElement = closestElement(e.target, 'tr');\n gObj.enableHover = false;\n if (!e.target) {\n return;\n }\n gObj.trigger(events.rowDrag, {\n rows: gObj.getSelectedRows(),\n target: target, draggableType: 'rows', data: gObj.getSelectedRecords(),\n });\n _this.stopTimer();\n gObj.element.classList.add('e-rowdrag');\n _this.dragTarget = trElement && parentsUntil(target, 'e-grid').id === cloneElement.parentElement.id ?\n trElement.rowIndex : parseInt(_this.startedRow.getAttribute('aria-rowindex'), 10);\n if (gObj.rowDropSettings.targetID) {\n if (!parentsUntil(target, 'e-gridcontent') ||\n parentsUntil(cloneElement.parentElement, 'e-grid').id === parentsUntil(target, 'e-grid').id) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n else {\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n }\n }\n else {\n var elem = parentsUntil(target, 'e-grid');\n if (elem && elem.id === cloneElement.parentElement.id) {\n classList(cloneElement, ['e-movecur'], ['e-defaultcur']);\n }\n else {\n classList(cloneElement, ['e-notallowedcur'], ['e-movecur']);\n }\n }\n if (!gObj.rowDropSettings.targetID &&\n (!gObj.groupSettings.columns.length || e.target.classList.contains('e-selectionbackground'))) {\n if (parentsUntil(target, 'e-grid')) {\n _this.updateScrollPostion(e.event, target);\n }\n if (_this.isOverflowBorder && parseInt(_this.startedRow.getAttribute('aria-rowindex'), 10) !== _this.dragTarget) {\n _this.moveDragRows(e, _this.startedRow, trElement);\n }\n else {\n if (trElement && _this.parent.getRowByIndex(_this.parent.getRows().length - 1).getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = _this.parent.createElement('div', { className: 'e-lastrow-dragborder' });\n var gridcontentEle = _this.parent.getContent();\n bottomborder.style.width = _this.parent.element.offsetWidth - _this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-dragborder').length) {\n gridcontentEle.classList.add('e-grid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = _this.getScrollWidth() + 'px';\n }\n }\n _this.removeBorder(trElement);\n }\n }\n };\n this.dragStop = function (e) {\n var gObj = _this.parent;\n if (_this.parent.isDestroyed) {\n return;\n }\n var targetEle = _this.getElementFromPosition(e.helper, e.event);\n var target = targetEle ? targetEle : e.target;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n gObj.element.classList.remove('e-rowdrag');\n var dropElement = document.getElementById(gObj.rowDropSettings.targetID);\n if (gObj.rowDropSettings.targetID && dropElement && dropElement.ej2_instances &&\n dropElement.ej2_instances[0].getModuleName() === 'grid') {\n dropElement.ej2_instances[0].getContent().classList.remove('e-allowRowDrop');\n }\n var startRow = gObj.getSelectedRows().length > 0 ? gObj.getSelectedRows() : [_this.startedRow];\n if (gObj.isRowDragable()) {\n _this.stopTimer();\n gObj.enableHover = _this.hoverState;\n _this.parent.getContent().classList.remove('e-grid-relative');\n _this.removeBorder(targetEle);\n var stRow = gObj.element.querySelector('.e-dragstartrow');\n if (stRow) {\n stRow.classList.remove('e-dragstartrow');\n }\n }\n var args = {\n target: target, draggableType: 'rows',\n cancel: false,\n fromIndex: _this.startedRowIndex,\n dropIndex: _this.dragTarget,\n rows: startRow, data: gObj.getSelectedRecords()\n };\n gObj.trigger(events.rowDrop, args);\n if (!parentsUntil(target, 'e-gridcontent') || args.cancel) {\n _this.dragTarget = null;\n remove(e.helper);\n return;\n }\n _this.isRefresh = false;\n var selectedIndexes = _this.parent.getSelectedRowIndexes();\n if (gObj.isRowDragable()) {\n if (!_this.parent.rowDropSettings.targetID &&\n _this.startedRow.querySelector('td.e-selectionbackground') && selectedIndexes.length > 1 &&\n selectedIndexes.length !== _this.parent.getCurrentViewRecords().length) {\n _this.reorderRows(selectedIndexes, args.dropIndex);\n }\n else {\n _this.reorderRows([parseInt(_this.startedRow.getAttribute('aria-rowindex'), 10)], _this.dragTarget);\n }\n _this.dragTarget = null;\n if (!gObj.rowDropSettings.targetID) {\n remove(e.helper);\n gObj.refresh();\n }\n }\n _this.isRefresh = true;\n };\n this.removeCell = function (targetRow, className) {\n return [].slice.call(targetRow.querySelectorAll('td')).filter(function (cell) {\n if (cell.classList.contains(className)) {\n targetRow.deleteCell(cell.cellIndex);\n }\n });\n };\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeDrag, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.onDataBoundFn = this.onDataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.onDataBoundFn);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n }\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex) {\n var selectedIndexes = this.parent.getSelectedRowIndexes();\n var selectedRecords = [];\n var draggedRecords = [];\n var currentViewData = this.parent.renderModule.data.dataManager.dataSource.json;\n var dropIdx = toIndex;\n var actualIdx = fromIndexes[0];\n for (var i = 0, len = fromIndexes.length; i < len; i++) {\n draggedRecords[i] = currentViewData[fromIndexes[i]];\n }\n for (var i = 0, len = selectedIndexes.length; i < len; i++) {\n selectedRecords[i] = currentViewData[selectedIndexes[i]];\n }\n for (var i = 0, len = draggedRecords.length; i < len; i++) {\n if (i !== 0) {\n for (var j = 0, len1 = currentViewData.length; j < len1; j++) {\n if (JSON.stringify(this.parent.renderModule.data.dataManager.dataSource.json[j]) ===\n JSON.stringify(draggedRecords[i])) {\n actualIdx = j;\n break;\n }\n }\n for (var j = 0, len1 = currentViewData.length; j < len1; j++) {\n if (JSON.stringify(this.parent.renderModule.data.dataManager.dataSource.json[j]) === JSON.stringify(draggedRecords[i - 1])) {\n if (actualIdx > j) {\n dropIdx = j + 1;\n }\n break;\n }\n }\n }\n this.reorderRow(actualIdx, dropIdx);\n }\n if (this.isRefresh) {\n this.parent.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'rowdraganddrop'\n });\n }\n for (var i = 0, len = selectedRecords.length; i < len; i++) {\n for (var j = 0, len1 = currentViewData.length; j < len1; j++) {\n if (JSON.stringify(this.parent.renderModule.data.dataManager.dataSource.json[j]) === JSON.stringify(selectedRecords[i])) {\n selectedIndexes[i] = j;\n break;\n }\n }\n }\n this.selectedRowColls = selectedIndexes;\n };\n RowDD.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n RowDD.prototype.initializeDrag = function () {\n var gObj = this.parent;\n var column;\n var drag;\n drag = new Draggable(gObj.getContent(), {\n dragTarget: '.e-rowcelldrag, .e-rowdragdrop, .e-rowcell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n RowDD.prototype.updateScrollPostion = function (e, target) {\n var _this = this;\n var frzCols = this.parent.getFrozenColumns();\n var y = getPosition(e).y;\n var cliRect = this.parent.getContent().getBoundingClientRect();\n var rowHeight = this.parent.getRowHeight() - 15;\n var scrollElem = frzCols ? this.parent.getContent().querySelector('.e-movablecontent')\n : this.parent.getContent().firstElementChild;\n if (cliRect.top + rowHeight >= y) {\n var scrollPixel_1 = -(this.parent.getRowHeight());\n this.isOverflowBorder = false;\n this.timer = window.setInterval(function () { _this.setScrollDown(scrollElem, scrollPixel_1, true); }, 200);\n }\n else if (cliRect.top + this.parent.getContent().clientHeight - rowHeight - 33 <= y) {\n var scrollPixel_2 = (this.parent.getRowHeight());\n this.isOverflowBorder = false;\n this.timer = window.setInterval(function () { _this.setScrollDown(scrollElem, scrollPixel_2, true); }, 200);\n }\n };\n RowDD.prototype.setScrollDown = function (scrollElem, scrollPixel, isLeft) {\n scrollElem.scrollTop = scrollElem.scrollTop + scrollPixel;\n };\n RowDD.prototype.moveDragRows = function (e, startedRow, targetRow) {\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n var element = closestElement(e.target, 'tr');\n if (parentsUntil(element, 'e-gridcontent') && parentsUntil(cloneElement.parentElement, 'e-grid').id ===\n parentsUntil(element, 'e-grid').id) {\n var targetElement = element ?\n element : this.startedRow;\n this.setBorder(targetElement, e.event, startedRow, targetRow);\n }\n };\n RowDD.prototype.setBorder = function (element, event, startedRow, targetRow) {\n var node = this.parent.element;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n this.removeFirstRowBorder(element);\n this.removeLastRowBorder(element);\n if (parentsUntil(element, 'e-gridcontent') && parentsUntil(cloneElement.parentElement, 'e-grid').id ===\n parentsUntil(element, 'e-grid').id) {\n removeClass(node.querySelectorAll('.e-rowcell,.e-rowdragdrop'), ['e-dragborder']);\n var rowElement = [];\n if (targetRow && targetRow.rowIndex === 0) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-dragborder' });\n var gridheaderEle = this.parent.getHeaderContent();\n gridheaderEle.classList.add('e-grid-relative');\n div.style.width = node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-dragborder').length) {\n gridheaderEle.appendChild(div);\n }\n }\n else if (targetRow && parseInt(startedRow.getAttribute('aria-rowindex'), 10) > targetRow.rowIndex) {\n element = this.parent.getRowByIndex(targetRow.rowIndex - 1);\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop'));\n }\n else {\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop'));\n }\n if (rowElement.length > 0) {\n addRemoveActiveClasses(rowElement, true, 'e-dragborder');\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.removeFirstRowBorder = function (element) {\n if (this.parent.element.getElementsByClassName('e-firstrow-dragborder').length > 0 && element &&\n element.rowIndex !== 0) {\n this.parent.element.getElementsByClassName('e-firstrow-dragborder')[0].remove();\n }\n };\n RowDD.prototype.removeLastRowBorder = function (element) {\n var islastRowIndex = element && this.parent.getRowByIndex(this.parent.getRows().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0 && element && islastRowIndex) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n };\n RowDD.prototype.removeBorder = function (element) {\n this.removeFirstRowBorder(element);\n this.removeLastRowBorder(element);\n element = this.parent.getRows().filter(function (row) {\n return row.querySelector('td.e-dragborder');\n })[0];\n if (element) {\n var rowElement = [].slice.call(element.querySelectorAll('.e-dragborder'));\n addRemoveActiveClasses(rowElement, false, 'e-dragborder');\n }\n };\n RowDD.prototype.getElementFromPosition = function (element, event) {\n var target;\n var position = getPosition(event);\n element.style.display = 'none';\n target = document.elementFromPoint(position.x, position.y);\n element.style.display = '';\n return target;\n };\n RowDD.prototype.onDataBound = function (e) {\n if (this.selectedRowColls.length > 0) {\n this.parent.selectRows(this.selectedRowColls);\n this.selectedRowColls = [];\n }\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.singleRowDrop = function (e) {\n var targetRow = closestElement(e.target, 'tr');\n var currentIndex;\n var srcControl;\n srcControl = e.droppedElement.parentElement.ej2_instances[0];\n currentIndex = targetRow ? targetRow.rowIndex : srcControl.currentViewData.length - 1;\n this.reorderRow(this.startedRowIndex, currentIndex);\n };\n RowDD.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n var draggObj = e.droppedElement.parentElement.ej2_instances[0];\n if (e.droppedElement.getAttribute('action') !== 'grouping') {\n var targetRow = closestElement(e.target, 'tr');\n var srcControl = void 0;\n var currentIndex = void 0;\n if ((e.droppedElement.querySelector('tr').getAttribute('single-dragrow') !== 'true' &&\n e.droppedElement.parentElement.id === gObj.element.id)\n || (e.droppedElement.querySelector('tr').getAttribute('single-dragrow') === 'true' &&\n e.droppedElement.parentElement.id !== gObj.element.id)) {\n return;\n }\n if (e.droppedElement.parentElement.id !== gObj.element.id) {\n srcControl = e.droppedElement.parentElement.ej2_instances[0];\n }\n else if (this.isSingleRowDragDrop || e.droppedElement.querySelector('tr').getAttribute('single-dragrow') === 'true') {\n this.singleRowDrop(e);\n return;\n }\n if (srcControl.element.id !== gObj.element.id && srcControl.rowDropSettings.targetID !== gObj.element.id) {\n return;\n }\n var records = srcControl.getSelectedRecords();\n var targetIndex = currentIndex = this.getTargetIdx(targetRow);\n var count = 0;\n if (isNaN(targetIndex)) {\n targetIndex = currentIndex = 0;\n }\n if (gObj.allowPaging) {\n targetIndex = targetIndex + (gObj.pageSettings.currentPage * gObj.pageSettings.pageSize) - gObj.pageSettings.pageSize;\n }\n //Todo: drag and drop mapper & BatchChanges \n gObj.notify(events.rowsAdded, { toIndex: targetIndex, records: records });\n gObj.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'rowdraganddrop'\n });\n var selectedRows = srcControl.getSelectedRowIndexes();\n var skip = srcControl.allowPaging ?\n (srcControl.pageSettings.currentPage * srcControl.pageSettings.pageSize) - srcControl.pageSettings.pageSize : 0;\n this.selectedRows = [];\n for (var i = 0, len = records.length; i < len; i++) {\n this.selectedRows.push(skip + selectedRows[i]);\n }\n srcControl.notify(events.rowsRemoved, { indexes: this.selectedRows, records: records });\n srcControl.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'rowdraganddrop'\n });\n }\n };\n RowDD.prototype.reorderRow = function (fromIndexes, toIndex) {\n var gObj = this.parent;\n if (!gObj.sortSettings.columns.length && !gObj.groupSettings.columns.length && !gObj.filterSettings.columns.length) {\n //Todo: drag and drop mapper & BatchChanges \n var skip = gObj.allowPaging ?\n (gObj.pageSettings.currentPage * gObj.pageSettings.pageSize) - gObj.pageSettings.pageSize : 0;\n var fromIndex = fromIndexes;\n toIndex = toIndex + skip;\n this.selectedRows = gObj.getSelectedRowIndexes();\n gObj.notify(events.rowPositionChanged, {\n fromIndex: fromIndexes + skip,\n toIndex: toIndex\n });\n }\n };\n RowDD.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.initializeDrag();\n }\n };\n /**\n * To destroy the print\n * @return {void}\n * @hidden\n */\n RowDD.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.e-gridheader') &&\n !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeDrag);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.removeEventListener(events.dataBound, this.onDataBoundFn);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n //destory ejdrag and drop\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","import { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { createElement, closest, remove, classList, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { parentsUntil, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n *\n * The `Group` module is used to handle group action.\n */\nvar Group = /** @class */ (function () {\n /**\n * Constructor for Grid group module\n * @hidden\n */\n function Group(parent, groupSettings, sortedColumns, serviceLocator) {\n var _this = this;\n this.isAppliedGroup = false;\n this.isAppliedUnGroup = false;\n this.visualElement = createElement('div', {\n className: 'e-cloneproperties e-dragclone e-gdclone',\n styles: 'line-height:23px', attrs: { action: 'grouping' }\n });\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var element = target.classList.contains('e-groupheadercell') ? target :\n parentsUntil(target, 'e-groupheadercell');\n if (!element) {\n return false;\n }\n _this.column = gObj.getColumnByField(element.firstElementChild.getAttribute('ej-mappingname'));\n _this.visualElement.textContent = element.textContent;\n _this.visualElement.style.width = element.offsetWidth + 2 + 'px';\n _this.visualElement.style.height = element.offsetHeight + 2 + 'px';\n _this.visualElement.setAttribute('e-mappinguid', _this.column.uid);\n gObj.element.appendChild(_this.visualElement);\n return _this.visualElement;\n };\n this.dragStart = function () {\n _this.parent.element.classList.add('e-ungroupdrag');\n };\n this.drag = function (e) {\n var target = e.target;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n _this.parent.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: _this.column });\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!(parentsUntil(target, 'e-gridcontent') || parentsUntil(target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n };\n this.dragStop = function (e) {\n _this.parent.element.classList.remove('e-ungroupdrag');\n if (!(parentsUntil(e.target, 'e-gridcontent') || parentsUntil(e.target, 'e-gridheader'))) {\n remove(e.helper);\n return;\n }\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n _this.element.classList.remove('e-hover');\n remove(e.droppedElement);\n _this.aria.setDropTarget(_this.parent.element.querySelector('.e-groupdroparea'), false);\n _this.aria.setGrabbed(_this.parent.getHeaderTable().querySelector('[aria-grabbed=true]'), false);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n _this.groupColumn(column.field);\n };\n this.contentRefresh = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.groupSettings = groupSettings;\n this.serviceLocator = serviceLocator;\n this.sortedColumns = sortedColumns;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n this.groupGenerator = new GroupModelGenerator(this.parent);\n }\n Group.prototype.columnDrag = function (e) {\n var gObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!parentsUntil(e.target, 'e-groupdroparea') &&\n !(this.parent.allowReordering && parentsUntil(e.target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n e.target.classList.contains('e-groupdroparea') ? this.element.classList.add('e-hover') : this.element.classList.remove('e-hover');\n };\n Group.prototype.columnDragStart = function (e) {\n if (e.target.classList.contains('e-stackedheadercell')) {\n return;\n }\n var gObj = this.parent;\n var dropArea = this.parent.element.querySelector('.e-groupdroparea');\n this.aria.setDropTarget(dropArea, e.column.allowGrouping);\n var element = e.target.classList.contains('e-headercell') ? e.target : parentsUntil(e.target, 'e-headercell');\n this.aria.setGrabbed(element, true, !e.column.allowGrouping);\n };\n Group.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n if (e.droppedElement.getAttribute('action') === 'grouping') {\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n this.ungroupColumn(column.field);\n }\n };\n /**\n * @hidden\n */\n Group.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.groupComplete, this.onActionComplete, this);\n this.parent.on(events.ungroupComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.columnDrag, this.columnDrag, this);\n this.parent.on(events.columnDragStart, this.columnDragStart, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.sortComplete, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.onEmpty, this.initialEnd, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.groupAggregates, this.onGroupAggregates, this);\n };\n /**\n * @hidden\n */\n Group.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.groupComplete, this.onActionComplete);\n this.parent.off(events.ungroupComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.columnDrag, this.columnDrag);\n this.parent.off(events.columnDragStart, this.columnDragStart);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.sortComplete, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.groupAggregates, this.onGroupAggregates);\n };\n Group.prototype.initialEnd = function () {\n var gObj = this.parent;\n this.parent.off(events.contentReady, this.initialEnd);\n this.parent.off(events.onEmpty, this.initialEnd);\n if (this.parent.getColumns().length && this.groupSettings.columns.length) {\n this.contentRefresh = false;\n for (var _i = 0, _a = gObj.groupSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.groupColumn(col);\n }\n this.contentRefresh = true;\n }\n };\n Group.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n if ((!this.groupSettings.columns.length ||\n ['altDownArrow', 'altUpArrow', 'ctrlDownArrow', 'ctrlUpArrow', 'enter'].indexOf(e.action) === -1)) {\n return;\n }\n e.preventDefault();\n switch (e.action) {\n case 'altDownArrow':\n case 'altUpArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var rows = gObj.getContentTable().querySelector('tbody').children;\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var grpRow = void 0;\n for (var i = dataRow.rowIndex; i >= 0; i--) {\n if (!rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-detailrow')) {\n grpRow = rows[i];\n break;\n }\n }\n this.expandCollapseRows(grpRow.querySelector(e.action === 'altUpArrow' ?\n '.e-recordplusexpand' : '.e-recordpluscollapse'));\n }\n break;\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'enter':\n if (this.parent.isEdit || (closest(e.target, '#' + this.parent.element.id + '_searchbar') !== null)) {\n return;\n }\n var element = this.focus.getFocusedElement();\n var row = element ? element.parentElement.querySelector('[class^=\"e-record\"]') : null;\n if (!row) {\n break;\n }\n this.expandCollapseRows(row);\n break;\n }\n };\n Group.prototype.clickHandler = function (e) {\n this.expandCollapseRows(e.target);\n this.applySortFromTarget(e.target);\n this.unGroupFromTarget(e.target);\n this.toogleGroupFromHeader(e.target);\n };\n Group.prototype.unGroupFromTarget = function (target) {\n if (target.classList.contains('e-ungroupbutton')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n };\n Group.prototype.toogleGroupFromHeader = function (target) {\n if (this.groupSettings.showToggleButton) {\n if (target.classList.contains('e-grptogglebtn')) {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n else {\n this.groupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n }\n else {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n }\n }\n };\n Group.prototype.applySortFromTarget = function (target) {\n var gObj = this.parent;\n var gHeader = closest(target, '.e-groupheadercell');\n if (gObj.allowSorting && gHeader && !target.classList.contains('e-ungroupbutton') &&\n !target.classList.contains('e-toggleungroup')) {\n var field = gHeader.firstElementChild.getAttribute('ej-mappingname');\n if (gObj.getColumnHeaderByField(field).querySelectorAll('.e-ascending').length) {\n gObj.sortColumn(field, 'Descending', true);\n }\n else {\n gObj.sortColumn(field, 'Ascending', true);\n }\n }\n };\n /**\n * Expands or collapses grouped rows by target element.\n * @param {Element} target - Defines the target element of the grouped row.\n * @return {void}\n */\n Group.prototype.expandCollapseRows = function (target) {\n var trgt = parentsUntil(target, 'e-recordplusexpand') ||\n parentsUntil(target, 'e-recordpluscollapse');\n if (trgt) {\n var cellIdx = trgt.cellIndex;\n var rowIdx = trgt.parentElement.rowIndex;\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var rows = [].slice.call(rowNodes).slice(rowIdx + 1, rowNodes.length);\n var isHide = void 0;\n var expandElem = void 0;\n var toExpand = [];\n var indent = trgt.parentElement.querySelectorAll('.e-indentcell').length;\n var expand = false;\n if (trgt.classList.contains('e-recordpluscollapse')) {\n addClass([trgt], 'e-recordplusexpand');\n removeClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gdiagonaldown e-icon-gdownarrow';\n expand = true;\n }\n else {\n isHide = true;\n removeClass([trgt], 'e-recordplusexpand');\n addClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n }\n this.aria.setExpand(trgt, expand);\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].querySelectorAll('td')[cellIdx] &&\n rows[i].querySelectorAll('td')[cellIdx].classList.contains('e-indentcell') && rows) {\n if (isHide) {\n rows[i].style.display = 'none';\n }\n else {\n if (rows[i].querySelectorAll('.e-indentcell').length === indent + 1) {\n rows[i].style.display = '';\n expandElem = rows[i].querySelector('.e-recordplusexpand');\n if (expandElem) {\n toExpand.push(expandElem);\n }\n if (rows[i].classList.contains('e-detailrow')) {\n if (rows[i - 1].querySelectorAll('.e-detailrowcollapse').length) {\n rows[i].style.display = 'none';\n }\n }\n }\n }\n }\n else {\n break;\n }\n }\n for (var i = 0, len = toExpand.length; i < len; i++) {\n removeClass([toExpand[i]], 'e-recordplusexpand');\n addClass([toExpand[i]], 'e-recordpluscollapse');\n toExpand[i].firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n this.expandCollapseRows(toExpand[i]);\n }\n }\n };\n Group.prototype.expandCollapse = function (isExpand) {\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var row;\n for (var i = 0, len = rowNodes.length; i < len; i++) {\n if (rowNodes[i].querySelectorAll('.e-recordplusexpand, .e-recordpluscollapse').length) {\n row = rowNodes[i].querySelector(isExpand ? '.e-recordpluscollapse' : '.e-recordplusexpand');\n if (row) {\n row.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n row.firstElementChild.className = isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' :\n 'e-icons e-gnextforward e-icon-grightarrow';\n }\n if (!(rowNodes[i].firstElementChild.classList.contains('e-recordplusexpand') ||\n rowNodes[i].firstElementChild.classList.contains('e-recordpluscollapse'))) {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n else {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n };\n /**\n * Expands all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n /**\n * The function is used to render grouping\n * @return {Element}\n * @hidden\n */\n Group.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderGroupDropArea();\n this.initDragAndDrop();\n this.refreshToggleBtn();\n };\n Group.prototype.renderGroupDropArea = function () {\n var groupElem = this.parent.element.querySelector('.e-groupdroparea');\n if (groupElem) {\n remove(groupElem);\n }\n this.element = this.parent.createElement('div', { className: 'e-groupdroparea', attrs: { 'tabindex': '-1' } });\n this.updateGroupDropArea();\n this.parent.element.insertBefore(this.element, this.parent.element.firstChild);\n if (!this.groupSettings.showDropArea) {\n this.element.style.display = 'none';\n }\n };\n Group.prototype.updateGroupDropArea = function (clear) {\n if (this.groupSettings.showDropArea && !this.groupSettings.columns.length) {\n var dragLabel = this.l10n.getConstant('GroupDropArea');\n this.element.innerHTML = dragLabel;\n this.element.classList.remove('e-grouped');\n }\n else {\n if ((this.element.innerHTML === this.l10n.getConstant('GroupDropArea') && (this.groupSettings.columns.length === 1\n || !this.isAppliedGroup && !this.isAppliedUnGroup)) || clear) {\n this.element.innerHTML = '';\n }\n this.element.classList.add('e-grouped');\n }\n };\n Group.prototype.initDragAndDrop = function () {\n this.initializeGHeaderDrop();\n this.initializeGHeaderDrag();\n };\n Group.prototype.initializeGHeaderDrag = function () {\n var drag = new Draggable(this.element, {\n dragTarget: '.e-groupheadercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n Group.prototype.initializeGHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(this.element, {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n Group.prototype.groupColumn = function (columnName) {\n var gObj = this.parent;\n var column = gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n (this.contentRefresh && this.groupSettings.columns.indexOf(columnName) > -1)) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.groupColumn, arg1: columnName });\n return;\n }\n column.visible = gObj.groupSettings.showGroupedColumn;\n this.colName = columnName;\n this.isAppliedGroup = true;\n if (this.contentRefresh) {\n this.updateModel();\n }\n else {\n this.addColToGroupDrop(columnName);\n }\n this.updateGroupDropArea();\n this.isAppliedGroup = false;\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n Group.prototype.ungroupColumn = function (columnName) {\n var gObj = this.parent;\n var column = this.parent.enableColumnVirtualization ?\n this.parent.columns.filter(function (c) { return c.field === columnName; })[0] : gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false || this.groupSettings.columns.indexOf(columnName) < 0) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.ungroupColumn, arg1: columnName });\n return;\n }\n column.visible = true;\n this.colName = column.field;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.splice(columns.indexOf(this.colName), 1);\n if (this.sortedColumns.indexOf(columnName) < 0) {\n for (var i = 0, len = gObj.sortSettings.columns.length; i < len; i++) {\n if (columnName === gObj.sortSettings.columns[i].field) {\n gObj.sortSettings.columns.splice(i, 1);\n break;\n }\n }\n }\n this.groupSettings.columns = columns;\n if (gObj.allowGrouping) {\n this.isAppliedUnGroup = true;\n this.parent.dataBind();\n }\n };\n /**\n * The function used to update groupSettings\n * @return {void}\n * @hidden\n */\n Group.prototype.updateModel = function () {\n var gObj = this.parent;\n var i = 0;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.push(this.colName);\n this.groupSettings.columns = columns;\n this.groupAddSortingQuery(this.colName);\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Group.prototype.onActionComplete = function (e) {\n var gObj = this.parent;\n if (e.requestType === 'grouping') {\n this.addColToGroupDrop(this.colName);\n }\n else {\n this.removeColFromGroupDrop(this.colName);\n }\n var args = this.groupSettings.columns.indexOf(this.colName) > -1 ? {\n columnName: this.colName, requestType: 'grouping', type: events.actionComplete\n } : { requestType: 'ungrouping', type: events.actionComplete };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.colName = null;\n };\n Group.prototype.groupAddSortingQuery = function (colName) {\n var i = 0;\n while (i < this.parent.sortSettings.columns.length) {\n if (this.parent.sortSettings.columns[i].field === colName) {\n break;\n }\n i++;\n }\n if (this.parent.sortSettings.columns.length === i) {\n this.parent.sortSettings.columns.push({ field: colName, direction: 'Ascending' });\n }\n else if (!this.parent.allowSorting) {\n this.parent.sortSettings.columns[i].direction = 'Ascending';\n }\n };\n Group.prototype.addColToGroupDrop = function (field) {\n var gObj = this.parent;\n var direction = 'Ascending';\n var groupedColumn = this.parent.createElement('div', { className: 'e-grid-icon e-groupheadercell' });\n var childDiv = this.parent.createElement('div', { attrs: { 'ej-mappingname': field } });\n var column = this.parent.getColumnByField(field);\n if (isNullOrUndefined(column)) {\n return;\n }\n //Todo headerTemplateID for grouped column, disableHtmlEncode \n var headerCell = gObj.getColumnHeaderByUid(column.uid);\n if (!isNullOrUndefined(column.headerTemplate)) {\n if (column.headerTemplate.indexOf('#') !== -1) {\n childDiv.innerHTML = document.querySelector(column.headerTemplate).innerHTML.trim();\n }\n else {\n childDiv.innerHTML = column.headerTemplate;\n }\n childDiv.firstElementChild.classList.add('e-grouptext');\n }\n else {\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-grouptext', innerHTML: column.headerText,\n attrs: { tabindex: '-1', 'aria-label': 'sort the grouped column' }\n }));\n }\n if (this.groupSettings.showToggleButton) {\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-togglegroupbutton e-icons e-icon-ungroup e-toggleungroup', innerHTML: ' ',\n attrs: { tabindex: '-1', 'aria-label': 'ungroup button' }\n }));\n }\n if (headerCell.querySelectorAll('.e-ascending,.e-descending').length) {\n direction = headerCell.querySelector('.e-ascending') ? 'Ascending' : 'Descending';\n }\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-groupsort e-icons ' +\n ('e-' + direction.toLowerCase() + ' e-icon-' + direction.toLowerCase()), innerHTML: ' ',\n attrs: { tabindex: '-1', 'aria-label': 'sort the grouped column' }\n }));\n childDiv.appendChild(this.parent.createElement('span', {\n className: 'e-ungroupbutton e-icons e-icon-hide', innerHTML: ' ',\n attrs: { title: this.l10n.getConstant('UnGroup'), tabindex: '-1', 'aria-label': 'ungroup the grouped column' },\n styles: this.groupSettings.showUngroupButton ? '' : 'display:none'\n }));\n groupedColumn.appendChild(childDiv);\n this.element.appendChild(groupedColumn);\n //Todo: rtl \n };\n Group.prototype.refreshToggleBtn = function (isRemove) {\n if (this.groupSettings.showToggleButton) {\n var headers = [].slice.call(this.parent.element.getElementsByClassName('e-headercelldiv'));\n for (var i = 0, len = headers.length; i < len; i++) {\n if (!((headers[i].classList.contains('e-emptycell')) || (headers[i].classList.contains('e-headerchkcelldiv')))) {\n var column = this.parent.getColumnByUid(headers[i].getAttribute('e-mappinguid'));\n if (!this.parent.showColumnMenu || (this.parent.showColumnMenu && !column.showColumnMenu)) {\n if (headers[i].querySelectorAll('.e-grptogglebtn').length) {\n remove(headers[i].querySelectorAll('.e-grptogglebtn')[0]);\n }\n if (!isRemove) {\n headers[i].appendChild(this.parent.createElement('span', {\n className: 'e-grptogglebtn e-icons ' +\n (this.groupSettings.columns.indexOf(column.field) > -1 ? 'e-toggleungroup e-icon-ungroup'\n : 'e-togglegroup e-icon-group'), attrs: { tabindex: '-1', 'aria-label': 'Group button' }\n }));\n }\n }\n }\n }\n }\n };\n Group.prototype.removeColFromGroupDrop = function (field) {\n if (!isNullOrUndefined(this.getGHeaderCell(field))) {\n remove(this.getGHeaderCell(field));\n this.updateGroupDropArea();\n }\n this.isAppliedUnGroup = false;\n };\n Group.prototype.onPropertyChanged = function (e) {\n var _this = this;\n if (e.module !== this.getModuleName()) {\n return;\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'columns':\n var args = void 0;\n if (this_1.contentRefresh) {\n if (!this_1.isAppliedUnGroup) {\n if (!this_1.isAppliedGroup) {\n this_1.updateGroupDropArea(true);\n for (var i = 0; i < this_1.groupSettings.columns.length; i++) {\n this_1.colName = this_1.groupSettings.columns[i];\n var col = this_1.parent.getColumnByField(this_1.colName);\n col.visible = this_1.parent.groupSettings.showGroupedColumn;\n this_1.groupAddSortingQuery(this_1.colName);\n if (i < this_1.groupSettings.columns.length - 1) {\n this_1.addColToGroupDrop(this_1.groupSettings.columns[i]);\n }\n }\n }\n args = { columnName: this_1.colName, requestType: e.properties[prop].length ? 'grouping' : 'ungrouping',\n type: events.actionBegin };\n }\n else {\n args = { requestType: 'ungrouping', type: events.actionBegin };\n }\n if (!this_1.groupSettings.showGroupedColumn) {\n e.oldProperties[prop].forEach(function (column) {\n if (e.properties[prop].indexOf(column) === -1) {\n _this.parent.getColumnByField(column).visible = true;\n }\n });\n }\n this_1.parent.notify(events.modelChanged, args);\n }\n break;\n case 'showDropArea':\n this_1.updateGroupDropArea();\n this_1.groupSettings.showDropArea ? this_1.element.style.display = '' : this_1.element.style.display = 'none';\n break;\n case 'showGroupedColumn':\n this_1.updateGroupedColumn(this_1.groupSettings.showGroupedColumn);\n this_1.parent.notify(events.modelChanged, { requestType: 'refresh' });\n break;\n case 'showUngroupButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showUngroupButton, 'e-ungroupbutton');\n break;\n case 'showToggleButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showToggleButton, 'e-togglegroupbutton ');\n this_1.parent.refreshHeader();\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n Group.prototype.updateGroupedColumn = function (isVisible) {\n for (var i = 0; i < this.groupSettings.columns.length; i++) {\n this.parent.getColumnByField(this.groupSettings.columns[i]).visible = isVisible;\n }\n };\n Group.prototype.updateButtonVisibility = function (isVisible, className) {\n var gHeader = [].slice.call(this.element.querySelectorAll('.' + className));\n for (var i = 0; i < gHeader.length; i++) {\n gHeader[i].style.display = isVisible ? '' : 'none';\n }\n };\n Group.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Group.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n // tslint:disable-next-line:no-any\n if (!this.parent.isDestroyed && !this.parent.refreshing) {\n this.clearGrouping();\n }\n this.removeEventListener();\n this.refreshToggleBtn(true);\n remove(this.element);\n //call ejdrag and drop destroy\n };\n /**\n * Clears all the grouped columns of the Grid.\n * @return {void}\n */\n Group.prototype.clearGrouping = function () {\n var cols = JSON.parse(JSON.stringify(this.groupSettings.columns));\n this.contentRefresh = false;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (i === (len - 1)) {\n this.contentRefresh = true;\n }\n this.ungroupColumn(cols[i]);\n }\n this.contentRefresh = true;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Group.prototype.getModuleName = function () {\n return 'group';\n };\n Group.prototype.refreshSortIcons = function (e) {\n var gObj = this.parent;\n var header;\n var cols = gObj.sortSettings.columns;\n var gCols = gObj.groupSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n this.refreshToggleBtn();\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (!gObj.allowSorting && (this.sortedColumns.indexOf(cols[i].field) > -1 ||\n this.groupSettings.columns.indexOf(cols[i].field) > -1)) {\n classList(header.querySelector('.e-sortfilterdiv'), ['e-ascending', 'e-icon-ascending'], []);\n if (cols.length > 1) {\n header.querySelector('.e-headercelldiv').appendChild(this.parent.createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }));\n }\n }\n else if (this.getGHeaderCell(cols[i].field) && this.getGHeaderCell(cols[i].field).querySelectorAll('.e-groupsort').length) {\n if (cols[i].direction === 'Ascending') {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-ascending', 'e-icon-ascending'], ['e-descending', 'e-icon-descending']);\n }\n else {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-descending', 'e-icon-descending'], ['e-ascending', 'e-icon-ascending']);\n }\n }\n }\n for (var i = 0, len = gCols.length; i < len; i++) {\n if (fieldNames.indexOf(gCols[i]) === -1) {\n continue;\n }\n gObj.getColumnHeaderByField(gCols[i]).setAttribute('aria-grouped', 'true');\n }\n };\n Group.prototype.getGHeaderCell = function (field) {\n if (this.element && this.element.querySelector('[ej-mappingname=\"' + field + '\"]')) {\n return this.element.querySelector('[ej-mappingname=\"' + field + '\"]').parentElement;\n }\n return null;\n };\n Group.prototype.onGroupAggregates = function (editedData) {\n var _this = this;\n var aggregates = this.iterateGroupAggregates(editedData);\n var rowData = this.groupGenerator.generateRows(aggregates, {});\n var summaryRows = this.parent.getRowsObject().filter(function (row) { return !row.isDataRow; });\n var updateSummaryRows = rowData.filter(function (data) { return !data.isDataRow; });\n updateSummaryRows.forEach(function (row, indx) {\n var cells = row.cells.filter(function (cell) { return cell.isDataCell; });\n var args = { cells: cells, data: row.data, dataUid: summaryRows[indx] ? summaryRows[indx].uid : '' };\n _this.parent.notify(events.refreshAggregateCell, args);\n });\n };\n Group.prototype.iterateGroupAggregates = function (editedData) {\n var updatedData = editedData instanceof Array ? editedData : [];\n var rows = this.parent.getRowsObject();\n var initData = this.parent.getCurrentViewRecords();\n var deletedCols = [];\n var changeds = rows.map(function (row) {\n if (row.edit === 'delete') {\n deletedCols.push(row.data);\n }\n return row.changes instanceof Object ? row.changes : row.data;\n });\n var field = this.parent.getPrimaryKeyFieldNames()[0];\n changeds = updatedData.length === 0 ? changeds : updatedData;\n var mergeData = initData.map(function (item) {\n var pKeyVal = DataUtil.getObject(field, item);\n var value;\n var hasVal = changeds.some(function (cItem) {\n value = cItem;\n return pKeyVal === DataUtil.getObject(field, cItem);\n });\n return hasVal ? value : item;\n });\n var eData = editedData;\n if (!(eData.type && eData.type === 'cancel') && deletedCols.length > 0) {\n deletedCols.forEach(function (row) {\n var index = mergeData.indexOf(row);\n mergeData.splice(index, 1);\n });\n }\n var aggregates = [];\n var aggregateRows = this.parent.aggregates;\n aggregateRows.forEach(function (row) {\n row.columns.forEach(function (col) {\n var aggr = {};\n var type = col.type.toString();\n aggr = { type: type.toLowerCase(), field: col.field };\n aggregates.push(aggr);\n });\n });\n var result;\n var aggrds;\n var groupedCols = this.parent.groupSettings.columns;\n groupedCols.forEach(function (field) {\n aggrds = result ? result : mergeData;\n result = DataUtil.group(aggrds, field, aggregates, null, null);\n });\n return result;\n };\n return Group;\n}());\nexport { Group };\n","import { closest, classList } from '@syncfusion/ej2-base';\nimport { Grid } from '../base/grid';\nimport { parents, getUid, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { CellType } from '../base/enum';\n/**\n * The `DetailRow` module is used to handle detail template and hierarchy Grid operations.\n */\nvar DetailRow = /** @class */ (function () {\n /**\n * Constructor for the Grid detail template module\n * @hidden\n */\n function DetailRow(parent, locator) {\n //Internal variables\n this.aria = new AriaService();\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.focus = locator.getService('focus');\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.expandChildGrid, this.expand, this);\n }\n DetailRow.prototype.clickHandler = function (e) {\n this.toogleExpandcollapse(closest(e.target, 'td'));\n };\n // tslint:disable-next-line:max-func-body-length\n DetailRow.prototype.toogleExpandcollapse = function (target) {\n var gObj = this.parent;\n var parent = 'parentDetails';\n var childGrid;\n if (!(target && (target.classList.contains('e-detailrowcollapse') || target.classList.contains('e-detailrowexpand')))) {\n return;\n }\n var tr = target.parentElement;\n var uid = tr.getAttribute('data-uid');\n var rowObj = gObj.getRowObjectFromUID(uid);\n var nextRow = this.parent.getContentTable().querySelector('tbody').children[tr.rowIndex + 1];\n if (target.classList.contains('e-detailrowcollapse')) {\n var data = rowObj.data;\n if (this.isDetailRow(nextRow)) {\n nextRow.style.display = '';\n }\n else if (gObj.getDetailTemplate() || gObj.childGrid) {\n var rowId = getUid('grid-row');\n var detailRow = this.parent.createElement('tr', { className: 'e-detailrow', attrs: { 'data-uid': rowId } });\n var detailCell = this.parent.createElement('td', { className: 'e-detailcell' });\n detailCell.setAttribute('colspan', this.parent.getVisibleColumns().length.toString());\n var row = new Row({\n isDataRow: true,\n isExpand: true,\n uid: rowId,\n isDetailRow: true,\n cells: [new Cell({ cellType: CellType.Indent }), new Cell({ isDataCell: true, visible: true })]\n });\n for (var i = 0, len = gObj.groupSettings.columns.length; i < len; i++) {\n detailRow.appendChild(this.parent.createElement('td', { className: 'e-indentcell' }));\n row.cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n detailRow.appendChild(this.parent.createElement('td', { className: 'e-detailindentcell' }));\n detailRow.appendChild(detailCell);\n tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n if (gObj.detailTemplate) {\n appendChildren(detailCell, gObj.getDetailTemplate()(data, gObj, 'detailTemplate'));\n }\n else {\n childGrid = new Grid(this.getGridModel(gObj, rowObj, gObj.printMode));\n childGrid[parent] = {\n parentID: gObj.element.id,\n parentPrimaryKeys: gObj.getPrimaryKeyFieldNames(),\n parentKeyField: gObj.childGrid.queryString,\n parentKeyFieldValue: data[gObj.childGrid.queryString],\n parentRowData: data\n };\n if (gObj.isPrinting) {\n childGrid.isPrinting = true;\n childGrid.on(events.contentReady, this.promiseResolve(childGrid), this);\n childGrid.on(events.onEmpty, this.promiseResolve(childGrid), this);\n }\n rowObj.childGrid = childGrid;\n var modules = childGrid.getInjectedModules();\n var injectedModues = gObj.getInjectedModules();\n if (!modules || modules.length !== injectedModues.length) {\n childGrid.setInjectedModules(injectedModues);\n }\n var gridElem = this.parent.createElement('div', {\n id: 'child' + parents(tr, 'e-grid').length +\n '_grid' + tr.rowIndex + getUid('')\n });\n detailCell.appendChild(gridElem);\n childGrid.appendTo(gridElem);\n }\n detailRow.appendChild(detailCell);\n if (tr.nextSibling) {\n tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n }\n else {\n tr.parentNode.appendChild(detailRow);\n }\n gObj.getRows().splice(tr.rowIndex + 1, 0, detailRow);\n gObj.getRowsObject().splice(rowObj.index + 1, 0, row);\n gObj.trigger(events.detailDataBound, { detailElement: detailCell, data: data, childGrid: childGrid });\n gObj.notify(events.detailDataBound, { rows: gObj.getRowsObject() });\n }\n classList(target, ['e-detailrowexpand'], ['e-detailrowcollapse']);\n classList(target.firstElementChild, ['e-dtdiagonaldown', 'e-icon-gdownarrow'], ['e-dtdiagonalright', 'e-icon-grightarrow']);\n rowObj.isExpand = true;\n this.aria.setExpand(target, true);\n }\n else {\n if (this.isDetailRow(nextRow)) {\n nextRow.style.display = 'none';\n }\n classList(target, ['e-detailrowcollapse'], ['e-detailrowexpand']);\n classList(target.firstElementChild, ['e-dtdiagonalright', 'e-icon-grightarrow'], ['e-dtdiagonaldown', 'e-icon-gdownarrow']);\n rowObj.isExpand = false;\n this.aria.setExpand(target, false);\n }\n };\n /**\n * @hidden\n * @param gObj\n * @param rowObj\n */\n DetailRow.prototype.getGridModel = function (gObj, rowObj, printMode) {\n var gridModel;\n if (gObj.isPrinting && rowObj.isExpand && gObj.expandedRows &&\n gObj.expandedRows[rowObj.index] && gObj.expandedRows[rowObj.index].gridModel) {\n gObj.expandedRows[rowObj.index].gridModel.hierarchyPrintMode = gObj.childGrid.hierarchyPrintMode;\n gridModel = gObj.expandedRows[rowObj.index].gridModel;\n }\n else {\n if (gObj.isPrinting && gObj.childGrid.allowPaging) {\n gObj.childGrid.allowPaging = printMode === 'CurrentPage';\n gridModel = gObj.childGrid;\n }\n else {\n gridModel = gObj.childGrid;\n }\n }\n return gridModel;\n };\n DetailRow.prototype.promiseResolve = function (grid) {\n var _this = this;\n return function () {\n grid.off(events.contentReady, _this.promiseResolve);\n grid.off(events.onEmpty, _this.promiseResolve);\n grid.notify(events.hierarchyPrint, {});\n };\n };\n DetailRow.prototype.isDetailRow = function (row) {\n return row && row.classList.contains('e-detailrow');\n };\n DetailRow.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.e-gridheader') &&\n !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.expandChildGrid, this.expand);\n };\n DetailRow.prototype.getTDfromIndex = function (index, className) {\n var tr = this.parent.getDataRows()[index];\n if (tr && tr.querySelector(className)) {\n return tr.querySelector(className);\n }\n return null;\n };\n /**\n * Expands a detail row with the given target.\n * @param {Element} target - Defines the collapsed element to expand.\n * @return {void}\n */\n DetailRow.prototype.expand = function (target) {\n if (!isNaN(target)) {\n target = this.getTDfromIndex(target, '.e-detailrowcollapse');\n }\n if (target && target.classList.contains('e-detailrowcollapse')) {\n this.toogleExpandcollapse(target);\n }\n };\n /**\n * Collapses a detail row with the given target.\n * @param {Element} target - Defines the expanded element to collapse.\n * @return {void}\n */\n DetailRow.prototype.collapse = function (target) {\n if (!isNaN(target)) {\n target = this.getTDfromIndex(target, '.e-detailrowexpand');\n }\n if (target && target.classList.contains('e-detailrowexpand')) {\n this.toogleExpandcollapse(target);\n }\n };\n /**\n * Expands all the detail rows of the Grid.\n * @return {void}\n */\n DetailRow.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the detail rows of the Grid.\n * @return {void}\n */\n DetailRow.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n DetailRow.prototype.expandCollapse = function (isExpand) {\n var td;\n var rows = this.parent.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n td = rows[i].querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n isExpand ? this.expand(td) : this.collapse(td);\n }\n };\n DetailRow.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'altUpArrow':\n case 'altDownArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var td = dataRow.querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n e.action === 'altDownArrow' ? this.expand(td) : this.collapse(td);\n }\n break;\n case 'enter':\n if (this.parent.isEdit) {\n return;\n }\n var element = this.focus.getFocusedElement();\n if (!e.target.classList.contains('e-detailrowcollapse') &&\n !e.target.classList.contains('e-detailrowexpand')) {\n break;\n }\n this.toogleExpandcollapse(element);\n break;\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","import { EventHandler, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { Toolbar as tool } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { templateCompiler, appendChildren } from '../base/util';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `Toolbar` module is used to handle ToolBar actions.\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.predefinedItems = {};\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 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 }\n this.predefinedItems.Search = {\n id: this.gridID + '_search',\n template: '
    \\\n \\\n \\\n
    ',\n tooltipText: this.l10n.getConstant('Search'), align: 'Right', cssClass: 'e-search-wrapper'\n };\n this.predefinedItems.ColumnChooser = {\n id: this.gridID + '_' + 'columnchooser', cssClass: 'e-cc e-ccdiv e-cc-toolbar', suffixIcon: 'e-' + 'columnchooser-btn',\n text: this.l10n.getConstant('Columnchooser'), tooltipText: this.l10n.getConstant('Columnchooser'), align: 'Right',\n };\n this.createToolbar();\n };\n /**\n * Gets the toolbar of the Grid.\n * @return {Element}\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.toolbar.element;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {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 }\n else {\n this.toolbar.destroy();\n }\n this.unWireEvent();\n this.removeEventListener();\n remove(this.element);\n }\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 });\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.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 appendChildren(this.element, templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate'));\n }\n }\n else {\n this.toolbar.appendTo(this.element);\n }\n this.parent.element.insertBefore(this.element, this.parent.getHeaderContent());\n this.searchElement = this.element.querySelector('#' + this.gridID + '_searchbar');\n this.wireEvent();\n this.refreshToolbarItems();\n if (this.parent.searchSettings) {\n this.updateSearchBox();\n }\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 hasData = gObj.currentViewData && gObj.currentViewData.length;\n edit.allowAdding ? enableItems.push(this.gridID + '_add') : disableItems.push(this.gridID + '_add');\n edit.allowEditing && hasData ? enableItems.push(this.gridID + '_edit') : disableItems.push(this.gridID + '_edit');\n edit.allowDeleting && hasData ? enableItems.push(this.gridID + '_delete') : disableItems.push(this.gridID + '_delete');\n if (gObj.editSettings.mode === 'Batch') {\n if (gObj.element.querySelectorAll('.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 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 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 * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @return {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 Toolbar.prototype.toolbarClickHandler = function (args) {\n var gObj = this.parent;\n var gID = this.gridID;\n extend(args, { cancel: false });\n gObj.trigger(events.toolbarClick, args);\n if (args.cancel) {\n return;\n }\n switch (!isNullOrUndefined(args.item) && args.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 (args.originalEvent.target.id === gID + '_searchbutton') {\n this.search();\n }\n break;\n case gID + '_columnchooser':\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n var y = tarElement.getBoundingClientRect().top;\n var x = tarElement.getBoundingClientRect().left;\n var targetEle = args.originalEvent.target;\n y = tarElement.getBoundingClientRect().top + tarElement.offsetTop;\n gObj.createColumnchooser(x, y, targetEle);\n break;\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 };\n Toolbar.prototype.search = function () {\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 };\n Toolbar.prototype.unWireEvent = function () {\n if (this.searchElement) {\n EventHandler.remove(this.searchElement, 'keyup', this.keyUpHandler);\n this.searchBoxObj.unWireEvent();\n }\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.uiUpdate, this.onPropertyChanged, this);\n this.parent.on(events.inBoundModelChanged, this.updateSearchBox.bind(this));\n this.parent.on(events.modelChanged, this.refreshToolbarItems, this);\n this.parent.on(events.toolbarRefresh, this.refreshToolbarItems, this);\n this.parent.on(events.inBoundModelChanged, this.modelChanged, this);\n this.parent.on(events.dataBound, this.refreshToolbarItems, this);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.onPropertyChanged);\n this.parent.off(events.inBoundModelChanged, this.updateSearchBox);\n this.parent.off(events.modelChanged, this.refreshToolbarItems);\n this.parent.off(events.toolbarRefresh, this.refreshToolbarItems);\n this.parent.off(events.inBoundModelChanged, this.modelChanged);\n this.parent.off(events.dataBound, this.refreshToolbarItems);\n };\n /**\n * For internal use only - Get 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, remove } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { colGroupRefresh, columnWidthChanged, scroll, columnVisibilityChanged, refreshFooterRenderer } from '../base/constant';\nimport { ContentRender } from './content-renderer';\nimport { RowRenderer } from './row-renderer';\nimport { SummaryModelGenerator } from '../services/summary-model-generator';\nimport { renderMovable, calculateAggregate } from '../base/util';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Footer module is used to render grid content\n * @hidden\n */\nvar FooterRenderer = /** @class */ (function (_super) {\n __extends(FooterRenderer, _super);\n function FooterRenderer(gridModule, serviceLocator) {\n var _this = _super.call(this, gridModule, serviceLocator) || this;\n _this.aggregates = {};\n _this.parent = gridModule;\n _this.locator = serviceLocator;\n _this.modelGenerator = new SummaryModelGenerator(_this.parent);\n _this.addEventListener();\n return _this;\n }\n /**\n * The function is used to render grid footer div\n */\n FooterRenderer.prototype.renderPanel = function () {\n var div = this.parent.createElement('div', { className: 'e-gridfooter' });\n var innerDiv = this.parent.createElement('div', { className: 'e-summarycontent' });\n var movableContent = innerDiv;\n if (this.parent.getFrozenColumns()) {\n var fDiv = this.parent.createElement('div', { className: 'e-frozenfootercontent' });\n var mDiv = this.parent.createElement('div', { className: 'e-movablefootercontent' });\n innerDiv.appendChild(fDiv);\n innerDiv.appendChild(mDiv);\n this.frozenContent = fDiv;\n this.movableContent = mDiv;\n movableContent = mDiv;\n }\n if (Browser.isDevice) {\n movableContent.style.overflowX = 'scroll';\n }\n div.appendChild(innerDiv);\n this.setPanel(div);\n if (this.parent.getPager() != null) {\n this.parent.element.insertBefore(div, this.parent.getPager());\n }\n else {\n this.parent.element.appendChild(div);\n }\n };\n /**\n * The function is used to render grid footer table\n */\n FooterRenderer.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n var innerDiv = this.createContentTable('_footer_table');\n var table = innerDiv.querySelector('.e-table');\n var tFoot = this.parent.createElement('tfoot');\n table.appendChild(tFoot);\n if (this.parent.getFrozenColumns()) {\n var freezeTable = table.cloneNode(true);\n this.frozenContent.appendChild(freezeTable);\n this.freezeTable = freezeTable;\n this.movableContent.appendChild(table);\n remove(table.querySelector('colgroup'));\n var colGroup = ((this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup')).cloneNode(true));\n table.insertBefore(colGroup, table.querySelector('tbody'));\n this.setColGroup(colGroup);\n }\n this.setTable(table);\n };\n FooterRenderer.prototype.renderSummaryContent = function (e, table, cStart, cEnd) {\n var input = this.parent.dataSource instanceof Array ? this.parent.dataSource : this.parent.currentViewData;\n var summaries = this.modelGenerator.getData();\n var dummies = isNullOrUndefined(cStart) ? this.modelGenerator.getColumns() :\n this.modelGenerator.getColumns(cStart, cEnd);\n var rows = isNullOrUndefined(cStart) ? this.modelGenerator.generateRows(input, e || this.aggregates) :\n this.modelGenerator.generateRows(input, e || this.aggregates, cStart, cEnd);\n var fragment = document.createDocumentFragment();\n var rowrenderer = new RowRenderer(this.locator, null, this.parent);\n rowrenderer.element = this.parent.createElement('TR', { className: 'e-summaryrow' });\n for (var srow = 0, len = summaries.length; srow < len; srow++) {\n var row = rows[srow];\n if (!row) {\n continue;\n }\n var tr = rowrenderer.render(row, dummies);\n fragment.appendChild(tr);\n }\n table.tFoot.appendChild(fragment);\n this.aggregates = e;\n };\n FooterRenderer.prototype.refresh = function (e) {\n if (this.parent.getFrozenColumns()) {\n remove(this.getPanel());\n this.renderPanel();\n this.renderTable();\n this.freezeTable.tFoot.innerHTML = '';\n this.renderSummaryContent(e, this.freezeTable, 0, this.parent.getFrozenColumns());\n }\n this.getTable().tFoot.innerHTML = '';\n this.renderSummaryContent(e, this.getTable(), this.parent.getFrozenColumns());\n // check freeze content have no row case\n if (this.parent.getFrozenColumns()) {\n var frozenDiv = this.frozenContent;\n if (!frozenDiv.offsetHeight) {\n frozenDiv.style.height = this.getTable().offsetHeight + 'px';\n }\n }\n this.onScroll();\n };\n FooterRenderer.prototype.refreshCol = function () {\n // frozen table \n var mheaderCol;\n var fheaderCol = mheaderCol = this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n if (this.parent.getFrozenColumns()) {\n mheaderCol = renderMovable(fheaderCol, this.parent.getFrozenColumns());\n this.freezeTable.replaceChild(fheaderCol, this.freezeTable.querySelector('colGroup'));\n }\n this.getTable().replaceChild(mheaderCol, this.getColGroup());\n this.setColGroup(mheaderCol);\n };\n FooterRenderer.prototype.onWidthChange = function (args) {\n this.getColFromIndex(args.index).style.width = formatUnit(args.width);\n if (this.parent.allowResizing && args.module === 'resize') {\n this.updateFooterTableWidth(this.getTable());\n }\n };\n FooterRenderer.prototype.onScroll = function (e) {\n if (e === void 0) { e = { left: this.parent.getContent().firstChild.scrollLeft }; }\n this.getTable().parentElement.scrollLeft = e.left;\n };\n FooterRenderer.prototype.getColFromIndex = function (index) {\n var fCol = this.parent.getFrozenColumns();\n if (fCol && fCol > index) {\n return this.freezeTable.querySelector('colGroup').children[index];\n }\n return this.getColGroup().children[index - fCol];\n };\n FooterRenderer.prototype.columnVisibilityChanged = function () {\n this.refresh();\n };\n FooterRenderer.prototype.addEventListener = function () {\n this.parent.on(colGroupRefresh, this.refreshCol, this);\n this.parent.on(columnWidthChanged, this.onWidthChange, this);\n this.parent.on(scroll, this.onScroll, this);\n this.parent.on(columnVisibilityChanged, this.columnVisibilityChanged, this);\n this.parent.on(refreshFooterRenderer, this.refreshFooterRenderer, this);\n };\n FooterRenderer.prototype.removeEventListener = function () {\n this.parent.off(colGroupRefresh, this.refreshCol);\n this.parent.off(columnWidthChanged, this.onWidthChange);\n this.parent.off(scroll, this.onScroll);\n this.parent.off(columnVisibilityChanged, this.columnVisibilityChanged);\n this.parent.off(refreshFooterRenderer, this.refreshFooterRenderer);\n };\n FooterRenderer.prototype.updateFooterTableWidth = function (tFoot) {\n var tHead = this.parent.getHeaderTable();\n if (tHead && tFoot) {\n tFoot.style.width = tHead.style.width;\n }\n };\n FooterRenderer.prototype.refreshFooterRenderer = function (editedData) {\n var aggregates = this.onAggregates(editedData);\n this.refresh(aggregates);\n };\n FooterRenderer.prototype.onAggregates = function (editedData) {\n var _this = this;\n editedData = editedData instanceof Array ? editedData : [];\n var field = this.parent.getPrimaryKeyFieldNames()[0];\n var deletedCols = [];\n var mergeds;\n var rows = this.parent.frozenColumns > 0 ? this.parent.getMovableRowsObject() : this.parent.getRowsObject();\n var initds = this.parent.dataSource instanceof Array ? this.parent.dataSource : this.parent.getCurrentViewRecords();\n var addrow = [];\n var changeds = rows.map(function (row) {\n if (row.changes && row.edit === 'add') {\n addrow.push(row.changes);\n }\n if (row.edit === 'delete') {\n deletedCols.push(row.data);\n }\n return row.isDirty && row.changes ? row.changes : row.data;\n });\n changeds = editedData.length === 0 ? changeds : editedData;\n mergeds = initds.map(function (item) {\n var idVal = DataUtil.getObject(field, item);\n var value;\n var hasVal = changeds.some(function (cItem) {\n value = cItem;\n return idVal === DataUtil.getObject(field, cItem);\n });\n return hasVal ? value : item;\n });\n var currentData = this.parent.groupSettings.columns.length > 0 && 'records' in this.parent.currentViewData ?\n this.parent.getCurrentViewRecords() : this.parent.currentViewData;\n var currentds;\n currentds = currentData.map(function (item) {\n var idVal = DataUtil.getObject(field, item);\n var value;\n var hasVal = mergeds.some(function (cItem) {\n value = cItem;\n return idVal === DataUtil.getObject(field, cItem);\n });\n return hasVal ? value : item;\n });\n if (addrow.length > 0) {\n addrow.forEach(function (row) { mergeds.push(row); currentds.push(row); });\n }\n var eData = editedData;\n if (!(eData.type && eData.type === 'cancel') && deletedCols.length > 0) {\n deletedCols.forEach(function (row) {\n var index = mergeds.indexOf(row);\n var curIndx = currentData.indexOf(row);\n mergeds.splice(index, 1);\n if (currentds && currentds.length) {\n currentds.splice(curIndx, 1);\n }\n });\n }\n var aggregate = {};\n var agrVal;\n var aggregateRows = this.parent.aggregates;\n aggregateRows.forEach(function (row) {\n row.columns.forEach(function (col) {\n var data = [];\n var type = col.type.toString();\n data = type.toLowerCase() === 'custom' && !isNullOrUndefined(currentds) ? currentds : mergeds;\n agrVal = calculateAggregate(type, data, col, _this.parent);\n aggregate[col.field + ' - ' + type.toLowerCase()] = agrVal;\n });\n });\n var result = {\n result: this.parent.groupSettings.columns.length > 0 ? mergeds : currentds,\n count: mergeds.length,\n aggregates: aggregate\n };\n return result;\n };\n return FooterRenderer;\n}(ContentRender));\nexport { FooterRenderer };\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 { appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { refreshAggregateCell } from '../base/constant';\n/**\n * SummaryCellRenderer class which responsible for building summary cell content.\n * @hidden\n */\nvar SummaryCellRenderer = /** @class */ (function (_super) {\n __extends(SummaryCellRenderer, _super);\n function SummaryCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = _this.parent\n .createElement('TD', { className: 'e-summarycell', attrs: { role: 'gridcell', tabindex: '-1' } });\n return _this;\n }\n SummaryCellRenderer.prototype.getValue = function (field, data, column) {\n var key;\n key = !isNullOrUndefined(column.type) ?\n column.field + ' - ' + (typeof column.type === 'string' ? column.type.toLowerCase() : '') : column.columnName;\n return data[column.columnName] ? data[column.columnName][key] : '';\n };\n SummaryCellRenderer.prototype.evaluate = function (node, cell, data, attributes) {\n var column = cell.column;\n this.parent.on(refreshAggregateCell, this.refreshWithAggregate(node, cell), this);\n if (!(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)) {\n return true;\n }\n var tempObj = column.getTemplate(cell.cellType);\n appendChildren(node, tempObj.fn(data[column.columnName], this.parent, tempObj.property));\n return false;\n };\n SummaryCellRenderer.prototype.refreshWithAggregate = function (node, cell) {\n var _this = this;\n var cellNode = cell;\n return function (args) {\n var cell = cellNode;\n var field = cell.column.columnName ? cell.column.columnName : null;\n var curCell = (!isNullOrUndefined(field) ? args.cells.filter(function (cell) {\n return cell.column.columnName === field;\n })[0] : null);\n if (node.parentElement && node.parentElement.getAttribute('data-uid') === args.dataUid && field &&\n field === curCell.column.columnName) {\n _this.refreshTD(node, curCell, args.data);\n }\n };\n };\n return SummaryCellRenderer;\n}(CellRenderer));\nexport { SummaryCellRenderer };\n","import { EventHandler } from '@syncfusion/ej2-base';\nimport { debounce } from '@syncfusion/ej2-base';\n/**\n * InterSectionObserver - class watch whether it enters the viewport.\n * @hidden\n */\nvar InterSectionObserver = /** @class */ (function () {\n function InterSectionObserver(element, options) {\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 info.entered = top >= 0;\n return top + (_this.options.pageHeight / 2) >= 0;\n },\n axis: 'Y'\n },\n 'down': {\n check: function (rect, info) {\n var cHeight = _this.options.container.clientHeight;\n var top = rect.bottom;\n info.entered = rect.bottom <= _this.containerRect.bottom;\n return 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 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 return left + _this.containerRect.width >= _this.containerRect.left;\n }, axis: 'X'\n }\n };\n this.element = element;\n this.options = options;\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 };\n InterSectionObserver.prototype.check = function (direction) {\n var info = this.sentinelInfo[direction];\n return info.check(this.element.getBoundingClientRect(), info);\n };\n InterSectionObserver.prototype.virtualScrollHandler = function (callback, onEnterCallback) {\n var _this = this;\n var prevTop = 0;\n var prevLeft = 0;\n var debounced100 = debounce(callback, 100);\n var debounced50 = debounce(callback, 50);\n return function (e) {\n var top = e.target.scrollTop;\n var left = e.target.scrollLeft;\n var direction = prevTop < top ? 'down' : 'up';\n direction = prevLeft === left ? direction : prevLeft < left ? 'right' : 'left';\n prevTop = top;\n prevLeft = left;\n var current = _this.sentinelInfo[direction];\n if (_this.options.axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered) {\n onEnterCallback(_this.element, current, direction, { top: top, left: left }, _this.fromWheel, check);\n }\n if (check) {\n var fn = debounced100; //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 } from '@syncfusion/ej2-base';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\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.data = {};\n this.groups = {};\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, notifyArgs) {\n var _this = this;\n var info = notifyArgs.virtualInfo = notifyArgs.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 center = ~~(this.model.pageSize / 2);\n var indexes = this.getBlockIndexes(page);\n var loadedBlocks = [];\n this.checkAndResetCache(notifyArgs.requestType);\n if (this.parent.enableColumnVirtualization) {\n info.blockIndexes.forEach(function (value) {\n if (_this.isBlockAvailable(value)) {\n _this.cache[value] = _this.rowModelGenerator.refreshRows(_this.cache[value]);\n }\n });\n }\n info.blockIndexes.forEach(function (value) {\n if (!_this.isBlockAvailable(value)) {\n var rows = _this.rowModelGenerator.generateRows(data, {\n virtualInfo: info, startIndex: _this.getStartIndex(value, data)\n });\n var 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 if (_this.parent.groupSettings.columns.length && !xAxis && _this.cache[value]) {\n _this.cache[value] = _this.updateGroupRow(_this.cache[value], value);\n }\n result.push.apply(result, _this.cache[value]);\n if (_this.isBlockAvailable(value)) {\n loadedBlocks.push(value);\n }\n });\n info.blockIndexes = loadedBlocks;\n var grouping = 'records';\n if (this.parent.allowGrouping) {\n this.parent.currentViewData[grouping] = result.map(function (m) { return m.data; });\n }\n else {\n this.parent.currentViewData = result.map(function (m) { return m.data; });\n }\n return result;\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.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().firstChild; }\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, indx, input) {\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 return indexes;\n };\n VirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder']\n .some(function (value) { return action === value; });\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\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 this.parent.groupSettings.columns.forEach(function (c, n) { return _this.cOffsets[n] = (_this.cOffsets[n - 1] | 0) + 30; });\n Array.apply(null, Array(cLen)).map(function () { return col++; }).forEach(function (block, i) {\n block = block + gLen;\n _this.cOffsets[block] = (_this.cOffsets[block - 1] | 0) + (isVisible(cols[i]) ? parseInt(cols[i].width, 10) : 0);\n });\n };\n VirtualRowModelGenerator.prototype.updateGroupRow = function (current, block) {\n var _this = this;\n var currentFirst = current[0];\n var rows = [];\n Object.keys(this.cache).forEach(function (key) {\n if (Number(key) < block) {\n rows = rows.concat(_this.cache[key]);\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 && 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 _this = this;\n var rows = [];\n Object.keys(this.cache).forEach(function (key) { return rows = rows.concat(_this.cache[key]); });\n return rows;\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 } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { dataReady, modelChanged, refreshVirtualBlock, contentReady } 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';\n/**\n * VirtualContentRenderer\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 _this.currentInfo = {};\n _this.preventEvent = false;\n _this.actions = ['filtering', 'searching', 'grouping', 'ungrouping'];\n _this.offsets = {};\n _this.tmpOffsets = {};\n _this.virtualEle = new VirtualElementHandler();\n _this.offsetKeys = [];\n _this.isFocused = false;\n _this.locator = locator;\n _this.eventListener('on');\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().firstChild;\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 this.virtualEle.adjustTable(0, 0);\n };\n VirtualContentRenderer.prototype.scrollListener = function (scrollArgs) {\n if (this.preventEvent || this.parent.isDestroyed) {\n this.preventEvent = false;\n return;\n }\n this.isFocused = this.content === closest(document.activeElement, '.e-content') || this.content === document.activeElement;\n var info = scrollArgs.sentinel;\n var viewInfo = this.currentInfo = this.getInfoFromView(scrollArgs.direction, info, scrollArgs.offset);\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 if (Browser.isIE) {\n this.parent.hideSpinner();\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.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n };\n VirtualContentRenderer.prototype.block = function (blk) {\n return this.vgenerator.isBlockAvailable(blk);\n };\n VirtualContentRenderer.prototype.getInfoFromView = function (direction, info, e) {\n var tempBlocks = [];\n var infoType = { direction: direction, sentinelInfo: info, offsets: e };\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 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 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.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 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 === _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 VirtualContentRenderer.prototype.appendContent = function (target, newChild, e) {\n // currentInfo value will be used if there are multiple dom updates happened due to mousewheel\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 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 var vHeight = this.parent.height.toString().indexOf('%') < 0 ? this.content.getBoundingClientRect().height :\n this.parent.element.getBoundingClientRect().height;\n var translate = this.getTranslateY(this.content.scrollTop, vHeight, info);\n this.virtualEle.adjustTable(cOffset, translate);\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\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 this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, Browser.isIE || Browser.info.name === 'edge');\n remove(target);\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n this.getTable().appendChild(target);\n if (this.parent.groupSettings.columns.length) {\n if (info.direction === 'up') {\n var blk = this.offsets[this.getTotalBlocks()] - this.prevHeight;\n this.preventEvent = true;\n var sTop = this.content.scrollTop;\n this.content.scrollTop = sTop + blk;\n }\n this.setVirtualHeight();\n this.observer.setPageHeight(this.getOffset(blocks[blocks.length - 1]) - this.getOffset(blocks[0] - 1));\n }\n this.prevInfo = info;\n if (this.isFocused) {\n this.content.focus();\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 VirtualContentRenderer.prototype.setVirtualHeight = function () {\n var width = this.parent.enableColumnVirtualization ?\n this.getColumnOffset(this.parent.columns.length + this.parent.groupSettings.columns.length - 1) + 'px' : '100%';\n this.virtualEle.setVirtualHeight(this.offsets[this.getTotalBlocks()], width);\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.setVirtualHeight(1, width);\n }\n };\n VirtualContentRenderer.prototype.getPageFromTop = function (sTop, info) {\n var _this = this;\n var total = this.getTotalBlocks();\n var page = 0;\n var extra = this.offsets[total] - this.prevHeight;\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 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 if (result + blockHeight > this.offsets[this.getTotalBlocks()]) {\n result -= (result + blockHeight) - this.offsets[this.getTotalBlocks()];\n }\n return result;\n };\n VirtualContentRenderer.prototype.getOffset = function (block) {\n return Math.min(this.offsets[block] | 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) {\n _this.parent.showSpinner();\n }\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 var y = _this.getTranslateY(e.top, height, xAxis && top === e.top ? _this.prevInfo : undefined, true);\n _this.virtualEle.adjustTable(x, Math.min(y, _this.offsets[_this.maxBlock]));\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n };\n };\n VirtualContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n this.parent[action](dataReady, this.onDataReady, this);\n this.parent[action](refreshVirtualBlock, this.refreshContentRows, this);\n this.actions.forEach(function (event) { return _this.parent[action](event + \"-begin\", _this.onActionBegin, _this); });\n var fn = function () {\n _this.observer.observe(function (scrollArgs) { return _this.scrollListener(scrollArgs); }, _this.onEntered());\n _this.parent.off(contentReady, fn);\n };\n this.parent.on(contentReady, fn, this);\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 = this.getTotalBlocks();\n return index >= totalBlocks || index === totalBlocks - 1;\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[block] | 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 };\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 prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n return this.parent.getDataRows()[index - startIdx];\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 VirtualContentRenderer.prototype.refreshOffsets = function () {\n var _this = this;\n var row = 0;\n var bSize = this.getBlockSize();\n var total = this.getTotalBlocks();\n this.prevHeight = this.offsets[total];\n this.maxBlock = total % 2 === 0 ? total - 2 : total - 1;\n this.offsets = {};\n //Row offset update\n Array.apply(null, Array(total)).map(function () { return ++row; })\n .forEach(function (block) {\n var tmp = (_this.vgenerator.cache[block] || []).length;\n var rem = _this.count % bSize;\n var size = block in _this.vgenerator.cache ?\n tmp * _this.parent.getRowHeight() : rem && block === total ? rem * _this.parent.getRowHeight() : _this.getBlockHeight();\n // let size: number = this.parent.groupSettings.columns.length && block in this.vgenerator.cache ?\n // tmp * getRowHeight() : this.getBlockHeight();\n _this.offsets[block] = (_this.offsets[block - 1] | 0) + size;\n _this.tmpOffsets[block] = _this.offsets[block - 1] | 0;\n });\n this.offsetKeys = Object.keys(this.offsets);\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 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.gen = new VirtualRowModelGenerator(_this.parent);\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().firstChild));\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.getPanel().firstChild;\n this.virtualEle.content.style.position = 'relative';\n this.virtualEle.renderWrapper();\n this.virtualEle.renderPlaceHolder('absolute');\n };\n VirtualHeaderRenderer.prototype.appendContent = function (table) {\n this.virtualEle.wrapper.appendChild(table);\n };\n VirtualHeaderRenderer.prototype.refreshUI = function () {\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().firstChild));\n _super.prototype.refreshUI.call(this);\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.adjustTable = function (xValue, yValue) {\n this.wrapper.style.transform = \"translate(\" + xValue + \"px, \" + yValue + \"px)\";\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 = height + \"px\";\n this.placeholder.style.width = width;\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';\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 var renderer = this.locator.getService('rendererFactory');\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 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 };\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 };\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","import { isNullOrUndefined, addClass, extend, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { appendChildren } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar InlineEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function InlineEditRender(parent) {\n this.parent = parent;\n }\n InlineEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n var mTbody;\n var tbody;\n if (this.parent.frozenRows) {\n tbody = this.parent.getHeaderContent().querySelector('tbody');\n }\n else {\n tbody = this.parent.getContentTable().querySelector('tbody');\n }\n args.row = this.parent.createElement('tr', { className: 'e-row e-addedrow' });\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n this.parent.editSettings.newRowPosition === 'Top' ? tbody.insertBefore(args.row, tbody.firstChild) : tbody.appendChild(args.row);\n args.row.appendChild(this.getEditElement(elements, false, undefined, args, true));\n if (this.parent.getFrozenColumns()) {\n var mEle = this.renderMovableform(args.row, args);\n if (this.parent.frozenRows) {\n mTbody = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n this.parent.editSettings.newRowPosition === 'Top' ? mTbody.insertBefore(mEle, mTbody.firstChild) : mTbody.appendChild(mEle);\n args.row.querySelector('.e-normaledit').setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');\n mEle.setAttribute('colspan', '' + (this.parent.getVisibleColumns().length - this.parent.getVisibleFrozenColumns()));\n if (this.parent.height === 'auto') {\n this.parent.notify(events.frozenHeight, {});\n }\n }\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('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('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 return td;\n };\n InlineEditRender.prototype.getFreezeRow = function (row) {\n if (this.parent.getFrozenColumns()) {\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n var fCont = this.parent.getContent().querySelector('.e-frozencontent').querySelector('tbody');\n var mCont = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n var fHdr = this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n if (this.parent.frozenRows && idx >= this.parent.frozenRows) {\n idx -= this.parent.frozenRows;\n }\n if (fCont.contains(row)) {\n return mCont.children[idx];\n }\n else if (mCont.contains(row)) {\n return fCont.children[idx];\n }\n else if (fHdr.contains(row)) {\n return mHdr.children[idx];\n }\n else if (mHdr.contains(row)) {\n return fHdr.children[idx];\n }\n }\n return row;\n };\n InlineEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n if (closest(args.row, '.e-movablecontent')) {\n args.row = this.getFreezeRow(args.row);\n }\n var tdElement = [].slice.call(args.row.querySelectorAll('td.e-rowcell'));\n args.row.innerHTML = '';\n tdElement = this.updateFreezeEdit(args.row, tdElement);\n args.row.appendChild(this.getEditElement(elements, true, tdElement, args, true));\n args.row.classList.add('e-editedrow');\n this.refreshFreezeEdit(args.row, args);\n };\n InlineEditRender.prototype.refreshFreezeEdit = function (row, args) {\n var td = row.firstChild;\n var fCls;\n var cont;\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n if (this.parent.getFrozenColumns()) {\n if (idx < this.parent.frozenRows) {\n cont = this.parent.getHeaderContent();\n fCls = '.e-frozenheader';\n }\n else {\n cont = this.parent.getContent();\n fCls = '.e-frozencontent';\n }\n var mTd = td.cloneNode(true);\n var form = args.movableForm = mTd.querySelector('form');\n if (this.parent.editSettings.template) {\n form.innerHTML = '';\n this.appendChildren(form, args.rowData, false);\n }\n var fRows = void 0;\n if (cont.querySelector(fCls).contains(row)) {\n fRows = this.parent.getMovableRowByIndex(idx);\n this.updateFrozenCont(fRows, td, mTd);\n }\n else {\n fRows = this.parent.getRowByIndex(idx);\n this.updateFrozenCont(fRows, mTd, td);\n }\n fRows.appendChild(mTd);\n fRows.classList.add('e-editedrow');\n }\n };\n InlineEditRender.prototype.updateFrozenCont = function (row, ele, mEle) {\n row.innerHTML = '';\n if (!this.parent.editSettings.template) {\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n }\n ele.setAttribute('colspan', this.parent.getVisibleFrozenColumns() + '');\n mEle.setAttribute('colspan', this.parent.getVisibleColumns().length - this.parent.getVisibleFrozenColumns() + '');\n };\n InlineEditRender.prototype.renderMovable = function (ele, mEle) {\n var frzCols = this.parent.getFrozenColumns();\n for (var i = 0; i < frzCols; i++) {\n mEle.querySelector('tr').removeChild(mEle.querySelector('tr').children[0]);\n }\n for (var i = frzCols, len = ele.querySelector('tr').childElementCount; i < len; i++) {\n ele.querySelector('tr').removeChild(ele.querySelector('tr').children[ele.querySelector('tr').childElementCount - 1]);\n }\n };\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: { colspan: (gObj.getVisibleColumns().length - gObj.getVisibleFrozenColumns() + gLen + isDetail).toString() }\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' } });\n table.appendChild(gObj.getContentTable().querySelector('colgroup').cloneNode(true));\n var tbody = this.parent.createElement('tbody');\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 while (i < gLen) {\n tr.appendChild(this.parent.createElement('td', { className: 'e-indentcell' }));\n i++;\n }\n var m = 0;\n i = 0;\n while ((isEdit && m < tdElement.length && i < gObj.getColumns().length) || i < gObj.getColumns().length) {\n var span = isEdit ? tdElement[m].getAttribute('colspan') : null;\n var col = gObj.getColumns()[i];\n var td_1 = this.parent.createElement('td', {\n className: 'e-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 (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 dummyData = extend({}, data, { isAdd: !this.isEdit, isFrozen: isFrozen }, true);\n appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate'));\n };\n return InlineEditRender;\n}());\nexport { InlineEditRender };\n","import { classList } from '@syncfusion/ej2-base';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar BatchEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function BatchEditRender(parent) {\n this.parent = parent;\n }\n BatchEditRender.prototype.update = function (elements, args) {\n args.cell.innerHTML = '';\n args.cell.appendChild(this.getEditElement(elements, args));\n args.cell.classList.add('e-editedbatchcell');\n classList(args.row, ['e-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 } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { appendChildren } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar DialogEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\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.createDialog = function (elements, args) {\n var gObj = this.parent;\n this.dialog = this.parent.createElement('div', { id: gObj.element.id + '_dialogEdit_wrapper', styles: 'width: auto' });\n gObj.element.appendChild(this.dialog);\n this.setLocaleObj();\n // let position: PositionDataModel = this.parent.element.getBoundingClientRect().height < 400 ?\n // { X: 'center', Y: 'top' } : { X: 'center', Y: 'center' };\n this.dialogObj = args.dialog = new Dialog({\n header: this.isEdit ? this.l10n.getConstant('EditFormTitle') + args.primaryKeyValue[0] :\n this.l10n.getConstant('AddFormTitle'), isModal: true, visible: true, 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 closeOnEscape: true, width: gObj.editSettings.template ? 'auto' : '330px',\n target: args.target ? args.target : document.body, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: { content: this.l10n.getConstant('SaveButton'), cssClass: 'e-primary', isPrimary: true }\n },\n { click: this.btnClick.bind(this), buttonModel: { cssClass: 'e-flat', content: this.l10n.getConstant('CancelButton') } }]\n });\n this.dialogObj.appendTo(this.dialog);\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 this.destroy();\n };\n DialogEditRender.prototype.destroy = function (args) {\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.getEditElement = function (elements, args) {\n var gObj = this.parent;\n var div = this.parent.createElement('div', { className: this.isEdit ? 'e-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 dummyData = extend({}, args.rowData, { isAdd: !this.isEdit }, true);\n appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate'));\n div.appendChild(form);\n return div;\n }\n var table = this.parent.createElement('table', { className: 'e-table', attrs: { cellspacing: '6px' } });\n var tbody = this.parent.createElement('tbody');\n var cols = gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (this.parent.editModule.checkColumnIsGrouped(cols[i]) || cols[i].commands || cols[i].commandsTemplate) {\n continue;\n }\n var tr = this.parent.createElement('tr');\n var dataCell = this.parent.createElement('td', {\n className: 'e-rowcell', attrs: {\n style: 'text-align:' + (this.parent.enableRtl ? 'right' : 'left') + ';width:190px'\n }\n });\n var label = this.parent.createElement('label', { innerHTML: cols[i].field });\n elements[cols[i].uid].classList.remove('e-input');\n dataCell.appendChild(elements[cols[i].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 } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { getComplexFieldID, getObject, appendChildren } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar EditRender = /** @class */ (function () {\n /**\n * Constructor for render module\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 this.convertWidget(args);\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 frzCols = gObj.getFrozenColumns();\n var form = gObj.editSettings.mode === 'Dialog' ?\n document.querySelector('#' + gObj.element.id + '_dialogEdit_wrapper').querySelector('.e-gridform') :\n gObj.element.querySelector('.e-gridform');\n if (frzCols && gObj.editSettings.mode === 'Normal') {\n var rowIndex = parseInt(args.row.getAttribute('aria-rowindex'), 10);\n if (gObj.frozenRows && (args.requestType === 'add' || rowIndex < gObj.frozenRows)) {\n fForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');\n }\n else {\n fForm = gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform');\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 (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 value = (col.valueAccessor(col.field, args.rowData, col));\n if (frzCols && cols.indexOf(col) >= frzCols && gObj.editSettings.mode === 'Normal') {\n cell = fForm.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')) {\n this.focusElement(cell, args.type);\n isFocused = true;\n }\n }\n }\n };\n EditRender.prototype.focusElement = function (elem, type) {\n var chkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(chkBox)) {\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 elem.focus();\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 (this.parent.editSettings.template) {\n return {};\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n var col = cols[i];\n if (this.parent.editModule.checkColumnIsGrouped(col)) {\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.commands; })[0];\n var td = cellRenderer.render(cell, args.rowData, { 'index': args.row ? args.row.getAttribute('aria-rowindex') : 0 });\n var div = td.firstElementChild;\n div.setAttribute('textAlign', td.getAttribute('textAlign'));\n elements[col.uid] = div;\n continue;\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 appendChildren(input, col.getEditTemplate()(args.rowData, this.parent, 'editTemplate'));\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', 'true');\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 { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { extend } from '@syncfusion/ej2-base';\nimport { isEditable, addRemoveActiveClasses, getComplexFieldID, getObject } from '../base/util';\n/**\n * `BooleanEditCell` is used to handle boolean cell type editing.\n * @hidden\n */\nvar BooleanEditCell = /** @class */ (function () {\n function BooleanEditCell(parent) {\n this.activeClasses = ['e-selectionbackground', 'e-active'];\n this.parent = parent;\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 var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: classNames, attrs: {\n type: 'checkbox', value: args.value, 'e-mappinguid': col.uid,\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName\n }\n });\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 var isAddRow = args.requestType === 'add' || args.row.classList.contains('e-addedrow');\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)) {\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.querySelectorAll('.e-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 change: this.checkBoxChange.bind(this)\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\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.querySelectorAll('.e-rowcell')), add].concat(this.activeClasses));\n }\n };\n BooleanEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return BooleanEditCell;\n}());\nexport { BooleanEditCell };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { isEditable, getComplexFieldID, getObject } from '../base/util';\nimport { parentsUntil } from '../base/util';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n * @hidden\n */\nvar DropDownEditCell = /** @class */ (function () {\n function DropDownEditCell(parent) {\n //constructor\n this.parent = parent;\n }\n DropDownEditCell.prototype.create = function (args) {\n //create\n var complexFieldName = getComplexFieldID(args.column.field);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName, type: 'text', 'e-mappinguid': args.column.uid,\n }\n });\n };\n DropDownEditCell.prototype.write = function (args) {\n this.column = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\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().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, actionComplete: this.ddActionComplete.bind(this),\n placeholder: isInline ? '' : args.column.headerText, popupHeight: '200px',\n floatLabelType: isInline ? 'Never' : 'Always', open: this.dropDownOpen.bind(this),\n sortOrder: 'Ascending'\n }, args.column.edit.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.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DropDownEditCell.prototype.ddActionComplete = function (e) {\n e.result = DataUtil.distinct(e.result, this.obj.fields.value, true);\n if (this.column.dataSource) {\n this.column.dataSource.dataSource.json = e.result;\n }\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 = document.querySelector('#' + dlgElement.id).ej2_instances[0];\n args.popup.element.style.zIndex = (dlgObj.zIndex + 1).toString();\n }\n };\n DropDownEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return DropDownEditCell;\n}());\nexport { DropDownEditCell };\n","import { extend, Internationalization } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { isEditable, getComplexFieldID, getObject } from '../base/util';\n/**\n * `NumericEditCell` is used to handle numeric cell type editing.\n * @hidden\n */\nvar NumericEditCell = /** @class */ (function () {\n function NumericEditCell(parent) {\n this.parent = parent;\n }\n NumericEditCell.prototype.create = function (args) {\n var complexFieldName = getComplexFieldID(args.column.field);\n this.instances = new Internationalization(this.parent.locale);\n return this.parent.createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + complexFieldName,\n name: complexFieldName, 'e-mappinguid': args.column.uid\n }\n });\n };\n NumericEditCell.prototype.read = function (element) {\n var value = this.instances.getNumberParser({ format: 'n' })(element.value);\n return 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 }, col.edit.params));\n this.obj.appendTo(args.element);\n args.element.setAttribute('name', getComplexFieldID(args.column.field));\n };\n NumericEditCell.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n this.obj.destroy();\n }\n };\n return NumericEditCell;\n}());\nexport { NumericEditCell };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { isEditable, getComplexFieldID } from '../base/util';\n/**\n * `DefaultEditCell` is used to handle default cell type editing.\n * @hidden\n */\nvar DefaultEditCell = /** @class */ (function () {\n function DefaultEditCell(parent) {\n this.parent = parent;\n }\n DefaultEditCell.prototype.create = function (args) {\n var col = args.column;\n var input = this.parent.createElement('input', {\n className: 'e-field e-input e-defaultcell', attrs: {\n type: 'text', value: !isNullOrUndefined(args.value) ? args.value : '', 'e-mappinguid': col.uid,\n id: this.parent.element.id + getComplexFieldID(col.field), name: getComplexFieldID(col.field),\n style: 'text-align:' + col.textAlign,\n }\n });\n return input;\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 var inputargs = {\n element: args.element, floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n properties: {\n enableRtl: this.parent.enableRtl, enabled: isEditable(args.column, args.requestType, args.element),\n placeholder: isInline ? '' : args.column.headerText\n }\n };\n Input.createInput(inputargs, this.parent.createElement);\n };\n return DefaultEditCell;\n}());\nexport { DefaultEditCell };\n","import { extend } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { parentsUntil, refreshForeignData, getObject } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * `NormalEdit` module is used to handle normal('inline, dialog, external') editing actions.\n * @hidden\n */\nvar NormalEdit = /** @class */ (function () {\n function NormalEdit(parent, serviceLocator, renderer) {\n this.args = {};\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, 'e-gridcontent') &&\n parentsUntil(parentsUntil(target, 'e-gridcontent'), 'e-grid').id === gObj.element.id)) || (gObj.frozenRows\n && parentsUntil(target, 'e-headercontent'))) && !parentsUntil(target, 'e-unboundcelldiv')) {\n this.rowIndex = parentsUntil(target, 'e-rowcell') ? parseInt(target.parentElement.getAttribute('aria-rowindex'), 10) : -1;\n if (gObj.isEdit) {\n gObj.editModule.endEdit();\n }\n }\n };\n NormalEdit.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') && this.parent.editSettings.allowEditOnDblClick) {\n this.parent.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n /**\n * The function used to trigger editComplete\n * @return {void}\n * @hidden\n */\n NormalEdit.prototype.editComplete = function (e) {\n this.parent.isEdit = false;\n switch (e.requestType) {\n case 'save':\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n this.parent.selectRow(0);\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 this.parent.selectRow(this.editRowIndex);\n break;\n }\n };\n NormalEdit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n var primaryKeys = gObj.getPrimaryKeyFieldNames();\n var primaryKeyValues = [];\n this.rowIndex = this.editRowIndex = parseInt(tr.getAttribute('aria-rowindex'), 10);\n this.previousData = gObj.getCurrentViewRecords()[this.rowIndex];\n for (var i = 0; i < primaryKeys.length; i++) {\n primaryKeyValues.push(this.previousData[primaryKeys[i]]);\n }\n this.uid = tr.getAttribute('data-uid');\n var rowObj = gObj.getRowObjectFromUID(this.uid);\n var args = {\n row: tr, primaryKey: primaryKeys, primaryKeyValue: primaryKeyValues, requestType: 'beginEdit',\n rowData: this.previousData, rowIndex: this.rowIndex, type: 'edit', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData, target: undefined\n };\n gObj.trigger(events.beginEdit, args);\n args.type = 'actionBegin';\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.clearSelection();\n }\n if (gObj.editSettings.mode === 'Dialog' && gObj.selectionModule) {\n gObj.selectionModule.preventFocus = true;\n args.row.classList.add('e-dlgeditrow');\n }\n this.renderer.update(args);\n this.uid = tr.getAttribute('data-uid');\n gObj.editModule.applyFormValidation();\n args.type = 'actionComplete';\n gObj.trigger(events.actionComplete, args);\n this.args = args;\n if (this.parent.allowTextWrap) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n };\n NormalEdit.prototype.updateRow = function (index, data) {\n var gObj = this.parent;\n var args = {\n requestType: 'save', type: events.actionBegin, data: data, cancel: false,\n previousData: gObj.getCurrentViewRecords()[index]\n };\n gObj.showSpinner();\n gObj.notify(events.updateData, args);\n gObj.refresh();\n };\n NormalEdit.prototype.editFormValidate = function () {\n var gObj = this.parent;\n var form1 = gObj.editModule.formObj.validate();\n var form2 = gObj.editModule.mFormObj ? gObj.editModule.mFormObj.validate() : true;\n return (form1 && form2);\n };\n NormalEdit.prototype.endEdit = function () {\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 isDlg = gObj.editSettings.mode === 'Dialog';\n var dlgWrapper = document.querySelector('#' + gObj.element.id + '_dialogEdit_wrapper');\n var dlgForm = isDlg ? dlgWrapper.querySelector('.e-gridform') : gObj.element.querySelector('.e-gridform');\n editedData = gObj.editModule.getCurrentEditedData(dlgForm, editedData);\n if (gObj.getFrozenColumns() && gObj.editSettings.mode === 'Normal') {\n var mForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');\n if (gObj.frozenRows && mForm) {\n editedData = gObj.editModule.getCurrentEditedData(mForm, editedData);\n }\n else {\n editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform'), editedData);\n }\n }\n if (isDlg ? dlgWrapper.querySelectorAll('.e-editedrow').length : gObj.element.querySelectorAll('.e-editedrow').length) {\n args.action = 'edit';\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.showSpinner();\n gObj.notify(events.updateData, args);\n }\n else {\n args.action = 'add';\n args.selectedRow = 0;\n args.index = this.addedRowIndex;\n gObj.notify(events.modelChanged, args);\n this.addedRowIndex = null;\n if (args.cancel) {\n return;\n }\n }\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 this.parent.getCurrentViewRecords()[this.editRowIndex] = data;\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.element.querySelector('.e-dlgeditrow').classList.remove('e-dlgeditrow');\n }\n }\n };\n NormalEdit.prototype.editSuccess = function (e, args) {\n if (!isNullOrUndefined(e)) {\n 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.updateCurrentViewData(args.data);\n this.parent.trigger(events.actionComplete, args);\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n if (this.parent.editSettings.mode !== 'Dialog') {\n this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);\n }\n }\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.editFailure = function (e) {\n this.parent.trigger(events.actionFailure, e);\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.refreshRow = function (data) {\n var frzCols = this.parent.getFrozenColumns();\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 refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n row.refresh(rowObj, this.parent.getColumns(), true);\n if (frzCols) {\n var uid = void 0;\n var tr = this.parent.element.querySelector('[data-uid=' + rowObj.uid + ']');\n if ((parentsUntil(tr, 'e-frozencontent')) || (parentsUntil(tr, 'e-frozenheader'))) {\n uid = this.parent.getMovableRows()[rowObj.index].getAttribute('data-uid');\n }\n else {\n uid = this.parent.getRows()[rowObj.index].getAttribute('data-uid');\n }\n rowObj = this.parent.getRowObjectFromUID(uid);\n rowObj.changes = data;\n row.refresh(rowObj, this.parent.columns, true);\n }\n }\n };\n NormalEdit.prototype.closeEdit = function () {\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, data: this.previousData, selectedRow: gObj.selectedRowIndex\n });\n gObj.trigger(events.actionBegin, args);\n if (this.parent.editSettings.mode === 'Dialog') {\n this.parent.notify(events.dialogDestroy, {});\n }\n gObj.isEdit = false;\n this.stopEditStatus();\n args.type = events.actionComplete;\n if (gObj.editSettings.mode !== 'Dialog') {\n this.refreshRow(args.data);\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.selectRow(this.rowIndex);\n }\n gObj.trigger(events.actionComplete, args);\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 gObj.columns.forEach(function (col) {\n if (col.field) {\n DataUtil.setValue(col.field, col.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\n };\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n if (gObj.editSettings.mode !== 'Dialog') {\n gObj.clearSelection();\n }\n this.renderer.addNew(args);\n gObj.editModule.applyFormValidation();\n args.type = events.actionComplete;\n args.row = gObj.element.querySelector('.e-addedrow');\n gObj.trigger(events.actionComplete, args);\n this.args = args;\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 index = 0;\n var dataLen = Object.keys(data).length;\n fieldname = fieldname || this.parent.getPrimaryKeyFieldNames()[0];\n var _loop_1 = function (i) {\n var _a;\n var tmpRecord;\n var contained = gObj.currentViewData.some(function (record) {\n tmpRecord = record;\n return data[i] === getObject(fieldname, record) || data[i] === record;\n });\n data[i] = contained ? tmpRecord : (_a = {}, _a[fieldname] = data[i], _a);\n };\n for (var i = 0; i < dataLen; i++) {\n _loop_1(i);\n }\n }\n this.parent.notify(events.modelChanged, {\n requestType: 'delete', type: events.actionBegin, foreignKeyData: {},\n data: data ? data : this.parent.getSelectedRecords(), tr: this.parent.getSelectedRows(), cancel: false\n });\n };\n NormalEdit.prototype.stopEditStatus = function () {\n var gObj = this.parent;\n var elem = gObj.element.querySelector('.e-addedrow');\n var mElem;\n var editMElem;\n if (gObj.getFrozenColumns()) {\n mElem = gObj.element.querySelectorAll('.e-addedrow')[1];\n editMElem = gObj.element.querySelectorAll('.e-editedrow')[1];\n if (mElem) {\n remove(mElem);\n }\n if (editMElem) {\n editMElem.classList.remove('e-editedrow');\n }\n }\n if (elem) {\n remove(elem);\n }\n elem = gObj.element.querySelector('.e-editedrow');\n if (elem) {\n elem.classList.remove('e-editedrow');\n }\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.crudAction, this.editHandler, this);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.recordAdded, this.requestSuccess, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.deleteComplete, this.editComplete, this);\n this.parent.on(events.saveComplete, this.editComplete, this);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.editHandler);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.recordAdded, this.requestSuccess);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.deleteComplete, this.editComplete);\n this.parent.off(events.saveComplete, this.editComplete);\n };\n /**\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 * @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 } from '@syncfusion/ej2-base';\nimport { remove, classList } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { parentsUntil, inArray, refreshForeignData, getObject } 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';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent, serviceLocator, renderer) {\n this.cellDetails = {};\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = renderer;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n }\n /**\n * @hidden\n */\n BatchEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.beforeCellFocused, this.onBeforeCellFocused, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.dataBoundFunction = this.dataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.keyPressed, this.keyDownHandler, this);\n this.parent.on(events.editNextValCell, this.editNextValCell, this);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.beforeCellFocused, this.onBeforeCellFocused);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.keyPressed, this.keyDownHandler);\n this.parent.off(events.editNextValCell, this.editNextValCell);\n };\n BatchEdit.prototype.dataBound = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\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) {\n this.saveCell();\n this.editNextValCell();\n }\n if (parentsUntil(e.target, 'e-rowcell') && !this.parent.isEdit) {\n this.setCellIdx(e.target);\n }\n }\n };\n BatchEdit.prototype.dblClickHandler = function (e) {\n var target = parentsUntil(e.target, 'e-rowcell');\n var tr = parentsUntil(e.target, 'e-row');\n if (target && tr && !isNaN(parseInt(target.getAttribute('aria-colindex'), 10))\n && !target.parentElement.classList.contains('e-editedrow')) {\n this.editCell(parseInt(tr.getAttribute('aria-rowindex'), 10), this.parent.getColumns()[parseInt(target.getAttribute('aria-colindex'), 10)].field, this.isAddRow(parseInt(tr.getAttribute('aria-rowindex'), 10)));\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.getFrozenColumns();\n var mCont = this.parent.getContent().querySelector('.e-movablecontent');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n var clear = (!e.container.isContent || !e.container.isDataCell) && !(this.parent.frozenRows && e.container.isHeader);\n if (!e.byKey || clear) {\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 (this.parent.frozenRows && e.container.isContent) {\n rowIndex += this.parent.frozenRows;\n }\n var isEdit = this.parent.isEdit;\n if (!this.parent.element.querySelectorAll('.e-popup-open').length) {\n isEdit = isEdit && !this.validateFormObj();\n switch (e.keyArgs.action) {\n case 'tab':\n case 'shiftTab':\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 if (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()[index].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()[cellIdx].field, this.isAddRow(rowIdx));\n };\n BatchEdit.prototype.closeEdit = function () {\n var gObj = this.parent;\n var rows = this.parent.getRowsObject();\n if (gObj.frozenColumns && rows.length < this.parent.currentViewData.length * 2) {\n rows.push.apply(rows, this.parent.getMovableRowsObject());\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this.parent);\n var tr;\n var mTr;\n var movObj;\n if (gObj.isEdit) {\n this.saveCell(true);\n }\n this.isAdded = false;\n gObj.clearSelection();\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].isDirty) {\n if (gObj.frozenColumns) {\n movObj = gObj.getMovableRowsObject()[rows[i].index];\n movObj.isDirty = true;\n }\n tr = gObj.getContentTable().querySelector('[data-uid=' + rows[i].uid + ']');\n if (gObj.frozenRows && !tr) {\n tr = gObj.getHeaderContent().querySelector('[data-uid=' + rows[i].uid + ']');\n }\n if (gObj.frozenColumns) {\n if (gObj.frozenRows) {\n mTr = gObj.getHeaderContent().querySelector('.e-movableheader')\n .querySelector('[data-uid=' + rows[i].uid + ']');\n if (!mTr) {\n mTr = gObj.getContent().querySelector('.e-movablecontent')\n .querySelector('[data-uid=' + rows[i].uid + ']');\n }\n }\n else {\n mTr = gObj.getContent().querySelector('.e-movablecontent')\n .querySelector('[data-uid=' + rows[i].uid + ']');\n }\n }\n if (tr || mTr) {\n if (tr && tr.classList.contains('e-insertedrow') || mTr && mTr.classList.contains('e-insertedrow')) {\n if (tr) {\n remove(tr);\n }\n if (mTr && (gObj.frozenColumns || gObj.frozenRows)) {\n remove(mTr);\n }\n this.removeRowObjectFromUID(rows[i].uid);\n i--;\n }\n else {\n refreshForeignData(rows[i], this.parent.getForeignKeyColumns(), rows[i].data);\n delete rows[i].changes;\n rows[i].isDirty = false;\n var ftr = mTr ? mTr : tr;\n classList(ftr, [], ['e-hiddenrow', 'e-updatedtd']);\n rowRenderer.refresh(rows[i], gObj.getColumns(), false);\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 }\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n var args = {\n requestType: 'batchCancel', rows: this.parent.getRowsObject()\n };\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 gObj.selectRow(this.cellDetails.rowIndex);\n this.refreshRowIdx();\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 if (gObj.frozenColumns) {\n rows.splice(this.parent.getMovableRowsObject().length, rows.length);\n }\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 (data) {\n if (this.parent.isEdit && this.validateFormObj()) {\n return;\n }\n this.batchSave();\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 gObj.clearSelection();\n changes[deletedRecords] = changes[deletedRecords].concat(this.parent.getSelectedRecords());\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);\n if (args.cancel) {\n return;\n }\n gObj.showSpinner();\n gObj.notify(events.bulkSave, { changes: changes, original: original });\n };\n BatchEdit.prototype.getBatchChanges = function () {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n var rows = this.parent.getRowsObject();\n var mRows = this.parent.getMovableRowsObject();\n var frzCols = this.parent.getFrozenColumns();\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (frzCols) {\n this.mergeBatchChanges(row, mRows[row.index], frzCols);\n }\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 BatchEdit.prototype.mergeBatchChanges = function (row, mRow, frzCols) {\n if (row.isDirty) {\n if (mRow.isDirty) {\n var i_1 = 0;\n Object.keys(row.changes).forEach(function (key) {\n if (i_1 >= frzCols) {\n row.changes[key] = mRow.changes[key];\n }\n i_1++;\n });\n }\n }\n else if (mRow.isDirty) {\n row.changes = mRow.changes;\n row.isDirty = mRow.isDirty;\n }\n };\n /**\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[i].uid === uid) {\n break;\n }\n }\n rows.splice(i, 1);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.addRowObject = function (row) {\n this.parent.editSettings.newRowPosition === 'Top' ? this.parent.getRowsObject().unshift(row) :\n this.parent.getRowsObject().push(row);\n };\n BatchEdit.prototype.bulkDelete = function (fieldname, data) {\n var gObj = this.parent;\n var index = data ? this.getIndexFromData(data) : 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 row: data ? gObj.getRows()[index] : selectedRows[0], cancel: false\n };\n if (!args.row) {\n return;\n }\n gObj.trigger(events.beforeBatchDelete, args);\n if (args.cancel) {\n return;\n }\n if (this.parent.frozenColumns || selectedRows.length === 1) {\n var uid = args.row.getAttribute('data-uid');\n if (args.row.classList.contains('e-insertedrow')) {\n this.removeRowObjectFromUID(uid);\n remove(args.row);\n }\n else {\n var rowObj = gObj.getRowObjectFromUID(uid);\n rowObj.isDirty = true;\n rowObj.edit = 'delete';\n classList(args.row, ['e-hiddenrow', 'e-updatedtd'], []);\n if (gObj.getFrozenColumns()) {\n classList(data ? gObj.getMovableRows()[index] : selectedRows[1], ['e-hiddenrow', 'e-updatedtd'], []);\n if (gObj.frozenRows && index < gObj.frozenRows && gObj.getMovableDataRows().length >= gObj.frozenRows) {\n gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody')\n .appendChild(gObj.getMovableRowByIndex(gObj.frozenRows - 1));\n gObj.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody')\n .appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n else if (gObj.frozenRows && index < gObj.frozenRows && gObj.getDataRows().length >= gObj.frozenRows) {\n gObj.getHeaderContent().querySelector('tbody').appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n delete args.row;\n }\n else {\n for (var i = 0; i < selectedRows.length; i++) {\n var uniqueid = selectedRows[i].getAttribute('data-uid');\n if (selectedRows[i].classList.contains('e-insertedrow')) {\n this.removeRowObjectFromUID(uniqueid);\n remove(selectedRows[i]);\n }\n else {\n classList(selectedRows[i], ['e-hiddenrow', 'e-updatedtd'], []);\n var selectedRow = gObj.getRowObjectFromUID(uniqueid);\n selectedRow.isDirty = true;\n selectedRow.edit = 'delete';\n delete selectedRows[i];\n }\n }\n }\n this.refreshRowIdx();\n gObj.clearSelection();\n gObj.selectRow(index);\n gObj.trigger(events.batchDelete, args);\n gObj.notify(events.batchDelete, { rows: this.parent.getRowsObject() });\n gObj.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.refreshRowIdx = function () {\n var rows = [];\n var mRows = [];\n var nonMovableRows = [];\n var frzCols = this.parent.getFrozenColumns();\n if (this.parent.frozenRows) {\n rows = [].slice.call(this.parent.getHeaderTable().querySelector('tbody').children);\n if (frzCols) {\n mRows = [].slice.call(this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').children);\n for (var i = 0; i < mRows.length; i++) {\n nonMovableRows[i] = this.parent.createElement('tr', { className: 'emptynonmv' });\n }\n }\n }\n if (frzCols) {\n mRows = mRows.concat([].slice.call(this.parent.getContentTable().querySelector('tbody').children));\n nonMovableRows = nonMovableRows.concat([].slice.call(this.parent.element.querySelector('.e-movablecontent').querySelector('tbody').children));\n }\n rows = rows.concat([].slice.call(this.parent.getContentTable().querySelector('tbody').children));\n for (var i = 0, j = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n rows[i].setAttribute('aria-rowindex', j.toString());\n if (frzCols) {\n mRows[i].setAttribute('aria-rowindex', j.toString());\n if (nonMovableRows[i].classList.contains('e-row')) {\n nonMovableRows[i].setAttribute('aria-rowindex', j.toString());\n }\n }\n j++;\n }\n else {\n rows[i].removeAttribute('aria-rowindex');\n if (frzCols) {\n mRows[i].removeAttribute('aria-rowindex');\n }\n }\n }\n };\n BatchEdit.prototype.getIndexFromData = function (data) {\n return inArray(data, this.parent.getCurrentViewRecords());\n };\n BatchEdit.prototype.bulkAddRow = function (data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowAdding) {\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 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);\n if (args.cancel) {\n return;\n }\n this.isAdded = true;\n gObj.clearSelection();\n var mTr;\n var mTbody;\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var model = new RowModelGenerator(this.parent);\n var modelData = model.generateRows([args.defaultData]);\n var tr = row.render(modelData[0], gObj.getColumns());\n var col;\n var index;\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('tbody');\n tr.classList.add('e-insertedrow');\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n if (gObj.getFrozenColumns()) {\n mTr = this.renderMovable(tr);\n if (gObj.frozenRows) {\n mTbody = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = gObj.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n this.parent.editSettings.newRowPosition === 'Top' ? mTbody.insertBefore(mTr, mTbody.firstChild) : mTbody.appendChild(mTr);\n addClass(mTr.querySelectorAll('.e-rowcell'), ['e-updatedtd']);\n if (this.parent.height === 'auto') {\n this.parent.notify(events.frozenHeight, {});\n }\n }\n if (gObj.frozenRows) {\n tbody = gObj.getHeaderContent().querySelector('tbody');\n }\n this.parent.editSettings.newRowPosition === 'Top' ? tbody.insertBefore(tr, tbody.firstChild) : tbody.appendChild(tr);\n addClass(tr.querySelectorAll('.e-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() });\n var changes = this.getBatchChanges();\n var addedRecords = 'addedRecords';\n this.parent.editSettings.newRowPosition === 'Top' ? gObj.selectRow(0) :\n gObj.selectRow(this.parent.getCurrentViewRecords().length + changes[addedRecords].length - 1);\n if (!data) {\n index = this.findNextEditableCell(0, true);\n col = gObj.getColumns()[index];\n this.parent.editSettings.newRowPosition === 'Top' ? this.editCell(0, col.field, true) :\n this.editCell(this.parent.getCurrentViewRecords().length + changes[addedRecords].length - 1, col.field, true);\n }\n if (this.parent.aggregates.length > 0 && data) {\n this.parent.notify(events.refreshFooterRenderer, {});\n }\n var args1 = {\n defaultData: args.defaultData, row: tr,\n columnObject: col, columnIndex: index, primaryKey: args.primaryKey, cell: tr.cells[index]\n };\n gObj.trigger(events.batchAdd, args1);\n };\n BatchEdit.prototype.renderMovable = function (ele) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < this.parent.frozenColumns; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = this.parent.frozenColumns, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\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[i].validationRules) : false;\n if (!isAdd && this.checkNPCell(cols[i])) {\n return i;\n }\n else if (isAdd && !cols[i].template && cols[i].visible && cols[i].allowEditing &&\n !(cols[i].isIdentity && cols[i].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.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.field) {\n setValue(col.field, col.defaultValue ? 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.parentElement.getAttribute('aria-rowindex'), 10);\n };\n BatchEdit.prototype.editCell = function (index, field, isAdd) {\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n var keys = gObj.getPrimaryKeyFieldNames();\n if (gObj.editSettings.allowEditing && col.allowEditing) {\n if (gObj.isEdit && !(this.cellDetails.column.field === field\n && (this.cellDetails.rowIndex === index && this.parent.getDataRows().length - 1 !== index))) {\n this.saveCell();\n if (this.cellDetails.rowIndex === index && this.cellDetails.column.field === field) {\n return;\n }\n }\n if (gObj.isEdit) {\n return;\n }\n var row = void 0;\n var rowData = void 0;\n var mRowData = void 0;\n var colIdx = gObj.getColumnIndexByField(field);\n var frzCols = gObj.getFrozenColumns();\n if (frzCols && colIdx >= frzCols) {\n row = gObj.getMovableDataRows()[index];\n mRowData = this.parent.getRowObjectFromUID(this.parent.getMovableDataRows()[index].getAttribute('data-uid'));\n rowData = mRowData.changes ? extend({}, {}, mRowData.changes, true) : extend({}, {}, this.getDataByIndex(index), true);\n }\n else {\n row = gObj.getDataRows()[index];\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)) {\n this.parent.isLastCellPrimaryKey = true;\n return;\n }\n this.parent.isLastCellPrimaryKey = false;\n var rowObj = gObj.getRowObjectFromUID(row.getAttribute('data-uid'));\n var cells = [].slice.apply(row.cells);\n var args = {\n cell: cells[this.getColIndex(cells, this.getCellIdx(col.uid))], row: row,\n columnName: col.field, columnObject: col, 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 if (!args.cell) {\n return;\n }\n gObj.trigger(events.cellEdit, args);\n if (args.cancel) {\n return;\n }\n this.cellDetails = {\n rowData: rowData, column: col, value: args.value, isForeignKey: args.isForeignKey, rowIndex: index,\n cellIndex: parseInt(args.cell.getAttribute('aria-colindex'), 10),\n foreignKeyData: args.foreignKeyData\n };\n if (args.cell.classList.contains('e-updatedtd')) {\n this.isColored = true;\n args.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(args);\n this.form = gObj.element.querySelector('#' + gObj.element.id + 'EditForm');\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 col = this.parent.getColumnByField(field);\n var index = this.parent.getColumnIndexByField(field);\n if (col && !col.isPrimaryKey) {\n var td = this.parent.getDataRows()[rowIndex].querySelectorAll('.e-rowcell')[index];\n if (this.parent.getFrozenColumns()) {\n var cells = [].slice.call(this.parent.getDataRows()[rowIndex].querySelectorAll('.e-rowcell')).concat([].slice.call(this.parent.getMovableDataRows()[rowIndex].querySelectorAll('.e-rowcell')));\n td = cells[index];\n }\n var rowObj = this.parent.getRowObjectFromUID(td.parentElement.getAttribute('data-uid'));\n this.refreshTD(td, col, rowObj, value);\n this.parent.trigger(events.queryCellInfo, {\n cell: td, column: col, data: rowObj.changes\n });\n }\n };\n BatchEdit.prototype.setChanges = function (rowObj, field, value) {\n if (!rowObj.changes) {\n rowObj.changes = extend({}, {}, rowObj.data, true);\n }\n if (!isNullOrUndefined(field)) {\n DataUtil.setValue(field, value, rowObj.changes);\n }\n if (rowObj.data[field] !== value) {\n rowObj.isDirty = true;\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 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 this.setChanges(rowObj, column.field, value);\n var frzCols = this.parent.getFrozenColumns();\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n if (frzCols && this.getCellIdx(column.uid) >= frzCols && 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 cell.refreshTD(td, rowcell[this.getCellIdx(column.uid) - (this.getCellIdx(column.uid) >= frzCols ? frzCols : 0)], rowObj.changes, { 'index': this.getCellIdx(column.uid) });\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 for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 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 if (this.isAdded && !gObj.isEdit) {\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()[index];\n if (col) {\n this.editCell(0, col.field, true);\n this.saveCell();\n }\n }\n if (!gObj.isEdit) {\n this.isAdded = false;\n }\n }\n };\n BatchEdit.prototype.saveCell = function (isForceSave) {\n var gObj = this.parent;\n if (!isForceSave && (!gObj.isEdit || this.validateFormObj())) {\n return;\n }\n var tr = parentsUntil(this.form, 'e-row');\n var column = this.cellDetails.column;\n var editedData = gObj.editModule.getCurrentEditedData(this.form, {});\n var cloneEditedData = extend({}, editedData);\n editedData = extend({}, editedData, this.cellDetails.rowData);\n var value = getObject(column.field, cloneEditedData);\n if (!isNullOrUndefined(column.field)) {\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 previousValue: this.cellDetails.value,\n columnObject: column,\n cell: this.form.parentElement,\n isForeignKey: this.cellDetails.isForeignKey, cancel: false\n };\n if (!isForceSave) {\n gObj.trigger(events.cellSave, args);\n gObj.notify(events.batchForm, { formObj: this.form });\n }\n if (args.cancel) {\n return;\n }\n gObj.editModule.destroyForm();\n gObj.isEdit = false;\n gObj.editModule.destroyWidgets([column]);\n this.parent.notify(events.tooltipDestroy, {});\n this.refreshTD(args.cell, column, gObj.getRowObjectFromUID(tr.getAttribute('data-uid')), args.value);\n removeClass([tr], ['e-editedrow', 'e-batchrow']);\n removeClass([args.cell], ['e-editedbatchcell', 'e-boolcell']);\n if (!isNullOrUndefined(args.value) && args.value.toString() ===\n (!isNullOrUndefined(this.cellDetails.value) ? this.cellDetails.value : '').toString() && !this.isColored\n || (isNullOrUndefined(args.value) && isNullOrUndefined(this.cellDetails.value) &&\n !args.cell.parentElement.classList.contains('e-insertedrow'))) {\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.trigger(events.cellSaved, args);\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 };\n BatchEdit.prototype.getDataByIndex = function (index) {\n var row = this.parent.getRowObjectFromUID(this.parent.getDataRows()[index].getAttribute('data-uid'));\n return row.changes ? row.changes : row.data;\n };\n BatchEdit.prototype.keyDownHandler = function (e) {\n if (e.action === 'tab' && this.parent.isEdit) {\n var rowcell = parentsUntil(e.target, 'e-rowcell');\n if (rowcell) {\n var cell = rowcell.querySelector('.e-field');\n if (cell) {\n var visibleColumns = this.parent.getVisibleColumns();\n if (visibleColumns[visibleColumns.length - 1].field === cell.getAttribute('name')) {\n this.saveCell();\n }\n }\n }\n }\n };\n /**\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 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 * @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","/**\n * `TemplateEditCell` is used to handle template cell.\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","import { classList, addClass, removeClass, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { EventHandler, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { Dialog, calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { createCboxWithWrap, toogleCheckbox, parentsUntil } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `ColumnChooser` module is used to show or hide columns dynamically.\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for the Grid ColumnChooser module\n * @hidden\n */\n function ColumnChooser(parent, serviceLocator) {\n this.showColumn = [];\n this.hideColumn = [];\n this.isDlgOpen = false;\n this.dlghide = false;\n this.initialOpenDlg = true;\n this.stateChangeColumns = [];\n this.isInitialOpen = false;\n this.isCustomizeOpenCC = false;\n this.searchOperator = 'startswith';\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n this.cBoxTrue = createCheckBox(this.parent.createElement, true, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(this.parent.createElement, true, { checked: false, label: ' ' });\n this.cBoxTrue.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(this.parent.createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', 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 }\n ColumnChooser.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.removeEventListener();\n this.unWireEvents();\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.element && !this.dlgObj.isDestroyed) {\n this.dlgObj.destroy();\n }\n };\n ColumnChooser.prototype.rtlUpdate = function () {\n if (this.parent.enableRtl) {\n addClass(this.innerDiv.querySelectorAll('.e-checkbox-wrapper'), ['e-rtl']);\n }\n else {\n removeClass(this.innerDiv.querySelectorAll('.e-checkbox-wrapper'), ['e-rtl']);\n }\n };\n /**\n * @hidden\n */\n ColumnChooser.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.uiUpdate, this.enableAfterRenderEle, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.addEventListener(events.dataBound, this.hideDialog.bind(this));\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.rtlUpdated, this.rtlUpdate, this);\n };\n /**\n * @hidden\n */\n ColumnChooser.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.uiUpdate, this.enableAfterRenderEle);\n this.parent.off(events.rtlUpdated, this.rtlUpdate);\n };\n ColumnChooser.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderDlgContent();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n };\n ColumnChooser.prototype.clickHandler = function (e) {\n var targetElement = e.target;\n if (!this.isCustomizeOpenCC) {\n if (!isNullOrUndefined(closest(targetElement, '.e-cc')) || !isNullOrUndefined(closest(targetElement, '.e-cc-toolbar'))) {\n if (targetElement.classList.contains('e-columnchooser-btn') || targetElement.classList.contains('e-cc-toolbar')) {\n if ((this.initialOpenDlg && this.dlgObj.visible) || !this.isDlgOpen) {\n this.isDlgOpen = true;\n return;\n }\n }\n else if (targetElement.classList.contains('e-cc-cancel')) {\n targetElement.parentElement.querySelector('.e-ccsearch').value = '';\n this.columnChooserSearch('');\n this.removeCancelIcon();\n this.refreshCheckboxButton();\n }\n }\n else {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible && !targetElement.classList.contains('e-toolbar-items')) {\n this.dlgObj.hide();\n this.clearActions();\n this.refreshCheckboxState();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.targetdlg = e.target;\n }\n }\n if (this.isCustomizeOpenCC && e.target.classList.contains('e-cc-cancel')) {\n this.refreshCheckboxState();\n }\n this.rtlUpdate();\n };\n ColumnChooser.prototype.hideDialog = function () {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible) {\n this.dlgObj.hide();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n };\n /**\n * To render columnChooser when showColumnChooser enabled.\n * @return {void}\n * @hidden\n */\n ColumnChooser.prototype.renderColumnChooser = function (x, y, target) {\n if (!this.dlgObj.visible && (this.parent.detailTemplate || this.parent.childGrid)) {\n this.hideOpenedDialog();\n }\n if (!this.dlgObj.visible) {\n var pos = { X: null, Y: null };\n var args1 = {\n requestType: 'beforeOpenColumnChooser', element: this.parent.element,\n columns: this.getColumns(), cancel: false, searchOperator: this.searchOperator\n };\n this.parent.trigger(events.beforeOpenColumnChooser, args1);\n if (args1.cancel) {\n return;\n }\n this.searchOperator = args1.searchOperator;\n if (target) {\n this.targetdlg = target;\n }\n this.refreshCheckboxState();\n this.dlgObj.dataBind();\n this.dlgObj.element.style.maxHeight = '430px';\n var elementVisible = this.dlgObj.element.style.display;\n this.dlgObj.element.style.display = 'block';\n var newpos = calculateRelativeBasedPosition(closest(target, '.e-toolbar-item'), this.dlgObj.element);\n this.dlgObj.element.style.display = elementVisible;\n this.dlgObj.element.style.top = newpos.top + closest(target, '.e-cc-toolbar').getBoundingClientRect().height + 'px';\n var dlgWidth = 250;\n if (!isNullOrUndefined(closest(target, '.e-bigger'))) {\n this.dlgObj.width = 258;\n }\n if (Browser.isDevice) {\n this.dlgObj.target = document.body;\n this.dlgObj.position = { X: 'center', Y: 'center' };\n this.dlgObj.refreshPosition();\n this.dlgObj.open = this.mOpenDlg.bind(this);\n }\n else {\n if (this.parent.enableRtl) {\n this.dlgObj.element.style.left = target.offsetLeft + 'px';\n }\n else {\n this.dlgObj.element.style.left = ((newpos.left - dlgWidth) + closest(target, '.e-cc-toolbar').clientWidth) + 2 + 'px';\n }\n }\n this.removeCancelIcon();\n this.dlgObj.show();\n }\n else {\n // this.unWireEvents();\n this.hideDialog();\n this.addcancelIcon();\n }\n this.rtlUpdate();\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @return {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n this.isCustomizeOpenCC = true;\n if (this.dlgObj.visible) {\n this.hideDialog();\n return;\n }\n if (!this.isInitialOpen) {\n this.dlgObj.content = this.renderChooserList();\n }\n else {\n this.refreshCheckboxState();\n }\n this.dlgObj.dataBind();\n this.dlgObj.position = { X: 'center', Y: 'center' };\n if (isNullOrUndefined(X)) {\n this.dlgObj.position = { X: 'center', Y: 'center' };\n this.dlgObj.refreshPosition();\n }\n else {\n this.dlgObj.element.style.top = '';\n this.dlgObj.element.style.left = '';\n this.dlgObj.element.style.top = Y + 'px';\n this.dlgObj.element.style.left = X + 'px';\n }\n this.dlgObj.beforeOpen = this.customDialogOpen.bind(this);\n this.dlgObj.show();\n this.isInitialOpen = true;\n this.dlgObj.beforeClose = this.customDialogClose.bind(this);\n };\n ColumnChooser.prototype.enableAfterRenderEle = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n ColumnChooser.prototype.customDialogOpen = function () {\n var searchElement = this.dlgObj.content.querySelector('input.e-ccsearch');\n EventHandler.add(searchElement, 'keyup', this.columnChooserManualSearch, this);\n };\n ColumnChooser.prototype.customDialogClose = function () {\n var searchElement = this.dlgObj.content.querySelector('input.e-ccsearch');\n EventHandler.remove(searchElement, 'keyup', this.columnChooserManualSearch);\n };\n ColumnChooser.prototype.getColumns = function () {\n var columns = this.parent.getColumns().filter(function (column) { return (column.type !== 'checkbox'\n && column.showInColumnChooser === true) || (column.type === 'checkbox' && column.field !== undefined); });\n return columns;\n };\n ColumnChooser.prototype.renderDlgContent = function () {\n var y;\n this.dlgDiv = this.parent.createElement('div', { className: 'e-ccdlg e-cc', id: this.parent.element.id + '_ccdlg' });\n this.parent.element.appendChild(this.dlgDiv);\n var xpos = this.parent.element.getBoundingClientRect().width - 250;\n var dialoPos = this.parent.enableRtl ? 'left' : 'right';\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n if (!isNullOrUndefined(tarElement)) {\n y = tarElement.getBoundingClientRect().top;\n }\n var pos = { X: null, Y: null };\n this.dlgObj = new Dialog({\n header: this.l10n.getConstant('ChooseColumns'),\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n target: document.getElementById(this.parent.element.id),\n buttons: [{\n click: this.confirmDlgBtnClick.bind(this),\n buttonModel: {\n content: this.l10n.getConstant('OKButton'), isPrimary: true,\n cssClass: 'e-cc e-cc_okbtn',\n }\n },\n {\n click: this.clearActions.bind(this),\n buttonModel: { cssClass: 'e-flat e-cc e-cc-cnbtn', content: this.l10n.getConstant('CancelButton') }\n }],\n content: this.renderChooserList(),\n width: 250,\n cssClass: 'e-cc',\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n this.wireEvents();\n };\n ColumnChooser.prototype.renderChooserList = function () {\n this.mainDiv = this.parent.createElement('div', { className: 'e-main-div e-cc' });\n var searchDiv = this.parent.createElement('div', { className: 'e-cc-searchdiv e-cc e-input-group' });\n var ccsearchele = this.parent.createElement('input', {\n className: 'e-ccsearch e-cc e-input',\n attrs: { placeholder: this.l10n.getConstant('Search') }\n });\n var ccsearchicon = this.parent.createElement('span', {\n className: 'e-ccsearch-icon e-icons e-cc e-input-group-icon',\n attrs: { title: this.l10n.getConstant('Search') }\n });\n var conDiv = this.parent.createElement('div', { className: 'e-cc-contentdiv' });\n this.innerDiv = this.parent.createElement('div', { className: 'e-innerdiv e-cc' });\n searchDiv.appendChild(ccsearchele);\n searchDiv.appendChild(ccsearchicon);\n this.searchBoxObj = new SearchBox(ccsearchele);\n var innerDivContent = this.refreshCheckboxList(this.parent.getColumns());\n this.innerDiv.appendChild(innerDivContent);\n conDiv.appendChild(this.innerDiv);\n this.mainDiv.appendChild(searchDiv);\n this.mainDiv.appendChild(conDiv);\n return this.mainDiv;\n };\n ColumnChooser.prototype.confirmDlgBtnClick = function (args) {\n this.stateChangeColumns = [];\n if (!isNullOrUndefined(args)) {\n if (this.hideColumn.length) {\n this.columnStateChange(this.hideColumn, false);\n }\n if (this.showColumn.length) {\n this.columnStateChange(this.showColumn, true);\n }\n var params = {\n requestType: 'columnstate', element: this.parent.element,\n columns: this.stateChangeColumns, dialogInstance: this.dlgObj\n };\n this.parent.trigger(events.actionComplete, params);\n this.getShowHideService.setVisible(this.stateChangeColumns);\n this.clearActions();\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n }\n };\n ColumnChooser.prototype.columnStateChange = function (stateColumns, state) {\n for (var index = 0; index < stateColumns.length; index++) {\n var colUid = stateColumns[index];\n var currentCol = this.parent.getColumnByUid(colUid);\n currentCol.visible = state;\n this.stateChangeColumns.push(currentCol);\n }\n };\n ColumnChooser.prototype.clearActions = function () {\n this.hideColumn = [];\n this.showColumn = [];\n // this.unWireEvents();\n this.hideDialog();\n this.addcancelIcon();\n };\n ColumnChooser.prototype.checkstatecolumn = function (isChecked, coluid) {\n if (isChecked) {\n if (this.hideColumn.indexOf(coluid) !== -1) {\n this.hideColumn.splice(this.hideColumn.indexOf(coluid), 1);\n }\n if (this.showColumn.indexOf(coluid) === -1) {\n this.showColumn.push(coluid);\n }\n }\n else {\n if (this.showColumn.indexOf(coluid) !== -1) {\n this.showColumn.splice(this.showColumn.indexOf(coluid), 1);\n }\n if (this.hideColumn.indexOf(coluid) === -1) {\n this.hideColumn.push(coluid);\n }\n }\n };\n ColumnChooser.prototype.columnChooserSearch = function (searchVal) {\n var clearSearch = false;\n var fltrCol;\n var okButton;\n var buttonEle = this.dlgDiv.querySelector('.e-footer-content');\n if (buttonEle) {\n okButton = buttonEle.querySelector('.e-btn').ej2_instances[0];\n }\n if (searchVal === '') {\n this.removeCancelIcon();\n fltrCol = this.getColumns();\n clearSearch = true;\n }\n else {\n fltrCol = new DataManager(this.getColumns()).executeLocal(new Query()\n .where('headerText', this.searchOperator, searchVal, true));\n }\n if (fltrCol.length) {\n this.innerDiv.innerHTML = ' ';\n this.innerDiv.classList.remove('e-ccnmdiv');\n this.innerDiv.appendChild(this.refreshCheckboxList(fltrCol, searchVal));\n if (!clearSearch) {\n this.addcancelIcon();\n this.refreshCheckboxButton();\n }\n else {\n if (okButton) {\n okButton.disabled = false;\n }\n }\n }\n else {\n var nMatchele = this.parent.createElement('span', { className: 'e-cc e-nmatch' });\n nMatchele.innerHTML = this.l10n.getConstant('Matchs');\n this.innerDiv.innerHTML = ' ';\n this.innerDiv.appendChild(nMatchele);\n this.innerDiv.classList.add('e-ccnmdiv');\n if (okButton) {\n okButton.disabled = true;\n }\n }\n this.flag = true;\n this.stopTimer();\n };\n ColumnChooser.prototype.wireEvents = function () {\n EventHandler.add(this.dlgObj.element, 'click', this.checkBoxClickHandler, this);\n EventHandler.add(this.searchBoxObj.searchBox, 'keyup', this.columnChooserManualSearch, this);\n this.searchBoxObj.wireEvent();\n };\n ColumnChooser.prototype.unWireEvents = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.dlgObj.element) {\n EventHandler.remove(this.dlgObj.element, 'click', this.checkBoxClickHandler);\n }\n EventHandler.remove(this.searchBoxObj.searchBox, 'keyup', this.columnChooserManualSearch);\n this.searchBoxObj.unWireEvent();\n };\n ColumnChooser.prototype.checkBoxClickHandler = function (e) {\n var checkstate;\n var elem = parentsUntil(e.target, 'e-checkbox-wrapper');\n if (elem) {\n toogleCheckbox(elem.parentElement);\n elem.querySelector('.e-chk-hidden').focus();\n if (elem.querySelector('.e-check')) {\n checkstate = true;\n }\n else if (elem.querySelector('.e-uncheck')) {\n checkstate = false;\n }\n else {\n return;\n }\n var columnUid = parentsUntil(elem, 'e-ccheck').getAttribute('uid');\n this.checkstatecolumn(checkstate, columnUid);\n this.refreshCheckboxButton();\n }\n };\n ColumnChooser.prototype.refreshCheckboxButton = function () {\n var searchValue = this.dlgObj.element.querySelector('.e-cc.e-input').value;\n var selected = this.innerDiv.querySelectorAll('.e-check').length;\n var btn = this.dlgDiv.querySelector('.e-footer-content').querySelector('.e-btn').ej2_instances[0];\n btn.disabled = false;\n var srchShowCols = [];\n var searchData = this.parent.element.querySelectorAll('.e-cc-chbox');\n for (var i = 0, itemsLen = searchData.length; i < itemsLen; i++) {\n var element = searchData[i];\n var columnUID = parentsUntil(element, 'e-ccheck').getAttribute('uid');\n srchShowCols.push(columnUID);\n }\n var hideCols = this.showColumn.filter(function (column) { return srchShowCols.indexOf(column) !== -1; });\n if (selected === 0 && hideCols.length === 0) {\n btn.disabled = true;\n }\n btn.dataBind();\n };\n ColumnChooser.prototype.refreshCheckboxList = function (gdCol, searchVal) {\n this.ulElement = this.parent.createElement('ul', { className: 'e-ccul-ele e-cc' });\n for (var i = 0; i < gdCol.length; i++) {\n var columns = gdCol[i];\n this.renderCheckbox(columns);\n }\n return this.ulElement;\n };\n ColumnChooser.prototype.refreshCheckboxState = function () {\n this.dlgObj.element.querySelector('.e-cc.e-input').value = '';\n this.columnChooserSearch('');\n var gridObject = this.parent;\n var currentCheckBoxColls = this.dlgObj.element.querySelectorAll('.e-cc-chbox');\n for (var i = 0, itemLen = currentCheckBoxColls.length; i < itemLen; i++) {\n var element = currentCheckBoxColls[i];\n var columnUID = void 0;\n if (this.parent.childGrid || this.parent.detailTemplate) {\n columnUID = parentsUntil(this.dlgObj.element.querySelectorAll('.e-cc-chbox')[i], 'e-ccheck').getAttribute('uid');\n }\n else {\n columnUID = parentsUntil(element, 'e-ccheck').getAttribute('uid');\n }\n var column = gridObject.getColumnByUid(columnUID);\n if (column.visible) {\n element.checked = true;\n this.checkState(element.parentElement.querySelector('.e-icons'), true);\n }\n else {\n element.checked = false;\n this.checkState(element.parentElement.querySelector('.e-icons'), false);\n }\n }\n };\n ColumnChooser.prototype.checkState = function (element, state) {\n state ? classList(element, ['e-check'], ['e-uncheck']) : classList(element, ['e-uncheck'], ['e-check']);\n };\n ColumnChooser.prototype.createCheckBox = function (label, checked, uid) {\n var cbox = checked ? this.cBoxTrue.cloneNode(true) : this.cBoxFalse.cloneNode(true);\n cbox.querySelector('.e-label').innerHTML = label;\n return createCboxWithWrap(uid, cbox, 'e-ccheck');\n };\n ColumnChooser.prototype.renderCheckbox = function (column) {\n var cclist;\n var hideColState;\n var showColState;\n var checkBoxObj;\n if (column.showInColumnChooser) {\n cclist = this.parent.createElement('li', { className: 'e-cclist e-cc', styles: 'list-style:None', id: 'e-ccli_' + column.uid });\n hideColState = this.hideColumn.indexOf(column.uid) === -1 ? false : true;\n showColState = this.showColumn.indexOf(column.uid) === -1 ? false : true;\n var cccheckboxlist = this.createCheckBox(column.headerText, (column.visible && !hideColState) || showColState, column.uid);\n cclist.appendChild(cccheckboxlist);\n this.ulElement.appendChild(cclist);\n }\n };\n ColumnChooser.prototype.columnChooserManualSearch = function (e) {\n this.addcancelIcon();\n this.searchValue = e.target.value;\n var proxy = this;\n this.stopTimer();\n this.startTimer(e);\n };\n ColumnChooser.prototype.startTimer = function (e) {\n var proxy = this;\n var interval = !proxy.flag && e.keyCode !== 13 ? 500 : 0;\n this.timer = window.setInterval(function () { proxy.columnChooserSearch(proxy.searchValue); }, interval);\n };\n ColumnChooser.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n ColumnChooser.prototype.addcancelIcon = function () {\n this.dlgDiv.querySelector('.e-cc.e-ccsearch-icon').classList.add('e-cc-cancel');\n };\n ColumnChooser.prototype.removeCancelIcon = function () {\n this.dlgDiv.querySelector('.e-cc.e-ccsearch-icon').classList.remove('e-cc-cancel');\n };\n ColumnChooser.prototype.mOpenDlg = function () {\n if (Browser.isDevice) {\n this.dlgObj.element.querySelector('.e-cc-searchdiv').classList.remove('e-input-focus');\n this.dlgObj.element.querySelectorAll('.e-cc-chbox')[0].focus();\n }\n };\n // internally use\n ColumnChooser.prototype.getModuleName = function () {\n return 'columnChooser';\n };\n ColumnChooser.prototype.hideOpenedDialog = function () {\n var openCC = [].slice.call(document.getElementsByClassName('e-ccdlg')).filter(function (dlgEle) {\n return dlgEle.classList.contains('e-popup-open');\n });\n for (var i = 0, dlgLen = openCC.length; i < dlgLen; i++) {\n if (openCC[i].classList.contains('e-dialog') || this.parent.element.id + '_ccdlg' !== openCC[i].id) {\n openCC[i].ej2_instances[0].hide();\n }\n }\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","/**\n * `PdfString` class is used to perform string related primitive operations.\n * @private\n */\nexport var InternalEnum;\n(function (InternalEnum) {\n //Internals\n /**\n * public Enum for `ForceEncoding`.\n * @private\n */\n var ForceEncoding;\n (function (ForceEncoding) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Ascii`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Ascii\"] = 1] = \"Ascii\";\n /**\n * Specifies the type of `Unicode`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Unicode\"] = 2] = \"Unicode\";\n })(ForceEncoding = InternalEnum.ForceEncoding || (InternalEnum.ForceEncoding = {}));\n /**\n * public Enum for `SourceType`.\n * @private\n */\n var SourceType;\n (function (SourceType) {\n /**\n * Specifies the type of `StringValue`.\n * @private\n */\n SourceType[SourceType[\"StringValue\"] = 0] = \"StringValue\";\n /**\n * Specifies the type of `ByteBuffer`.\n * @private\n */\n SourceType[SourceType[\"ByteBuffer\"] = 1] = \"ByteBuffer\";\n })(SourceType || (SourceType = {}));\n})(InternalEnum || (InternalEnum = {}));\nvar PdfString = /** @class */ (function () {\n function PdfString(value) {\n /**\n * Value indicating whether the string was converted to hex.\n * @default false\n * @private\n */\n this.bHex = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position1 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject1 = null;\n /**\n * `Shows` if the data of the stream was decrypted.\n * @default false\n * @private\n */\n this.bDecrypted = false;\n /**\n * Shows if the data of the stream `was decrypted`.\n * @default false\n * @private\n */\n this.isParentDecrypted = false;\n /**\n * Gets a value indicating whether the object is `packed or not`.\n * @default false\n * @private\n */\n this.isPacked = false;\n /**\n * @hidden\n * @private\n */\n this.isFormField = false;\n /**\n * @hidden\n * @private\n */\n this.isColorSpace = false;\n /**\n * @hidden\n * @private\n */\n this.isHexString = true;\n if (typeof value === 'undefined') {\n this.bHex = false;\n }\n else {\n if (!(value.length > 0 && value[0] === '0xfeff')) {\n this.stringValue = value;\n this.data = [];\n for (var i = 0; i < value.length; ++i) {\n this.data.push(value.charCodeAt(i));\n }\n }\n }\n }\n Object.defineProperty(PdfString.prototype, \"hex\", {\n //Property\n /**\n * Gets a value indicating whether string is in `hex`.\n * @private\n */\n get: function () {\n return this.bHex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"value\", {\n /**\n * Gets or sets string `value` of the object.\n * @private\n */\n get: function () {\n return this.stringValue;\n },\n set: function (value) {\n this.stringValue = value;\n this.data = null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status1;\n },\n set: function (value) {\n this.status1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving1;\n },\n set: function (value) {\n this.isSaving1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index1;\n },\n set: function (value) {\n this.index1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position1;\n },\n set: function (value) {\n this.position1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"converted\", {\n /**\n * Gets a value indicating whether to check if the value has unicode characters.\n * @private\n */\n get: function () {\n return this.bConverted;\n },\n /**\n * sets a value indicating whether to check if the value has unicode characters.\n * @private\n */\n set: function (value) {\n this.bConverted = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"encode\", {\n /**\n * Gets value indicating whether we should convert data to Unicode.\n */\n get: function () {\n return this.bForceEncoding;\n },\n set: function (value) {\n this.bForceEncoding = value;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * Converts `bytes to string using hex format` for representing string.\n * @private\n */\n PdfString.bytesToHex = function (bytes) {\n if (bytes == null) {\n return '';\n }\n var builder = '';\n return builder;\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfString.prototype.save = function (writer) {\n if (writer === null) {\n throw new Error('ArgumentNullException : writer');\n }\n if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {\n writer.write(this.pdfEncode());\n }\n else {\n writer.write(PdfString.stringMark[0] + this.value + PdfString.stringMark[1]);\n }\n };\n PdfString.prototype.pdfEncode = function () {\n var result = '';\n if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {\n var data = this.escapeSymbols(this.value);\n for (var i = 0; i < data.length; i++) {\n result += String.fromCharCode(data[i]);\n }\n result = PdfString.stringMark[0] + result + PdfString.stringMark[1];\n }\n else {\n result = this.value;\n }\n return result;\n };\n PdfString.prototype.escapeSymbols = function (value) {\n var data = [];\n for (var i = 0; i < value.length; i++) {\n var currentData = value.charCodeAt(i);\n switch (currentData) {\n case 40:\n case 41:\n data.push(92);\n data.push(currentData);\n break;\n case 13:\n data.push(92);\n data.push(114);\n break;\n case 92:\n data.push(92);\n data.push(currentData);\n break;\n default:\n data.push(currentData);\n break;\n }\n }\n return data;\n };\n /**\n * Creates a `copy of PdfString`.\n * @private\n */\n PdfString.prototype.clone = function (crossTable) {\n if (this.clonedObject1 !== null && this.clonedObject1.CrossTable === crossTable) {\n return this.clonedObject1;\n }\n else {\n this.clonedObject1 = null;\n }\n var newString = new PdfString(this.stringValue);\n newString.bHex = this.bHex;\n newString.crossTable = crossTable;\n newString.isColorSpace = this.isColorSpace;\n this.clonedObject1 = newString;\n return newString;\n };\n /**\n * Converts string to array of unicode symbols.\n */\n PdfString.toUnicodeArray = function (value, bAddPrefix) {\n if (value == null) {\n throw new Error('Argument Null Exception : value');\n }\n var startIndex = 0;\n var output = [];\n for (var i = 0; i < value.length; i++) {\n var code = value.charCodeAt(i);\n output.push(code / 256 >>> 0);\n output.push(code & 0xff);\n }\n return output;\n };\n /**\n * Converts byte data to string.\n */\n PdfString.byteToString = function (data) {\n if (data == null) {\n throw new Error('Argument Null Exception : stream');\n }\n var result = '';\n for (var i = 0; i < data.length; ++i) {\n result += String.fromCharCode(data[i]);\n }\n return result;\n };\n //constants = ;\n /**\n * `General markers` for string.\n * @private\n */\n PdfString.stringMark = '()';\n /**\n * `Hex markers` for string.\n * @private\n */\n PdfString.hexStringMark = '<>';\n /**\n * Format of password data.\n * @private\n */\n PdfString.hexFormatPattern = '{0:X2}';\n return PdfString;\n}());\nexport { PdfString };\n","/**\n * CellStyle class\n * @private\n */\nvar CellStyle = /** @class */ (function () {\n function CellStyle() {\n this.numFmtId = 0;\n this.backColor = 'none';\n this.fontName = 'Calibri';\n this.fontSize = 14;\n this.fontColor = '#000000';\n this.italic = false;\n this.bold = false;\n this.underline = false;\n this.wrapText = false;\n this.hAlign = 'general';\n this.vAlign = 'bottom';\n this.indent = 0;\n this.numberFormat = 'GENERAL';\n this.type = 'datetime';\n this.borders = new Borders();\n this.isGlobalStyle = false;\n }\n return CellStyle;\n}());\nexport { CellStyle };\n/**\n * Font Class\n * @private\n */\nvar Font = /** @class */ (function () {\n function Font() {\n this.sz = 14;\n this.name = 'Calibri';\n this.u = false;\n this.b = false;\n this.i = false;\n this.color = 'FF000000';\n }\n return Font;\n}());\nexport { Font };\n/**\n * CellXfs class\n * @private\n */\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\n/**\n * Alignment class\n * @private\n */\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\n/**\n * CellStyleXfs class\n * @private\n */\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\n/**\n * CellStyles class\n * @private\n */\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\n/**\n * NumFmt class\n * @private\n */\nvar NumFmt = /** @class */ (function () {\n function NumFmt(id, code) {\n this.numFmtId = id;\n this.formatCode = code;\n }\n return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n * @private\n */\nvar Border = /** @class */ (function () {\n function Border(mLine, mColor) {\n this.lineStyle = mLine;\n this.color = mColor;\n }\n return Border;\n}());\nexport { Border };\n/**\n * Borders class\n * @private\n */\nvar Borders = /** @class */ (function () {\n function Borders() {\n this.left = new Border('none', '#FFFFFF');\n this.right = new Border('none', '#FFFFFF');\n this.top = new Border('none', '#FFFFFF');\n this.bottom = new Border('none', '#FFFFFF');\n this.all = new Border('none', '#FFFFFF');\n }\n return Borders;\n}());\nexport { Borders };\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})();\n/**\n * Worksheet class\n * @private\n */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Cells class\n * @private\n */\nvar Cells = /** @class */ (function (_super) {\n __extends(Cells, _super);\n function Cells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (cell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.index === cell.index) {\n _this[count] = cell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(cell);\n }\n };\n return _this;\n }\n return Cells;\n}(Array));\nexport { Cells };\n","/**\n * Column class\n * @private\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\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})();\n/**\n * Row class\n * @private\n */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\n * @private\n */\nvar Rows = /** @class */ (function (_super) {\n __extends(Rows, _super);\n function Rows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (row) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var r = _a[_i];\n if (r.index === row.index) {\n _this[count] = row;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(row);\n }\n };\n return _this;\n }\n return Rows;\n}(Array));\nexport { Rows };\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})();\n/**\n * Worksheets class\n * @private\n */\nvar Worksheets = /** @class */ (function (_super) {\n __extends(Worksheets, _super);\n function Worksheets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Worksheets;\n}(Array));\nexport { Worksheets };\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})();\n/**\n * Worksheet class\n * @private\n */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n this.showGridLines = true;\n }\n return Worksheet;\n}());\nexport { Worksheet };\n/**\n * Hyperlink class\n * @private\n */\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\n/**\n * Grouping class\n * @private\n */\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\n/**\n * FreezePane class\n * @private\n */\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\n/**\n * MergeCell\n * @private\n */\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n * @private\n */\nvar MergeCells = /** @class */ (function (_super) {\n __extends(MergeCells, _super);\n function MergeCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (mergeCell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var mCell = _a[_i];\n if (MergeCells.isIntersecting(mCell, mergeCell)) {\n var intersectingCell = new MergeCell();\n intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n _this[count] = intersectingCell;\n mergeCell = intersectingCell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(mergeCell);\n }\n return mergeCell;\n };\n return _this;\n }\n MergeCells.isIntersecting = function (base, compare) {\n return (base.x <= compare.x + compare.width)\n && (compare.x <= base.x + base.width)\n && (base.y <= compare.y + compare.height)\n && (compare.y <= base.y + base.height);\n };\n return MergeCells;\n}(Array));\nexport { MergeCells };\n","/**\n * Save class provide method to save file\n * ```typescript\n * let blob : Blob = new Blob([''], { type: 'text/plain' });\n * Save.save('fileName.txt',blob);\n */\nvar Save = /** @class */ (function () {\n /**\n * Initialize new instance of {save}\n */\n function Save() {\n // tslint:disable\n }\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n * @param {boolean} isMicrosoftBrowser- specify whether microsoft browser or not\n * @returns {void}\n */\n Save.save = function (fileName, buffer) {\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('ArgumentException: fileName cannot be undefined, null or empty');\n }\n var extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length);\n var mimeType = this.getMimeType(extension);\n if (mimeType !== '') {\n buffer = new Blob([buffer], { type: mimeType });\n }\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(buffer, fileName);\n }\n else {\n var downloadLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n this.saveInternal(fileName, extension, buffer, downloadLink, 'download' in downloadLink);\n }\n };\n Save.saveInternal = function (fileName, extension, buffer, downloadLink, hasDownloadAttribute) {\n if (hasDownloadAttribute) {\n downloadLink.download = fileName;\n var dataUrl_1 = window.URL.createObjectURL(buffer);\n downloadLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n downloadLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n dataUrl_1 = undefined;\n });\n }\n else {\n if (extension !== 'docx' && extension !== 'xlsx') {\n var url = window.URL.createObjectURL(buffer);\n var isPopupBlocked = window.open(url, '_blank');\n if (!isPopupBlocked) {\n window.location.href = url;\n }\n }\n else {\n var reader_1 = new FileReader();\n reader_1.onloadend = function () {\n var isPopupBlocked = window.open(reader_1.result, '_blank');\n if (!isPopupBlocked) {\n window.location.href = reader_1.result;\n }\n };\n reader_1.readAsDataURL(buffer);\n }\n }\n };\n /**\n *\n * @param {string} extension - get mime type of the specified extension\n * @private\n */\n Save.getMimeType = function (extension) {\n var mimeType = '';\n switch (extension) {\n case 'html':\n mimeType = 'text/html';\n break;\n case 'pdf':\n mimeType = 'application/pdf';\n break;\n case 'docx':\n mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n break;\n case 'xlsx':\n mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n break;\n case 'txt':\n mimeType = 'text/plain';\n break;\n }\n return mimeType;\n };\n return Save;\n}());\nexport { Save };\n","import { Save } from './save';\n/**\n * XmlWriter class provide method to create XML data\n */\nvar XmlWriter = /** @class */ (function () {\n /**\n * Initialize new instance of {XmlWriter}\n */\n function XmlWriter() {\n this.contentPos = 0;\n this.bufferText = '';\n this.bufferBlob = new Blob([''], { type: 'text/plain' });\n this.currentState = 'Initial';\n this.namespaceStack = [];\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[0].set('xmlns', 'http://www.w3.org/2000/xmlns/', 'Special');\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[1].set('xml', 'http://www.w3.org/XML/1998/namespace', 'Special');\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[2].set('', '', 'Implied');\n this.elementStack = [];\n this.elementStack.push(new XmlElement());\n this.elementStack[0].set('', '', '', this.namespaceStack.length - 1);\n this.attributeStack = [];\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(XmlWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the {XmlWriter} as Blob.\n * @returns {Blob}\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Writes processing instruction with a space between the name and text\n * @param {string} name - name of the processing instruction\n * @param {string} text - text to write in the processing instruction\n * @throws ArgumentException\n * @throws InvalidArgumentException\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeProcessingInstruction = function (name, text) {\n if (name === undefined || name === null || name.length === 0) {\n throw new Error('ArgumentException: name should not be undefined, null or empty');\n }\n this.checkName(name);\n if (text === undefined || text === null) {\n text = '';\n }\n if (name.length === 3 && name === 'xml') {\n if (this.currentState !== 'Initial') {\n // tslint:disable-next-line:max-line-length\n throw new Error('InvalidArgumentException: Cannot write XML declaration.WriteStartDocument method has already written it');\n }\n }\n if (this.currentState !== 'Initial' || this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n else {\n this.writeStartDocument();\n this.writeProcessingInstructionInternal(name, text);\n }\n };\n /**\n * Writes Xml declaration with version and standalone attribute\n * @param {boolean} standalone - if true it write standalone=yes else standalone=no\n * @throws InvalidOperation\n */\n XmlWriter.prototype.writeStartDocument = function (standalone) {\n if (this.currentState !== 'Initial' || this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n this.currentState = 'StartDocument';\n this.rawText('');\n };\n /**\n * Closes any open tag or attribute and write the state back to start\n */\n XmlWriter.prototype.writeEndDocument = function () {\n while (this.elementStack.length - 1 > 0) {\n this.writeEndElement();\n }\n this.currentState = 'EndDocument';\n this.flush();\n };\n /**\n * Writes the specified start tag and associates it with the given namespace and prefix.\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName -localName of element\n * @param {string} namespace - namespace URI associate with element\n * @throws ArgumentException\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeStartElement = function (prefix, localName, namespace) {\n if (this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n if (localName === undefined || localName === null || localName.length === 0) {\n throw new Error('ArgumentException: localName cannot be undefined, null or empty');\n }\n this.checkName(localName);\n if (this.currentState === 'Initial') {\n this.writeStartDocument();\n }\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n }\n this.currentState = 'StartElement';\n if (prefix === undefined || prefix === null) {\n if (namespace !== undefined && namespace !== null) {\n prefix = this.lookupPrefix(namespace);\n }\n if (prefix === undefined || prefix === null) {\n prefix = '';\n }\n }\n else if (prefix.length > 0) {\n if (namespace === undefined || namespace === null) {\n namespace = this.lookupNamespace(prefix);\n }\n if (namespace === undefined || namespace === null || (namespace !== undefined && namespace.length === 0)) {\n throw new Error('ArgumentException: Cannot use a prefix with an empty namespace');\n }\n }\n if (namespace === undefined || namespace === null) {\n namespace = this.lookupNamespace(prefix);\n }\n this.writeStartElementInternal(prefix, localName, namespace);\n };\n /**\n * Closes one element and pop corresponding namespace scope\n */\n XmlWriter.prototype.writeEndElement = function () {\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n this.currentState = 'ElementContent';\n }\n else if (this.currentState === 'ElementContent') {\n this.currentState = 'ElementContent';\n }\n this.currentState = 'EndElement';\n var top = this.elementStack.length - 1;\n this.writeEndElementInternal(this.elementStack[top].prefix, this.elementStack[top].localName);\n this.namespaceStack.splice(this.elementStack[top].previousTop + 1);\n this.elementStack.splice(top);\n if (this.bufferText.length > 10240) {\n this.flush();\n }\n };\n /**\n * Writes an element with the specified prefix, local name, namespace URI, and value.\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName - localName of element\n * @param {string} namespace - namespace URI associate with element\n * @param {string} value - value of element\n */\n XmlWriter.prototype.writeElementString = function (prefix, localName, namespace, value) {\n this.writeStartElement(prefix, localName, namespace);\n if (value !== undefined && value !== null && value.length !== 0) {\n this.writeString(value);\n }\n this.writeEndElement();\n };\n /**\n * Writes out the attribute with the specified prefix, local name, namespace URI, and value\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName - localName of element\n * @param {string} namespace - namespace URI associate with element\n * @param {string} value - value of element\n */\n XmlWriter.prototype.writeAttributeString = function (prefix, localName, namespace, value) {\n this.writeStartAttribute(prefix, localName, namespace, value);\n this.writeStringInternal(value, true);\n this.writeEndAttribute();\n };\n /**\n * Writes the given text content\n * @param {string} text - text to write\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeString = function (text) {\n this.writeInternal(text, false);\n };\n /**\n * Write given text as raw data\n * @param {string} text - text to write\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeRaw = function (text) {\n this.writeInternal(text, true);\n };\n XmlWriter.prototype.writeInternal = function (text, isRawString) {\n if (text === undefined || text === null) {\n return;\n }\n else {\n if (this.currentState !== 'StartElement' && this.currentState !== 'ElementContent') {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n }\n this.currentState = 'ElementContent';\n if (isRawString) {\n this.rawText(text);\n }\n else {\n this.writeStringInternal(text, false);\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - file name\n */\n XmlWriter.prototype.save = function (fileName) {\n while (this.elementStack.length - 1 > 0) {\n this.writeEndElement();\n }\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Releases the resources used by XmlWriter.\n */\n XmlWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n for (var i = 0; i < this.namespaceStack.length; i++) {\n this.namespaceStack[i].destroy();\n }\n this.namespaceStack = [];\n for (var i = 0; i < this.elementStack.length; i++) {\n this.elementStack[i].destroy();\n }\n this.elementStack = [];\n this.bufferText = '';\n this.contentPos = 0;\n };\n XmlWriter.prototype.flush = function () {\n if (this.bufferBlob === undefined) {\n return;\n }\n this.bufferBlob = new Blob([this.bufferBlob, this.bufferText], { type: 'text/plain' });\n this.bufferText = '';\n };\n XmlWriter.prototype.writeProcessingInstructionInternal = function (name, text) {\n this.bufferText += ' 0) {\n this.bufferText += ' ';\n text = text.replace(/\\?\\>/g, '? >');\n this.bufferText += text;\n }\n this.bufferText += '?';\n this.bufferText += '>';\n };\n XmlWriter.prototype.writeStartAttribute = function (prefix, localName, namespace, value) {\n if (localName === undefined || localName === null || localName.length === 0) {\n if (prefix === 'xmlns') {\n localName = 'xmlns';\n prefix = '';\n }\n else {\n throw new Error('ArgumentException: localName cannot be undefined, null or empty');\n }\n }\n if (this.currentState !== 'StartElement') {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n this.checkName(localName);\n this.writeStartAttributePrefixAndNameSpace(prefix, localName, namespace, value);\n };\n XmlWriter.prototype.writeStartAttributePrefixAndNameSpace = function (prefix, localName, namespace, value) {\n if (prefix === undefined || prefix === null) {\n if (namespace !== undefined && namespace !== null) {\n if (!(localName === 'xmlns' && namespace === 'http://www.w3.org/2000/xmlns/')) {\n prefix = this.lookupPrefix(namespace);\n }\n }\n if (prefix === undefined || prefix === null) {\n prefix = '';\n }\n }\n if (namespace === undefined || namespace === null) {\n if (prefix !== undefined && prefix !== null && prefix.length > 0) {\n namespace = this.lookupNamespace(prefix);\n }\n if (namespace === undefined || namespace === null) {\n namespace = '';\n }\n }\n this.writeStartAttributeSpecialAttribute(prefix, localName, namespace, value);\n };\n XmlWriter.prototype.writeStartAttributeSpecialAttribute = function (prefix, localName, namespace, value) {\n if (prefix.length === 0) {\n if (localName[0] === 'x' && localName === 'xmlns') {\n this.skipPushAndWrite(prefix, localName, namespace);\n this.pushNamespaceExplicit('', value);\n return;\n }\n else if (namespace.length > 0) {\n prefix = this.lookupPrefix(namespace);\n }\n }\n else {\n if (prefix[0] === 'x') {\n if (prefix === 'xmlns') {\n this.skipPushAndWrite(prefix, localName, namespace);\n this.pushNamespaceExplicit(localName, value);\n return;\n }\n else if (prefix === 'xml') {\n if (localName === 'space' || localName === 'lang') {\n this.skipPushAndWrite(prefix, localName, namespace);\n return;\n }\n }\n }\n if (namespace.length === 0) {\n prefix = '';\n }\n }\n if (prefix !== undefined && prefix !== null && prefix.length !== 0) {\n this.pushNamespaceImplicit(prefix, namespace);\n }\n this.skipPushAndWrite(prefix, localName, namespace);\n };\n XmlWriter.prototype.writeEndAttribute = function () {\n this.currentState = 'StartElement';\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeStartElementInternal = function (prefix, localName, namespace) {\n this.bufferText += '<';\n if (prefix.length > 0) {\n this.rawText(prefix);\n this.bufferText += ':';\n }\n this.rawText(localName);\n var top = this.elementStack.length;\n this.elementStack.push(new XmlElement());\n this.elementStack[top].set(prefix, localName, namespace, this.namespaceStack.length - 1);\n this.pushNamespaceImplicit(prefix, namespace);\n for (var i = 0; i < this.attributeStack.length; i++) {\n this.attributeStack[i].destroy();\n }\n this.attributeStack = [];\n };\n XmlWriter.prototype.writeEndElementInternal = function (prefix, localName) {\n if (this.contentPos !== this.bufferText.length + 1) {\n this.bufferText += '';\n }\n else {\n this.bufferText = this.bufferText.substring(0, this.bufferText.length - 1);\n this.bufferText += ' />';\n }\n };\n XmlWriter.prototype.writeStartAttributeInternal = function (prefix, localName, namespaceName) {\n this.bufferText += ' ';\n if (prefix !== undefined && prefix !== null && prefix.length > 0) {\n this.rawText(prefix);\n this.bufferText += ':';\n }\n this.rawText(localName);\n this.bufferText += '=';\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeNamespaceDeclaration = function (prefix, namespaceUri) {\n this.writeStartNamespaceDeclaration(prefix);\n this.writeStringInternal(namespaceUri, true);\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeStartNamespaceDeclaration = function (prefix) {\n if (prefix === undefined || prefix === null || prefix.length === 0) {\n this.rawText(' xmlns=\\\"');\n }\n else {\n this.rawText(' xmlns:');\n this.rawText(prefix);\n this.bufferText += '=';\n this.bufferText += '\"';\n }\n };\n XmlWriter.prototype.writeStringInternal = function (text, inAttributeValue) {\n if (text === null || text === undefined) {\n text = '';\n }\n var tempText = '';\n text = text.replace(/\\&/g, '&');\n text = text.replace(/\\/g, '>');\n if (inAttributeValue) {\n text = text.replace(/\\\"/g, '"');\n }\n this.bufferText += text;\n if (!inAttributeValue) {\n this.contentPos = 0;\n }\n };\n XmlWriter.prototype.startElementContent = function () {\n var start = this.elementStack[this.elementStack.length - 1].previousTop;\n for (var i = this.namespaceStack.length - 1; i > start; i--) {\n if (this.namespaceStack[i].kind === 'NeedToWrite') {\n this.writeNamespaceDeclaration(this.namespaceStack[i].prefix, this.namespaceStack[i].namespaceUri);\n }\n }\n this.bufferText += '>';\n this.contentPos = this.bufferText.length + 1;\n };\n XmlWriter.prototype.rawText = function (text) {\n this.bufferText += text;\n };\n XmlWriter.prototype.addNamespace = function (prefix, ns, kind) {\n var top = this.namespaceStack.length;\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[top].set(prefix, ns, kind);\n };\n XmlWriter.prototype.lookupPrefix = function (namespace) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].namespaceUri === namespace) {\n return this.namespaceStack[i].prefix;\n }\n }\n return undefined;\n };\n XmlWriter.prototype.lookupNamespace = function (prefix) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].prefix === prefix) {\n return this.namespaceStack[i].namespaceUri;\n }\n }\n return undefined;\n };\n XmlWriter.prototype.lookupNamespaceIndex = function (prefix) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].prefix === prefix) {\n return i;\n }\n }\n return -1;\n };\n XmlWriter.prototype.pushNamespaceImplicit = function (prefix, ns) {\n var kind;\n var existingNsIndex = this.lookupNamespaceIndex(prefix);\n if (existingNsIndex !== -1) {\n if (existingNsIndex > this.elementStack[this.elementStack.length - 1].previousTop) {\n if (this.namespaceStack[existingNsIndex].namespaceUri !== ns) {\n throw new Error('XmlException namespace Uri needs to be the same as the one that is already declared');\n }\n return;\n }\n else {\n if (this.namespaceStack[existingNsIndex].kind === 'Special') {\n if (prefix === 'xml') {\n if (ns !== this.namespaceStack[existingNsIndex].namespaceUri) {\n throw new Error('InvalidArgumentException: Xml String');\n }\n else {\n kind = 'Implied';\n }\n }\n else {\n throw new Error('InvalidArgumentException: Prefix \"xmlns\" is reserved for use by XML.');\n }\n }\n else {\n kind = (this.namespaceStack[existingNsIndex].namespaceUri === ns) ? 'Implied' : 'NeedToWrite';\n }\n }\n }\n else {\n if ((ns === 'http://www.w3.org/XML/1998/namespace' && prefix !== 'xml') ||\n (ns === 'http://www.w3.org/2000/xmlns/' && prefix !== 'xmlns')) {\n throw new Error('InvalidArgumentException');\n }\n kind = 'NeedToWrite';\n }\n this.addNamespace(prefix, ns, kind);\n };\n XmlWriter.prototype.pushNamespaceExplicit = function (prefix, ns) {\n var existingNsIndex = this.lookupNamespaceIndex(prefix);\n if (existingNsIndex !== -1) {\n if (existingNsIndex > this.elementStack[this.elementStack.length - 1].previousTop) {\n this.namespaceStack[existingNsIndex].kind = 'Written';\n return;\n }\n }\n this.addNamespace(prefix, ns, 'Written');\n return;\n };\n XmlWriter.prototype.addAttribute = function (prefix, localName, namespaceName) {\n var top = this.attributeStack.length;\n this.attributeStack.push(new XmlAttribute());\n this.attributeStack[top].set(prefix, localName, namespaceName);\n for (var i = 0; i < top; i++) {\n if (this.attributeStack[i].isDuplicate(prefix, localName, namespaceName)) {\n throw new Error('XmlException: duplicate attribute name');\n }\n }\n };\n XmlWriter.prototype.skipPushAndWrite = function (prefix, localName, namespace) {\n this.addAttribute(prefix, localName, namespace);\n this.writeStartAttributeInternal(prefix, localName, namespace);\n };\n XmlWriter.prototype.checkName = function (text) {\n var format = /[ !@#$%^&*()+\\=\\[\\]{};':\"\\\\|,<>\\/?]/;\n if (format.test(text)) {\n throw new Error('InvalidArgumentException: invalid name character');\n }\n };\n return XmlWriter;\n}());\nexport { XmlWriter };\n/**\n * class for managing namespace collection\n */\nvar Namespace = /** @class */ (function () {\n function Namespace() {\n }\n /**\n * set value for current namespace instance\n * @param {string} prefix namespace's prefix\n * @param {string} namespaceUri namespace URI\n * @param {string} kind namespace kind\n */\n Namespace.prototype.set = function (prefix, namespaceUri, kind) {\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.kind = kind;\n };\n /**\n * Releases the resources used by Namespace\n */\n Namespace.prototype.destroy = function () {\n this.prefix = undefined;\n this.namespaceUri = undefined;\n this.kind = undefined;\n };\n return Namespace;\n}());\nexport { Namespace };\n/**\n * class for managing element collection\n */\nvar XmlElement = /** @class */ (function () {\n function XmlElement() {\n }\n /**\n * set value of current element\n * @param {string} prefix - element prefix\n * @param {string} localName - element local name\n * @param {string} namespaceUri -namespace URI\n * @param {string} previousTop - previous namespace top\n */\n XmlElement.prototype.set = function (prefix, localName, namespaceUri, previousTop) {\n this.previousTop = previousTop;\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.localName = localName;\n };\n /**\n * Releases the resources used by XmlElement\n */\n XmlElement.prototype.destroy = function () {\n this.previousTop = undefined;\n this.prefix = undefined;\n this.localName = undefined;\n this.namespaceUri = undefined;\n };\n return XmlElement;\n}());\nexport { XmlElement };\n/**\n * class for managing attribute collection\n */\nvar XmlAttribute = /** @class */ (function () {\n function XmlAttribute() {\n }\n /**\n * set value of current attribute\n * @param {string} prefix - namespace's prefix\n * @param {string} namespaceUri - namespace URI\n * @param {string} localName - attribute localName\n */\n XmlAttribute.prototype.set = function (prefix, localName, namespaceUri) {\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.localName = localName;\n };\n /**\n * get whether the attribute is duplicate or not\n * @param {string} prefix - namespace's prefix\n * @param {string} namespaceUri - namespace URI\n * @param {string} localName - attribute localName\n */\n XmlAttribute.prototype.isDuplicate = function (prefix, localName, namespaceUri) {\n return ((this.localName === localName) && ((this.prefix === prefix) || (this.namespaceUri === namespaceUri)));\n };\n /**\n * Releases the resources used by XmlAttribute\n */\n XmlAttribute.prototype.destroy = function () {\n this.prefix = undefined;\n this.namespaceUri = undefined;\n this.localName = undefined;\n };\n return XmlAttribute;\n}());\nexport { XmlAttribute };\n","import { Encoding, validateNullOrUndefined } from './encoding';\nimport { Save } from './save';\n/**\n * StreamWriter class contains the implementation for writing characters to a file in a particular encoding\n * ```typescript\n * let writer = new StreamWriter();\n * writer.write('Hello World');\n * writer.save('Sample.txt');\n * writer.dispose();\n * ```\n */\nvar StreamWriter = /** @class */ (function () {\n /**\n * Initializes a new instance of the StreamWriter class by using the specified encoding.\n * @param {Encoding} encoding?- The character encoding to use.\n */\n function StreamWriter(encoding) {\n this.bufferBlob = new Blob(['']);\n this.bufferText = '';\n this.init(encoding);\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(StreamWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the StreamWriter as Blob.\n * @returns Blob\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StreamWriter.prototype, \"encoding\", {\n /**\n * Gets the encoding.\n * @returns Encoding\n */\n get: function () {\n return this.enc;\n },\n enumerable: true,\n configurable: true\n });\n StreamWriter.prototype.init = function (encoding) {\n if (encoding === null || encoding === undefined) {\n this.enc = new Encoding(false);\n this.enc.type = 'Utf8';\n }\n else {\n this.enc = encoding;\n this.setBomByte();\n }\n };\n /**\n * Private method to set Byte Order Mark(BOM) value based on EncodingType\n */\n StreamWriter.prototype.setBomByte = function () {\n if (this.encoding.includeBom) {\n switch (this.encoding.type) {\n case 'Unicode':\n var arrayUnicode = new ArrayBuffer(2);\n var uint8 = new Uint8Array(arrayUnicode);\n uint8[0] = 255;\n uint8[1] = 254;\n this.bufferBlob = new Blob([arrayUnicode]);\n break;\n case 'Utf8':\n var arrayUtf8 = new ArrayBuffer(3);\n var utf8 = new Uint8Array(arrayUtf8);\n utf8[0] = 239;\n utf8[1] = 187;\n utf8[2] = 191;\n this.bufferBlob = new Blob([arrayUtf8]);\n break;\n default:\n this.bufferBlob = new Blob(['']);\n break;\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - The file name to save\n * @returns {void}\n */\n StreamWriter.prototype.save = function (fileName) {\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Writes the specified string.\n * @param {string} value - The string to write. If value is null or undefined, nothing is written.\n * @returns {void}\n */\n StreamWriter.prototype.write = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText += value;\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n StreamWriter.prototype.flush = function () {\n if (this.bufferText === undefined || this.bufferText === null || this.bufferText.length === 0) {\n return;\n }\n var bufferArray = this.encoding.getBytes(this.bufferText, 0, this.bufferText.length);\n this.bufferText = '';\n this.bufferBlob = new Blob([this.bufferBlob, bufferArray]);\n };\n /**\n * Writes the specified string followed by a line terminator\n * @param {string} value - The string to write. If value is null or undefined, nothing is written\n * @returns {void}\n */\n StreamWriter.prototype.writeLine = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText = this.bufferText + value + '\\r\\n';\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n /**\n * Releases the resources used by the StreamWriter\n * @returns {void}\n */\n StreamWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n this.bufferText = undefined;\n if (this.enc instanceof Encoding) {\n this.enc.destroy();\n }\n this.enc = undefined;\n };\n return StreamWriter;\n}());\nexport { StreamWriter };\n","import { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * array literal codes\n */\nvar ARR_LITERAL_CODES = new Int16Array(286);\nvar ARR_LITERAL_LENGTHS = new Uint8Array(286);\nvar ARR_DISTANCE_CODES = new Int16Array(30);\nvar ARR_DISTANCE_LENGTHS = new Uint8Array(30);\n/**\n * represent compression stream writer\n * ```typescript\n * let compressedWriter = new CompressedStreamWriter();\n * let text: string = 'Hello world!!!';\n * compressedWriter.write(text, 0, text.length);\n * compressedWriter.close();\n * ```\n */\nvar CompressedStreamWriter = /** @class */ (function () {\n /**\n * Initializes compressor and writes ZLib header if needed.\n * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n */\n function CompressedStreamWriter(noWrap) {\n this.pendingBuffer = new Uint8Array(1 << 16);\n this.pendingBufLength = 0;\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.currentHash = 0;\n this.matchStart = 0;\n this.matchLength = 0;\n this.matchPrevAvail = false;\n this.blockStart = 0;\n this.stringStart = 0;\n this.lookAhead = 0;\n this.totalBytesIn = 0;\n this.inputOffset = 0;\n this.inputEnd = 0;\n this.windowSize = 1 << 15;\n this.windowMask = this.windowSize - 1;\n this.hashSize = 1 << 15;\n this.hashMask = this.hashSize - 1;\n this.hashShift = Math.floor((15 + 3 - 1) / 3);\n this.maxDist = this.windowSize - 262;\n this.checkSum = 1;\n this.noWrap = false;\n if (!CompressedStreamWriter.isHuffmanTreeInitiated) {\n CompressedStreamWriter.initHuffmanTree();\n CompressedStreamWriter.isHuffmanTreeInitiated = true;\n }\n this.treeLiteral = new CompressorHuffmanTree(this, 286, 257, 15);\n this.treeDistances = new CompressorHuffmanTree(this, 30, 1, 15);\n this.treeCodeLengths = new CompressorHuffmanTree(this, 19, 4, 7);\n this.arrDistances = new Uint16Array((1 << 14));\n this.arrLiterals = new Uint8Array((1 << 14));\n this.stream = [];\n this.dataWindow = new Uint8Array(2 * this.windowSize);\n this.hashHead = new Int16Array(this.hashSize);\n this.hashPrevious = new Int16Array(this.windowSize);\n this.blockStart = this.stringStart = 1;\n this.noWrap = noWrap;\n if (!noWrap) {\n this.writeZLibHeader();\n }\n }\n Object.defineProperty(CompressedStreamWriter.prototype, \"compressedData\", {\n /**\n * get compressed data\n */\n get: function () {\n return this.stream;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressedStreamWriter.prototype, \"getCompressedString\", {\n get: function () {\n var compressedString = '';\n if (this.stream !== undefined) {\n for (var i = 0; i < this.stream.length; i++) {\n compressedString += String.fromCharCode.apply(null, this.stream[i]);\n }\n }\n return compressedString;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Compresses data and writes it to the stream.\n * @param {Uint8Array} data - data to compress\n * @param {number} offset - offset in data\n * @param {number} length - length of the data\n * @returns {void}\n */\n CompressedStreamWriter.prototype.write = function (data, offset, length) {\n if (data === undefined || data === null) {\n throw new Error('ArgumentException: data cannot null or undefined');\n }\n var end = offset + length;\n if (0 > offset || offset > end || end > data.length) {\n throw new Error('ArgumentOutOfRangeException: Offset or length is incorrect');\n }\n if (typeof data === 'string') {\n var encode = new Encoding(false);\n encode.type = 'Utf8';\n data = new Uint8Array(encode.getBytes(data, 0, data.length));\n end = offset + data.length;\n }\n this.inputBuffer = data;\n this.inputOffset = offset;\n this.inputEnd = end;\n if (!this.noWrap) {\n this.checkSum = ChecksumCalculator.checksumUpdate(this.checkSum, this.inputBuffer, this.inputOffset, end);\n }\n while (!(this.inputEnd === this.inputOffset) || !(this.pendingBufLength === 0)) {\n this.pendingBufferFlush();\n this.compressData(false);\n }\n };\n /**\n * write ZLib header to the compressed data\n * @return {void}\n */\n CompressedStreamWriter.prototype.writeZLibHeader = function () {\n /* Initialize header.*/\n var headerDate = (8 + (7 << 4)) << 8;\n /* Save compression level.*/\n headerDate |= ((5 >> 2) & 3) << 6;\n /* Align header.*/\n headerDate += 31 - (headerDate % 31);\n /* Write header to stream.*/\n this.pendingBufferWriteShortBytes(headerDate);\n };\n /**\n * Write Most Significant Bytes in to stream\n * @param {number} s - check sum value\n */\n CompressedStreamWriter.prototype.pendingBufferWriteShortBytes = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s >> 8;\n this.pendingBuffer[this.pendingBufLength++] = s;\n };\n CompressedStreamWriter.prototype.compressData = function (finish) {\n var success;\n do {\n this.fillWindow();\n var canFlush = (finish && this.inputEnd === this.inputOffset);\n success = this.compressSlow(canFlush, finish);\n } while (this.pendingBufLength === 0 && success);\n return success;\n };\n CompressedStreamWriter.prototype.compressSlow = function (flush, finish) {\n if (this.lookAhead < 262 && !flush) {\n return false;\n }\n while (this.lookAhead >= 262 || flush) {\n if (this.lookAhead === 0) {\n return this.lookAheadCompleted(finish);\n }\n if (this.stringStart >= 2 * this.windowSize - 262) {\n this.slideWindow();\n }\n var prevMatch = this.matchStart;\n var prevLen = this.matchLength;\n if (this.lookAhead >= 3) {\n this.discardMatch();\n }\n if (prevLen >= 3 && this.matchLength <= prevLen) {\n prevLen = this.matchPreviousBest(prevMatch, prevLen);\n }\n else {\n this.matchPreviousAvailable();\n }\n if (this.bufferPosition >= (1 << 14)) {\n return this.huffmanIsFull(finish);\n }\n }\n return true;\n };\n CompressedStreamWriter.prototype.discardMatch = function () {\n var hashHead = this.insertString();\n if (hashHead !== 0 && this.stringStart - hashHead <= this.maxDist && this.findLongestMatch(hashHead)) {\n if (this.matchLength <= 5 && (this.matchLength === 3 && this.stringStart - this.matchStart > 4096)) {\n this.matchLength = 3 - 1;\n }\n }\n };\n CompressedStreamWriter.prototype.matchPreviousAvailable = function () {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = true;\n this.stringStart++;\n this.lookAhead--;\n };\n CompressedStreamWriter.prototype.matchPreviousBest = function (prevMatch, prevLen) {\n this.huffmanTallyDist(this.stringStart - 1 - prevMatch, prevLen);\n prevLen -= 2;\n do {\n this.stringStart++;\n this.lookAhead--;\n if (this.lookAhead >= 3) {\n this.insertString();\n }\n } while (--prevLen > 0);\n this.stringStart++;\n this.lookAhead--;\n this.matchPrevAvail = false;\n this.matchLength = 3 - 1;\n return prevLen;\n };\n CompressedStreamWriter.prototype.lookAheadCompleted = function (finish) {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = false;\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, this.stringStart - this.blockStart, finish);\n this.blockStart = this.stringStart;\n return false;\n };\n CompressedStreamWriter.prototype.huffmanIsFull = function (finish) {\n var len = this.stringStart - this.blockStart;\n if (this.matchPrevAvail) {\n len--;\n }\n var lastBlock = (finish && this.lookAhead === 0 && !this.matchPrevAvail);\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, len, lastBlock);\n this.blockStart += len;\n return !lastBlock;\n };\n CompressedStreamWriter.prototype.fillWindow = function () {\n if (this.stringStart >= this.windowSize + this.maxDist) {\n this.slideWindow();\n }\n while (this.lookAhead < 262 && this.inputOffset < this.inputEnd) {\n var more = 2 * this.windowSize - this.lookAhead - this.stringStart;\n if (more > this.inputEnd - this.inputOffset) {\n more = this.inputEnd - this.inputOffset;\n }\n this.dataWindow.set(this.inputBuffer.subarray(this.inputOffset, this.inputOffset + more), this.stringStart + this.lookAhead);\n this.inputOffset += more;\n this.totalBytesIn += more;\n this.lookAhead += more;\n }\n if (this.lookAhead >= 3) {\n this.updateHash();\n }\n };\n CompressedStreamWriter.prototype.slideWindow = function () {\n this.dataWindow.set(this.dataWindow.subarray(this.windowSize, this.windowSize + this.windowSize), 0);\n this.matchStart -= this.windowSize;\n this.stringStart -= this.windowSize;\n this.blockStart -= this.windowSize;\n for (var i = 0; i < this.hashSize; ++i) {\n var m = this.hashHead[i] & 0xffff;\n this.hashHead[i] = (((m >= this.windowSize) ? (m - this.windowSize) : 0));\n }\n for (var i = 0; i < this.windowSize; i++) {\n var m = this.hashPrevious[i] & 0xffff;\n this.hashPrevious[i] = ((m >= this.windowSize) ? (m - this.windowSize) : 0);\n }\n };\n CompressedStreamWriter.prototype.insertString = function () {\n var match;\n var hash = ((this.currentHash << this.hashShift) ^ this.dataWindow[this.stringStart + (3 - 1)]) & this.hashMask;\n this.hashPrevious[this.stringStart & this.windowMask] = match = this.hashHead[hash];\n this.hashHead[hash] = this.stringStart;\n this.currentHash = hash;\n return match & 0xffff;\n };\n CompressedStreamWriter.prototype.findLongestMatch = function (curMatch) {\n var chainLen = 4096;\n var niceLen = 258;\n var scan = this.stringStart;\n var match;\n var bestEnd = this.stringStart + this.matchLength;\n var bestLength = Math.max(this.matchLength, 3 - 1);\n var limit = Math.max(this.stringStart - this.maxDist, 0);\n var stringEnd = this.stringStart + 258 - 1;\n var scanEnd1 = this.dataWindow[bestEnd - 1];\n var scanEnd = this.dataWindow[bestEnd];\n var data = this.dataWindow;\n if (bestLength >= 32) {\n chainLen >>= 2;\n }\n if (niceLen > this.lookAhead) {\n niceLen = this.lookAhead;\n }\n do {\n if (data[curMatch + bestLength] !== scanEnd ||\n data[curMatch + bestLength - 1] !== scanEnd1 ||\n data[curMatch] !== data[scan] ||\n data[curMatch + 1] !== data[scan + 1]) {\n continue;\n }\n match = curMatch + 2;\n scan += 2;\n /* tslint:disable */\n while (data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] && scan < stringEnd) {\n /* tslint:disable */\n }\n if (scan > bestEnd) {\n this.matchStart = curMatch;\n bestEnd = scan;\n bestLength = scan - this.stringStart;\n if (bestLength >= niceLen) {\n break;\n }\n scanEnd1 = data[bestEnd - 1];\n scanEnd = data[bestEnd];\n }\n scan = this.stringStart;\n } while ((curMatch = (this.hashPrevious[curMatch & this.windowMask] & 0xffff)) > limit && --chainLen !== 0);\n this.matchLength = Math.min(bestLength, this.lookAhead);\n return this.matchLength >= 3;\n };\n CompressedStreamWriter.prototype.updateHash = function () {\n this.currentHash = (this.dataWindow[this.stringStart] << this.hashShift) ^ this.dataWindow[this.stringStart + 1];\n };\n CompressedStreamWriter.prototype.huffmanTallyLit = function (literal) {\n this.arrDistances[this.bufferPosition] = 0;\n this.arrLiterals[this.bufferPosition++] = literal;\n this.treeLiteral.codeFrequencies[literal]++;\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanTallyDist = function (dist, len) {\n this.arrDistances[this.bufferPosition] = dist;\n this.arrLiterals[this.bufferPosition++] = (len - 3);\n var lc = this.huffmanLengthCode(len - 3);\n this.treeLiteral.codeFrequencies[lc]++;\n if (lc >= 265 && lc < 285) {\n this.extraBits += Math.floor((lc - 261) / 4);\n }\n var dc = this.huffmanDistanceCode(dist - 1);\n this.treeDistances.codeFrequencies[dc]++;\n if (dc >= 4) {\n this.extraBits += Math.floor((dc / 2 - 1));\n }\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanFlushBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.treeLiteral.codeFrequencies[256]++;\n this.treeLiteral.buildTree();\n this.treeDistances.buildTree();\n this.treeLiteral.calculateBLFreq(this.treeCodeLengths);\n this.treeDistances.calculateBLFreq(this.treeCodeLengths);\n this.treeCodeLengths.buildTree();\n var blTreeCodes = 4;\n for (var i = 18; i > blTreeCodes; i--) {\n if (this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[i]] > 0) {\n blTreeCodes = i + 1;\n }\n }\n var opt_len = 14 + blTreeCodes * 3 + this.treeCodeLengths.getEncodedLength() +\n this.treeLiteral.getEncodedLength() + this.treeDistances.getEncodedLength() + this.extraBits;\n var static_len = this.extraBits;\n for (var i = 0; i < 286; i++) {\n static_len += this.treeLiteral.codeFrequencies[i] * ARR_LITERAL_LENGTHS[i];\n }\n for (var i = 0; i < 30; i++) {\n static_len += this.treeDistances.codeFrequencies[i] * ARR_DISTANCE_LENGTHS[i];\n }\n if (opt_len >= static_len) {\n // Force static trees.\n opt_len = static_len;\n }\n if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) {\n this.huffmanFlushStoredBlock(stored, storedOffset, storedLength, lastBlock);\n }\n else if (opt_len == static_len) {\n // Encode with static tree.\n this.pendingBufferWriteBits((1 << 1) + (lastBlock ? 1 : 0), 3);\n this.treeLiteral.setStaticCodes(ARR_LITERAL_CODES, ARR_LITERAL_LENGTHS);\n this.treeDistances.setStaticCodes(ARR_DISTANCE_CODES, ARR_DISTANCE_LENGTHS);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n else {\n this.pendingBufferWriteBits((2 << 1) + (lastBlock ? 1 : 0), 3);\n this.huffmanSendAllTrees(blTreeCodes);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n };\n CompressedStreamWriter.prototype.huffmanFlushStoredBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.pendingBufferWriteBits((0 << 1) + (lastBlock ? 1 : 0), 3);\n this.pendingBufferAlignToByte();\n this.pendingBufferWriteShort(storedLength);\n this.pendingBufferWriteShort(~storedLength);\n this.pendingBufferWriteByteBlock(stored, storedOffset, storedLength);\n this.huffmanReset();\n };\n CompressedStreamWriter.prototype.huffmanLengthCode = function (len) {\n if (len === 255) {\n return 285;\n }\n var code = 257;\n while (len >= 8) {\n code += 4;\n len >>= 1;\n }\n return code + len;\n };\n CompressedStreamWriter.prototype.huffmanDistanceCode = function (distance) {\n var code = 0;\n while (distance >= 4) {\n code += 2;\n distance >>= 1;\n }\n return code + distance;\n };\n CompressedStreamWriter.prototype.huffmanSendAllTrees = function (blTreeCodes) {\n this.treeCodeLengths.buildCodes();\n this.treeLiteral.buildCodes();\n this.treeDistances.buildCodes();\n this.pendingBufferWriteBits(this.treeLiteral.treeLength - 257, 5);\n this.pendingBufferWriteBits(this.treeDistances.treeLength - 1, 5);\n this.pendingBufferWriteBits(blTreeCodes - 4, 4);\n for (var rank = 0; rank < blTreeCodes; rank++) {\n this.pendingBufferWriteBits(this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[rank]], 3);\n }\n this.treeLiteral.writeTree(this.treeCodeLengths);\n this.treeDistances.writeTree(this.treeCodeLengths);\n };\n CompressedStreamWriter.prototype.huffmanReset = function () {\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.treeLiteral.reset();\n this.treeDistances.reset();\n this.treeCodeLengths.reset();\n };\n CompressedStreamWriter.prototype.huffmanCompressBlock = function () {\n for (var i = 0; i < this.bufferPosition; i++) {\n var literalLen = this.arrLiterals[i] & 255;\n var dist = this.arrDistances[i];\n if (dist-- !== 0) {\n var lc = this.huffmanLengthCode(literalLen);\n this.treeLiteral.writeCodeToStream(lc);\n var bits = Math.floor((lc - 261) / 4);\n if (bits > 0 && bits <= 5) {\n this.pendingBufferWriteBits(literalLen & ((1 << bits) - 1), bits);\n }\n var dc = this.huffmanDistanceCode(dist);\n this.treeDistances.writeCodeToStream(dc);\n bits = Math.floor(dc / 2 - 1);\n if (bits > 0) {\n this.pendingBufferWriteBits(dist & ((1 << bits) - 1), bits);\n }\n }\n else {\n this.treeLiteral.writeCodeToStream(literalLen);\n }\n }\n this.treeLiteral.writeCodeToStream(256);\n };\n /**\n * write bits in to internal buffer\n * @param {number} b - source of bits\n * @param {number} count - count of bits to write\n */\n CompressedStreamWriter.prototype.pendingBufferWriteBits = function (b, count) {\n var uint = new Uint32Array(1);\n uint[0] = this.pendingBufCache | (b << this.pendingBufBitsInCache);\n this.pendingBufCache = uint[0];\n this.pendingBufBitsInCache += count;\n this.pendingBufferFlushBits();\n };\n CompressedStreamWriter.prototype.pendingBufferFlush = function (isClose) {\n this.pendingBufferFlushBits();\n if (this.pendingBufLength > 0) {\n var array = new Uint8Array(this.pendingBufLength);\n array.set(this.pendingBuffer.subarray(0, this.pendingBufLength), 0);\n this.stream.push(array);\n }\n this.pendingBufLength = 0;\n };\n CompressedStreamWriter.prototype.pendingBufferFlushBits = function () {\n var result = 0;\n while (this.pendingBufBitsInCache >= 8 && this.pendingBufLength < (1 << 16)) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n this.pendingBufCache >>= 8;\n this.pendingBufBitsInCache -= 8;\n result++;\n }\n return result;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteByteBlock = function (data, offset, length) {\n var array = data.subarray(offset, offset + length);\n this.pendingBuffer.set(array, this.pendingBufLength);\n this.pendingBufLength += length;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteShort = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s;\n this.pendingBuffer[this.pendingBufLength++] = (s >> 8);\n };\n CompressedStreamWriter.prototype.pendingBufferAlignToByte = function () {\n if (this.pendingBufBitsInCache > 0) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n }\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n };\n /**\n * Huffman Tree literal calculation\n * @private\n */\n CompressedStreamWriter.initHuffmanTree = function () {\n var i = 0;\n while (i < 144) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x030 + i) << 8);\n ARR_LITERAL_LENGTHS[i++] = 8;\n }\n while (i < 256) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x190 - 144 + i) << 7);\n ARR_LITERAL_LENGTHS[i++] = 9;\n }\n while (i < 280) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x000 - 256 + i) << 9);\n ARR_LITERAL_LENGTHS[i++] = 7;\n }\n while (i < 286) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x0c0 - 280 + i) << 8);\n ARR_LITERAL_LENGTHS[i++] = 8;\n }\n for (i = 0; i < 30; i++) {\n ARR_DISTANCE_CODES[i] = CompressorHuffmanTree.bitReverse(i << 11);\n ARR_DISTANCE_LENGTHS[i] = 5;\n }\n };\n /**\n * close the stream and write all pending buffer in to stream\n * @returns {void}\n */\n CompressedStreamWriter.prototype.close = function () {\n do {\n this.pendingBufferFlush(true);\n if (!this.compressData(true)) {\n this.pendingBufferFlush(true);\n this.pendingBufferAlignToByte();\n if (!this.noWrap) {\n this.pendingBufferWriteShortBytes(this.checkSum >> 16);\n this.pendingBufferWriteShortBytes(this.checkSum & 0xffff);\n }\n this.pendingBufferFlush(true);\n }\n } while (!(this.inputEnd === this.inputOffset) ||\n !(this.pendingBufLength === 0));\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n CompressedStreamWriter.prototype.destroy = function () {\n this.stream = [];\n this.stream = undefined;\n this.pendingBuffer = undefined;\n this.treeLiteral = undefined;\n this.treeDistances = undefined;\n this.treeCodeLengths = undefined;\n this.arrLiterals = undefined;\n this.arrDistances = undefined;\n this.hashHead = undefined;\n this.hashPrevious = undefined;\n this.dataWindow = undefined;\n this.inputBuffer = undefined;\n this.pendingBufLength = undefined;\n this.pendingBufCache = undefined;\n this.pendingBufBitsInCache = undefined;\n this.bufferPosition = undefined;\n this.extraBits = undefined;\n this.currentHash = undefined;\n this.matchStart = undefined;\n this.matchLength = undefined;\n this.matchPrevAvail = undefined;\n this.blockStart = undefined;\n this.stringStart = undefined;\n this.lookAhead = undefined;\n this.totalBytesIn = undefined;\n this.inputOffset = undefined;\n this.inputEnd = undefined;\n this.windowSize = undefined;\n this.windowMask = undefined;\n this.hashSize = undefined;\n this.hashMask = undefined;\n this.hashShift = undefined;\n this.maxDist = undefined;\n this.checkSum = undefined;\n this.noWrap = undefined;\n };\n CompressedStreamWriter.isHuffmanTreeInitiated = false;\n return CompressedStreamWriter;\n}());\nexport { CompressedStreamWriter };\n/**\n * represent the Huffman Tree\n */\nvar CompressorHuffmanTree = /** @class */ (function () {\n /**\n * Create new Huffman Tree\n * @param {CompressedStreamWriter} writer instance\n * @param {number} elementCount - element count\n * @param {number} minCodes - minimum count\n * @param {number} maxLength - maximum count\n */\n function CompressorHuffmanTree(writer, elementCount, minCodes, maxLength) {\n this.writer = writer;\n this.codeMinCount = minCodes;\n this.maxLength = maxLength;\n this.codeFrequency = new Uint16Array(elementCount);\n this.lengthCount = new Int32Array(maxLength);\n }\n Object.defineProperty(CompressorHuffmanTree.prototype, \"treeLength\", {\n get: function () {\n return this.codeCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeLengths\", {\n get: function () {\n return this.codeLength;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeFrequencies\", {\n get: function () {\n return this.codeFrequency;\n },\n enumerable: true,\n configurable: true\n });\n CompressorHuffmanTree.prototype.setStaticCodes = function (codes, lengths) {\n var temp = new Int16Array(codes.length);\n temp.set(codes, 0);\n this.codes = temp;\n var lengthTemp = new Uint8Array(lengths.length);\n lengthTemp.set(lengths, 0);\n this.codeLength = lengthTemp;\n };\n /**\n * reset all code data in tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.reset = function () {\n for (var i = 0; i < this.codeFrequency.length; i++) {\n this.codeFrequency[i] = 0;\n }\n this.codes = undefined;\n this.codeLength = undefined;\n };\n /**\n * write code to the compressor output stream\n * @param {number} code - code to be written\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeCodeToStream = function (code) {\n this.writer.pendingBufferWriteBits(this.codes[code] & 0xffff, this.codeLength[code]);\n };\n /**\n * calculate code from their frequencies\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildCodes = function () {\n var nextCode = new Int32Array(this.maxLength);\n this.codes = new Int16Array(this.codeCount);\n var code = 0;\n for (var bitsCount = 0; bitsCount < this.maxLength; bitsCount++) {\n nextCode[bitsCount] = code;\n code += this.lengthCount[bitsCount] << (15 - bitsCount);\n }\n for (var i = 0; i < this.codeCount; i++) {\n var bits = this.codeLength[i];\n if (bits > 0) {\n this.codes[i] = CompressorHuffmanTree.bitReverse(nextCode[bits - 1]);\n nextCode[bits - 1] += 1 << (16 - bits);\n }\n }\n };\n CompressorHuffmanTree.bitReverse = function (value) {\n return (CompressorHuffmanTree.reverseBits[value & 15] << 12\n | CompressorHuffmanTree.reverseBits[(value >> 4) & 15] << 8\n | CompressorHuffmanTree.reverseBits[(value >> 8) & 15] << 4\n | CompressorHuffmanTree.reverseBits[value >> 12]);\n };\n /**\n * calculate length of compressed data\n * @returns {number}\n */\n CompressorHuffmanTree.prototype.getEncodedLength = function () {\n var len = 0;\n for (var i = 0; i < this.codeFrequency.length; i++) {\n len += this.codeFrequency[i] * this.codeLength[i];\n }\n return len;\n };\n /**\n * calculate code frequencies\n * @param {CompressorHuffmanTree} blTree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.calculateBLFreq = function (blTree) {\n var maxCount;\n var minCount;\n var count;\n var curLen = -1;\n var i = 0;\n while (i < this.codeCount) {\n count = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxCount = 138;\n minCount = 3;\n }\n else {\n maxCount = 6;\n minCount = 3;\n if (curLen !== nextLen) {\n blTree.codeFrequency[nextLen]++;\n count = 0;\n }\n }\n curLen = nextLen;\n i++;\n while (i < this.codeCount && curLen === this.codeLength[i]) {\n i++;\n if (++count >= maxCount) {\n break;\n }\n }\n if (count < minCount) {\n blTree.codeFrequency[curLen] += count;\n }\n else if (curLen !== 0) {\n blTree.codeFrequency[16]++;\n }\n else if (count <= 10) {\n blTree.codeFrequency[17]++;\n }\n else {\n blTree.codeFrequency[18]++;\n }\n }\n };\n /**\n * @param {CompressorHuffmanTree} blTree - write tree to output stream\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeTree = function (blTree) {\n var maxRepeatCount;\n var minRepeatCount;\n var currentRepeatCount;\n var currentCodeLength = -1;\n var i = 0;\n while (i < this.codeCount) {\n currentRepeatCount = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxRepeatCount = 138;\n minRepeatCount = 3;\n }\n else {\n maxRepeatCount = 6;\n minRepeatCount = 3;\n if (currentCodeLength !== nextLen) {\n blTree.writeCodeToStream(nextLen);\n currentRepeatCount = 0;\n }\n }\n currentCodeLength = nextLen;\n i++;\n while (i < this.codeCount && currentCodeLength === this.codeLength[i]) {\n i++;\n if (++currentRepeatCount >= maxRepeatCount) {\n break;\n }\n }\n if (currentRepeatCount < minRepeatCount) {\n while (currentRepeatCount-- > 0) {\n blTree.writeCodeToStream(currentCodeLength);\n }\n }\n else if (currentCodeLength !== 0) {\n blTree.writeCodeToStream(16);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 2);\n }\n else if (currentRepeatCount <= 10) {\n blTree.writeCodeToStream(17);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 3);\n }\n else {\n blTree.writeCodeToStream(18);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 11, 7);\n }\n }\n };\n /**\n * Build huffman tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildTree = function () {\n var codesCount = this.codeFrequency.length;\n var arrTree = new Int32Array(codesCount);\n var treeLength = 0;\n var maxCount = 0;\n for (var n = 0; n < codesCount; n++) {\n var freq = this.codeFrequency[n];\n if (freq !== 0) {\n var pos = treeLength++;\n var pPos = 0;\n while (pos > 0 && this.codeFrequency[arrTree[pPos = Math.floor((pos - 1) / 2)]] > freq) {\n arrTree[pos] = arrTree[pPos];\n pos = pPos;\n }\n arrTree[pos] = n;\n maxCount = n;\n }\n }\n while (treeLength < 2) {\n arrTree[treeLength++] =\n (maxCount < 2) ? ++maxCount : 0;\n }\n this.codeCount = Math.max(maxCount + 1, this.codeMinCount);\n var leafsCount = treeLength;\n var nodesCount = leafsCount;\n var child = new Int32Array(4 * treeLength - 2);\n var values = new Int32Array(2 * treeLength - 1);\n for (var i = 0; i < treeLength; i++) {\n var node = arrTree[i];\n var iIndex = 2 * i;\n child[iIndex] = node;\n child[iIndex + 1] = -1;\n values[i] = (this.codeFrequency[node] << 8);\n arrTree[i] = i;\n }\n this.constructHuffmanTree(arrTree, treeLength, values, nodesCount, child);\n this.buildLength(child);\n };\n CompressorHuffmanTree.prototype.constructHuffmanTree = function (arrTree, treeLength, values, nodesCount, child) {\n do {\n var first = arrTree[0];\n var last = arrTree[--treeLength];\n var lastVal = values[last];\n var pPos = 0;\n var path = 1;\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n }\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n var second = arrTree[0];\n last = nodesCount++;\n child[2 * last] = first;\n child[2 * last + 1] = second;\n var minDepth = Math.min(values[first] & 0xff, values[second] & 0xff);\n values[last] = lastVal = values[first] + values[second] - minDepth + 1;\n pPos = 0;\n path = 1;\n /* tslint:disable */\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n } /* tslint:disable */\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n } while (treeLength > 1);\n };\n CompressorHuffmanTree.prototype.buildLength = function (child) {\n this.codeLength = new Uint8Array(this.codeFrequency.length);\n var numNodes = Math.floor(child.length / 2);\n var numLeafs = Math.floor((numNodes + 1) / 2);\n var overflow = 0;\n for (var i = 0; i < this.maxLength; i++) {\n this.lengthCount[i] = 0;\n }\n overflow = this.calculateOptimalCodeLength(child, overflow, numNodes);\n if (overflow === 0) {\n return;\n }\n var iIncreasableLength = this.maxLength - 1;\n do {\n while (this.lengthCount[--iIncreasableLength] === 0) {\n /* tslint:disable */\n }\n do {\n this.lengthCount[iIncreasableLength]--;\n this.lengthCount[++iIncreasableLength]++;\n overflow -= (1 << (this.maxLength - 1 - iIncreasableLength));\n } while (overflow > 0 && iIncreasableLength < this.maxLength - 1);\n } while (overflow > 0);\n this.recreateTree(child, overflow, numLeafs);\n };\n CompressorHuffmanTree.prototype.recreateTree = function (child, overflow, numLeafs) {\n this.lengthCount[this.maxLength - 1] += overflow;\n this.lengthCount[this.maxLength - 2] -= overflow;\n var nodePtr = 2 * numLeafs;\n for (var bits = this.maxLength; bits !== 0; bits--) {\n var n = this.lengthCount[bits - 1];\n while (n > 0) {\n var childPtr = 2 * child[nodePtr++];\n if (child[childPtr + 1] === -1) {\n this.codeLength[child[childPtr]] = bits;\n n--;\n }\n }\n }\n };\n CompressorHuffmanTree.prototype.calculateOptimalCodeLength = function (child, overflow, numNodes) {\n var lengths = new Int32Array(numNodes);\n lengths[numNodes - 1] = 0;\n for (var i = numNodes - 1; i >= 0; i--) {\n var childIndex = 2 * i + 1;\n if (child[childIndex] !== -1) {\n var bitLength = lengths[i] + 1;\n if (bitLength > this.maxLength) {\n bitLength = this.maxLength;\n overflow++;\n }\n lengths[child[childIndex - 1]] = lengths[child[childIndex]] = bitLength;\n }\n else {\n var bitLength = lengths[i];\n this.lengthCount[bitLength - 1]++;\n this.codeLength[child[childIndex - 1]] = lengths[i];\n }\n }\n return overflow;\n };\n CompressorHuffmanTree.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n CompressorHuffmanTree.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n return CompressorHuffmanTree;\n}());\nexport { CompressorHuffmanTree };\n/**\n * Checksum calculator, based on Adler32 algorithm.\n */\nvar ChecksumCalculator = /** @class */ (function () {\n function ChecksumCalculator() {\n }\n /**\n * Updates checksum by calculating checksum of the\n * given buffer and adding it to current value.\n * @param {number} checksum - current checksum.\n * @param {Uint8Array} buffer - data byte array.\n * @param {number} offset - offset in the buffer.\n * @param {number} length - length of data to be used from the stream.\n * @returns {number}\n */\n ChecksumCalculator.checksumUpdate = function (checksum, buffer, offset, length) {\n var uint = new Uint32Array(1);\n uint[0] = checksum;\n var checksum_uint = uint[0];\n var s1 = uint[0] = checksum_uint & 65535;\n var s2 = uint[0] = checksum_uint >> ChecksumCalculator.checkSumBitOffset;\n while (length > 0) {\n var steps = Math.min(length, ChecksumCalculator.checksumIterationCount);\n length -= steps;\n while (--steps >= 0) {\n s1 = s1 + (uint[0] = (buffer[offset++] & 255));\n s2 = s2 + s1;\n }\n s1 %= ChecksumCalculator.checksumBase;\n s2 %= ChecksumCalculator.checksumBase;\n }\n checksum_uint = (s2 << ChecksumCalculator.checkSumBitOffset) | s1;\n return checksum_uint;\n };\n ChecksumCalculator.checkSumBitOffset = 16;\n ChecksumCalculator.checksumBase = 65521;\n ChecksumCalculator.checksumIterationCount = 3800;\n return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n","import { CompressedStreamWriter } from './compression-writer';\nimport { Save } from '@syncfusion/ej2-file-utils';\nvar CRC32TABLE = [];\n/**\n * class provide compression library\n * ```typescript\n * let archive = new ZipArchive();\n * archive.compressionLevel = 'Normal';\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * archive.addItem(archiveItem);\n * archive.save(fileName.zip);\n * ```\n */\nvar ZipArchive = /** @class */ (function () {\n /**\n * constructor for creating ZipArchive instance\n */\n function ZipArchive() {\n if (CRC32TABLE.length === 0) {\n ZipArchive.initCrc32Table();\n }\n this.files = [];\n this.level = 'Normal';\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(ZipArchive.prototype, \"compressionLevel\", {\n /**\n * gets compression level\n */\n get: function () {\n return this.level;\n },\n /**\n * sets compression level\n */\n set: function (level) {\n this.level = level;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchive.prototype, \"length\", {\n /**\n * gets items count\n */\n get: function () {\n if (this.files === undefined) {\n return 0;\n }\n return this.files.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * add new item to archive\n * @param {ZipArchiveItem} item - item to be added\n * @returns {void}\n */\n ZipArchive.prototype.addItem = function (item) {\n if (item === null || item === undefined) {\n throw new Error('ArgumentException: item cannot be null or undefined');\n }\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n if (file.name === item.name) {\n throw new Error('item with same name already exist');\n }\n }\n }\n this.files.push(item);\n };\n /**\n * add new directory to archive\n * @param directoryName directoryName to be created\n * @returns {void}\n */\n ZipArchive.prototype.addDirectory = function (directoryName) {\n if (directoryName === null || directoryName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (directoryName.length === 0) {\n throw new Error('ArgumentException: string cannot be empty');\n }\n if (directoryName.slice(-1) !== '/') {\n directoryName += '/';\n }\n if (this.files.indexOf(directoryName) !== -1) {\n throw new Error('item with same name already exist');\n }\n this.files.push(directoryName);\n };\n /**\n * gets item at specified index\n * @param {number} index - item index\n * @returns {ZipArchiveItem}\n */\n ZipArchive.prototype.getItem = function (index) {\n if (index >= 0 && index < this.files.length) {\n return this.files[index];\n }\n return undefined;\n };\n /**\n * determines whether an element is in the collection\n * @param {string | ZipArchiveItem} item - item to search\n * @returns {boolean}\n */\n ZipArchive.prototype.contains = function (item) {\n return this.files.indexOf(item) !== -1 ? true : false;\n };\n /**\n * save archive with specified file name\n * @param {string} fileName save archive with specified file name\n * @returns {Promise}\n */\n ZipArchive.prototype.save = function (fileName) {\n if (fileName === null || fileName === undefined || fileName.length === 0) {\n throw new Error('ArgumentException: fileName cannot be null or undefined');\n }\n if (this.files.length === 0) {\n throw new Error('InvalidOperation');\n }\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal(fileName, false).then(function () {\n resolve(zipArchive);\n });\n });\n };\n /**\n * Save archive as blob\n * @return {Promise}\n */\n ZipArchive.prototype.saveAsBlob = function () {\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal('', true).then(function (blob) {\n resolve(blob);\n });\n });\n };\n ZipArchive.prototype.saveInternal = function (fileName, skipFileSave) {\n var _this = this;\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n var zipData = [];\n var dirLength = 0;\n for (var i = 0; i < zipArchive.files.length; i++) {\n var compressedObject = _this.getCompressedData(_this.files[i]);\n compressedObject.then(function (data) {\n dirLength = zipArchive.constructZippedObject(zipData, data, dirLength, data.isDirectory);\n if (zipData.length === zipArchive.files.length) {\n var blob = zipArchive.writeZippedContent(fileName, zipData, dirLength, skipFileSave);\n resolve(blob);\n }\n });\n }\n });\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchive.prototype.destroy = function () {\n if (this.files !== undefined && this.files.length > 0) {\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n file.destroy();\n }\n file = undefined;\n }\n this.files = [];\n }\n this.files = undefined;\n this.level = undefined;\n };\n ZipArchive.prototype.getCompressedData = function (item) {\n var zipArchive = this;\n var promise = new Promise(function (resolve, reject) {\n if (item instanceof ZipArchiveItem) {\n var reader_1 = new FileReader();\n reader_1.onload = function () {\n var input = new Uint8Array(reader_1.result);\n var data = {\n fileName: item.name, crc32Value: 0, compressedData: [],\n compressedSize: undefined, uncompressedDataSize: input.length, compressionType: undefined,\n isDirectory: false\n };\n if (zipArchive.level === 'Normal') {\n zipArchive.compressData(input, data, CRC32TABLE);\n var length_1 = 0;\n for (var i = 0; i < data.compressedData.length; i++) {\n length_1 += data.compressedData[i].length;\n }\n data.compressedSize = length_1;\n data.compressionType = '\\x08\\x00'; //Deflated = 8\n }\n else {\n data.compressedSize = input.length;\n data.crc32Value = zipArchive.calculateCrc32Value(0, input, CRC32TABLE);\n data.compressionType = '\\x00\\x00'; // Stored = 0\n data.compressedData.push(input);\n }\n resolve(data);\n };\n reader_1.readAsArrayBuffer(item.data);\n }\n else {\n var data = {\n fileName: item, crc32Value: 0, compressedData: '', compressedSize: 0, uncompressedDataSize: 0,\n compressionType: '\\x00\\x00', isDirectory: true\n };\n resolve(data);\n }\n });\n return promise;\n };\n ZipArchive.prototype.compressData = function (input, data, crc32Table) {\n var compressor = new CompressedStreamWriter(true);\n var currentIndex = 0;\n var nextIndex = 0;\n do {\n if (currentIndex >= input.length) {\n compressor.close();\n break;\n }\n nextIndex = Math.min(input.length, currentIndex + 16384);\n var subArray = input.subarray(currentIndex, nextIndex);\n data.crc32Value = this.calculateCrc32Value(data.crc32Value, subArray, crc32Table);\n compressor.write(subArray, 0, nextIndex - currentIndex);\n currentIndex = nextIndex;\n } while (currentIndex <= input.length);\n data.compressedData = compressor.compressedData;\n compressor.destroy();\n };\n ZipArchive.prototype.constructZippedObject = function (zipParts, data, dirLength, isDirectory) {\n var extFileAttr = 0;\n var date = new Date();\n if (isDirectory) {\n extFileAttr = extFileAttr | 0x00010; // directory flag\n }\n extFileAttr = extFileAttr | (0 & 0x3F);\n var header = this.writeHeader(data, date);\n var localHeader = 'PK\\x03\\x04' + header + data.fileName;\n var centralDir = this.writeCentralDirectory(data, header, dirLength, extFileAttr);\n zipParts.push({ localHeader: localHeader, centralDir: centralDir, compressedData: data });\n return dirLength + localHeader.length + data.compressedSize;\n };\n ZipArchive.prototype.writeHeader = function (data, date) {\n var zipHeader = '';\n zipHeader += '\\x0A\\x00' + '\\x00\\x00'; // version needed to extract & general purpose bit flag\n zipHeader += data.compressionType; // compression method Deflate=8,Stored=0\n zipHeader += this.getBytes(this.getModifiedTime(date), 2); // last modified Time\n zipHeader += this.getBytes(this.getModifiedDate(date), 2); // last modified date\n zipHeader += this.getBytes(data.crc32Value, 4); // crc-32 value\n zipHeader += this.getBytes(data.compressedSize, 4); // compressed file size\n zipHeader += this.getBytes(data.uncompressedDataSize, 4); // uncompressed file size\n zipHeader += this.getBytes(data.fileName.length, 2); // file name length\n zipHeader += this.getBytes(0, 2); // extra field length\n return zipHeader;\n };\n ZipArchive.prototype.writeZippedContent = function (fileName, zipData, localDirLen, skipFileSave) {\n var cenDirLen = 0;\n var buffer = [];\n for (var i = 0; i < zipData.length; i++) {\n var item = zipData[i];\n cenDirLen += item.centralDir.length;\n buffer.push(this.getArrayBuffer(item.localHeader));\n while (item.compressedData.compressedData.length) {\n buffer.push(item.compressedData.compressedData.shift().buffer);\n }\n }\n for (var i = 0; i < zipData.length; i++) {\n buffer.push(this.getArrayBuffer(zipData[i].centralDir));\n }\n buffer.push(this.getArrayBuffer(this.writeFooter(zipData, cenDirLen, localDirLen)));\n var blob = new Blob(buffer, { type: 'application/zip' });\n if (!skipFileSave) {\n Save.save(fileName, blob);\n }\n return blob;\n };\n ZipArchive.prototype.writeCentralDirectory = function (data, localHeader, offset, externalFileAttribute) {\n var directoryHeader = 'PK\\x01\\x02' +\n this.getBytes(0x0014, 2) + localHeader + // inherit from file header\n this.getBytes(0, 2) + // comment length\n '\\x00\\x00' + '\\x00\\x00' + // internal file attributes \n this.getBytes(externalFileAttribute, 4) + // external file attributes\n this.getBytes(offset, 4) + // local fileHeader relative offset\n data.fileName;\n return directoryHeader;\n };\n ZipArchive.prototype.writeFooter = function (zipData, centralLength, localLength) {\n var dirEnd = 'PK\\x05\\x06' + '\\x00\\x00' + '\\x00\\x00' +\n this.getBytes(zipData.length, 2) + this.getBytes(zipData.length, 2) +\n this.getBytes(centralLength, 4) + this.getBytes(localLength, 4) +\n this.getBytes(0, 2);\n return dirEnd;\n };\n ZipArchive.prototype.getArrayBuffer = function (input) {\n var a = new Uint8Array(input.length);\n for (var j = 0; j < input.length; ++j) {\n a[j] = input.charCodeAt(j) & 0xFF;\n }\n return a.buffer;\n };\n ZipArchive.prototype.getBytes = function (value, offset) {\n var bytes = '';\n for (var i = 0; i < offset; i++) {\n bytes += String.fromCharCode(value & 0xff);\n value = value >>> 8;\n }\n return bytes;\n };\n ZipArchive.prototype.getModifiedTime = function (date) {\n var modTime = date.getHours();\n modTime = modTime << 6;\n modTime = modTime | date.getMinutes();\n modTime = modTime << 5;\n return modTime = modTime | date.getSeconds() / 2;\n };\n ZipArchive.prototype.getModifiedDate = function (date) {\n var modiDate = date.getFullYear() - 1980;\n modiDate = modiDate << 4;\n modiDate = modiDate | (date.getMonth() + 1);\n modiDate = modiDate << 5;\n return modiDate = modiDate | date.getDate();\n };\n ZipArchive.prototype.calculateCrc32Value = function (crc32Value, input, crc32Table) {\n crc32Value ^= -1;\n for (var i = 0; i < input.length; i++) {\n crc32Value = (crc32Value >>> 8) ^ crc32Table[(crc32Value ^ input[i]) & 0xFF];\n }\n return (crc32Value ^ (-1));\n };\n /**\n * construct cyclic redundancy code table\n * @private\n */\n ZipArchive.initCrc32Table = function () {\n var i;\n for (var j = 0; j < 256; j++) {\n i = j;\n for (var k = 0; k < 8; k++) {\n i = ((i & 1) ? (0xEDB88320 ^ (i >>> 1)) : (i >>> 1));\n }\n CRC32TABLE[j] = i;\n }\n };\n return ZipArchive;\n}());\nexport { ZipArchive };\n/**\n * Class represent unique ZipArchive item\n * ```typescript\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * ```\n */\nvar ZipArchiveItem = /** @class */ (function () {\n /**\n * constructor for creating {ZipArchiveItem} instance\n * @param {Blob|ArrayBuffer} data file data\n * @param {itemName} itemName absolute file path\n */\n function ZipArchiveItem(data, itemName) {\n if (data === null || data === undefined) {\n throw new Error('ArgumentException: data cannot be null or undefined');\n }\n if (itemName === null || itemName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (itemName.length === 0) {\n throw new Error('string cannot be empty');\n }\n this.data = data;\n this.name = itemName;\n }\n Object.defineProperty(ZipArchiveItem.prototype, \"name\", {\n /**\n * Get the name of archive item\n * @returns string\n */\n get: function () {\n return this.fileName;\n },\n /**\n * Set the name of archive item\n * @param {string} value\n */\n set: function (value) {\n this.fileName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchiveItem.prototype.destroy = function () {\n this.fileName = undefined;\n this.data = undefined;\n };\n return ZipArchiveItem;\n}());\nexport { ZipArchiveItem };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n// import { IValueFormatter } from '../base/interface';\n/**\n * ValueFormatter class to globalize the value.\n * @private\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 // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n // if ((format).type) {\n // return this.intl.getDateParser(format);\n // } else {\n // return this.intl.getNumberParser(format);\n // }\n // }\n // public fromView(value: string, format: Function, type?: string): string | number | Date {\n // if (type === 'date' || type === 'datetime' || type === 'number') {\n // return format(value);\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 // public setCulture(cultureName: string): void {\n // if (!isNullOrUndefined(cultureName)) {\n // setCulture(cultureName);\n // }\n // }\n /* tslint:disable:no-any */\n ValueFormatter.prototype.displayText = function (value, format) {\n return this.toView(value, this.getFormatFunction(format));\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\n/**\n * CsvHelper class\n * @private\n */\nvar CsvHelper = /** @class */ (function () {\n /* tslint:disable:no-any */\n function CsvHelper(json) {\n this.csvStr = '';\n this.formatter = new ValueFormatter();\n this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n if (json.styles !== null && json.styles !== undefined) {\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parseWorksheet(json.worksheets[0]);\n }\n //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n }\n CsvHelper.prototype.parseWorksheet = function (json) {\n //Rows\n if (json.rows !== null && json.rows !== undefined) {\n this.parseRows(json.rows);\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRows = function (rows) {\n var count = 1;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n //Row index\n if (row.index !== null && row.index !== undefined) {\n while (count < row.index) {\n this.csvStr += '\\n';\n count++;\n }\n this.parseRow(row);\n }\n else {\n throw Error('Row index is missing.');\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRow = function (row) {\n if (row.cells !== null && row.cells !== undefined) {\n var count = 1;\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n //cell index\n if (cell.index !== null && cell.index !== undefined) {\n while (count < cell.index) {\n this.csvStr += ',';\n count++;\n }\n this.parseCell(cell);\n }\n else {\n throw Error('Cell index is missing.');\n }\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseCell = function (cell) {\n var csv = this.csvStr;\n if (cell.value !== undefined) {\n if (cell.value instanceof Date) {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else if (typeof (cell.value) === 'boolean') {\n csv += cell.value ? 'TRUE' : 'FALSE';\n }\n else if (typeof (cell.value) === 'number') {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else {\n csv += this.parseCellValue(cell.value);\n }\n }\n this.csvStr = csv;\n };\n CsvHelper.prototype.parseCellValue = function (value) {\n if (value.indexOf(',') !== -1) {\n return value = '\\\"' + value + '\\\"';\n }\n else {\n return value;\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n */\n CsvHelper.prototype.save = function (fileName) {\n this.buffer = new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(this.buffer, fileName);\n }\n else {\n var dataUrl_1 = window.URL.createObjectURL(this.buffer);\n var dwlLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n dwlLink.download = fileName;\n dwlLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n dwlLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n });\n }\n };\n CsvHelper.prototype.saveAsBlob = function () {\n return new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n };\n return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\n * @private\n */\nvar BlobHelper = /** @class */ (function () {\n function BlobHelper() {\n /* tslint:disable:no-any */\n this.parts = [];\n }\n /* tslint:disable:no-any */\n BlobHelper.prototype.append = function (part) {\n this.parts.push(part);\n this.blob = undefined; // Invalidate the blob\n };\n BlobHelper.prototype.getBlob = function () {\n return new Blob(this.parts, { type: 'text/plain' });\n };\n return BlobHelper;\n}());\nexport { BlobHelper };\n","import { Worksheets } from './worksheets';\nimport { Worksheet, FreezePane, MergeCell, MergeCells, HyperLink, Grouping } from './worksheet';\nimport { CellStyle, Font, Borders, CellXfs, Alignment, NumFmt, CellStyleXfs, CellStyles } from './cell-style';\nimport { Column } from './column';\nimport { Row, Rows } from './row';\nimport { Cell, Cells } from './cell';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { CsvHelper } from './csv-helper';\nimport { Internationalization, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BlobHelper } from './blob-helper';\n/**\n * Workbook class\n */\nvar Workbook = /** @class */ (function () {\n /* tslint:disable:no-any */\n function Workbook(json, saveType, culture, currencyString) {\n this.sharedStringCount = 0;\n this.unitsProportions = [\n 96 / 75.0,\n 96 / 300.0,\n 96,\n 96 / 25.4,\n 96 / 2.54,\n 1,\n 96 / 72.0,\n 96 / 72.0 / 12700,\n ];\n /* tslint:disable:no-any */\n this.hyperlinkStyle = { fontColor: '#0000FF', underline: true };\n if (culture !== undefined) {\n this.culture = culture;\n }\n else {\n this.culture = 'en-US';\n }\n if (currencyString !== undefined) {\n this.currency = currencyString;\n }\n else {\n this.currency = 'USD';\n }\n this.intl = new Internationalization(this.culture);\n this.mSaveType = saveType;\n if (saveType === 'xlsx') {\n this.mArchive = new ZipArchive();\n this.sharedString = [];\n this.mFonts = [];\n this.mBorders = [];\n this.mStyles = [];\n this.printTitles = new Map();\n this.cellStyles = new Map();\n this.mNumFmt = new Map();\n this.mFills = new Map();\n this.mStyles.push(new CellStyle());\n this.mFonts.push(new Font());\n /* tslint:disable */\n this.cellStyles.set('Normal', new CellStyles());\n /* tslint:enable */\n this.mCellXfs = [];\n this.mCellStyleXfs = [];\n if (json.styles !== null && json.styles !== undefined) {\n /* tslint:disable-next-line:no-any */\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined) {\n if (!this.cellStyles.has(json.styles[i].name)) {\n var cellStyle = new CellStyle();\n cellStyle.isGlobalStyle = true;\n this.parserCellStyle(json.styles[i], cellStyle, 'none');\n var cellStylesIn = new CellStyles();\n cellStylesIn.name = cellStyle.name;\n cellStylesIn.xfId = (cellStyle.index - 1);\n this.cellStyles.set(cellStylesIn.name, cellStylesIn);\n /* tslint:disable-next-line:no-any */\n var tFormat = {};\n if (json.styles[i].numberFormat !== undefined) {\n tFormat.format = json.styles[i].numberFormat;\n }\n if (json.styles[i].type !== undefined) {\n tFormat.type = json.styles[i].type;\n }\n else {\n tFormat.type = 'datetime';\n }\n if (tFormat.format !== undefined) {\n this.globalStyles.set(json.styles[i].name, tFormat);\n }\n }\n else {\n throw Error('Style name ' + json.styles[i].name + ' is already existed');\n }\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parserWorksheets(json.worksheets);\n }\n else {\n throw Error('Worksheet is expected.');\n }\n // Parses the BuiltInProperties data to DOM. \n if (json.builtInProperties !== null && json.builtInProperties !== undefined) {\n this.builtInProperties = new BuiltInProperties();\n this.parserBuiltInProperties(json.builtInProperties, this.builtInProperties);\n }\n }\n else {\n this.csvHelper = new CsvHelper(json);\n }\n }\n /* tslint:disable:no-any */\n Workbook.prototype.parserBuiltInProperties = function (jsonBuiltInProperties, builtInProperties) {\n //Author\n if (jsonBuiltInProperties.author !== null && jsonBuiltInProperties.author !== undefined) {\n builtInProperties.author = jsonBuiltInProperties.author;\n }\n //Comments\n if (jsonBuiltInProperties.comments !== null && jsonBuiltInProperties.comments !== undefined) {\n builtInProperties.comments = jsonBuiltInProperties.comments;\n }\n //Category\n if (jsonBuiltInProperties.category !== null && jsonBuiltInProperties.category !== undefined) {\n builtInProperties.category = jsonBuiltInProperties.category;\n }\n //Company\n if (jsonBuiltInProperties.company !== null && jsonBuiltInProperties.company !== undefined) {\n builtInProperties.company = jsonBuiltInProperties.company;\n }\n //Manager\n if (jsonBuiltInProperties.manager !== null && jsonBuiltInProperties.manager !== undefined) {\n builtInProperties.manager = jsonBuiltInProperties.manager;\n }\n //Subject\n if (jsonBuiltInProperties.subject !== null && jsonBuiltInProperties.subject !== undefined) {\n builtInProperties.subject = jsonBuiltInProperties.subject;\n }\n //Title\n if (jsonBuiltInProperties.title !== null && jsonBuiltInProperties.title !== undefined) {\n builtInProperties.title = jsonBuiltInProperties.title;\n }\n //Creation date\n if (jsonBuiltInProperties.createdDate !== null && jsonBuiltInProperties.createdDate !== undefined) {\n builtInProperties.createdDate = jsonBuiltInProperties.createdDate;\n }\n //Modified date\n if (jsonBuiltInProperties.modifiedDate !== null && jsonBuiltInProperties.modifiedDate !== undefined) {\n builtInProperties.modifiedDate = jsonBuiltInProperties.modifiedDate;\n }\n //Tags\n if (jsonBuiltInProperties.tags !== null && jsonBuiltInProperties.tags !== undefined) {\n builtInProperties.tags = jsonBuiltInProperties.tags;\n }\n //Status\n if (jsonBuiltInProperties.status !== null && jsonBuiltInProperties.status !== undefined) {\n builtInProperties.status = jsonBuiltInProperties.status;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserWorksheets = function (json) {\n this.worksheets = new Worksheets();\n var length = json.length;\n for (var i = 0; i < length; i++) {\n var jsonSheet = json[i];\n var sheet = new Worksheet();\n this.mergeCells = new MergeCells();\n this.mergedCellsStyle = new Map();\n this.mHyperLinks = [];\n //Name\n if (jsonSheet.name !== null && jsonSheet.name !== undefined) {\n sheet.name = jsonSheet.name;\n }\n else {\n sheet.name = 'Sheet' + (i + 1).toString();\n }\n sheet.index = (i + 1);\n //Columns\n if (jsonSheet.columns !== null && jsonSheet.columns !== undefined) {\n this.parserColumns(jsonSheet.columns, sheet);\n }\n //Rows\n if (jsonSheet.rows !== null && jsonSheet.rows !== undefined) {\n this.parserRows(jsonSheet.rows, sheet);\n }\n //showGridLines\n if (jsonSheet.showGridLines !== null && jsonSheet.showGridLines !== undefined) {\n sheet.showGridLines = jsonSheet.showGridLines;\n }\n //FreezePanes\n if (jsonSheet.freeze !== null && jsonSheet.freeze !== undefined) {\n this.parserFreezePanes(jsonSheet.freeze, sheet);\n }\n //Print Title\n if (jsonSheet.printTitle !== null && jsonSheet.printTitle !== undefined) {\n this.parserPrintTitle(jsonSheet.printTitle, sheet);\n }\n if (jsonSheet.pageSetup !== undefined) {\n if (jsonSheet.pageSetup.isSummaryRowBelow !== undefined) {\n sheet.isSummaryRowBelow = jsonSheet.pageSetup.isSummaryRowBelow;\n }\n }\n sheet.index = (i + 1);\n sheet.mergeCells = this.mergeCells;\n sheet.hyperLinks = this.mHyperLinks;\n this.worksheets.push(sheet);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.mergeOptions = function (fromJson, toJson) {\n /* tslint:disable:no-any */\n var result = {};\n this.applyProperties(fromJson, result);\n this.applyProperties(toJson, result);\n return result;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.applyProperties = function (sourceJson, destJson) {\n var keys = Object.keys(sourceJson);\n for (var index = 0; index < keys.length; index++) {\n if (keys[index] !== 'name') {\n destJson[keys[index]] = sourceJson[keys[index]];\n }\n }\n };\n Workbook.prototype.getCellName = function (row, column) {\n return this.getColumnName(column) + row.toString();\n };\n Workbook.prototype.getColumnName = function (col) {\n col--;\n var strColumnName = '';\n do {\n var iCurrentDigit = col % 26;\n col = col / 26 - 1;\n strColumnName = String.fromCharCode(65 + iCurrentDigit) + strColumnName;\n } while (col >= 0);\n return strColumnName;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserPrintTitle = function (json, sheet) {\n var printTitleName = '';\n var titleRowName;\n if (json.fromRow !== null && json.fromRow !== undefined) {\n var fromRow = json.fromRow;\n var toRow = void 0;\n if (json.toRow !== null && json.toRow !== undefined) {\n toRow = json.toRow;\n }\n else {\n toRow = json.fromRow;\n }\n titleRowName = '$' + fromRow + ':$' + toRow;\n }\n var titleColName;\n if (json.fromColumn !== null && json.fromColumn !== undefined) {\n var fromColumn = json.fromColumn;\n var toColumn = void 0;\n if (json.toColumn !== null && json.toColumn !== undefined) {\n toColumn = json.toColumn;\n }\n else {\n toColumn = json.fromColumn;\n }\n titleColName = '$' + this.getColumnName(fromColumn) + ':$' + this.getColumnName(toColumn);\n }\n if (titleRowName !== undefined) {\n printTitleName += (sheet.name + '!' + titleRowName);\n }\n if (titleColName !== undefined && titleRowName !== undefined) {\n printTitleName += ',' + (sheet.name + '!' + titleColName);\n }\n else if (titleColName !== undefined) {\n printTitleName += (sheet.name + '!' + titleColName);\n }\n if (printTitleName !== '') {\n this.printTitles.set(sheet.index - 1, printTitleName);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserFreezePanes = function (json, sheet) {\n sheet.freezePanes = new FreezePane();\n if (json.row !== null && json.row !== undefined) {\n sheet.freezePanes.row = json.row;\n }\n else {\n sheet.freezePanes.row = 0;\n }\n if (json.column !== null && json.column !== undefined) {\n sheet.freezePanes.column = json.column;\n }\n else {\n sheet.freezePanes.column = 0;\n }\n sheet.freezePanes.leftCell = this.getCellName(sheet.freezePanes.row + 1, sheet.freezePanes.column + 1);\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserColumns = function (json, sheet) {\n var columnsLength = json.length;\n sheet.columns = [];\n for (var column = 0; column < columnsLength; column++) {\n var col = new Column();\n if (json[column].index !== null && json[column].index !== undefined) {\n col.index = json[column].index;\n }\n else {\n throw Error('Column index is missing.');\n }\n if (json[column].width !== null && json[column].width !== undefined) {\n col.width = json[column].width;\n }\n sheet.columns.push(col);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRows = function (json, sheet) {\n var rowsLength = json.length;\n sheet.rows = new Rows();\n var rowId = 0;\n for (var r = 0; r < rowsLength; r++) {\n var row = this.parserRow(json[r], rowId);\n rowId = row.index;\n sheet.rows.add(row);\n }\n this.insertMergedCellsStyle(sheet);\n };\n Workbook.prototype.insertMergedCellsStyle = function (sheet) {\n var _this = this;\n if (this.mergeCells.length > 0) {\n this.mergedCellsStyle.forEach(function (value, key) {\n var row = sheet.rows.filter(function (item) {\n return item.index === value.y;\n })[0];\n if (!isNullOrUndefined(row)) {\n var cell = row.cells.filter(function (item) {\n return item.index === value.x;\n })[0];\n if (!isNullOrUndefined(cell)) {\n cell.styleIndex = value.styleIndex;\n }\n else {\n var cells = row.cells.filter(function (item) {\n return item.index <= value.x;\n });\n var insertIndex = 0;\n if (cells.length > 0) {\n insertIndex = row.cells.indexOf(cells[cells.length - 1]) + 1;\n }\n row.cells.splice(insertIndex, 0, _this.createCell(value, key));\n }\n }\n else {\n var rows = sheet.rows.filter(function (item) {\n return item.index <= value.y;\n });\n var rowToInsert = new Row();\n rowToInsert.index = value.y;\n rowToInsert.cells = new Cells();\n rowToInsert.cells.add(_this.createCell(value, key));\n var insertIndex = 0;\n if (rows.length > 0) {\n insertIndex = sheet.rows.indexOf(rows[rows.length - 1]) + 1;\n }\n sheet.rows.splice(insertIndex, 0, rowToInsert);\n }\n });\n }\n };\n Workbook.prototype.createCell = function (value, key) {\n var cellToInsert = new Cell();\n cellToInsert.refName = key;\n cellToInsert.index = value.x;\n cellToInsert.cellStyle = new CellStyle();\n cellToInsert.styleIndex = value.styleIndex;\n return cellToInsert;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRow = function (json, rowIndex) {\n var row = new Row();\n //Row Height\n if (json.height !== null && json.height !== undefined) {\n row.height = json.height;\n }\n //Row index\n if (json.index !== null && json.index !== undefined) {\n row.index = json.index;\n }\n else {\n throw Error('Row index is missing.');\n }\n if (json.grouping !== null && json.grouping !== undefined) {\n this.parseGrouping(json.grouping, row);\n }\n this.parseCells(json.cells, row);\n return row;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseGrouping = function (json, row) {\n row.grouping = new Grouping();\n if (json.outlineLevel !== undefined) {\n row.grouping.outlineLevel = json.outlineLevel;\n }\n if (json.isCollapsed !== undefined) {\n row.grouping.isCollapsed = json.isCollapsed;\n }\n if (json.isHidden !== undefined) {\n row.grouping.isHidden = json.isHidden;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseCells = function (json, row) {\n row.cells = new Cells();\n var cellsLength = json !== undefined ? json.length : 0;\n var spanMin = 1;\n var spanMax = 1;\n var curCellIndex = 0;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable:no-any */\n var jsonCell = json[cellId];\n var cell = new Cell();\n //cell index\n if (jsonCell.index !== null && jsonCell.index !== undefined) {\n cell.index = jsonCell.index;\n }\n else {\n throw Error('Cell index is missing.');\n }\n if (cell.index < spanMin) {\n spanMin = cell.index;\n }\n else if (cell.index > spanMax) {\n spanMax = cell.index;\n }\n //Update the Cell name\n cell.refName = this.getCellName(row.index, cell.index);\n //Row span\n if (jsonCell.rowSpan !== null && jsonCell.rowSpan !== undefined) {\n cell.rowSpan = jsonCell.rowSpan - 1;\n }\n else {\n cell.rowSpan = 0;\n }\n //Column span\n if (jsonCell.colSpan !== null && jsonCell.colSpan !== undefined) {\n cell.colSpan = jsonCell.colSpan - 1;\n }\n else {\n cell.colSpan = 0;\n }\n //Hyperlink\n if (jsonCell.hyperlink !== null && jsonCell.hyperlink !== undefined) {\n var hyperLink = new HyperLink();\n if (jsonCell.hyperlink.target !== undefined) {\n hyperLink.target = jsonCell.hyperlink.target;\n if (jsonCell.hyperlink.displayText !== undefined) {\n cell.value = jsonCell.hyperlink.displayText;\n }\n else {\n cell.value = jsonCell.hyperlink.target;\n }\n cell.type = this.getCellValueType(cell.value);\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n cell.cellStyle = new CellStyle();\n /* tslint:disable-next-line:max-line-length */\n this.parserCellStyle((jsonCell.style !== undefined ? this.mergeOptions(jsonCell.style, this.hyperlinkStyle) : this.hyperlinkStyle), cell.cellStyle, 'string');\n cell.styleIndex = cell.cellStyle.index;\n }\n }\n // formulas\n if (jsonCell.formula !== null && jsonCell.formula !== undefined) {\n cell.formula = jsonCell.formula;\n cell.type = 'formula';\n }\n //Cell value\n if (jsonCell.value !== null && jsonCell.value !== undefined) {\n if (cell.formula !== undefined) {\n cell.value = 0;\n }\n else {\n cell.value = jsonCell.value;\n cell.type = this.getCellValueType(cell.value);\n }\n }\n if (jsonCell.style !== null && jsonCell.style !== undefined && cell.styleIndex === undefined) {\n cell.cellStyle = new CellStyle();\n if (cell.value instanceof Date) {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type, 14);\n }\n else {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type);\n }\n cell.styleIndex = cell.cellStyle.index;\n }\n else if (cell.value instanceof Date) {\n cell.cellStyle = new CellStyle();\n this.parserCellStyle({}, cell.cellStyle, cell.type, 14);\n cell.styleIndex = cell.cellStyle.index;\n }\n this.parseCellType(cell);\n this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\n row.cells.add(cell);\n curCellIndex = (cell.index + 1);\n }\n row.spans = (spanMin) + ':' + (spanMax);\n };\n Workbook.prototype.applyGlobalStyle = function (json, cellStyle) {\n var index = 0;\n if (this.cellStyles.has(json.name)) {\n cellStyle.index = this.mStyles.filter(function (a) { return (a.name === json.name); })[0].index;\n cellStyle.name = json.name;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserCellStyle = function (json, cellStyle, cellType, defStyleIndex) {\n //name\n if (json.name !== null && json.name !== undefined) {\n if (cellStyle.isGlobalStyle) {\n cellStyle.name = json.name;\n }\n else {\n this.applyGlobalStyle(json, cellStyle);\n return;\n }\n }\n //background color\n if (json.backColor !== null && json.backColor !== undefined) {\n cellStyle.backColor = json.backColor;\n }\n //borders\n //leftBorder\n cellStyle.borders = new Borders();\n //AllBorder\n if (json.borders !== null && json.borders !== undefined) {\n this.parserBorder(json.borders, cellStyle.borders.all);\n }\n //leftborder\n if (json.leftBorder !== null && json.leftBorder !== undefined) {\n this.parserBorder(json.leftBorder, cellStyle.borders.left);\n }\n //rightBorder\n if (json.rightBorder !== null && json.rightBorder !== undefined) {\n this.parserBorder(json.rightBorder, cellStyle.borders.right);\n }\n //topBorder\n if (json.topBorder !== null && json.topBorder !== undefined) {\n this.parserBorder(json.topBorder, cellStyle.borders.top);\n }\n //bottomBorder\n if (json.bottomBorder !== null && json.bottomBorder !== undefined) {\n this.parserBorder(json.bottomBorder, cellStyle.borders.bottom);\n }\n //fontName\n if (json.fontName !== null && json.fontName !== undefined) {\n cellStyle.fontName = json.fontName;\n }\n //fontSize\n if (json.fontSize !== null && json.fontSize !== undefined) {\n cellStyle.fontSize = json.fontSize;\n }\n //fontColor\n if (json.fontColor !== null && json.fontColor !== undefined) {\n cellStyle.fontColor = json.fontColor;\n }\n //italic\n if (json.italic !== null && json.italic !== undefined) {\n cellStyle.italic = json.italic;\n }\n //bold\n if (json.bold !== null && json.bold !== undefined) {\n cellStyle.bold = json.bold;\n }\n //hAlign\n if (json.hAlign !== null && json.hAlign !== undefined) {\n cellStyle.hAlign = json.hAlign.toLowerCase();\n }\n //indent\n if (json.indent !== null && json.indent !== undefined) {\n cellStyle.indent = json.indent;\n if (!(cellStyle.hAlign === 'left' || cellStyle.hAlign === 'right')) {\n cellStyle.hAlign = 'left';\n }\n }\n //vAlign\n if (json.vAlign !== null && json.vAlign !== undefined) {\n cellStyle.vAlign = json.vAlign.toLowerCase();\n }\n //underline\n if (json.underline !== null && json.underline !== undefined) {\n cellStyle.underline = json.underline;\n }\n //wrapText\n if (json.wrapText !== null && json.wrapText !== undefined) {\n cellStyle.wrapText = json.wrapText;\n }\n //numberFormat\n if (json.numberFormat !== null && json.numberFormat !== undefined) {\n if (json.type !== null && json.type !== undefined) {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, json.type);\n }\n else {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, cellType);\n }\n }\n else if (defStyleIndex !== undefined) {\n cellStyle.numFmtId = 14;\n cellStyle.numberFormat = 'GENERAL';\n }\n else {\n cellStyle.numberFormat = 'GENERAL';\n }\n cellStyle.index = this.processCellStyle(cellStyle);\n };\n Workbook.prototype.switchNumberFormat = function (numberFormat, type) {\n var format = this.getNumberFormat(numberFormat, type);\n if (format !== numberFormat) {\n var numFmt = this.mNumFmt.get(numberFormat);\n if (numFmt !== undefined) {\n numFmt.formatCode = format;\n if (this.mNumFmt.has(format)) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXfs = _a[_i];\n if (cellStyleXfs.numFmtId === numFmt.numFmtId) {\n cellStyleXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n for (var _b = 0, _c = this.mCellXfs; _b < _c.length; _b++) {\n var cellXfs = _c[_b];\n if (cellXfs.numFmtId === numFmt.numFmtId) {\n cellXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n }\n }\n }\n };\n Workbook.prototype.getNumberFormat = function (numberFormat, type) {\n var returnFormat;\n switch (type) {\n case 'number':\n try {\n returnFormat = this.intl.getNumberPattern({ format: numberFormat, currency: this.currency });\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'datetime':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'date':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'time':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n default:\n returnFormat = numberFormat;\n break;\n }\n return returnFormat;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserBorder = function (json, border) {\n if (json.color !== null && json.color !== undefined) {\n border.color = json.color;\n }\n else {\n border.color = '#000000';\n }\n if (json.lineStyle !== null && json.lineStyle !== undefined) {\n border.lineStyle = json.lineStyle;\n }\n else {\n border.lineStyle = 'thin';\n }\n };\n Workbook.prototype.processCellStyle = function (style) {\n if (style.isGlobalStyle) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n var compareResult = this.compareStyle(style);\n if (!compareResult.result) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n //Return the index of the already existing style.\n return compareResult.index;\n }\n }\n };\n Workbook.prototype.processNumFormatId = function (style) {\n if (style.numberFormat !== 'GENERAL' && !this.mNumFmt.has(style.numberFormat)) {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n }\n };\n Workbook.prototype.isNewFont = function (toCompareStyle) {\n var result = false;\n var index = 0;\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n index++;\n var fontColor = undefined;\n if (toCompareStyle.fontColor !== undefined) {\n fontColor = ('FF' + toCompareStyle.fontColor.replace('#', ''));\n }\n result = font.color === fontColor &&\n font.b === toCompareStyle.bold &&\n font.i === toCompareStyle.italic &&\n font.u === toCompareStyle.underline &&\n font.name === toCompareStyle.fontName &&\n font.sz === toCompareStyle.fontSize;\n if (result) {\n break;\n }\n }\n index = index - 1;\n return { index: index, result: result };\n };\n Workbook.prototype.isNewBorder = function (toCompareStyle) {\n var bStyle = new CellStyle();\n if (this.isAllBorder(toCompareStyle.borders)) {\n return (bStyle.borders.all.color === toCompareStyle.borders.all.color &&\n bStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle);\n }\n else {\n return (bStyle.borders.left.color === toCompareStyle.borders.left.color &&\n bStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n bStyle.borders.right.color === toCompareStyle.borders.right.color &&\n bStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n bStyle.borders.top.color === toCompareStyle.borders.top.color &&\n bStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n bStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n bStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n }\n };\n Workbook.prototype.isAllBorder = function (toCompareBorder) {\n var allBorderStyle = new CellStyle();\n return allBorderStyle.borders.all.color !== toCompareBorder.all.color &&\n allBorderStyle.borders.all.lineStyle !== toCompareBorder.all.lineStyle;\n };\n Workbook.prototype.compareStyle = function (toCompareStyle) {\n var result = true;\n var index = 0;\n var globalStyleIndex = 0;\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.isGlobalStyle ? false : (baseStyle.backColor === toCompareStyle.backColor &&\n baseStyle.bold === toCompareStyle.bold &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.numberFormat === toCompareStyle.numberFormat &&\n baseStyle.type === toCompareStyle.type &&\n baseStyle.fontColor === toCompareStyle.fontColor &&\n baseStyle.fontName === toCompareStyle.fontName &&\n baseStyle.fontSize === toCompareStyle.fontSize &&\n baseStyle.hAlign === toCompareStyle.hAlign &&\n baseStyle.italic === toCompareStyle.italic &&\n baseStyle.underline === toCompareStyle.underline &&\n baseStyle.vAlign === toCompareStyle.vAlign &&\n baseStyle.indent === toCompareStyle.indent &&\n baseStyle.wrapText === toCompareStyle.wrapText &&\n (baseStyle.borders.all.color === toCompareStyle.borders.all.color &&\n baseStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle) &&\n (baseStyle.borders.left.color === toCompareStyle.borders.left.color &&\n baseStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n baseStyle.borders.right.color === toCompareStyle.borders.right.color &&\n baseStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n baseStyle.borders.top.color === toCompareStyle.borders.top.color &&\n baseStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n baseStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n baseStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle));\n if (result) {\n index = baseStyle.index;\n break;\n }\n }\n return { index: index, result: result };\n };\n Workbook.prototype.contains = function (array, item) {\n var index = array.indexOf(item);\n return index > -1 && index < array.length;\n };\n Workbook.prototype.getCellValueType = function (value) {\n if (value instanceof Date) {\n return 'datetime';\n }\n else if (typeof (value) === 'boolean') {\n return 'boolean';\n }\n else if (typeof (value) === 'number') {\n return 'number';\n }\n else {\n return 'string';\n }\n };\n Workbook.prototype.parseCellType = function (cell) {\n var type = cell.type;\n var saveType;\n var value = cell.value;\n switch (type) {\n case 'datetime':\n value = this.toOADate(value);\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n var value_1 = this.globalStyles.get(cell.cellStyle.name);\n this.switchNumberFormat(value_1.format, value_1.type);\n }\n }\n saveType = 'n';\n break;\n //TODO: Update the number format index and style\n case 'boolean':\n value = value ? 1 : 0;\n saveType = 'b';\n break;\n case 'number':\n saveType = 'n';\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n this.switchNumberFormat(this.globalStyles.get(cell.cellStyle.name).format, 'number');\n }\n }\n break;\n case 'string':\n this.sharedStringCount++;\n saveType = 's';\n if (!this.contains(this.sharedString, value)) {\n this.sharedString.push(value);\n }\n value = this.sharedString.indexOf(value);\n break;\n default:\n break;\n }\n cell.saveType = saveType;\n cell.value = value;\n };\n Workbook.prototype.saveAsBlob = function (blobSaveType) {\n var _this = this;\n switch (blobSaveType) {\n case 'text/csv':\n return new Promise(function (resolve, reject) {\n var obj = {};\n obj.blobData = _this.csvHelper.saveAsBlob();\n resolve(obj);\n });\n default:\n return new Promise(function (resolve, reject) {\n _this.saveInternal();\n _this.mArchive.saveAsBlob().then(function (blob) {\n var obj = {};\n obj.blobData = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n resolve(obj);\n });\n });\n }\n };\n Workbook.prototype.save = function (fileName, proxyUrl) {\n var _this = this;\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('Argument Null Exception: fileName cannot be null or empty');\n }\n var xlsxMatch = fileName.match('.xlsx$');\n var csvMatch = fileName.match('.csv$');\n if (xlsxMatch !== null && xlsxMatch[0] === ('.' + this.mSaveType)) {\n this.saveInternal();\n this.mArchive.save(fileName).then(function () {\n _this.mArchive.destroy();\n });\n }\n else if (csvMatch !== null && csvMatch[0] === ('.' + this.mSaveType)) {\n this.csvHelper.save(fileName);\n }\n else {\n throw Error('Save type and file extension is different.');\n }\n };\n Workbook.prototype.saveInternal = function () {\n this.saveWorkbook();\n this.saveWorksheets();\n this.saveSharedString();\n this.saveStyles();\n this.saveApp(this.builtInProperties);\n this.saveCore(this.builtInProperties);\n this.saveContentType();\n this.saveTopLevelRelation();\n this.saveWorkbookRelation();\n };\n Workbook.prototype.saveWorkbook = function () {\n /* tslint:disable-next-line:max-line-length */\n var workbookTemp = '';\n var sheets = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheets += '';\n }\n sheets += '';\n workbookTemp += sheets;\n if (this.printTitles.size > 0) {\n var printTitle_1 = '';\n this.printTitles.forEach(function (value, key) {\n printTitle_1 += '' + value + '';\n });\n printTitle_1 += '';\n workbookTemp += printTitle_1;\n }\n this.addToArchive(workbookTemp + '', 'xl/workbook.xml');\n };\n Workbook.prototype.saveWorksheets = function () {\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n this.saveWorksheet(this.worksheets[i], i);\n }\n };\n Workbook.prototype.saveWorksheet = function (sheet, index) {\n var sheetBlob = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetString = '';\n if (!sheet.isSummaryRowBelow) {\n sheetString += ('' + '' + '' + '');\n }\n else {\n sheetString += ('');\n }\n sheetString += this.saveSheetView(sheet);\n if (sheet.columns !== undefined) {\n var colString = '';\n for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n if (column.width !== undefined) {\n colString += '';\n }\n else {\n colString += '';\n }\n }\n sheetString += (colString + '');\n }\n sheetString += ('');\n sheetBlob.append(sheetString);\n sheetString = '';\n if (sheet.rows !== undefined) {\n for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n var row = _c[_b];\n var rowString = '');\n for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n var cell = _e[_d];\n if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n rowString += ('');\n if (cell.formula !== undefined) {\n rowString += ('' + cell.formula + '');\n }\n if (cell.value !== undefined) {\n rowString += ('' + cell.value + '');\n }\n else {\n rowString += ('');\n }\n }\n }\n rowString += ('');\n sheetBlob.append(rowString);\n }\n }\n sheetString += ('');\n if (sheet.mergeCells.length > 0) {\n sheetString += ('');\n for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n var mCell = _g[_f];\n sheetString += ('');\n }\n sheetString += ('');\n }\n if (sheet.hyperLinks.length > 0) {\n sheetString += ('');\n for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n var hLink = _j[_h];\n sheetString += ('');\n }\n sheetString += ('');\n this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n }\n /* tslint:disable-next-line:max-line-length */\n sheetString += ('');\n sheetBlob.append(sheetString);\n this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n };\n Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n var dDigitWidth = 7;\n var val = (pixels > dDigitWidth + 5) ?\n this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n pixels / (dDigitWidth + 5);\n return (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n };\n Workbook.prototype.trunc = function (x) {\n var n = x - x % 1;\n return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n };\n Workbook.prototype.pixelsToRowHeight = function (pixels) {\n return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n };\n Workbook.prototype.saveSheetRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var relStr = '';\n for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n var hLink = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n relStr += '';\n return relStr;\n };\n Workbook.prototype.saveSheetView = function (sheet) {\n var paneString = ' 0) {\n /* tslint:disable-next-line:max-line-length */\n var sstStart = '';\n var si = '';\n for (var i = 0; i < length; i++) {\n si += '';\n si += this.processString(this.sharedString[i]);\n si += '';\n }\n si += '';\n this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n }\n };\n Workbook.prototype.processString = function (value) {\n if (value.indexOf('&') !== -1) {\n value = value.replace(/&/g, '&');\n }\n if (value.indexOf('<') !== -1) {\n value = value.replace(/') !== -1) {\n value = value.replace(/>/g, '>');\n }\n return value;\n };\n Workbook.prototype.saveStyles = function () {\n this.updateCellXfsStyleXfs();\n /* tslint:disable-next-line:max-line-length */\n var styleTemp = '';\n styleTemp += this.saveNumberFormats();\n styleTemp += this.saveFonts();\n styleTemp += this.saveFills();\n styleTemp += this.saveBorders();\n styleTemp += this.saveCellStyleXfs();\n styleTemp += this.saveCellXfs();\n styleTemp += this.saveCellStyles();\n this.addToArchive(styleTemp + '', 'xl/styles.xml');\n };\n Workbook.prototype.updateCellXfsStyleXfs = function () {\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var style = _a[_i];\n var cellXfs = undefined;\n if (style.isGlobalStyle) {\n cellXfs = new CellStyleXfs();\n cellXfs.xfId = (style.index - 1);\n }\n else {\n cellXfs = new CellXfs();\n cellXfs.xfId = 0;\n }\n //Add font\n var compareFontResult = this.isNewFont(style);\n if (!compareFontResult.result) {\n var font = new Font();\n font.b = style.bold;\n font.i = style.italic;\n font.name = style.fontName;\n font.sz = style.fontSize;\n font.u = style.underline;\n font.color = ('FF' + style.fontColor.replace('#', ''));\n this.mFonts.push(font);\n cellXfs.fontId = this.mFonts.length - 1;\n }\n else {\n cellXfs.fontId = compareFontResult.index;\n }\n //Add fill\n if (style.backColor !== 'none') {\n var backColor = 'FF' + style.backColor.replace('#', '');\n if (this.mFills.has(backColor)) {\n var fillId = this.mFills.get(backColor);\n cellXfs.fillId = fillId;\n }\n else {\n var fillId = this.mFills.size + 2;\n this.mFills.set(backColor, fillId);\n cellXfs.fillId = (fillId);\n }\n }\n else {\n cellXfs.fillId = 0;\n }\n //Add border \n if (!this.isNewBorder(style)) {\n this.mBorders.push(style.borders);\n cellXfs.borderId = this.mBorders.length;\n }\n else {\n cellXfs.borderId = 0;\n }\n //Add Number Format \n if (style.numberFormat !== 'GENERAL') {\n if (this.mNumFmt.has(style.numberFormat)) {\n var numFmt = this.mNumFmt.get(style.numberFormat);\n cellXfs.numFmtId = numFmt.numFmtId;\n }\n else {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n cellXfs.numFmtId = id;\n }\n }\n else {\n if (style.numberFormat === 'GENERAL' && style.numFmtId === 14) {\n cellXfs.numFmtId = 14;\n }\n else {\n cellXfs.numFmtId = 0;\n }\n }\n //Add alignment \n if (!style.isGlobalStyle) {\n cellXfs.applyAlignment = 1;\n }\n cellXfs.alignment = new Alignment();\n cellXfs.alignment.indent = style.indent;\n cellXfs.alignment.horizontal = style.hAlign;\n cellXfs.alignment.vertical = style.vAlign;\n cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n if (style.isGlobalStyle) {\n this.mCellStyleXfs.push(cellXfs);\n this.mCellXfs.push(cellXfs);\n }\n else {\n //Add cellxfs\n this.mCellXfs.push(cellXfs);\n }\n }\n };\n Workbook.prototype.saveNumberFormats = function () {\n if (this.mNumFmt.size >= 1) {\n var numFmtStyle_1 = '';\n this.mNumFmt.forEach(function (value, key) {\n numFmtStyle_1 += '';\n });\n return (numFmtStyle_1 += '');\n }\n else {\n return '';\n }\n };\n Workbook.prototype.saveFonts = function () {\n /* tslint:disable-next-line:max-line-length */\n var fontStyle = '';\n if (this.mFonts.length >= 1) {\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n fontStyle += '';\n if (font.b) {\n fontStyle += '';\n }\n if (font.i) {\n fontStyle += '';\n }\n if (font.u) {\n fontStyle += '';\n }\n fontStyle += '';\n fontStyle += '';\n fontStyle += '';\n }\n }\n return fontStyle + '';\n };\n Workbook.prototype.saveFills = function () {\n /* tslint:disable-next-line:max-line-length */\n var fillsStyle = '';\n if (this.mFills.size >= 1) {\n this.mFills.forEach(function (value, key) {\n /* tslint:disable-next-line:max-line-length */\n fillsStyle += '';\n });\n }\n return fillsStyle + '';\n };\n Workbook.prototype.saveBorders = function () {\n /* tslint:disable-next-line:max-line-length */\n var bordersStyle = '';\n if (this.mBorders.length >= 1) {\n for (var _i = 0, _a = this.mBorders; _i < _a.length; _i++) {\n var borders = _a[_i];\n if (this.isAllBorder(borders)) {\n var color = borders.all.color.replace('#', '');\n var lineStyle = borders.all.lineStyle;\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n }\n }\n return bordersStyle + '';\n };\n Workbook.prototype.saveCellStyles = function () {\n var _this = this;\n var cellStyleString = '';\n this.cellStyles.forEach(function (value, key) {\n cellStyleString += '';\n if (this.mCellStyleXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n else {\n cellXfsStyle += ' />';\n }\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveCellXfs = function () {\n /* tslint:disable-next-line:max-line-length */\n var cellXfsStyle = '';\n if (this.mCellXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var cellXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveAlignment = function (cellXf) {\n var alignString = '';\n return alignString;\n };\n Workbook.prototype.saveApp = function (builtInProperties) {\n /* tslint:disable-next-line:max-line-length */\n var appString = 'Essential XlsIO';\n if (builtInProperties !== undefined) {\n if (builtInProperties.manager !== undefined) {\n appString += '' + builtInProperties.manager + '';\n }\n if (builtInProperties.company !== undefined) {\n appString += '' + builtInProperties.company + '';\n }\n }\n this.addToArchive((appString + ''), 'docProps/app.xml');\n };\n Workbook.prototype.saveCore = function (builtInProperties) {\n var createdDate = new Date();\n /* tslint:disable-next-line:max-line-length */\n var coreString = '';\n if (this.builtInProperties !== undefined) {\n if (builtInProperties.author !== undefined) {\n coreString += '' + builtInProperties.author + '';\n }\n if (builtInProperties.subject !== undefined) {\n coreString += '' + builtInProperties.subject + '';\n }\n if (builtInProperties.category !== undefined) {\n coreString += '' + builtInProperties.category + '';\n }\n if (builtInProperties.comments !== undefined) {\n coreString += '' + builtInProperties.comments + '';\n }\n if (builtInProperties.title !== undefined) {\n coreString += '' + builtInProperties.title + '';\n }\n if (builtInProperties.tags !== undefined) {\n coreString += '' + builtInProperties.tags + '';\n }\n if (builtInProperties.status !== undefined) {\n coreString += '' + builtInProperties.status + '';\n }\n if (builtInProperties.createdDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.createdDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n if (builtInProperties.modifiedDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.modifiedDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n coreString += '' + createdDate.toISOString() + '';\n }\n /* tslint:disable-next-line:max-line-length */\n coreString += '';\n this.addToArchive(coreString, 'docProps/core.xml');\n };\n Workbook.prototype.saveTopLevelRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var topRelation = '';\n this.addToArchive(topRelation, '_rels/.rels');\n };\n Workbook.prototype.saveWorkbookRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var wbRelation = '';\n var length = this.worksheets.length;\n var count = 0;\n for (var i = 0; i < length; i++, count++) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n this.addToArchive((wbRelation + ''), 'xl/_rels/workbook.xml.rels');\n };\n Workbook.prototype.saveContentType = function () {\n /* tslint:disable-next-line:max-line-length */\n var contentTypeString = '';\n var sheetsOverride = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n }\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n contentTypeString += '';\n }\n this.addToArchive((contentTypeString + sheetsOverride + ''), '[Content_Types].xml');\n };\n Workbook.prototype.addToArchive = function (xmlString, itemName) {\n if (typeof (xmlString) === 'string') {\n var blob = new Blob([xmlString], { type: 'text/plain' });\n var archiveItem = new ZipArchiveItem(blob, itemName);\n this.mArchive.addItem(archiveItem);\n }\n else {\n var archiveItem = new ZipArchiveItem(xmlString, itemName);\n this.mArchive.addItem(archiveItem);\n }\n };\n Workbook.prototype.processMergeCells = function (cell, rowIndex, mergeCells) {\n if (cell.rowSpan !== 0 || cell.colSpan !== 0) {\n var mCell = new MergeCell();\n mCell.x = cell.index;\n mCell.width = cell.colSpan;\n mCell.y = rowIndex;\n mCell.height = cell.rowSpan;\n var startCell = this.getCellName(mCell.y, mCell.x);\n var endCell = this.getCellName(rowIndex + mCell.height, cell.index + mCell.width);\n mCell.ref = startCell + ':' + endCell;\n var mergedCell = mergeCells.add(mCell);\n var start = { x: mCell.x, y: mCell.y };\n var end = {\n x: (cell.index + mCell.width), y: (rowIndex + mCell.height)\n };\n this.updatedMergedCellStyles(start, end, cell);\n }\n return mergeCells;\n };\n Workbook.prototype.updatedMergedCellStyles = function (sCell, eCell, cell) {\n for (var x = sCell.x; x <= eCell.x; x++) {\n for (var y = sCell.y; y <= eCell.y; y++) {\n this.mergedCellsStyle.set(this.getCellName(y, x), { x: x, y: y, styleIndex: cell.styleIndex });\n }\n }\n };\n /**\n * Returns the tick count corresponding to the given year, month, and day.\n * @param year number value of year\n * @param month number value of month\n * @param day number value of day\n */\n Workbook.prototype.dateToTicks = function (year, month, day) {\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysToMonth365 = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n var daysToMonth366 = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];\n if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {\n var days = this.isLeapYear(year) ? daysToMonth366 : daysToMonth365;\n var y = year - 1;\n var n = y * 365 + ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0) + days[month - 1] + day - 1;\n return n * ticksPerDay;\n }\n throw new Error('Not a valid date');\n };\n /**\n * Return the tick count corresponding to the given hour, minute, second.\n * @param hour number value of hour\n * @param minute number value if minute\n * @param second number value of second\n */\n Workbook.prototype.timeToTicks = function (hour, minute, second) {\n if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60) {\n var totalSeconds = hour * 3600 + minute * 60 + second;\n return totalSeconds * 10000 * 1000;\n }\n throw new Error('Not valid time');\n };\n /**\n * Checks if given year is a leap year.\n * @param year Year value.\n */\n Workbook.prototype.isLeapYear = function (year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n };\n /**\n * Converts `DateTime` to the equivalent OLE Automation date.\n */\n Workbook.prototype.toOADate = function (date) {\n var ticks = 0;\n /* tslint:disable-next-line:max-line-length */\n ticks = this.dateToTicks(date.getFullYear(), (date.getMonth() + 1), date.getDate()) + this.timeToTicks(date.getHours(), date.getMinutes(), date.getSeconds());\n if (ticks === 0) {\n return 0.0;\n }\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysTo1899 = (((365 * 4 + 1) * 25 - 1) * 4 + 1) * 4 + ((365 * 4 + 1) * 25 - 1) * 3 - 367;\n var doubleDateOffset = daysTo1899 * ticksPerDay;\n var oaDateMinAsTicks = (((365 * 4 + 1) * 25 - 1) - 365) * ticksPerDay;\n if (ticks < oaDateMinAsTicks) {\n throw new Error('Arg_OleAutDateInvalid');\n }\n var millisPerDay = 1000 * 60 * 60 * 24;\n return ((ticks - doubleDateOffset) / 10000) / millisPerDay;\n };\n return Workbook;\n}());\nexport { Workbook };\n/**\n * BuiltInProperties Class\n * @private\n */\nvar BuiltInProperties = /** @class */ (function () {\n function BuiltInProperties() {\n }\n return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n","import { Row } from './../models/row';\nimport { CellType } from '../base/enum';\nimport { isNullOrUndefined, Internationalization, getValue, createElement } from '@syncfusion/ej2-base';\nimport { Cell } from '../models/cell';\nimport { ValueFormatter } from './../services/value-formatter';\nimport { Query } from '@syncfusion/ej2-data';\nimport { getForeignData, measureColumnDepth, getUid } from '../base/util';\nimport { Grid } from '../base/grid';\n/**\n * @hidden\n * `ExportHelper` for `PdfExport` & `ExcelExport`\n */\nvar ExportHelper = /** @class */ (function () {\n function ExportHelper(parent) {\n this.hideColumnInclude = false;\n this.foreignKeyData = {};\n this.parent = parent;\n }\n ExportHelper.getQuery = function (parent, data) {\n return data.isRemote() ?\n data.generateQuery(true).requiresCount().take(parent.pageSettings.totalRecordsCount) :\n data.generateQuery(true).requiresCount();\n };\n ExportHelper.prototype.getFData = function (value, column) {\n var foreignKeyData = getForeignData(column, {}, value, this.foreignKeyData[column.field])[0];\n return foreignKeyData;\n };\n ExportHelper.prototype.getGridRowModel = function (columns, dataSource, gObj, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n var rows = [];\n var length = dataSource.length;\n if (length) {\n for (var i = 0; i < length; i++, startIndex++) {\n var options = { isExpand: false };\n options.data = dataSource[i];\n options.index = startIndex;\n if (gObj.childGrid) {\n if (gObj.hierarchyPrintMode === 'All') {\n options.isExpand = true;\n }\n else if (gObj.hierarchyPrintMode === 'Expanded' &&\n this.parent.expandedRows && this.parent.expandedRows[startIndex]) {\n options.isExpand = gObj.expandedRows[startIndex].isExpand;\n }\n }\n var row = new Row(options);\n row.cells = this.generateCells(columns, gObj);\n rows.push(row);\n }\n this.processColumns(rows);\n }\n return rows;\n };\n ExportHelper.prototype.generateCells = function (columns, gObj) {\n var cells = [];\n columns = gObj.enableColumnVirtualization && gObj.getColumns ? gObj.getColumns() : columns;\n if (gObj.childGridLevel) {\n var len = gObj.childGridLevel;\n for (var i = 0; len > i; i++) {\n cells.push(this.generateCell({}, CellType.Indent));\n }\n }\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n cells.push(this.generateCell(col, CellType.Data));\n }\n return cells;\n };\n ExportHelper.prototype.getColumnData = function (gridObj) {\n var _this = this;\n var columnPromise = [];\n var promise;\n var fColumns = gridObj.getForeignKeyColumns();\n if (fColumns.length) {\n fColumns.forEach(function (col) {\n columnPromise.push(col.dataSource.executeQuery(new Query()));\n });\n promise = Promise.all(columnPromise).then(function (e) {\n fColumns.forEach(function (col, index) {\n _this.foreignKeyData[col.field] = e[index].result;\n });\n // tslint:disable-next-line:no-any\n });\n }\n return promise;\n };\n ExportHelper.prototype.getHeaders = function (columns, isHideColumnInclude) {\n if (isHideColumnInclude) {\n this.hideColumnInclude = true;\n }\n else {\n this.hideColumnInclude = false;\n }\n this.colDepth = measureColumnDepth(columns);\n var rows = [];\n for (var i = 0; i < this.colDepth; i++) {\n rows[i] = new Row({});\n rows[i].cells = [];\n }\n rows = this.processColumns(rows);\n rows = this.processHeaderCells(rows);\n return { rows: rows, columns: this.generateActualColumns(columns) };\n };\n ExportHelper.prototype.getConvertedWidth = function (input) {\n var value = parseFloat(input);\n return (input.indexOf('%') !== -1) ? (this.parent.element.getBoundingClientRect().width * value / 100) : value;\n };\n ExportHelper.prototype.generateActualColumns = function (columns, actualColumns) {\n if (actualColumns === void 0) { actualColumns = []; }\n for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n var column = columns_2[_i];\n if (column.commands) {\n continue;\n }\n if (!column.columns) {\n if (column.visible || this.hideColumnInclude) {\n actualColumns.push(column);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n var colSpan = this.getCellCount(column, 0);\n if (colSpan !== 0) {\n this.generateActualColumns(column.columns, actualColumns);\n }\n }\n }\n }\n return actualColumns;\n };\n ExportHelper.prototype.processHeaderCells = function (rows) {\n var columns = this.parent.enableColumnVirtualization ? this.parent.getColumns() : this.parent.columns;\n for (var i = 0; i < columns.length; i++) {\n if (!columns[i].commands) {\n rows = this.appendGridCells(columns[i], rows, 0);\n }\n }\n return rows;\n };\n ExportHelper.prototype.appendGridCells = function (cols, gridRows, index) {\n if (!cols.columns && (cols.visible !== false || this.hideColumnInclude) && !cols.commands) {\n gridRows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, index));\n }\n else if (cols.columns) {\n var colSpan = this.getCellCount(cols, 0);\n if (colSpan) {\n gridRows[index].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols, colSpan: colSpan\n }));\n }\n var isIgnoreFirstCell = void 0;\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n if (cols.columns[i].visible && !isIgnoreFirstCell) {\n isIgnoreFirstCell = true;\n }\n gridRows = this.appendGridCells(cols.columns[i], gridRows, index + 1);\n }\n }\n return gridRows;\n };\n ExportHelper.prototype.generateCell = function (gridColumn, cellType, rowSpan, rowIndex) {\n var option = {\n 'visible': gridColumn.visible,\n 'isDataCell': cellType === CellType.Data,\n 'column': gridColumn,\n 'cellType': cellType,\n 'rowSpan': rowSpan,\n 'index': rowIndex\n };\n if (!option.rowSpan || option.rowSpan < 2) {\n delete option.rowSpan;\n }\n return new Cell(option);\n };\n ExportHelper.prototype.processColumns = function (rows) {\n //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n var gridObj = this.parent;\n var columnIndexes = [];\n if (gridObj.enableColumnVirtualization) {\n columnIndexes = gridObj.getColumnIndexesInView();\n }\n for (var i = 0, len = rows.length; i < len; i++) {\n if (gridObj.allowGrouping) {\n for (var j = 0, len_1 = gridObj.groupSettings.columns.length; j < len_1; j++) {\n if (gridObj.enableColumnVirtualization && columnIndexes.indexOf(j) === -1) {\n continue;\n }\n rows[i].cells.splice(0, 0, this.generateCell({}, CellType.HeaderIndent));\n }\n }\n }\n return rows;\n };\n ExportHelper.prototype.getCellCount = function (column, count) {\n if (column.columns) {\n for (var i = 0; i < column.columns.length; i++) {\n count = this.getCellCount(column.columns[i], count);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n count++;\n }\n }\n return count;\n };\n ExportHelper.prototype.checkAndExport = function (gridPool, globalResolve) {\n var bool = Object.keys(gridPool).some(function (key) {\n return !gridPool[key];\n });\n if (!bool) {\n globalResolve();\n }\n };\n ExportHelper.prototype.failureHandler = function (gridPool, childGridObj, resolve) {\n var _this = this;\n return function () {\n gridPool[childGridObj.id] = true;\n _this.checkAndExport(gridPool, resolve);\n };\n };\n // tslint:disable-next-line:no-any\n ExportHelper.prototype.createChildGrid = function (gObj, row, exportType, gridPool) {\n var childGridObj = new Grid(this.parent.detailRowModule.getGridModel(gObj, row, exportType));\n gObj.isPrinting = false;\n var parent = 'parentDetails';\n childGridObj[parent] = {\n parentID: gObj.element.id,\n parentPrimaryKeys: gObj.getPrimaryKeyFieldNames(),\n parentKeyField: gObj.childGrid.queryString,\n parentKeyFieldValue: getValue(childGridObj.queryString, row.data),\n parentRowData: row.data\n };\n var exportId = getUid('child-grid');\n var element = createElement('div', {\n id: exportId, styles: 'display: none'\n });\n document.body.appendChild(element);\n childGridObj.id = exportId;\n gridPool[exportId] = false;\n return { childGrid: childGridObj, element: element };\n };\n return ExportHelper;\n}());\nexport { ExportHelper };\n/**\n * @hidden\n * `ExportValueFormatter` for `PdfExport` & `ExcelExport`\n */\nvar ExportValueFormatter = /** @class */ (function () {\n function ExportValueFormatter(culture) {\n this.valueFormatter = new ValueFormatter(culture);\n this.internationalization = new Internationalization(culture);\n }\n /* tslint:disable-next-line:no-any */\n ExportValueFormatter.prototype.returnFormattedValue = function (args, customFormat) {\n if (!isNullOrUndefined(args.value) && args.value) {\n return this.valueFormatter.getFormatFunction(customFormat)(args.value);\n }\n else {\n return '';\n }\n };\n /* tslint:disable-next-line:no-any */\n ExportValueFormatter.prototype.formatCellValue = function (args) {\n if (args.isForeignKey) {\n args.value = getValue(args.column.foreignKeyValue, getForeignData(args.column, {}, args.value)[0]);\n }\n if (args.column.type === 'number' && args.column.format !== undefined && args.column.format !== '') {\n return args.value ? this.internationalization.getNumberFormat({ format: args.column.format })(args.value) : '';\n }\n else if (args.column.type === 'boolean') {\n return args.value ? 'true' : 'false';\n /* tslint:disable-next-line:max-line-length */\n }\n else if ((args.column.type === 'date' || args.column.type === 'datetime' || args.column.type === 'time') && args.column.format !== undefined) {\n if (typeof args.column.format === 'string') {\n var format = void 0;\n if (args.column.type === 'date') {\n format = { type: 'date', skeleton: args.column.format };\n }\n else if (args.column.type === 'time') {\n format = { type: 'time', skeleton: args.column.format };\n }\n else {\n format = { type: 'dateTime', skeleton: args.column.format };\n }\n return this.returnFormattedValue(args, format);\n }\n else {\n if (args.column.format instanceof Object && args.column.format.type === undefined) {\n return (args.value.toString());\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n var customFormat = void 0;\n if (args.column.type === 'date') {\n /* tslint:disable-next-line:max-line-length */\n customFormat = { type: args.column.format.type, format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else if (args.column.type === 'time') {\n customFormat = { type: 'time', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else {\n customFormat = { type: 'dateTime', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n return this.returnFormattedValue(args, customFormat);\n }\n }\n }\n else {\n if ((!isNullOrUndefined(args.column.type) && !isNullOrUndefined(args.value)) || !isNullOrUndefined(args.value)) {\n return (args.value).toString();\n }\n else {\n return '';\n }\n }\n };\n return ExportValueFormatter;\n}());\nexport { ExportValueFormatter };\n","import * as events from '../base/constant';\nimport { Workbook } from '@syncfusion/ej2-excel-export';\nimport { isNullOrUndefined, getEnumValue, compile, getValue, detach, extend } from '@syncfusion/ej2-base';\nimport { Data } from '../actions/data';\nimport { ExportHelper, ExportValueFormatter } from './export-helper';\nimport { SummaryModelGenerator, GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { CellType } from '../base/enum';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getPrintGridModel, getUid } from '../base/util';\n/**\n * @hidden\n * `ExcelExport` module is used to handle the Excel export action.\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for the Grid Excel Export module.\n * @hidden\n */\n function ExcelExport(parent) {\n /* tslint:disable-next-line:no-any */\n this.book = {};\n this.workSheet = [];\n this.rows = [];\n this.columns = [];\n this.styles = [];\n this.rowLength = 1;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.isCsvExport = false;\n this.isElementIdChanged = false;\n this.foreignKeyData = {};\n this.gridPool = {};\n this.parent = parent;\n this.helper = new ExportHelper(parent);\n }\n /**\n * For internal use only - Get the module name.\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n ExcelExport.prototype.init = function (gObj) {\n if (gObj.element !== null && gObj.element.id === '') {\n gObj.element.id = new Date().toISOString();\n this.isElementIdChanged = true;\n }\n this.parent = gObj;\n if (this.parent.isDestroyed) {\n return;\n }\n this.isExporting = undefined;\n this.book = {};\n this.workSheet = [];\n this.rows = [];\n this.columns = [];\n this.styles = [];\n this.rowLength = 1;\n this.footer = undefined;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.exportValueFormatter = new ExportValueFormatter(gObj.locale);\n gObj.id = getUid('main-grid');\n this.gridPool[gObj.id] = false;\n };\n /**\n * Export Grid to Excel file.\n * @param {exportProperties} exportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Defines is multiple Grid's are exported.\n * @param {workbook} workbook - Defined the Workbook if multiple Grid is exported.\n * @param {isCsv} isCsv - true if export to CSV.\n * @return {Promise}\n */\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.Map = function (grid, exportProperties, isMultipleExport, workbook, isCsv, isBlob) {\n var gObj = grid;\n var cancel = 'cancel';\n var isBlb = 'isBlob';\n var csv = 'isCsv';\n var workbk = 'workbook';\n var isMultiEx = 'isMultipleExport';\n this.gridPool = {};\n if (grid.childGrid && !(!isNullOrUndefined(exportProperties) && exportProperties.hierarchyExportMode === 'None')) {\n grid.expandedRows = getPrintGridModel(grid).expandedRows;\n }\n var args = {\n requestType: 'beforeExcelExport', gridObject: gObj, cancel: false,\n isMultipleExport: isMultipleExport, workbook: workbook, isCsv: isCsv, isBlob: isBlob\n };\n gObj.trigger(events.beforeExcelExport, args);\n if (args[cancel]) {\n return new Promise(function (resolve, reject) {\n return resolve();\n });\n }\n this.data = new Data(gObj);\n this.isExporting = true;\n this.isBlob = args[isBlb];\n if (args[csv]) {\n this.isCsvExport = args[csv];\n }\n else {\n this.isCsvExport = false;\n }\n return this.processRecords(gObj, exportProperties, args[isMultiEx], args[workbk]);\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecords = function (gObj, exportProperties, isMultipleExport, workbook) {\n var _this = this;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) &&\n exportProperties.dataSource instanceof DataManager) {\n return new Promise(function (resolve, reject) {\n var dataManager = exportProperties.dataSource.executeQuery(new Query());\n dataManager.then(function (r) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, r).then(function () {\n resolve(_this.book);\n });\n });\n });\n }\n else {\n var allPromise_1 = [];\n allPromise_1.push(this.data.getData({}, ExportHelper.getQuery(gObj, this.data)));\n allPromise_1.push(this.helper.getColumnData(gObj));\n return new Promise(function (resolve, reject) {\n Promise.all(allPromise_1).then(function (e) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, e[0]).then(function () {\n _this.isExporting = false;\n gObj.trigger(events.excelExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n resolve(_this.book);\n });\n }).catch(function (e) {\n reject(_this.book);\n _this.parent.trigger(events.actionFailure, e);\n });\n });\n }\n };\n /* tslint:disable-next-line:max-func-body-length */\n ExcelExport.prototype.processInnerRecords = function (gObj, exportProperties, \n /* tslint:disable-next-line:no-any */\n isMultipleExport, workbook, r) {\n var _this = this;\n this.groupedColLength = gObj.groupSettings.columns.length;\n var blankRows = 5;\n var rows = [];\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.multipleExport)) {\n /* tslint:disable-next-line:max-line-length */\n this.expType = (!isNullOrUndefined(exportProperties.multipleExport.type) ? exportProperties.multipleExport.type : 'AppendToSheet');\n if (!isNullOrUndefined(exportProperties.multipleExport.blankRows)) {\n blankRows = exportProperties.multipleExport.blankRows;\n }\n }\n if (isNullOrUndefined(workbook)) {\n this.workSheet = [];\n this.rows = [];\n this.columns = [];\n this.styles = [];\n }\n else if (this.expType === 'NewSheet') {\n this.workSheet = workbook.worksheets;\n this.rows = [];\n this.columns = [];\n this.styles = workbook.styles;\n }\n else {\n this.workSheet = [];\n this.rows = workbook.worksheets[0].rows;\n this.columns = workbook.worksheets[0].columns;\n this.styles = workbook.styles;\n this.rowLength = (this.rows[this.rows.length - 1].index + blankRows);\n this.rowLength++;\n }\n if (!isNullOrUndefined(exportProperties)) {\n if (!isNullOrUndefined(isMultipleExport)) {\n if (!isNullOrUndefined(exportProperties.header) && (isMultipleExport || this.expType === 'NewSheet')) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n if (this.expType === 'AppendToSheet') {\n if (!isMultipleExport) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n else {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n else {\n if (!isNullOrUndefined(exportProperties.header)) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n this.includeHiddenColumn = (!isNullOrUndefined(exportProperties) ? exportProperties.includeHiddenColumn : false);\n return new Promise(function (resolve, reject) {\n gObj.childGridLevel = 0;\n rows = _this.processGridExport(gObj, exportProperties, r);\n _this.globalResolve = resolve;\n _this.gridPool[gObj.id] = true;\n _this.helper.checkAndExport(_this.gridPool, _this.globalResolve);\n }).then(function () {\n var organisedRows = [];\n _this.organiseRows(rows, rows[0].index, organisedRows);\n _this.rows = _this.rows.concat(organisedRows);\n //footer template add\n if (!isNullOrUndefined(_this.footer)) {\n if ((_this.expType === 'AppendToSheet' && !isMultipleExport) || (_this.expType === 'NewSheet')) {\n _this.processExcelFooter(_this.footer);\n }\n }\n var sheet = {};\n if (_this.columns.length > 0) {\n sheet.columns = _this.columns;\n }\n /* tslint:disable-next-line:no-any */\n sheet.rows = _this.rows;\n _this.workSheet.push(sheet);\n _this.book.worksheets = _this.workSheet;\n _this.book.styles = _this.styles;\n if (!isMultipleExport) {\n if (_this.isCsvExport) {\n var book = new Workbook(_this.book, 'csv', gObj.locale);\n if (!_this.isBlob) {\n if (!isNullOrUndefined(exportProperties) && exportProperties.fileName) {\n book.save(exportProperties.fileName);\n }\n else {\n book.save('Export.csv');\n }\n }\n else {\n _this.blobPromise = book.saveAsBlob('text/csv');\n }\n }\n else {\n var book = new Workbook(_this.book, 'xlsx', gObj.locale);\n if (!_this.isBlob) {\n if (!isNullOrUndefined(exportProperties) && exportProperties.fileName) {\n book.save(exportProperties.fileName);\n }\n else {\n book.save('Export.xlsx');\n }\n }\n else {\n _this.blobPromise = book.saveAsBlob('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n }\n }\n if (_this.isElementIdChanged) {\n gObj.element.id = '';\n }\n delete gObj.expandedRows;\n }\n return workbook;\n });\n };\n ExcelExport.prototype.organiseRows = function (rows, initialIndex, organisedRows) {\n if (!rows.length) {\n return initialIndex;\n }\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n var childRows = row.childRows;\n if (childRows) {\n row.index = initialIndex++;\n delete row.childRows;\n organisedRows.push(row);\n initialIndex = this.organiseRows(childRows, initialIndex, organisedRows);\n }\n else {\n row.index = initialIndex++;\n organisedRows.push(row);\n }\n }\n return initialIndex;\n };\n ExcelExport.prototype.processGridExport = function (gObj, exportProperties, r) {\n var excelRows = [];\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.theme)) {\n this.theme = exportProperties.theme;\n }\n if (gObj.childGrid && !isNullOrUndefined(exportProperties)) {\n gObj.hierarchyPrintMode = exportProperties.hierarchyExportMode || 'Expanded';\n }\n var helper = new ExportHelper(gObj);\n var headerRow = helper.getHeaders(gObj.columns, this.includeHiddenColumn);\n var groupIndent = gObj.groupSettings.columns.length;\n excelRows = this.processHeaderContent(gObj, headerRow, groupIndent, excelRows);\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) && !(exportProperties.dataSource instanceof DataManager)) {\n excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, exportProperties.dataSource, excelRows, helper);\n }\n else if (!isNullOrUndefined(exportProperties) && exportProperties.exportType === 'CurrentPage') {\n excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, gObj.currentViewData, excelRows, helper);\n }\n else {\n excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, undefined, excelRows, helper);\n }\n return excelRows;\n };\n ExcelExport.prototype.processRecordContent = function (gObj, returnType, headerRow, exportProperties, currentViewRecords, excelRow, helper) {\n var record;\n if (!isNullOrUndefined(currentViewRecords)) {\n record = currentViewRecords;\n }\n else {\n record = returnType.result;\n }\n if (!isNullOrUndefined(record.level)) {\n this.processGroupedRows(gObj, record, headerRow, record.level, 0, exportProperties, excelRow, helper);\n }\n else {\n this.processRecordRows(gObj, record, headerRow, 0, 0, exportProperties, excelRow, helper);\n }\n if (!isNullOrUndefined(returnType.aggregates)) {\n if (!isNullOrUndefined(currentViewRecords)) {\n this.processAggregates(gObj, returnType.result, excelRow, currentViewRecords);\n }\n else {\n this.processAggregates(gObj, returnType.result, excelRow);\n }\n }\n return excelRow;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processGroupedRows = function (gObj, dataSource, headerRow, level, startIndex, excelExportProperties, excelRows, helper) {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n var cells = [];\n var index = 1;\n /* tslint:disable-next-line:no-any */\n var cell = {};\n cell.index = index + level;\n var col = gObj.getColumnByField(item.field);\n /* tslint:disable-next-line:no-any */\n var args = {\n value: item.key,\n column: col,\n style: undefined,\n isForeignKey: col.isForeignColumn(),\n };\n cell.value = gObj.getColumnByField(item.field).headerText +\n ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ';\n if (item.count > 1) {\n cell.value += item.count + ' items';\n }\n else {\n cell.value += item.count + ' item';\n }\n cell.style = this.getCaptionThemeStyle(this.theme);\n var captionModelGen = new CaptionSummaryModelGenerator(gObj);\n var groupCaptionSummaryRows = captionModelGen.generateRows(item);\n this.fillAggregates(gObj, groupCaptionSummaryRows, dataSource.level + dataSource.childLevels, excelRows, this.rowLength);\n cells.push(cell);\n if (excelRows[excelRows.length - 1].cells.length > 0) {\n var lIndex = dataSource.level + dataSource.childLevels + groupCaptionSummaryRows[0].cells.length;\n var hIndex = 0;\n for (var _a = 0, _b = excelRows[excelRows.length - 1].cells; _a < _b.length; _a++) {\n var tCell = _b[_a];\n if (tCell.index < lIndex) {\n lIndex = tCell.index;\n }\n if (tCell.index > hIndex) {\n hIndex = tCell.index;\n }\n /* tslint:disable-next-line:no-any */\n tCell.style = this.getCaptionThemeStyle(this.theme);\n if (cells[cells.length - 1].index !== tCell.index) {\n cells.push(tCell);\n }\n }\n if ((lIndex - cell.index) > 1) {\n cell.colSpan = lIndex - cell.index;\n }\n while (hIndex < (headerRow.columns.length + level + dataSource.childLevels)) {\n /* tslint:disable-next-line:no-any */\n var sCell = {};\n sCell.index = (hIndex + 1);\n sCell.style = this.getCaptionThemeStyle(this.theme);\n cells.push(sCell);\n hIndex++;\n }\n }\n else {\n var span = 0;\n //Calculation for column span when group caption dont have aggregates\n for (var _c = 0, _d = headerRow.columns; _c < _d.length; _c++) {\n var col_1 = _d[_c];\n if (col_1.visible) {\n span++;\n }\n }\n cell.colSpan = (dataSource.childLevels + span);\n }\n excelRows[excelRows.length - 1].cells = cells;\n this.rowLength++;\n if (this.groupedColLength < 8 && level > 1) {\n var grouping = { outlineLevel: level - 1, isCollapsed: true };\n excelRows[excelRows.length - 1].grouping = grouping;\n }\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processGroupedRows(gObj, item.items, headerRow, item.items.level, startIndex, excelExportProperties, excelRows, helper);\n }\n else {\n startIndex = this.processRecordRows(gObj, item.items, headerRow, (level), startIndex, excelExportProperties, excelRows, helper);\n this.processAggregates(gObj, item, excelRows, undefined, (level), true);\n }\n }\n };\n ExcelExport.prototype.processRecordRows = function (gObj, record, headerRow, level, startIndex, excelExportProperties, excelRows, helper) {\n var index = 1;\n var cells = [];\n var columns = headerRow.columns;\n var rows = helper.getGridRowModel(columns, record, gObj, startIndex);\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n cells = [];\n startIndex++;\n index = 1;\n for (var c = 0, len = row.cells.length; c < len; c++) {\n var gCell = row.cells[c];\n if (gCell.cellType !== CellType.Data) {\n continue;\n }\n var column = gCell.column;\n var field = column.field;\n var value = (!isNullOrUndefined(field) && getValue(field, row.data)) || '';\n var fkData = void 0;\n if (column.isForeignColumn && column.isForeignColumn()) {\n fkData = helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, fkData);\n }\n if (!isNullOrUndefined(value)) {\n var cell = {};\n /* tslint:disable-next-line:no-any */\n var excelCellArgs = {\n data: row.data, column: column, foreignKeyData: fkData,\n value: value, style: undefined, colSpan: 1, cell: cell\n };\n gObj.trigger(events.excelQueryCellInfo, excelCellArgs);\n cell = excelCellArgs.cell;\n cell.index = index + level + gObj.childGridLevel;\n cell.value = excelCellArgs.value;\n if (excelCellArgs.colSpan > 1) {\n cell.colSpan = excelCellArgs.colSpan;\n }\n if (!isNullOrUndefined(excelCellArgs.style)) {\n var styleIndex = this.getColumnStyle(gObj, index + level);\n cell.style = this.mergeOptions(this.styles[styleIndex], excelCellArgs.style);\n }\n else {\n cell.style = { name: gObj.element.id + 'column' + (index + level) };\n }\n cells.push(cell);\n }\n index++;\n }\n var excelRow = { index: this.rowLength++, cells: cells };\n if (this.groupedColLength < 8 && level > 0) {\n excelRow.grouping = { outlineLevel: level, isCollapsed: true };\n excelRows.push(excelRow);\n }\n else {\n excelRows.push(excelRow);\n }\n if (!isNullOrUndefined(gObj.childGrid)) {\n gObj.isPrinting = true;\n var exportType = (!isNullOrUndefined(excelExportProperties) && excelExportProperties.exportType) ?\n excelExportProperties.exportType : 'AllPages';\n var returnVal = this.helper.createChildGrid(gObj, row, exportType, this.gridPool);\n var childGridObj = returnVal.childGrid;\n var element = returnVal.element;\n childGridObj.actionFailure =\n helper.failureHandler(this.gridPool, childGridObj, this.globalResolve);\n childGridObj.childGridLevel = gObj.childGridLevel + 1;\n var args = { childGrid: childGridObj, row: row, exportProperties: excelExportProperties };\n this.parent.trigger(events.exportDetailDataBound, args);\n childGridObj.beforeDataBound = this.childGridCell(excelRow, childGridObj, excelExportProperties, row);\n childGridObj.appendTo(element);\n }\n gObj.notify(events.exportRowDataBound, { rowObj: row, type: 'excel' });\n }\n return startIndex;\n };\n ExcelExport.prototype.childGridCell = function (excelRow, childGridObj, excelExportProps, gRow) {\n var _this = this;\n return function (result) {\n childGridObj.beforeDataBound = null;\n result.cancel = true;\n excelRow.childRows = _this.processGridExport(childGridObj, excelExportProps, result);\n var intent = _this.parent.groupSettings.columns.length;\n excelRow.childRows.forEach(function (row) {\n row.grouping = { outlineLevel: intent + childGridObj.childGridLevel,\n isCollapsed: !gRow.isExpand, isHidden: !gRow.isExpand };\n });\n childGridObj.destroy();\n detach(childGridObj.element);\n _this.gridPool[childGridObj.id] = true;\n _this.helper.checkAndExport(_this.gridPool, _this.globalResolve);\n return excelRow;\n };\n };\n // tslint:disable-next-line:max-line-length\n ExcelExport.prototype.processAggregates = function (gObj, rec, excelRows, currentViewRecords, indent, byGroup) {\n var summaryModel = new SummaryModelGenerator(gObj);\n var data = undefined;\n if (!isNullOrUndefined(currentViewRecords)) {\n data = currentViewRecords;\n }\n else {\n data = rec;\n }\n if (indent === undefined) {\n indent = 0;\n }\n if (gObj.groupSettings.columns.length > 0 && byGroup) {\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n var groupSummaryRows = groupSummaryModel.generateRows(data, { level: data.level });\n if (groupSummaryRows.length > 0) {\n excelRows = this.fillAggregates(gObj, groupSummaryRows, indent, excelRows);\n }\n }\n else {\n indent = gObj.groupSettings.columns.length > 0 && !byGroup ? gObj.groupSettings.columns.length : indent;\n var sRows = summaryModel.generateRows(data, rec.aggregates);\n if (sRows.length > 0 && !byGroup) {\n excelRows = this.fillAggregates(gObj, sRows, indent, excelRows);\n }\n }\n return excelRows;\n };\n // tslint:disable-next-line:max-line-length\n ExcelExport.prototype.fillAggregates = function (gObj, rows, indent, excelRows, customIndex) {\n for (var _i = 0, rows_2 = rows; _i < rows_2.length; _i++) {\n var row = rows_2[_i];\n var cells = [];\n var index = 0;\n for (var _a = 0, _b = row.cells; _a < _b.length; _a++) {\n var cell = _b[_a];\n /* tslint:disable-next-line:no-any */\n var eCell = {};\n if (cell.cellType === CellType.DetailFooterIntent) {\n continue;\n }\n if ((cell.visible || this.includeHiddenColumn)) {\n index++;\n if (cell.isDataCell) {\n eCell.index = index + indent + gObj.childGridLevel;\n if (!isNullOrUndefined(cell.column.footerTemplate)) {\n eCell.value = this.getAggreateValue(CellType.Summary, cell.column.footerTemplate, cell, row);\n }\n else if (!isNullOrUndefined(cell.column.groupFooterTemplate)) {\n eCell.value = this.getAggreateValue(CellType.GroupSummary, cell.column.groupFooterTemplate, cell, row);\n }\n else if (!isNullOrUndefined(cell.column.groupCaptionTemplate)) {\n eCell.value = this.getAggreateValue(CellType.CaptionSummary, cell.column.groupCaptionTemplate, cell, row);\n }\n else {\n for (var _c = 0, _d = Object.keys(row.data[cell.column.field]); _c < _d.length; _c++) {\n var key = _d[_c];\n if (key === cell.column.type) {\n if (!isNullOrUndefined(row.data[cell.column.field].Sum)) {\n eCell.value = row.data[cell.column.field].Sum;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Average)) {\n eCell.value = row.data[cell.column.field].Average;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Max)) {\n eCell.value = row.data[cell.column.field].Max;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Min)) {\n eCell.value = row.data[cell.column.field].Min;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Count)) {\n eCell.value = row.data[cell.column.field].Count;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].TrueCount)) {\n eCell.value = row.data[cell.column.field].TrueCount;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].FalseCount)) {\n eCell.value = row.data[cell.column.field].FalseCount;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Custom)) {\n eCell.value = row.data[cell.column.field].Custom;\n }\n }\n }\n }\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n var gridCellStyle = cell.attributes.style;\n if (gridCellStyle.textAlign) {\n eCell.style.hAlign = gridCellStyle.textAlign.toLowerCase();\n }\n cells.push(eCell);\n }\n else {\n if (customIndex === undefined) {\n eCell.index = index + indent + gObj.childGridLevel;\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n cells.push(eCell);\n }\n }\n }\n }\n if (!isNullOrUndefined(customIndex)) {\n excelRows.push({ index: customIndex, cells: cells });\n }\n else {\n var row_1 = {};\n if (this.groupedColLength < 8 && this.groupedColLength > 0) {\n var dummyOutlineLevel = 'outlineLevel';\n var dummyGrouping = 'grouping';\n var level = excelRows[excelRows.length - 1][dummyGrouping][dummyOutlineLevel];\n var grouping = { outlineLevel: level, isCollapsed: true };\n row_1 = { index: this.rowLength++, cells: cells, grouping: grouping };\n }\n else {\n row_1 = { index: this.rowLength++, cells: cells };\n }\n excelRows.push(row_1);\n }\n }\n return excelRows;\n };\n ExcelExport.prototype.getAggreateValue = function (cellType, template, cell, row) {\n var templateFn = {};\n templateFn[getEnumValue(CellType, cell.cellType)] = compile(template);\n /* tslint:disable-next-line:max-line-length */\n var txt = (templateFn[getEnumValue(CellType, cell.cellType)](row.data[cell.column.field ? cell.column.field : cell.column.columnName]));\n return txt[0].textContent;\n };\n ExcelExport.prototype.mergeOptions = function (JSON1, JSON2) {\n var result = {};\n var attrname = Object.keys(JSON1);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[index] !== 'name') {\n result[attrname[index]] = JSON1[attrname[index]];\n }\n }\n attrname = Object.keys(JSON2);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[index] !== 'name') {\n result[attrname[index]] = JSON2[attrname[index]];\n }\n }\n return result;\n };\n ExcelExport.prototype.getColumnStyle = function (gObj, columnIndex) {\n var index = 0;\n for (var _i = 0, _a = this.styles; _i < _a.length; _i++) {\n var style = _a[_i];\n if (style.name === gObj.element.id + 'column' + columnIndex) {\n return index;\n }\n index++;\n }\n return undefined;\n };\n ExcelExport.prototype.processHeaderContent = function (gObj, headerRow, indent, excelRows) {\n var rowIndex = 1;\n var gridRows = headerRow.rows;\n // Column collection with respect to the records in the grid\n var gridColumns = headerRow.columns;\n var spannedCells = [];\n if (indent > 0) {\n var index = 0;\n while (index !== indent) {\n this.columns.push({ index: index + 1, width: 30 });\n index++;\n }\n }\n for (var row = 0; row < gridRows.length; row++) {\n var currentCellIndex = 1 + indent;\n var cells = [];\n for (var column = 0; column < gridRows[row].cells.length; column++) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n var cell = {};\n var gridCell = gridRows[row].cells[column];\n if (gridCell.cellType === CellType.HeaderIndent || gridCell.cellType === CellType.DetailHeader) {\n continue;\n }\n var result = { contains: true, index: 1 };\n while (result.contains) {\n result = this.getIndex(spannedCells, rowIndex, currentCellIndex);\n currentCellIndex = result.index;\n if (!result.contains) {\n cell.index = result.index + gObj.childGridLevel;\n break;\n }\n }\n if (!isNullOrUndefined(gridCell.rowSpan) && gridCell.rowSpan !== 1) {\n cell.rowSpan = gridCell.rowSpan;\n for (var i = rowIndex; i < gridCell.rowSpan + rowIndex; i++) {\n var spannedCell = { rowIndex: 0, columnIndex: 0 };\n spannedCell.rowIndex = i;\n spannedCell.columnIndex = currentCellIndex;\n spannedCells.push(spannedCell);\n }\n }\n if (!isNullOrUndefined(gridCell.colSpan) && gridCell.colSpan !== 1) {\n cell.colSpan = gridCell.colSpan;\n currentCellIndex = currentCellIndex + cell.colSpan - 1;\n }\n cell.value = gridCell.column.headerText;\n style = this.getHeaderThemeStyle(this.theme);\n if (!isNullOrUndefined(gridCell.column.textAlign)) {\n style.hAlign = gridCell.column.textAlign.toLowerCase();\n }\n if (!isNullOrUndefined(gridCell.column.headerTextAlign)) {\n style.hAlign = gridCell.column.headerTextAlign.toLowerCase();\n }\n var excelHeaderCellArgs = { cell: cell, gridCell: gridCell, style: style };\n gObj.trigger(events.excelHeaderQueryCellInfo, excelHeaderCellArgs);\n cell.style = excelHeaderCellArgs.style;\n cells.push(cell);\n currentCellIndex++;\n }\n excelRows.push({ index: this.rowLength++, cells: cells });\n }\n for (var col = 0; col < gridColumns.length; col++) {\n this.parseStyles(gObj, gridColumns[col], this.getRecordThemeStyle(this.theme), indent + col + 1);\n }\n return excelRows;\n };\n ExcelExport.prototype.getHeaderThemeStyle = function (theme) {\n var style = {};\n style.fontSize = 12;\n style.borders = { color: '#E0E0E0' };\n style.bold = true;\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.header)) {\n style = this.updateThemeStyle(theme.header, style);\n }\n return style;\n };\n ExcelExport.prototype.updateThemeStyle = function (themestyle, style) {\n return extend(style, themestyle);\n };\n ExcelExport.prototype.getCaptionThemeStyle = function (theme) {\n var style = {};\n style.fontSize = 13;\n style.backColor = '#F6F6F6';\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.caption)) {\n style = this.updateThemeStyle(theme.caption, style);\n }\n return style;\n };\n ExcelExport.prototype.getRecordThemeStyle = function (theme) {\n var style = {};\n style.fontSize = 13;\n style.borders = { color: '#E0E0E0' };\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.record)) {\n style = this.updateThemeStyle(theme.record, style);\n }\n return style;\n };\n ExcelExport.prototype.processExcelHeader = function (header) {\n if (!isNullOrUndefined(header.rows) && (this.expType === 'NewSheet' || this.rowLength === 1)) {\n var noRows = void 0;\n if (header.headerRows === undefined) {\n this.rowLength = header.rows.length;\n }\n else {\n this.rowLength = header.headerRows;\n }\n if (this.rowLength < header.rows.length) {\n noRows = this.rowLength;\n }\n else {\n noRows = header.rows.length;\n }\n this.rowLength++;\n for (var row = 0; row < noRows; row++) {\n var json = header.rows[row];\n //Row index\n if (!(json.index !== null && !isNullOrUndefined(json.index))) {\n json.index = (row + 1);\n }\n this.updatedCellIndex(json);\n }\n }\n };\n ExcelExport.prototype.updatedCellIndex = function (json) {\n var cellsLength = json.cells.length;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n var jsonCell = json.cells[cellId];\n //cell index\n if (!(jsonCell.index !== null && !isNullOrUndefined(jsonCell.index))) {\n jsonCell.index = (cellId + 1);\n }\n }\n this.rows.push(json);\n };\n ExcelExport.prototype.processExcelFooter = function (footer) {\n if (!isNullOrUndefined(footer.rows)) {\n var noRows = void 0;\n if (footer.footerRows === undefined) {\n this.rowLength += footer.rows.length;\n }\n else {\n if (footer.footerRows > footer.rows.length) {\n this.rowLength += (footer.footerRows - footer.rows.length);\n noRows = footer.rows.length;\n }\n else {\n noRows = footer.footerRows;\n }\n }\n for (var row = 0; row < noRows; row++) {\n var json = footer.rows[row];\n //Row index\n if (json.index === null || json.index === undefined) {\n json.index = this.rowLength++;\n }\n else {\n json.index += this.rowLength;\n }\n this.updatedCellIndex(json);\n }\n }\n };\n ExcelExport.prototype.getIndex = function (spannedCells, rowIndex, columnIndex) {\n for (var _i = 0, spannedCells_1 = spannedCells; _i < spannedCells_1.length; _i++) {\n var spannedCell = spannedCells_1[_i];\n if ((spannedCell.rowIndex === rowIndex) && (spannedCell.columnIndex === columnIndex)) {\n columnIndex = columnIndex + 1;\n return { contains: true, index: columnIndex };\n }\n }\n return { contains: false, index: columnIndex };\n };\n ExcelExport.prototype.parseStyles = function (gObj, col, style, index) {\n if (!isNullOrUndefined(col.format)) {\n if (typeof col.format === 'object') {\n var format = col.format;\n style.numberFormat = !isNullOrUndefined(format.format) ? format.format : format.skeleton;\n if (!isNullOrUndefined(format.type)) {\n style.type = format.type;\n }\n }\n else {\n style.numberFormat = col.format;\n style.type = col.type;\n }\n }\n if (!isNullOrUndefined(col.textAlign)) {\n style.hAlign = col.textAlign.toLowerCase();\n }\n if (Object.keys(style).length > 0) {\n style.name = gObj.element.id + 'column' + index;\n this.styles.push(style);\n }\n if (!isNullOrUndefined(col.width)) {\n this.columns.push({ index: index + gObj.childGridLevel, width: typeof col.width === 'number' ?\n col.width : this.helper.getConvertedWidth(col.width) });\n }\n };\n /**\n * To destroy the excel export\n * @return {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n //destroy for exporting\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","/**\n * Dictionary.ts class for EJ2-PDF\n * @private\n * @hidden\n */\nimport { defaultToString } from './utils';\n/**\n * @private\n * @hidden\n */\nvar Dictionary = /** @class */ (function () {\n /**\n * @private\n * @hidden\n */\n function Dictionary(toStringFunction) {\n this.table = {};\n this.nElements = 0;\n this.toStr = toStringFunction || defaultToString;\n }\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.getValue = function (key) {\n var pair = this.table['$' + this.toStr(key)];\n if (typeof pair === 'undefined') {\n return undefined;\n }\n return pair.value;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.setValue = function (key, value) {\n // if (typeof key === 'undefined' || typeof value === 'undefined') {\n // return undefined;\n // }\n var ret;\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement === 'undefined') {\n this.nElements++;\n ret = undefined;\n // }\n this.table[k] = {\n key: key,\n value: value\n };\n return ret;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.remove = function (key) {\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement !== 'undefined') {\n delete this.table[k];\n this.nElements--;\n return previousElement.value;\n // }\n // return undefined;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.keys = function () {\n var keysArray = [];\n var namesOfKeys = Object.keys(this.table);\n for (var index1 = 0; index1 < namesOfKeys.length; index1++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfKeys[index1])) {\n var pair1 = this.table[namesOfKeys[index1]];\n keysArray.push(pair1.key);\n // }\n }\n return keysArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.values = function () {\n var valuesArray = [];\n var namesOfValues = Object.keys(this.table);\n for (var index2 = 0; index2 < namesOfValues.length; index2++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfValues[index2])) {\n var pair2 = this.table[namesOfValues[index2]];\n valuesArray.push(pair2.value);\n // }\n }\n return valuesArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.containsKey = function (key) {\n var retutnValue = true;\n if (typeof this.getValue(key) === 'undefined') {\n retutnValue = true;\n }\n else {\n retutnValue = false;\n }\n return !retutnValue;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.clear = function () {\n this.table = {};\n this.nElements = 0;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.size = function () {\n return this.nElements;\n };\n return Dictionary;\n}()); // End of dictionary\nexport { Dictionary };\n","/**\n * `PdfName` class is used to perform name (element names) related primitive operations.\n * @private\n */\nvar PdfName = /** @class */ (function () {\n function PdfName(value) {\n /**\n * `Start symbol` of the name object.\n * @default /\n * @private\n */\n this.stringStartMark = '/';\n /**\n * `Value` of the element.\n * @private\n */\n this.internalValue = '';\n /**\n * Indicates if the object is currently in `saving state or not`.\n * @default false\n * @private\n */\n this.isSaving6 = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position6 = -1;\n this.internalValue = this.normalizeValue(value);\n }\n Object.defineProperty(PdfName.prototype, \"status\", {\n //property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status6;\n },\n set: function (value) {\n this.status6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving6;\n },\n set: function (value) {\n this.isSaving6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index6;\n },\n set: function (value) {\n this.index6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position6;\n },\n set: function (value) {\n this.position6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the object.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n set: function (value) {\n // if (value !== this.value) {\n var val = value;\n if (value !== null && value.length > 0) {\n // val = (value.substring(0, 1) === this.stringStartMark) ? value.substring(1) : value;\n val = value;\n this.internalValue = this.normalizeValue(val);\n }\n else {\n this.internalValue = val;\n }\n // }\n },\n enumerable: true,\n configurable: true\n });\n //public methods\n /**\n * `Saves` the name using the specified writer.\n * @private\n */\n PdfName.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.toString());\n };\n /**\n * Gets `string` representation of the primitive.\n * @private\n */\n PdfName.prototype.toString = function () {\n return (this.stringStartMark + this.escapeString(this.value));\n };\n /**\n * Creates a `copy of PdfName`.\n * @private\n */\n PdfName.prototype.clone = function (crossTable) {\n var newName = new PdfName();\n newName.value = this.internalValue;\n return newName;\n };\n /**\n * Replace some characters with its `escape sequences`.\n * @private\n */\n PdfName.prototype.escapeString = function (stringValue) {\n // if (str === null) {\n // throw new Error('ArgumentNullException : str');\n // }\n // if (str === '') {\n // return str;\n // }\n var result = '';\n var len = 0;\n for (var i = 0, len_1 = stringValue.length; i < len_1; i++) {\n var ch = stringValue[i];\n var index = PdfName.delimiters.indexOf(ch);\n // switch (ch) {\n // case '\\r' :\n // result = result + '\\\\r';\n // break;\n // case '\\n' :\n // result = result + '\\n';\n // break;\n // case '(' :\n // case ')' :\n // case '\\\\' :\n // //result.Append( '\\\\' ).Append( ch );\n // result = result + ch;\n // break;\n // default :\n // result = result + ch;\n // break;\n // }\n result = result + ch;\n }\n return result;\n };\n //methiods\n /**\n * Replace a symbol with its code with the precedence of the `sharp sign`.\n * @private\n */\n PdfName.prototype.normalizeValue = function (value, c) {\n // if (typeof c === undefined) {\n // let str : string = value;\n // for (let i : number = 0; i < PdfName.replacements.length; i++) {\n // str = this.normalizeValue(str, c);\n // }\n // return str;\n // } else {\n var strFormat = '#{0:X}';\n //return value.replace(c.toString(),String.format(strFormat,c));\n return value;\n // }\n };\n /**\n * PDF `special characters`.\n * @private\n */\n PdfName.delimiters = '()<>[]{}/%}';\n /**\n * The symbols that are not allowed in PDF names and `should be replaced`.\n * @private\n */\n PdfName.replacements = [' ', '\\t', '\\n', '\\r'];\n return PdfName;\n}());\nexport { PdfName };\n","/**\n * PdfOperators.ts class for EJ2-PDF\n * Class of string PDF common operators.\n * @private\n */\nvar Operators = /** @class */ (function () {\n /**\n * Create an instance of `PdfOperator` class.\n * @private\n */\n function Operators() {\n /**\n * Specifies the value of `test`.\n * @private\n */\n this.forTest = 'test';\n this.forTest = Operators.obj;\n }\n /**\n * Specifies the value of `obj`.\n * @private\n */\n Operators.obj = 'obj';\n /**\n * Specifies the value of `endObj`.\n * @private\n */\n Operators.endObj = 'endobj';\n /**\n * Specifies the value of `R`.\n * @private\n */\n Operators.r = 'R';\n /**\n * Specifies the value of ` `.\n * @private\n */\n Operators.whiteSpace = ' ';\n /**\n * Specifies the value of `/`.\n * @private\n */\n Operators.slash = '/';\n /**\n * Specifies the value of `\\r\\n`.\n * @private\n */\n Operators.newLine = '\\r\\n';\n /**\n * Specifies the value of `stream`.\n * @private\n */\n Operators.stream = 'stream';\n /**\n * Specifies the value of `endStream`.\n * @private\n */\n Operators.endStream = 'endstream';\n /**\n * Specifies the value of `xref`.\n * @private\n */\n Operators.xref = 'xref';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.f = 'f';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.n = 'n';\n /**\n * Specifies the value of `trailer`.\n * @private\n */\n Operators.trailer = 'trailer';\n /**\n * Specifies the value of `startxref`.\n * @private\n */\n Operators.startxref = 'startxref';\n /**\n * Specifies the value of `eof`.\n * @private\n */\n Operators.eof = '%%EOF';\n /**\n * Specifies the value of `header`.\n * @private\n */\n Operators.header = '%PDF-1.5';\n /**\n * Specifies the value of `beginText`.\n * @private\n */\n Operators.beginText = 'BT';\n /**\n * Specifies the value of `endText`.\n * @private\n */\n Operators.endText = 'ET';\n /**\n * Specifies the value of `m`.\n * @private\n */\n Operators.beginPath = 'm';\n /**\n * Specifies the value of `l`.\n * @private\n */\n Operators.appendLineSegment = 'l';\n /**\n * Specifies the value of `S`.\n * @private\n */\n Operators.stroke = 'S';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.fill = 'f';\n /**\n * Specifies the value of `f*`.\n * @private\n */\n Operators.fillEvenOdd = 'f*';\n /**\n * Specifies the value of `B`.\n * @private\n */\n Operators.fillStroke = 'B';\n /**\n * Specifies the value of `B*`.\n * @private\n */\n Operators.fillStrokeEvenOdd = 'B*';\n /**\n * Specifies the value of `c`.\n * @private\n */\n Operators.appendbeziercurve = 'c';\n /**\n * Specifies the value of `re`.\n * @private\n */\n Operators.appendRectangle = 're';\n /**\n * Specifies the value of `q`.\n * @private\n */\n Operators.saveState = 'q';\n /**\n * Specifies the value of `Q`.\n * @private\n */\n Operators.restoreState = 'Q';\n /**\n * Specifies the value of `Do`.\n * @private\n */\n Operators.paintXObject = 'Do';\n /**\n * Specifies the value of `cm`.\n * @private\n */\n Operators.modifyCtm = 'cm';\n /**\n * Specifies the value of `Tm`.\n * @private\n */\n Operators.modifyTM = 'Tm';\n /**\n * Specifies the value of `w`.\n * @private\n */\n Operators.setLineWidth = 'w';\n /**\n * Specifies the value of `J`.\n * @private\n */\n Operators.setLineCapStyle = 'J';\n /**\n * Specifies the value of `j`.\n * @private\n */\n Operators.setLineJoinStyle = 'j';\n /**\n * Specifies the value of `d`.\n * @private\n */\n Operators.setDashPattern = 'd';\n /**\n * Specifies the value of `i`.\n * @private\n */\n Operators.setFlatnessTolerance = 'i';\n /**\n * Specifies the value of `h`.\n * @private\n */\n Operators.closePath = 'h';\n /**\n * Specifies the value of `s`.\n * @private\n */\n Operators.closeStrokePath = 's';\n /**\n * Specifies the value of `b`.\n * @private\n */\n Operators.closeFillStrokePath = 'b';\n /**\n * Specifies the value of `setCharacterSpace`.\n * @private\n */\n Operators.setCharacterSpace = 'Tc';\n /**\n * Specifies the value of `setWordSpace`.\n * @private\n */\n Operators.setWordSpace = 'Tw';\n /**\n * Specifies the value of `setHorizontalScaling`.\n * @private\n */\n Operators.setHorizontalScaling = 'Tz';\n /**\n * Specifies the value of `setTextLeading`.\n * @private\n */\n Operators.setTextLeading = 'TL';\n /**\n * Specifies the value of `setFont`.\n * @private\n */\n Operators.setFont = 'Tf';\n /**\n * Specifies the value of `setRenderingMode`.\n * @private\n */\n Operators.setRenderingMode = 'Tr';\n /**\n * Specifies the value of `setTextRise`.\n * @private\n */\n Operators.setTextRise = 'Ts';\n /**\n * Specifies the value of `setTextScaling`.\n * @private\n */\n Operators.setTextScaling = 'Tz';\n /**\n * Specifies the value of `setCoords`.\n * @private\n */\n Operators.setCoords = 'Td';\n /**\n * Specifies the value of `goToNextLine`.\n * @private\n */\n Operators.goToNextLine = 'T*';\n /**\n * Specifies the value of `setText`.\n * @private\n */\n Operators.setText = 'Tj';\n /**\n * Specifies the value of `setTextWithFormatting`.\n * @private\n */\n Operators.setTextWithFormatting = 'TJ';\n /**\n * Specifies the value of `setTextOnNewLine`.\n * @private\n */\n Operators.setTextOnNewLine = '\\'';\n /**\n * Specifies the value of `selectcolorspaceforstroking`.\n * @private\n */\n Operators.selectcolorspaceforstroking = 'CS';\n /**\n * Specifies the value of `selectcolorspacefornonstroking`.\n * @private\n */\n Operators.selectcolorspacefornonstroking = 'cs';\n /**\n * Specifies the value of `setrbgcolorforstroking`.\n * @private\n */\n Operators.setrbgcolorforstroking = 'RG';\n /**\n * Specifies the value of `setrbgcolorfornonstroking`.\n * @private\n */\n Operators.setrbgcolorfornonstroking = 'rg';\n /**\n * Specifies the value of `K`.\n * @private\n */\n Operators.setcmykcolorforstroking = 'K';\n /**\n * Specifies the value of `k`.\n * @private\n */\n Operators.setcmykcolorfornonstroking = 'k';\n /**\n * Specifies the value of `G`.\n * @private\n */\n Operators.setgraycolorforstroking = 'G';\n /**\n * Specifies the value of `g`.\n * @private\n */\n Operators.setgraycolorfornonstroking = 'g';\n /**\n * Specifies the value of `W`.\n * @private\n */\n Operators.clipPath = 'W';\n /**\n * Specifies the value of `clipPathEvenOdd`.\n * @private\n */\n Operators.clipPathEvenOdd = 'W*';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.endPath = 'n';\n /**\n * Specifies the value of `setGraphicsState`.\n * @private\n */\n Operators.setGraphicsState = 'gs';\n /**\n * Specifies the value of `%`.\n * @private\n */\n Operators.comment = '%';\n /**\n * Specifies the value of `*`.\n * @private\n */\n Operators.evenOdd = '*';\n /**\n * Specifies the value of `M`.\n * @private\n */\n Operators.setMiterLimit = 'M';\n return Operators;\n}());\nexport { Operators };\n","/**\n * dictionaryProperties.ts class for EJ2-PDF\n * PDF dictionary properties.\n * @private\n */\nvar DictionaryProperties = /** @class */ (function () {\n /**\n * Initialize an instance for `PdfDictionaryProperties` class.\n * @private\n */\n function DictionaryProperties() {\n /**\n * Specifies the value of `Pages`.\n * @private\n */\n this.pages = 'Pages';\n /**\n * Specifies the value of `Kids`.\n * @private\n */\n this.kids = 'Kids';\n /**\n * Specifies the value of `Count`.\n * @private\n */\n this.count = 'Count';\n /**\n * Specifies the value of `Resources`.\n * @private\n */\n this.resources = 'Resources';\n /**\n * Specifies the value of `Type`.\n * @private\n */\n this.type = 'Type';\n /**\n * Specifies the value of `Size`.\n * @private\n */\n this.size = 'Size';\n /**\n * Specifies the value of `MediaBox`.\n * @private\n */\n this.mediaBox = 'MediaBox';\n /**\n * Specifies the value of `Parent`.\n * @private\n */\n this.parent = 'Parent';\n /**\n * Specifies the value of `Root`.\n * @private\n */\n this.root = 'Root';\n /**\n * Specifies the value of `DecodeParms`.\n * @private\n */\n this.decodeParms = 'DecodeParms';\n /**\n * Specifies the value of `Filter`.\n * @private\n */\n this.filter = 'Filter';\n /**\n * Specifies the value of `Font`.\n * @private\n */\n this.font = 'Font';\n /**\n * Specifies the value of `Type1`.\n * @private\n */\n this.type1 = 'Type1';\n /**\n * Specifies the value of `BaseFont`.\n * @private\n */\n this.baseFont = 'BaseFont';\n /**\n * Specifies the value of `Encoding`.\n * @private\n */\n this.encoding = 'Encoding';\n /**\n * Specifies the value of `Subtype`.\n * @private\n */\n this.subtype = 'Subtype';\n /**\n * Specifies the value of `Contents`.\n * @private\n */\n this.contents = 'Contents';\n /**\n * Specifies the value of `ProcSet`.\n * @private\n */\n this.procset = 'ProcSet';\n /**\n * Specifies the value of `ColorSpace`.\n * @private\n */\n this.colorSpace = 'ColorSpace';\n /**\n * Specifies the value of `ExtGState`.\n * @private\n */\n this.extGState = 'ExtGState';\n /**\n * Specifies the value of `Pattern`.\n * @private\n */\n this.pattern = 'Pattern';\n /**\n * Specifies the value of `XObject`.\n * @private\n */\n this.xObject = 'XObject';\n /**\n * Specifies the value of `Length`.\n * @private\n */\n this.length = 'Length';\n /**\n * Specifies the value of `Width`.\n * @private\n */\n this.width = 'Width';\n /**\n * Specifies the value of `Height`.\n * @private\n */\n this.height = 'Height';\n /**\n * Specifies the value of `BitsPerComponent`.\n * @private\n */\n this.bitsPerComponent = 'BitsPerComponent';\n /**\n * Specifies the value of `Image`.\n * @private\n */\n this.image = 'Image';\n /**\n * Specifies the value of `dctdecode`.\n * @private\n */\n this.dctdecode = 'DCTDecode';\n /**\n * Specifies the value of `Columns`.\n * @private\n */\n this.columns = 'Columns';\n /**\n * Specifies the value of `BlackIs1`.\n * @private\n */\n this.blackIs1 = 'BlackIs1';\n /**\n * Specifies the value of `K`.\n * @private\n */\n this.k = 'K';\n /**\n * Specifies the value of `S`.\n * @private\n */\n this.s = 'S';\n /**\n * Specifies the value of `Predictor`.\n * @private\n */\n this.predictor = 'Predictor';\n /**\n * Specifies the value of `DeviceRGB`.\n * @private\n */\n this.deviceRgb = 'DeviceRGB';\n /**\n * Specifies the value of `Next`.\n * @private\n */\n this.next = 'Next';\n /**\n * Specifies the value of `Action`.\n * @private\n */\n this.action = 'Action';\n /**\n * Specifies the value of `Link`.\n * @private\n */\n this.link = 'Link';\n /**\n *\n * Specifies the value of `A`.\n * @private\n */\n this.a = 'A';\n /**\n * Specifies the value of `Annot`.\n * @private\n */\n this.annot = 'Annot';\n /**\n * Specifies the value of `P`.\n * @private\n */\n this.p = 'P';\n /**\n * Specifies the value of `C`.\n * @private\n */\n this.c = 'C';\n /**\n * Specifies the value of `Rect`.\n * @private\n */\n this.rect = 'Rect';\n /**\n * Specifies the value of `URI`.\n * @private\n */\n this.uri = 'URI';\n /**\n * Specifies the value of `Annots`.\n * @private\n */\n this.annots = 'Annots';\n /**\n * Specifies the value of `ca`.\n * @private\n */\n this.ca = 'ca';\n /**\n * Specifies the value of `CA`.\n * @private\n */\n this.CA = 'CA';\n /**\n * Specifies the value of `XYZ`.\n * @private\n */\n this.xyz = 'XYZ';\n /**\n * Specifies the value of `Fit`.\n * @private\n */\n this.fit = 'Fit';\n /**\n * Specifies the value of `Dest`.\n * @private\n */\n this.dest = 'Dest';\n /**\n * Specifies the value of `BM`.\n * @private\n */\n this.BM = 'BM';\n /**\n * Specifies the value of `flatedecode`.\n * @private\n */\n this.flatedecode = 'FlateDecode';\n /**\n * Specifies the value of `Rotate`.\n * @private\n */\n this.rotate = 'Rotate';\n /**\n * Specifies the value of 'bBox'.\n * @private\n */\n this.bBox = 'BBox';\n /**\n * Specifies the value of 'form'.\n * @private\n */\n this.form = 'Form';\n /**\n * Specifies the value of 'w'.\n * @private\n */\n this.w = 'W';\n /**\n * Specifies the value of 'cIDFontType2'.\n * @private\n */\n this.cIDFontType2 = 'CIDFontType2';\n /**\n * Specifies the value of 'cIDToGIDMap'.\n * @private\n */\n this.cIDToGIDMap = 'CIDToGIDMap';\n /**\n * Specifies the value of 'identity'.\n * @private\n */\n this.identity = 'Identity';\n /**\n * Specifies the value of 'dw'.\n * @private\n */\n this.dw = 'DW';\n /**\n * Specifies the value of 'fontDescriptor'.\n * @private\n */\n this.fontDescriptor = 'FontDescriptor';\n /**\n * Specifies the value of 'cIDSystemInfo'.\n * @private\n */\n this.cIDSystemInfo = 'CIDSystemInfo';\n /**\n * Specifies the value of 'fontName'.\n * @private\n */\n this.fontName = 'FontName';\n /**\n * Specifies the value of 'flags'.\n * @private\n */\n this.flags = 'Flags';\n /**\n * Specifies the value of 'fontBBox'.\n * @private\n */\n this.fontBBox = 'FontBBox';\n /**\n * Specifies the value of 'missingWidth'.\n * @private\n */\n this.missingWidth = 'MissingWidth';\n /**\n * Specifies the value of 'stemV'.\n * @private\n */\n this.stemV = 'StemV';\n /**\n * Specifies the value of 'italicAngle'.\n * @private\n */\n this.italicAngle = 'ItalicAngle';\n /**\n * Specifies the value of 'capHeight'.\n * @private\n */\n this.capHeight = 'CapHeight';\n /**\n * Specifies the value of 'ascent'.\n * @private\n */\n this.ascent = 'Ascent';\n /**\n * Specifies the value of 'descent'.\n * @private\n */\n this.descent = 'Descent';\n /**\n * Specifies the value of 'leading'.\n * @private\n */\n this.leading = 'Leading';\n /**\n * Specifies the value of 'avgWidth'.\n * @private\n */\n this.avgWidth = 'AvgWidth';\n /**\n * Specifies the value of 'fontFile2'.\n * @private\n */\n this.fontFile2 = 'FontFile2';\n /**\n * Specifies the value of 'maxWidth'.\n * @private\n */\n this.maxWidth = 'MaxWidth';\n /**\n * Specifies the value of 'xHeight'.\n * @private\n */\n this.xHeight = 'XHeight';\n /**\n * Specifies the value of 'stemH'.\n * @private\n */\n this.stemH = 'StemH';\n /**\n * Specifies the value of 'registry'.\n * @private\n */\n this.registry = 'Registry';\n /**\n * Specifies the value of 'ordering'.\n * @private\n */\n this.ordering = 'Ordering';\n /**\n * Specifies the value of 'supplement'.\n * @private\n */\n this.supplement = 'Supplement';\n /**\n * Specifies the value of 'type0'.\n * @private\n */\n this.type0 = 'Type0';\n /**\n * Specifies the value of 'identityH'.\n * @private\n */\n this.identityH = 'Identity-H';\n /**\n * Specifies the value of 'toUnicode'.\n * @private\n */\n this.toUnicode = 'ToUnicode';\n /**\n * Specifies the value of 'descendantFonts'.\n * @private\n */\n this.descendantFonts = 'DescendantFonts';\n //\n }\n return DictionaryProperties;\n}());\nexport { DictionaryProperties };\n","import { Dictionary } from './../collections/dictionary';\nimport { PdfName } from './pdf-name';\nimport { Operators } from './../input-output/pdf-operators';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDictionary` class is used to perform primitive operations.\n * @private\n */\nvar PdfDictionary = /** @class */ (function () {\n function PdfDictionary(dictionary) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position7 = -1;\n /**\n * The `IPdfSavable` with the specified key.\n * @private\n */\n this.primitiveItems = new Dictionary();\n /**\n * `Start marker` for dictionary.\n * @private\n */\n this.prefix = '<<';\n /**\n * `End marker` for dictionary.\n * @private\n */\n this.suffix = '>>';\n /**\n * @hidden\n * @private\n */\n this.resources = [];\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.object = null;\n /**\n * Flag for PDF file formar 1.5 is dictionary `archiving` needed.\n * @default true\n * @private\n */\n this.archive = true;\n /**\n * Represents the Font dictionary.\n * @hidden\n * @private\n */\n this.isFont = false;\n if (typeof dictionary === 'undefined') {\n this.primitiveItems = new Dictionary();\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n else {\n this.primitiveItems = new Dictionary();\n var keys = dictionary.items.keys();\n var values = dictionary.items.values();\n for (var index = 0; index < dictionary.items.size(); index++) {\n this.primitiveItems.setValue(keys[index], values[index]);\n }\n this.status = dictionary.status;\n this.freezeChanges(this);\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n }\n Object.defineProperty(PdfDictionary.prototype, \"items\", {\n //Properties\n /**\n * Gets or sets the `IPdfSavable` with the specified key.\n * @private\n */\n get: function () {\n return this.primitiveItems;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status7;\n },\n set: function (value) {\n this.status7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving7;\n },\n set: function (value) {\n this.isSaving7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index7;\n },\n set: function (value) {\n this.index7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position7;\n },\n set: function (value) {\n this.position7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.primitiveItems.size();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Dictionary\", {\n /**\n * Collection of `items` in the object.\n * @private\n */\n get: function () {\n return this;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.getArchive = function () {\n return this.archive;\n };\n /**\n * Set flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.setArchive = function (value) {\n this.archive = value;\n };\n /**\n * Sets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.setEncrypt = function (value) {\n this.encrypt = value;\n this.modify();\n };\n /**\n * Gets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.getEncrypt = function () {\n return this.encrypt;\n };\n /**\n * `Freezes` the changes.\n * @private\n */\n PdfDictionary.prototype.freezeChanges = function (freezer) {\n this.bChanged = false;\n };\n /**\n * Creates a `copy of PdfDictionary`.\n * @private\n */\n PdfDictionary.prototype.clone = function (crossTable) {\n //Need to add more codings\n var newDict = new PdfDictionary();\n return newDict;\n };\n /**\n * `Mark` this instance modified.\n * @private\n */\n PdfDictionary.prototype.modify = function () {\n this.bChanged = true;\n };\n /**\n * `Removes` the specified key.\n * @private\n */\n PdfDictionary.prototype.remove = function (key) {\n if (typeof key !== 'string') {\n this.primitiveItems.remove(key.value);\n this.modify();\n }\n else {\n this.remove(new PdfName(key));\n }\n };\n /**\n * `Determines` whether the dictionary contains the key.\n * @private\n */\n PdfDictionary.prototype.containsKey = function (key) {\n var returnValue = false;\n returnValue = this.primitiveItems.containsKey(key.toString());\n return returnValue;\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginSave = function () {\n this.beginSave.sender.beginSave();\n };\n /**\n * Raises event `Font Dictionary BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onFontDictionaryBeginSave = function () {\n this.fontDictionaryBeginSave.sender.fontDictionaryBeginSave();\n };\n /**\n * Raises event `Descendant Font BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onDescendantFontBeginSave = function () {\n this.descendantFontBeginSave.sender.descendantFontBeginSave();\n };\n /**\n * Raises event 'BeginSave'.\n * @private\n */\n PdfDictionary.prototype.onTemplateBeginSave = function () {\n this.pageBeginDrawTemplate.sender.pageBeginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginAnnotationSave = function () {\n this.annotationBeginSave.sender.beginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onSectionBeginSave = function (writer) {\n var saveEvent = this.sectionBeginSave;\n saveEvent.sender.beginSave(saveEvent.state, writer);\n };\n PdfDictionary.prototype.save = function (writer, bRaiseEvent) {\n if (typeof bRaiseEvent === 'undefined') {\n this.save(writer, true);\n }\n else {\n writer.write(this.prefix);\n if (typeof this.beginSave !== 'undefined') {\n this.onBeginSave();\n }\n if (typeof this.descendantFontBeginSave !== 'undefined') {\n this.onDescendantFontBeginSave();\n }\n if (typeof this.fontDictionaryBeginSave !== 'undefined') {\n this.onFontDictionaryBeginSave();\n }\n if (typeof this.annotationBeginSave !== 'undefined') {\n this.onBeginAnnotationSave();\n }\n if (typeof this.sectionBeginSave !== 'undefined') {\n this.onSectionBeginSave(writer);\n }\n if (typeof this.pageBeginDrawTemplate !== 'undefined') {\n this.onTemplateBeginSave();\n }\n // }\n if (this.Count > 0) {\n this.saveItems(writer);\n }\n writer.write(this.suffix);\n writer.write(Operators.newLine);\n }\n };\n /**\n * `Save dictionary items`.\n * @private\n */\n PdfDictionary.prototype.saveItems = function (writer) {\n writer.write(Operators.newLine);\n var keys = this.primitiveItems.keys();\n var values = this.primitiveItems.values();\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n var name_1 = new PdfName(key);\n name_1.save(writer);\n writer.write(Operators.whiteSpace);\n var resources = values[index];\n resources.save(writer);\n writer.write(Operators.newLine);\n }\n };\n return PdfDictionary;\n}());\nexport { PdfDictionary };\nvar SaveSectionCollectionEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveSectionCollectionEventHandler(sender) {\n this.sender = sender;\n }\n return SaveSectionCollectionEventHandler;\n}());\nexport { SaveSectionCollectionEventHandler };\nvar SaveDescendantFontEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveDescendantFontEventHandler(sender) {\n this.sender = sender;\n }\n return SaveDescendantFontEventHandler;\n}());\nexport { SaveDescendantFontEventHandler };\nvar SaveFontDictionaryEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveFontDictionaryEventHandler(sender) {\n this.sender = sender;\n }\n return SaveFontDictionaryEventHandler;\n}());\nexport { SaveFontDictionaryEventHandler };\nvar SaveAnnotationEventHandler = /** @class */ (function () {\n /**\n * New instance for `save annotation event handler` class.\n * @private\n */\n function SaveAnnotationEventHandler(sender) {\n this.sender = sender;\n }\n return SaveAnnotationEventHandler;\n}());\nexport { SaveAnnotationEventHandler };\nvar SaveSectionEventHandler = /** @class */ (function () {\n // constructors\n /**\n * New instance for `save section event handler` class.\n * @private\n */\n function SaveSectionEventHandler(sender, state) {\n this.sender = sender;\n this.state = state;\n }\n return SaveSectionEventHandler;\n}());\nexport { SaveSectionEventHandler };\n/**\n * SaveTemplateEventHandler class used to store information about template elements.\n * @private\n * @hidden\n */\nvar SaveTemplateEventHandler = /** @class */ (function () {\n /**\n * New instance for save section collection event handler class.\n * @public\n */\n function SaveTemplateEventHandler(sender) {\n this.sender = sender;\n }\n return SaveTemplateEventHandler;\n}());\nexport { SaveTemplateEventHandler };\n","/**\n * `PdfNumber` class is used to perform number related primitive operations.\n * @private\n */\nvar PdfNumber = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfNumber` class.\n * @private\n */\n function PdfNumber(value) {\n /**\n * Sotres the `position`.\n * @default -1\n * @private\n */\n this.position5 = -1;\n this.value = value;\n }\n Object.defineProperty(PdfNumber.prototype, \"intValue\", {\n /**\n * Gets or sets the `integer` value.\n * @private\n */\n get: function () {\n return this.value;\n },\n set: function (value) {\n this.value = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isInteger\", {\n /**\n * Gets or sets a value indicating whether this instance `is integer`.\n * @private\n */\n get: function () {\n return this.integer;\n },\n set: function (value) {\n this.integer = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status5;\n },\n set: function (value) {\n this.status5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving5;\n },\n set: function (value) {\n this.isSaving5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index5;\n },\n set: function (value) {\n this.index5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position5;\n },\n set: function (value) {\n this.position5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves the object`.\n * @private\n */\n PdfNumber.prototype.save = function (writer) {\n writer.write(this.intValue.toString()); //tostring(CultureInfo.InletiantCulture)\n };\n /**\n * Creates a `copy of PdfNumber`.\n * @private\n */\n PdfNumber.prototype.clone = function (crossTable) {\n var newNumber = new PdfNumber(this.value);\n return newNumber;\n };\n /**\n * Converts a `float value to a string` using Adobe PDF rules.\n * @private\n */\n PdfNumber.floatToString = function (number) {\n // let tempString1 : string = number.toString();\n // let tempString2 : string = tempString1.indexOf('.') != -1 ? tempString1.substring(0, tempString1.indexOf('.')) : tempString1;\n var returnString = number.toFixed(2);\n if (returnString === '0.00') {\n returnString = '.00';\n }\n // let prefixLength : number = (22 - tempString2.length) >= 0 ? (22 - tempString2.length) : 0;\n // for (let index : number = 0; index < prefixLength; index++) {\n // returnString += '0';\n // }\n // returnString += tempString2 + '.00';\n // returnString += (tempString3.length > 6) ? tempString3.substring(0,6) : tempString3;\n // let suffixLength : number = (6 - tempString3.length) >= 0 ? (6 - tempString3.length) : 0;\n // for (let index : number = 0; index < suffixLength; index++) {\n // returnString += '0';\n // }\n return returnString;\n };\n /**\n * Determines the `minimum of the three values`.\n * @private\n */\n PdfNumber.min = function (x, y, z) {\n var r = Math.min(x, y);\n return Math.min(z, r);\n };\n return PdfNumber;\n}());\nexport { PdfNumber };\n","import { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\n/**\n * `PdfArray` class is used to perform array related primitive operations.\n * @private\n */\nvar PdfArray = /** @class */ (function () {\n function PdfArray(array) {\n //Fields\n /**\n * `startMark` - '['\n * @private\n */\n this.startMark = '[';\n /**\n * `endMark` - ']'.\n * @private\n */\n this.endMark = ']';\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position9 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject9 = null;\n /**\n * Represents the Font dictionary.\n * @hidden\n * @private\n */\n this.isFont = false;\n if (typeof array === 'undefined') {\n this.internalElements = [];\n }\n else {\n if (typeof array !== 'undefined' && !(array instanceof PdfArray)) {\n var tempNumberArray = array;\n for (var index = 0; index < tempNumberArray.length; index++) {\n var pdfNumber = new PdfNumber(tempNumberArray[index]);\n this.add(pdfNumber);\n }\n // } else if (typeof array !== 'undefined' && (array instanceof PdfArray)) {\n }\n else {\n var tempArray = array;\n // if (tempArray.Elements.length > 0) {\n this.internalElements = [];\n for (var index = 0; index < tempArray.elements.length; index++) {\n this.internalElements.push(tempArray.elements[index]);\n }\n // }\n }\n }\n }\n //property\n /**\n * Gets the `IPdfSavable` at the specified index.\n * @private\n */\n PdfArray.prototype.items = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index, The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n Object.defineProperty(PdfArray.prototype, \"count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.internalElements.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status9;\n },\n set: function (value) {\n this.status9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving9;\n },\n set: function (value) {\n this.isSaving9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject9;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position9;\n },\n set: function (value) {\n this.position9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index9;\n },\n set: function (value) {\n this.index9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"elements\", {\n /**\n * Gets the `elements` of the Pdf Array.\n * @private\n */\n get: function () {\n return this.internalElements;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element to the PDF array.\n * @private\n */\n PdfArray.prototype.add = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n if (typeof this.internalElements === 'undefined') {\n this.internalElements = [];\n }\n this.internalElements.push(element);\n this.markedChange();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markedChange = function () {\n this.bChanged = true;\n };\n /**\n * `Determines` whether the specified element is within the array.\n * @private\n */\n PdfArray.prototype.contains = function (element) {\n var returnValue = false;\n for (var index = 0; index < this.internalElements.length; index++) {\n var tempElement = this.internalElements[index];\n var inputElement = element;\n if (tempElement != null && typeof tempElement !== 'undefined' && inputElement != null && typeof inputElement !== 'undefined') {\n if (tempElement.value === inputElement.value) {\n return true;\n }\n }\n // if (this.internalElements[index] === element) {\n // returnValue = true;\n // }\n }\n return returnValue;\n };\n /**\n * Returns the `primitive object` of input index.\n * @private\n */\n PdfArray.prototype.getItems = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index , The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfArray.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.startMark);\n for (var i = 0, len = this.count; i < len; i++) {\n this.getItems(i).save(writer);\n if (i + 1 !== len) {\n writer.write(Operators.whiteSpace);\n }\n }\n writer.write(this.endMark);\n };\n /**\n * Creates a `copy of PdfArray`.\n * @private\n */\n PdfArray.prototype.clone = function (crossTable) {\n // if (this.clonedObject9 !== null && this.clonedObject9.CrossTable === crossTable) {\n // return this.clonedObject9;\n // } else {\n this.clonedObject9 = null;\n // Else clone the object.\n var newArray = new PdfArray();\n for (var index = 0; index < this.internalElements.length; index++) {\n var obj = this.internalElements[index];\n newArray.add(obj.clone(crossTable));\n }\n newArray.pdfCrossTable = crossTable;\n this.clonedObject9 = newArray;\n return newArray;\n };\n /**\n * Creates filled PDF array `from the rectangle`.\n * @private\n */\n PdfArray.fromRectangle = function (bounds) {\n var values = [bounds.x, bounds.y, bounds.width, bounds.height];\n var array = new PdfArray(values);\n return array;\n };\n // /**\n // * Creates the rectangle from filled PDF array.\n // * @private\n // */\n // public ToRectangle() : RectangleF {\n // if (this.Count < 4) {\n // throw Error('InvalidOperationException-Can not convert to rectangle.');\n // }\n // let x1 : number;\n // let x2 : number;\n // let y1 : number;\n // let y2 : number;\n // let num : PdfNumber = this.getItems(0) as PdfNumber;\n // x1 = num.IntValue;\n // num = this.getItems(1) as PdfNumber;\n // y1 = num.IntValue;\n // num = this.getItems(2) as PdfNumber;\n // x2 = num.IntValue;\n // num = this.getItems(3) as PdfNumber;\n // y2 = num.IntValue;\n // let x : number = Math.min(x1, x2);\n // let y : number = Math.min(y1, y2);\n // let width : number = Math.abs(x1 - x2);\n // let height : number = Math.abs(y1 - y2);\n // let rect : RectangleF = new RectangleF(new PointF(x, y), new SizeF(width, height));\n // return rect;\n // }\n /**\n * `Inserts` the element into the array.\n * @private\n */\n PdfArray.prototype.insert = function (index, element) {\n if (index < this.internalElements.length && index > 0) {\n var tempElements = [];\n for (var i = 0; i < index; i++) {\n tempElements.push(this.internalElements[i]);\n }\n tempElements.push(element);\n for (var i = index; i < this.internalElements.length; i++) {\n tempElements.push(this.internalElements[i]);\n }\n this.internalElements = tempElements;\n }\n else {\n this.internalElements.push(element);\n }\n this.markChanged();\n };\n /**\n * `Checks whether array contains the element`.\n * @private\n */\n PdfArray.prototype.indexOf = function (element) {\n return this.internalElements.indexOf(element);\n };\n /**\n * `Removes` element from the array.\n * @private\n */\n PdfArray.prototype.remove = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : element');\n // }\n var index = this.internalElements.indexOf(element);\n // if (index >= 0 && index < this.internalElements.length) {\n this.internalElements[index] = null;\n // }\n this.markChanged();\n };\n /**\n * `Remove` the element from the array by its index.\n * @private\n */\n PdfArray.prototype.removeAt = function (index) {\n // this.internalElements.RemoveAt(index);\n if (this.internalElements.length > index) {\n var tempArray = [];\n for (var i = 0; i < index; i++) {\n tempArray.push(this.internalElements[i]);\n }\n for (var i = index + 1; i < this.internalElements.length; i++) {\n tempArray.push(this.internalElements[i]);\n }\n this.internalElements = tempArray;\n }\n this.markChanged();\n };\n /**\n * `Clear` the array.\n * @private\n */\n PdfArray.prototype.clear = function () {\n this.internalElements = [];\n this.markChanged();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markChanged = function () {\n this.bChanged = true;\n };\n return PdfArray;\n}());\nexport { PdfArray };\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 { PdfDictionary } from './pdf-dictionary';\nimport { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\nimport { PdfName } from './pdf-name';\nimport { PdfArray } from './pdf-array';\nimport { PdfReferenceHolder } from './pdf-reference';\nimport { CompressedStreamWriter } from '@syncfusion/ej2-compression';\n/**\n * `PdfStream` class is used to perform stream related primitive operations.\n * @private\n */\nvar PdfStream = /** @class */ (function (_super) {\n __extends(PdfStream, _super);\n function PdfStream(dictionary, data) {\n var _this = _super.call(this, dictionary) || this;\n //Constants\n /**\n * @hidden\n * @private\n */\n _this.dicPrefix = 'stream';\n /**\n * @hidden\n * @private\n */\n _this.dicSuffix = 'endstream';\n /**\n * Internal variable to hold `cloned object`.\n * @private\n */\n _this.clonedObject2 = null;\n /**\n * @hidden\n * @private\n */\n _this.bCompress = true;\n /**\n * @hidden\n * @private\n */\n _this.isImageStream = false;\n /**\n * @hidden\n * @private\n */\n _this.isFontStream = false;\n if (typeof dictionary !== 'undefined' || typeof data !== 'undefined') {\n _this.dataStream2 = [];\n _this.dataStream2 = data;\n _this.bCompress2 = false;\n }\n else {\n _this.dataStream2 = [];\n _this.bCompress2 = true;\n //Pending\n }\n return _this;\n }\n Object.defineProperty(PdfStream.prototype, \"internalStream\", {\n /**\n * Gets the `internal` stream.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"isImage\", {\n /**\n * Gets or sets 'is image' flag.\n * @private\n */\n get: function () {\n return this.isImageStream;\n },\n set: function (value) {\n this.isImageStream = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"isFont\", {\n /**\n * Gets or sets 'is font' flag.\n * @private\n */\n get: function () {\n return this.isFontStream;\n },\n set: function (value) {\n this.isFontStream = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"compress\", {\n /**\n * Gets or sets `compression` flag.\n * @private\n */\n get: function () {\n return this.bCompress;\n },\n set: function (value) {\n this.bCompress = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"data\", {\n /**\n * Gets or sets the `data`.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clear` the internal stream.\n * @private\n */\n PdfStream.prototype.clearStream = function () {\n this.internalStream = [];\n if (this.items.containsKey(this.dictionaryProperties.filter)) {\n this.remove(this.dictionaryProperties.filter);\n }\n this.bCompress = true;\n this.modify();\n };\n /**\n * `Writes` the specified string.\n * @private\n */\n PdfStream.prototype.write = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (text.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty string, text');\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * `Writes` the specified bytes.\n * @private\n */\n PdfStream.prototype.writeBytes = function (data) {\n if (data === null) {\n throw new Error('ArgumentNullException:data');\n }\n if (data.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty bytes, data');\n }\n var text = '';\n for (var i = 0; i < data.length; i++) {\n text += String.fromCharCode(data[i]);\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * Raises event `Cmap BeginSave`.\n * @private\n */\n PdfStream.prototype.onCmapBeginSave = function () {\n this.cmapBeginSave.sender.cmapBeginSave();\n };\n /**\n * Raises event `Font Program BeginSave`.\n * @private\n */\n PdfStream.prototype.onFontProgramBeginSave = function () {\n this.fontProgramBeginSave.sender.fontProgramBeginSave();\n };\n /**\n * `Compresses the content` if it's required.\n * @private\n */\n PdfStream.prototype.compressContent = function (data, writer) {\n if (this.bCompress) {\n var byteArray = [];\n for (var i = 0; i < data.length; i++) {\n byteArray.push(data.charCodeAt(i));\n }\n var dataArray = new Uint8Array(byteArray);\n var sw = new CompressedStreamWriter();\n // data = 'Hello World!!!';\n sw.write(dataArray, 0, dataArray.length);\n sw.close();\n data = sw.getCompressedString;\n this.addFilter(this.dictionaryProperties.flatedecode);\n }\n return data;\n };\n /**\n * `Adds a filter` to the filter array.\n * @private\n */\n PdfStream.prototype.addFilter = function (filterName) {\n var obj = this.items.getValue(this.dictionaryProperties.filter);\n if (obj instanceof PdfReferenceHolder) {\n var rh = obj;\n obj = rh.object;\n }\n var array = obj;\n var name = obj;\n if (name != null) {\n array = new PdfArray();\n array.insert(0, name);\n this.items.setValue(this.dictionaryProperties.filter, array);\n }\n name = new PdfName(filterName);\n if (array == null) {\n this.items.setValue(this.dictionaryProperties.filter, name);\n }\n else {\n array.insert(0, name);\n }\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfStream.prototype.save = function (writer) {\n if (typeof this.cmapBeginSave !== 'undefined') {\n this.onCmapBeginSave();\n }\n if (typeof this.fontProgramBeginSave !== 'undefined') {\n this.onFontProgramBeginSave();\n }\n var data = '';\n for (var i = 0; i < this.data.length; i++) {\n data = data + this.data[i];\n }\n if (data.length > 1 && !this.isImage && !this.isFont) {\n data = 'q\\r\\n' + data + 'Q\\r\\n';\n }\n data = this.compressContent(data, writer);\n var length = data.length;\n this.items.setValue(this.dictionaryProperties.length, new PdfNumber(length));\n _super.prototype.save.call(this, writer, false);\n writer.write(this.dicPrefix);\n writer.write(Operators.newLine);\n if (data.length > 0) {\n writer.write(data);\n }\n writer.write(Operators.newLine);\n writer.write(this.dicSuffix);\n writer.write(Operators.newLine);\n };\n /**\n * Converts `bytes to string`.\n * @private\n */\n PdfStream.bytesToString = function (byteArray) {\n var output = '';\n for (var i = 0; i < byteArray.length; i++) {\n output = output + String.fromCharCode(byteArray[i]);\n }\n return output;\n };\n return PdfStream;\n}(PdfDictionary));\nexport { PdfStream };\nvar SaveCmapEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveCmapEventHandler(sender) {\n this.sender = sender;\n }\n return SaveCmapEventHandler;\n}());\nexport { SaveCmapEventHandler };\nvar SaveFontProgramEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveFontProgramEventHandler(sender) {\n this.sender = sender;\n }\n return SaveFontProgramEventHandler;\n}());\nexport { SaveFontProgramEventHandler };\n","/**\n * public Enum for `PdfHorizontalAlignment`.\n * @private\n */\nexport var PdfHorizontalAlignment;\n(function (PdfHorizontalAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Right\"] = 2] = \"Right\";\n})(PdfHorizontalAlignment || (PdfHorizontalAlignment = {}));\n/**\n * public Enum for `PdfVerticalAlignment`.\n * @private\n */\nexport var PdfVerticalAlignment;\n(function (PdfVerticalAlignment) {\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Top\"] = 0] = \"Top\";\n /**\n * Specifies the type of `Middle`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Middle\"] = 1] = \"Middle\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Bottom\"] = 2] = \"Bottom\";\n})(PdfVerticalAlignment || (PdfVerticalAlignment = {}));\n/**\n * public Enum for `public`.\n * @private\n */\nexport var PdfTextAlignment;\n(function (PdfTextAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Right\"] = 2] = \"Right\";\n /**\n * Specifies the type of `Justify`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Justify\"] = 3] = \"Justify\";\n})(PdfTextAlignment || (PdfTextAlignment = {}));\n/**\n * public Enum for `TextRenderingMode`.\n * @private\n */\nexport var TextRenderingMode;\n(function (TextRenderingMode) {\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Fill\"] = 0] = \"Fill\";\n /**\n * Specifies the type of `Stroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Stroke\"] = 1] = \"Stroke\";\n /**\n * Specifies the type of `FillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"FillStroke\"] = 2] = \"FillStroke\";\n /**\n * Specifies the type of `None`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"None\"] = 3] = \"None\";\n /**\n * Specifies the type of `ClipFlag`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFlag\"] = 4] = \"ClipFlag\";\n /**\n * Specifies the type of `ClipFill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFill\"] = 4] = \"ClipFill\";\n /**\n * Specifies the type of `ClipStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipStroke\"] = 5] = \"ClipStroke\";\n /**\n * Specifies the type of `ClipFillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFillStroke\"] = 6] = \"ClipFillStroke\";\n /**\n * Specifies the type of `Clip`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Clip\"] = 7] = \"Clip\";\n})(TextRenderingMode || (TextRenderingMode = {}));\n/**\n * public Enum for `PdfLineJoin`.\n * @private\n */\nexport var PdfLineJoin;\n(function (PdfLineJoin) {\n /**\n * Specifies the type of `Miter`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Miter\"] = 0] = \"Miter\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Bevel`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Bevel\"] = 2] = \"Bevel\";\n})(PdfLineJoin || (PdfLineJoin = {}));\n/**\n * public Enum for `PdfLineCap`.\n * @private\n */\nexport var PdfLineCap;\n(function (PdfLineCap) {\n /**\n * Specifies the type of `Flat`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Flat\"] = 0] = \"Flat\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Square`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Square\"] = 2] = \"Square\";\n})(PdfLineCap || (PdfLineCap = {}));\n/**\n * public Enum for `PdfDashStyle`.\n * @private\n */\nexport var PdfDashStyle;\n(function (PdfDashStyle) {\n /**\n * Specifies the type of `Solid`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Solid\"] = 0] = \"Solid\";\n /**\n * Specifies the type of `Dash`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dash\"] = 1] = \"Dash\";\n /**\n * Specifies the type of `Dot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dot\"] = 2] = \"Dot\";\n /**\n * Specifies the type of `DashDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDot\"] = 3] = \"DashDot\";\n /**\n * Specifies the type of `DashDotDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDotDot\"] = 4] = \"DashDotDot\";\n /**\n * Specifies the type of `Custom`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Custom\"] = 5] = \"Custom\";\n})(PdfDashStyle || (PdfDashStyle = {}));\n/**\n * public Enum for `PdfFillMode`.\n * @private\n */\nexport var PdfFillMode;\n(function (PdfFillMode) {\n /**\n * Specifies the type of `Winding`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Winding\"] = 0] = \"Winding\";\n /**\n * Specifies the type of `Alternate`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Alternate\"] = 1] = \"Alternate\";\n})(PdfFillMode || (PdfFillMode = {}));\n/**\n * public Enum for `PdfColorSpace`.\n * @private\n */\nexport var PdfColorSpace;\n(function (PdfColorSpace) {\n /**\n * Specifies the type of `Rgb`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Rgb\"] = 0] = \"Rgb\";\n /**\n * Specifies the type of `Cmyk`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Cmyk\"] = 1] = \"Cmyk\";\n /**\n * Specifies the type of `GrayScale`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"GrayScale\"] = 2] = \"GrayScale\";\n /**\n * Specifies the type of `Indexed`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Indexed\"] = 3] = \"Indexed\";\n})(PdfColorSpace || (PdfColorSpace = {}));\n/**\n * public Enum for `PdfBlendMode`.\n * @private\n */\nexport var PdfBlendMode;\n(function (PdfBlendMode) {\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Normal\"] = 0] = \"Normal\";\n /**\n * Specifies the type of `Multiply`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Multiply\"] = 1] = \"Multiply\";\n /**\n * Specifies the type of `Screen`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Screen\"] = 2] = \"Screen\";\n /**\n * Specifies the type of `Overlay`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Overlay\"] = 3] = \"Overlay\";\n /**\n * Specifies the type of `Darken`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Darken\"] = 4] = \"Darken\";\n /**\n * Specifies the type of `Lighten`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Lighten\"] = 5] = \"Lighten\";\n /**\n * Specifies the type of `ColorDodge`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorDodge\"] = 6] = \"ColorDodge\";\n /**\n * Specifies the type of `ColorBurn`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorBurn\"] = 7] = \"ColorBurn\";\n /**\n * Specifies the type of `HardLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"HardLight\"] = 8] = \"HardLight\";\n /**\n * Specifies the type of `SoftLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"SoftLight\"] = 9] = \"SoftLight\";\n /**\n * Specifies the type of `Difference`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Difference\"] = 10] = \"Difference\";\n /**\n * Specifies the type of `Exclusion`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Exclusion\"] = 11] = \"Exclusion\";\n /**\n * Specifies the type of `Hue`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Hue\"] = 12] = \"Hue\";\n /**\n * Specifies the type of `Saturation`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Saturation\"] = 13] = \"Saturation\";\n /**\n * Specifies the type of `Color`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Color\"] = 14] = \"Color\";\n /**\n * Specifies the type of `Luminosity`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Luminosity\"] = 15] = \"Luminosity\";\n})(PdfBlendMode || (PdfBlendMode = {}));\n/**\n * public Enum for `PdfGraphicsUnit`.\n * @private\n */\nexport var PdfGraphicsUnit;\n(function (PdfGraphicsUnit) {\n /**\n * Specifies the type of `Centimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Centimeter\"] = 0] = \"Centimeter\";\n /**\n * Specifies the type of `Pica`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pica\"] = 1] = \"Pica\";\n /**\n * Specifies the type of `Pixel`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pixel\"] = 2] = \"Pixel\";\n /**\n * Specifies the type of `Point`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Point\"] = 3] = \"Point\";\n /**\n * Specifies the type of `Inch`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Inch\"] = 4] = \"Inch\";\n /**\n * Specifies the type of `Document`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Document\"] = 5] = \"Document\";\n /**\n * Specifies the type of `Millimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Millimeter\"] = 6] = \"Millimeter\";\n})(PdfGraphicsUnit || (PdfGraphicsUnit = {}));\n/**\n * public Enum for `PdfGridImagePosition`.\n * @private\n */\nexport var PdfGridImagePosition;\n(function (PdfGridImagePosition) {\n /**\n * Specifies the type of `Fit`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Fit\"] = 0] = \"Fit\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Stretch`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Stretch\"] = 2] = \"Stretch\";\n /**\n * Specifies the type of `Tile`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Tile\"] = 3] = \"Tile\";\n})(PdfGridImagePosition || (PdfGridImagePosition = {}));\n/**\n * public Enum for `the text rendering direction`.\n * @private\n */\nexport var PdfTextDirection;\n(function (PdfTextDirection) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `LeftToRight`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"LeftToRight\"] = 1] = \"LeftToRight\";\n /**\n * Specifies the type of `RightToLeft`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"RightToLeft\"] = 2] = \"RightToLeft\";\n})(PdfTextDirection || (PdfTextDirection = {}));\n","import { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfString } from './../primitives/pdf-string';\n/**\n * `PdfReference` class is used to perform reference related primitive operations.\n * @private\n */\nvar PdfReference = /** @class */ (function () {\n function PdfReference(objNumber, genNumber) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index3 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position3 = -1;\n /**\n * Holds the `object number`.\n * @default 0\n * @private\n */\n this.objNumber = 0;\n /**\n * Holds the `generation number` of the object.\n * @default 0\n * @private\n */\n this.genNumber = 0;\n if (typeof objNumber === 'number' && typeof genNumber === 'number') {\n this.objNumber = objNumber;\n this.genNumber = genNumber;\n // } else if (typeof objNum === 'string' && typeof genNum === 'string') {\n }\n else {\n this.objNumber = Number(objNumber);\n this.genNumber = Number(genNumber);\n }\n }\n Object.defineProperty(PdfReference.prototype, \"status\", {\n //Property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status3;\n },\n set: function (value) {\n this.status3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving3;\n },\n set: function (value) {\n this.isSaving3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index3;\n },\n set: function (value) {\n this.index3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position3;\n },\n set: function (value) {\n this.position3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var returnObject3 = null;\n return returnObject3;\n },\n enumerable: true,\n configurable: true\n });\n //IPdfPrimitives methods\n /**\n * `Saves` the object.\n * @private\n */\n PdfReference.prototype.save = function (writer) {\n writer.write(this.toString());\n };\n /**\n * Returns a `string` representing the object.\n * @private\n */\n PdfReference.prototype.toString = function () {\n return this.objNumber.toString() + ' ' + this.genNumber.toString() + ' R';\n };\n /**\n * Creates a `deep copy` of the IPdfPrimitive object.\n * @private\n */\n PdfReference.prototype.clone = function (crossTable) {\n return null;\n };\n return PdfReference;\n}());\nexport { PdfReference };\n/**\n * `PdfReferenceHolder` class is used to perform reference holder related primitive operations.\n * @private\n */\nvar PdfReferenceHolder = /** @class */ (function () {\n function PdfReferenceHolder(obj1, obj2) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index4 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position4 = -1;\n /**\n * The `index` of the object within the object collection.\n * @default -1\n * @private\n */\n this.objectIndex = -1;\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (typeof obj2 === 'undefined') {\n if (obj1 instanceof PdfArray\n || obj1 instanceof PdfDictionary\n || obj1 instanceof PdfName\n || obj1 instanceof PdfNumber\n || obj1 instanceof PdfStream\n || obj1 instanceof PdfReference\n || obj1 instanceof PdfString) {\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n this.primitiveObject = obj1;\n // } else if (obj1 instanceof PdfPageBase\n // || obj1 instanceof PdfPage\n // || obj1 instanceof PdfSection\n // || obj1 instanceof PdfSectionCollection) {\n }\n else {\n var tempObj = obj1;\n this.constructor(tempObj.element);\n }\n // }\n // else {\n // if (obj2 === null) {\n // throw new Error('ArgumentNullException : crossTable');\n // }\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : reference');\n // }\n // this.crossTable = obj2;\n // let tempObj1 : PdfReference = obj1;\n // this.reference = tempObj1;\n // }\n }\n Object.defineProperty(PdfReferenceHolder.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status4;\n },\n set: function (value) {\n this.status4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving4;\n },\n set: function (value) {\n this.isSaving4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index4;\n },\n set: function (value) {\n this.index4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position4;\n },\n set: function (value) {\n this.position4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"object\", {\n /**\n * Gets the `object` the reference is of.\n * @private\n */\n get: function () {\n // if ((this.reference != null) || (this.object == null)) {\n // this.object = this.GetterObject();\n // }\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"index\", {\n /**\n * Gets the `index` of the object.\n * @private\n */\n get: function () {\n // let items : PdfMainObjectCollection = this.crossTable.PdfObjects;\n // this.objectIndex = items.GetObjectIndex(this.reference);\n // if (this.objectIndex < 0) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.reference);\n // this.objectIndex = items.Count - 1;\n // }\n return this.objectIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"element\", {\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Writes` a reference into a PDF document.\n * @private\n */\n PdfReferenceHolder.prototype.save = function (writer) {\n // if (writer == null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n var position = writer.position;\n var cTable = writer.document.crossTable;\n // if (cTable.Document instanceof PdfDocument) {\n this.object.isSaving = true;\n // }\n var reference = null;\n // if (writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true) {\n // if (this.reference === null) {\n // reference = cTable.GetReference(this.Object);\n // } else {\n // reference = this.reference;\n // }\n // } else {\n // reference = cTable.GetReference(this.Object);\n // }\n // if (!(writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true)) {\n reference = cTable.getReference(this.object);\n // }\n // if (writer.Position !== position) {\n // writer.Position = position;\n // }\n reference.save(writer);\n };\n /**\n * Creates a `copy of PdfReferenceHolder`.\n * @private\n */\n PdfReferenceHolder.prototype.clone = function (crossTable) {\n var refHolder = null;\n var temp = null;\n var refNum = '';\n var reference = null;\n // Restricts addition of same object multiple time.\n /* if (this.Reference != null && this.crossTable != null && this.crossTable.PageCorrespondance.containsKey(this.Reference)) {\n refHolder = new PdfReferenceHolder(this.crossTable.PageCorrespondance.getValue(this.Reference) as PdfReference, crossTable);\n return refHolder;\n }\n if (Object instanceof PdfNumber) {\n return new PdfNumber((Object as PdfNumber).IntValue);\n }\n */\n // if (Object instanceof PdfDictionary) {\n // // Meaning the referenced page is not available for import.\n // let type : PdfName = new PdfName(this.dictionaryProperties.type);\n // let dict : PdfDictionary = Object as PdfDictionary;\n // if (dict.ContainsKey(type)) {\n // let pageName : PdfName = dict.Items.getValue(type.Value) as PdfName;\n // if (pageName !== null) {\n // if (pageName.Value === 'Page') {\n // return new PdfNull();\n // }\n // }\n // }\n // }\n /* if (Object instanceof PdfName) {\n return new PdfName ((Object as PdfName ).Value);\n }\n */\n // Resolves circular references.\n // if (crossTable.PrevReference !== null && (crossTable.PrevReference.indexOf(this.Reference) !== -1)) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.Reference).ClonedObject;\n // if (obj !== null) {\n // reference = crossTable.GetReference(obj);\n // return new PdfReferenceHolder(reference, crossTable);\n // } else {\n // return new PdfNull();\n // }\n // }\n /*if (this.Reference !== null) {\n crossTable.PrevReference.push(this.Reference);\n }\n reference = crossTable.GetReference(temp);\n refHolder = new PdfReferenceHolder(reference, crossTable);\n return refHolder;\n */\n return null;\n };\n return PdfReferenceHolder;\n}());\nexport { PdfReferenceHolder };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfAction` class represents base class for all action types.\n * @private\n */\nvar PdfAction = /** @class */ (function () {\n // Constructors\n /**\n * Initialize instance for `Action` class.\n * @private\n */\n function PdfAction() {\n /**\n * Specifies the Next `action` to perform.\n * @private\n */\n this.action = null;\n /**\n * Specifies the Internal variable to store `dictionary properties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // super(); -> Object()\n this.initialize();\n }\n Object.defineProperty(PdfAction.prototype, \"next\", {\n // Properties\n /**\n * Gets and Sets the `Next` action to perform.\n * @private\n */\n get: function () {\n return this.action;\n },\n set: function (value) {\n // if (this.action !== value) {\n this.action = value;\n this.dictionary.items.setValue(this.dictionaryProperties.next, new PdfReferenceHolder(this.action));\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAction.prototype, \"dictionary\", {\n /**\n * Gets and Sets the instance of PdfDictionary class for `Dictionary`.\n * @private\n */\n get: function () {\n if (typeof this.pdfDictionary === 'undefined') {\n this.pdfDictionary = new PdfDictionary();\n }\n return this.pdfDictionary;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the action type.\n * @private\n */\n PdfAction.prototype.initialize = function () {\n this.dictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.action));\n };\n Object.defineProperty(PdfAction.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the `Element` as IPdfPrimitive class.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAction;\n}());\nexport { PdfAction };\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 { PdfAction } from './action';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * `PdfUriAction` class for initialize the uri related internals.\n * @private\n */\nvar PdfUriAction = /** @class */ (function (_super) {\n __extends(PdfUriAction, _super);\n function PdfUriAction(uri) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Specifies the `uri` string.\n * @default ''.\n * @private\n */\n _this.uniformResourceIdentifier = '';\n return _this;\n }\n Object.defineProperty(PdfUriAction.prototype, \"uri\", {\n // Properties\n /**\n * Gets and Sets the value of `Uri`.\n * @private\n */\n get: function () {\n return this.uniformResourceIdentifier;\n },\n set: function (value) {\n this.uniformResourceIdentifier = value;\n this.dictionary.items.setValue(this.dictionaryProperties.uri, new PdfString(this.uniformResourceIdentifier));\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the internals.\n * @private\n */\n PdfUriAction.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.s, new PdfName(this.dictionaryProperties.uri));\n };\n return PdfUriAction;\n}(PdfAction));\nexport { PdfUriAction };\n","import { PdfColorSpace } from './enum';\nimport { Operators } from './../input-output/pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfArray } from './../primitives/pdf-array';\n/**\n * Implements structures and routines working with `color`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // set color\n * let brushColor : PdfColor = new PdfColor(0, 0, 0);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(brushColor);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @default black color\n */\nvar PdfColor = /** @class */ (function () {\n function PdfColor(color1, color2, color3, color4) {\n if (color1 instanceof PdfColor) {\n this.redColor = color1.r;\n this.greenColor = color1.g;\n this.blueColor = color1.b;\n this.grayColor = color1.gray;\n this.alpha = color1.alpha;\n this.filled = (this.alpha !== 0);\n }\n else if (typeof color1 === 'number' && typeof color2 === 'number' && typeof color3 === 'number' &&\n typeof color4 === 'undefined') {\n this.constructor(PdfColor.maxColourChannelValue, color1, color2, color3); //doubt-byte/float\n }\n else if (typeof color1 === 'number' && typeof color2 === 'number' && typeof color3 === 'number' && typeof color4 === 'number') {\n this.redColor = color2;\n this.cyanColor = 0;\n this.greenColor = color3;\n this.magentaColor = 0;\n this.blueColor = color4;\n this.yellowColor = 0;\n this.blackColor = 0;\n this.grayColor = 0;\n this.alpha = color1;\n this.filled = true;\n this.assignCMYK(color2, color3, color4);\n }\n }\n /**\n * `Calculate and assign` cyan, megenta, yellow colors from rgb values..\n * @private\n */\n PdfColor.prototype.assignCMYK = function (r, g, b) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n var black = PdfNumber.min(1 - red, 1 - green, 1 - blue);\n var cyan = (black === 1.0) ? 0 : (1 - red - black) / (1 - black);\n var magenta = (black === 1.0) ? 0 : (1 - green - black) / (1 - black);\n var yellow = (black === 1.0) ? 0 : (1 - blue - black) / (1 - black);\n this.blackColor = black;\n this.cyanColor = cyan;\n this.magentaColor = magenta;\n this.yellowColor = yellow;\n };\n Object.defineProperty(PdfColor.prototype, \"r\", {\n //Properties\n // public static get Empty():PdfColor\n // {\n // return this.s_emptyColor\n // }\n /**\n * Gets or sets `Red` channel value.\n * @private\n */\n get: function () {\n return this.redColor;\n },\n set: function (value) {\n this.redColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"red\", {\n /**\n * Gets the `Red` color\n * @private\n */\n get: function () {\n return (this.r / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"b\", {\n /**\n * Gets or sets `Blue` channel value.\n * @private\n */\n get: function () {\n return this.blueColor;\n },\n set: function (value) {\n this.blueColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"blue\", {\n /**\n * Gets the `blue` color.\n * @private\n */\n get: function () {\n return (this.b / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"g\", {\n /**\n * Gets or sets `Green` channel value.\n * @private\n */\n get: function () {\n return this.greenColor;\n },\n set: function (value) {\n this.greenColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"green\", {\n /**\n * Gets the `Green` color.\n * @private\n */\n get: function () {\n return (this.g / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"gray\", {\n /**\n * Gets or sets `Gray` channel value.\n * @private\n */\n get: function () {\n return ((((this.redColor + this.greenColor) + this.blueColor)) / (PdfColor.maxColourChannelValue * 3));\n },\n set: function (value) {\n if (value < 0) {\n this.grayColor = 0;\n }\n else if (value > 1) {\n this.grayColor = 1;\n }\n else {\n this.grayColor = value;\n }\n this.r = (this.grayColor * PdfColor.maxColourChannelValue);\n this.g = (this.grayColor * PdfColor.maxColourChannelValue);\n this.b = (this.grayColor * PdfColor.maxColourChannelValue);\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"isEmpty\", {\n /**\n * Gets whether the PDFColor `is Empty` or not.\n * @private\n */\n get: function () {\n return !this.filled;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"a\", {\n /**\n * Gets or sets `Alpha` channel value.\n * @private\n */\n get: function () {\n return this.alpha;\n },\n set: function (value) {\n if (value < 0) {\n this.alpha = 0;\n }\n else {\n // if (this.alpha !== value) {\n this.alpha = value;\n // }\n }\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Converts `PDFColor to PDF string` representation.\n * @private\n */\n PdfColor.prototype.toString = function (colorSpace, stroke) {\n if (this.isEmpty) {\n return '';\n }\n return this.rgbToString(stroke);\n };\n /**\n * Sets `RGB` color.\n * @private\n */\n PdfColor.prototype.rgbToString = function (ifStroking) {\n var r = this.r;\n var g = this.g;\n var b = this.b;\n var key = (r << 16) + (g << 8) + b;\n if (ifStroking) {\n key += 1 << 24;\n }\n var colour = '';\n var obj = null;\n if (PdfColor.rgbStrings.containsKey(key)) {\n obj = PdfColor.rgbStrings.getValue(key);\n }\n if (obj == null) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n if (ifStroking) {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' RG';\n }\n else {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' rg';\n }\n PdfColor.rgbStrings.setValue(key, colour);\n }\n else {\n colour = obj.toString();\n }\n return colour + Operators.newLine;\n };\n /**\n * Converts `colour to a PDF array`.\n * @private\n */\n PdfColor.prototype.toArray = function (colorSpace) {\n var array = new PdfArray();\n switch (colorSpace) {\n case PdfColorSpace.Rgb:\n array.add(new PdfNumber(this.red));\n array.add(new PdfNumber(this.green));\n array.add(new PdfNumber(this.blue));\n break;\n default:\n throw new Error('NotSupportedException : Unsupported colour space.');\n }\n return array;\n };\n //Fields\n /**\n * Holds `RGB colors` converted into strings.\n * @private\n */\n PdfColor.rgbStrings = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `stroking`.\n * @private\n */\n PdfColor.grayStringsSroke = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `filling`.\n * @private\n */\n PdfColor.grayStringsFill = new Dictionary();\n /**\n * `Max value` of color channel.\n * @private\n */\n PdfColor.maxColourChannelValue = 255.0;\n return PdfColor;\n}());\nexport { PdfColor };\n","/**\n * public Enum for `PdfFontStyle`.\n * @private\n */\nexport var PdfFontStyle;\n(function (PdfFontStyle) {\n /**\n * Specifies the type of `Regular`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Regular\"] = 0] = \"Regular\";\n /**\n * Specifies the type of `Bold`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Bold\"] = 1] = \"Bold\";\n /**\n * Specifies the type of `Italic`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Italic\"] = 2] = \"Italic\";\n /**\n * Specifies the type of `Underline`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Underline\"] = 4] = \"Underline\";\n /**\n * Specifies the type of `Strikeout`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Strikeout\"] = 8] = \"Strikeout\";\n})(PdfFontStyle || (PdfFontStyle = {}));\n/**\n * Specifies the font family from the standard font.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * ```\n */\nexport var PdfFontFamily;\n(function (PdfFontFamily) {\n /**\n * Specifies the `Helvetica` font.\n */\n PdfFontFamily[PdfFontFamily[\"Helvetica\"] = 0] = \"Helvetica\";\n /**\n * Specifies the `Courier` font.\n */\n PdfFontFamily[PdfFontFamily[\"Courier\"] = 1] = \"Courier\";\n /**\n * Specifies the `TimesRoman` font.\n */\n PdfFontFamily[PdfFontFamily[\"TimesRoman\"] = 2] = \"TimesRoman\";\n /**\n * Specifies the `Symbol` font.\n */\n PdfFontFamily[PdfFontFamily[\"Symbol\"] = 3] = \"Symbol\";\n /**\n * Specifies the `ZapfDingbats` font.\n */\n PdfFontFamily[PdfFontFamily[\"ZapfDingbats\"] = 4] = \"ZapfDingbats\";\n})(PdfFontFamily || (PdfFontFamily = {}));\n/**\n * public Enum for `PdfFontType`.\n * @private\n */\nexport var PdfFontType;\n(function (PdfFontType) {\n /**\n * Specifies the type of `Standard`.\n * @private\n */\n PdfFontType[PdfFontType[\"Standard\"] = 0] = \"Standard\";\n /**\n * Specifies the type of `TrueType`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueType\"] = 1] = \"TrueType\";\n /**\n * Specifies the type of `TrueTypeEmbedded`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueTypeEmbedded\"] = 2] = \"TrueTypeEmbedded\";\n})(PdfFontType || (PdfFontType = {}));\n/**\n * public Enum for `PdfWordWrapType`.\n * @private\n */\nexport var PdfWordWrapType;\n(function (PdfWordWrapType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Word`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Word\"] = 1] = \"Word\";\n /**\n * Specifies the type of `WordOnly`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"WordOnly\"] = 2] = \"WordOnly\";\n /**\n * Specifies the type of `Character`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Character\"] = 3] = \"Character\";\n})(PdfWordWrapType || (PdfWordWrapType = {}));\n/**\n * public Enum for `PdfSubSuperScript`.\n * @private\n */\nexport var PdfSubSuperScript;\n(function (PdfSubSuperScript) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `SuperScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SuperScript\"] = 1] = \"SuperScript\";\n /**\n * Specifies the type of `SubScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SubScript\"] = 2] = \"SubScript\";\n})(PdfSubSuperScript || (PdfSubSuperScript = {}));\n/**\n * public Enum for `FontEncoding`.\n * @private\n */\nexport var FontEncoding;\n(function (FontEncoding) {\n /**\n * Specifies the type of `Unknown`.\n * @private\n */\n FontEncoding[FontEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `StandardEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"StandardEncoding\"] = 1] = \"StandardEncoding\";\n /**\n * Specifies the type of `MacRomanEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacRomanEncoding\"] = 2] = \"MacRomanEncoding\";\n /**\n * Specifies the type of `MacExpertEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacExpertEncoding\"] = 3] = \"MacExpertEncoding\";\n /**\n * Specifies the type of `WinAnsiEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"WinAnsiEncoding\"] = 4] = \"WinAnsiEncoding\";\n /**\n * Specifies the type of `PdfDocEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"PdfDocEncoding\"] = 5] = \"PdfDocEncoding\";\n /**\n * Specifies the type of `IdentityH`.\n * @private\n */\n FontEncoding[FontEncoding[\"IdentityH\"] = 6] = \"IdentityH\";\n})(FontEncoding || (FontEncoding = {}));\n/**\n * public Enum for `TtfCmapFormat`.\n * @private\n */\nexport var TtfCmapFormat;\n(function (TtfCmapFormat) {\n /**\n * This is the Apple standard character to glyph index mapping table.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Apple\"] = 0] = \"Apple\";\n /**\n * This is the Microsoft standard character to glyph index mapping table.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Microsoft\"] = 4] = \"Microsoft\";\n /**\n * Format 6: Trimmed table mapping.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Trimmed\"] = 6] = \"Trimmed\";\n})(TtfCmapFormat || (TtfCmapFormat = {}));\n/**\n * Enumerator that implements CMAP encodings.\n * @private\n */\nexport var TtfCmapEncoding;\n(function (TtfCmapEncoding) {\n /**\n * Unknown encoding.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * When building a symbol font for Windows.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Symbol\"] = 1] = \"Symbol\";\n /**\n * When building a Unicode font for Windows.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Unicode\"] = 2] = \"Unicode\";\n /**\n * For font that will be used on a Macintosh.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Macintosh\"] = 3] = \"Macintosh\";\n})(TtfCmapEncoding || (TtfCmapEncoding = {}));\n/**\n * Ttf platform ID.\n * @private\n */\nexport var TtfPlatformID;\n(function (TtfPlatformID) {\n /**\n * Apple platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"AppleUnicode\"] = 0] = \"AppleUnicode\";\n /**\n * Macintosh platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Macintosh\"] = 1] = \"Macintosh\";\n /**\n * Iso platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Iso\"] = 2] = \"Iso\";\n /**\n * Microsoft platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Microsoft\"] = 3] = \"Microsoft\";\n})(TtfPlatformID || (TtfPlatformID = {}));\n/**\n * Microsoft encoding ID.\n * @private\n */\nexport var TtfMicrosoftEncodingID;\n(function (TtfMicrosoftEncodingID) {\n /**\n * Undefined encoding.\n * @private\n */\n TtfMicrosoftEncodingID[TtfMicrosoftEncodingID[\"Undefined\"] = 0] = \"Undefined\";\n /**\n * Unicode encoding.\n * @private\n */\n TtfMicrosoftEncodingID[TtfMicrosoftEncodingID[\"Unicode\"] = 1] = \"Unicode\";\n})(TtfMicrosoftEncodingID || (TtfMicrosoftEncodingID = {}));\n/**\n * Macintosh encoding ID.\n * @private\n */\nexport var TtfMacintoshEncodingID;\n(function (TtfMacintoshEncodingID) {\n /**\n * Roman encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Roman\"] = 0] = \"Roman\";\n /**\n * Japanese encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Japanese\"] = 1] = \"Japanese\";\n /**\n * Chinese encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Chinese\"] = 2] = \"Chinese\";\n})(TtfMacintoshEncodingID || (TtfMacintoshEncodingID = {}));\n/**\n * Enumerator that implements font descriptor flags.\n * @private\n */\nexport var FontDescriptorFlags;\n(function (FontDescriptorFlags) {\n /**\n * All glyphs have the same width (as opposed to proportional or variable-pitch fonts, which have different widths).\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"FixedPitch\"] = 1] = \"FixedPitch\";\n /**\n * Glyphs have serifs, which are short strokes drawn at an angle on the top and\n * bottom of glyph stems (as opposed to sans serif fonts, which do not).\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Serif\"] = 2] = \"Serif\";\n /**\n * Font contains glyphs outside the Adobe standard Latin character set. The\n * flag and the nonsymbolic flag cannot both be set or both be clear.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Symbolic\"] = 4] = \"Symbolic\";\n /**\n * Glyphs resemble cursive handwriting.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Script\"] = 8] = \"Script\";\n /**\n * Font uses the Adobe standard Latin character set or a subset of it.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Nonsymbolic\"] = 32] = \"Nonsymbolic\";\n /**\n * Glyphs have dominant vertical strokes that are slanted.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Italic\"] = 64] = \"Italic\";\n /**\n * Bold font.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"ForceBold\"] = 262144] = \"ForceBold\";\n})(FontDescriptorFlags || (FontDescriptorFlags = {}));\n/**\n * true type font composite glyph flags.\n * @private\n */\nexport var TtfCompositeGlyphFlags;\n(function (TtfCompositeGlyphFlags) {\n /**\n * The Arg1And2AreWords.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"Arg1And2AreWords\"] = 1] = \"Arg1And2AreWords\";\n /**\n * The ArgsAreXyValues.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"ArgsAreXyValues\"] = 2] = \"ArgsAreXyValues\";\n /**\n * The RoundXyToGrid.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"RoundXyToGrid\"] = 4] = \"RoundXyToGrid\";\n /**\n * The WeHaveScale.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveScale\"] = 8] = \"WeHaveScale\";\n /**\n * The Reserved.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"Reserved\"] = 16] = \"Reserved\";\n /**\n * The MoreComponents.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"MoreComponents\"] = 32] = \"MoreComponents\";\n /**\n * The WeHaveAnXyScale.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveAnXyScale\"] = 64] = \"WeHaveAnXyScale\";\n /**\n * The WeHaveTwoByTwo\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveTwoByTwo\"] = 128] = \"WeHaveTwoByTwo\";\n /**\n * The WeHaveInstructions.\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveInstructions\"] = 256] = \"WeHaveInstructions\";\n /**\n * The UseMyMetrics.\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"UseMyMetrics\"] = 512] = \"UseMyMetrics\";\n})(TtfCompositeGlyphFlags || (TtfCompositeGlyphFlags = {}));\n","/**\n * Coordinates of Position for `PointF`.\n * @private\n */\nvar PointF = /** @class */ (function () {\n function PointF(x, y) {\n if (typeof x === 'undefined') {\n this.x = 0;\n this.y = 0;\n }\n else {\n if (x !== null) {\n this.x = x;\n }\n else {\n this.x = 0;\n }\n if (y !== null) {\n this.y = y;\n }\n else {\n this.y = 0;\n }\n }\n }\n return PointF;\n}());\nexport { PointF };\n/**\n * Width and Height as `Size`.\n * @private\n */\nvar SizeF = /** @class */ (function () {\n function SizeF(width, height) {\n if (typeof height === 'undefined') {\n this.height = 0;\n this.width = 0;\n }\n else {\n if (height !== null) {\n this.height = height;\n }\n else {\n this.height = 0;\n }\n if (width !== null) {\n this.width = width;\n }\n else {\n this.width = 0;\n }\n }\n }\n return SizeF;\n}());\nexport { SizeF };\n/**\n * `RectangleF` with Position and size.\n * @private\n */\nvar RectangleF = /** @class */ (function () {\n function RectangleF(arg1, arg2, arg3, arg4) {\n if (typeof arg1 === typeof arg1 && typeof arg1 === 'undefined') {\n this.x = 0;\n this.y = 0;\n this.height = 0;\n this.width = 0;\n }\n else {\n if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n var pointf = arg1;\n this.x = pointf.x;\n this.y = pointf.y;\n var sizef = arg2;\n this.height = sizef.height;\n this.width = sizef.width;\n }\n else {\n var x = arg1;\n var y = arg2;\n var width = arg3;\n var height = arg4;\n this.x = x;\n this.y = y;\n this.height = height;\n this.width = width;\n }\n }\n }\n return RectangleF;\n}());\nexport { RectangleF };\n/**\n * `Rectangle` with left, right, top and bottom.\n * @private\n */\nvar Rectangle = /** @class */ (function () {\n /**\n * Instance of `RectangleF` class with X, Y, Width and Height.\n * @private\n */\n function Rectangle(left, top, right, bottom) {\n this.left = left;\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n }\n Object.defineProperty(Rectangle.prototype, \"width\", {\n /**\n * Gets a value of width\n */\n get: function () {\n return this.right - this.left;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"height\", {\n /**\n * Gets a value of height\n */\n get: function () {\n return this.bottom - this.top;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"topLeft\", {\n /**\n * Gets a value of Top and Left\n */\n get: function () {\n return new PointF(this.left, this.top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"size\", {\n /**\n * Gets a value of size\n */\n get: function () {\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Rectangle.prototype.toString = function () {\n return this.topLeft + 'x' + this.size;\n };\n return Rectangle;\n}());\nexport { Rectangle };\n","/**\n * `PdfBrush` class provides objects used to fill the interiors of graphical shapes such as rectangles,\n * ellipses, pies, polygons, and paths.\n * @private\n */\nvar PdfBrush = /** @class */ (function () {\n /**\n * Creates instanceof `PdfBrush` class.\n * @hidden\n * @private\n */\n function PdfBrush() {\n //\n }\n return PdfBrush;\n}());\nexport { PdfBrush };\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 { PdfColor } from './../pdf-color';\nimport { PdfColorSpace } from './../enum';\nimport { PdfBrush } from './pdf-brush';\n/**\n * Represents a brush that fills any object with a solid color.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfSolidBrush = /** @class */ (function (_super) {\n __extends(PdfSolidBrush, _super);\n //Constructors\n /**\n * Initializes a new instance of the `PdfSolidBrush` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param color color of the brush\n */\n function PdfSolidBrush(color) {\n var _this = _super.call(this) || this;\n _this.pdfColor = color;\n return _this;\n }\n Object.defineProperty(PdfSolidBrush.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color` of the brush.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Monitors` the changes of the brush and modify PDF state respectively.\n * @private\n */\n PdfSolidBrush.prototype.monitorChanges = function (brush, streamWriter, getResources, saveChanges, currentColorSpace) {\n if (streamWriter == null) {\n throw new Error('ArgumentNullException:streamWriter');\n }\n var diff = false;\n if (brush == null) {\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n else {\n var sBrush = brush;\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n };\n /**\n * `Resets` the changes, which were made by the brush.\n * @private\n */\n PdfSolidBrush.prototype.resetChanges = function (streamWriter) {\n streamWriter.setColorAndSpace(new PdfColor(0, 0, 0), PdfColorSpace.Rgb, false);\n };\n return PdfSolidBrush;\n}(PdfBrush));\nexport { PdfSolidBrush };\n","/**\n * PdfStringFormat.ts class for EJ2-PDF\n */\nimport { PdfVerticalAlignment } from './../../graphics/enum';\nimport { PdfSubSuperScript, PdfWordWrapType } from './../../graphics/fonts/enum';\n/**\n * `PdfStringFormat` class represents the text layout information on PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStringFormat = /** @class */ (function () {\n function PdfStringFormat(arg1, arg2) {\n /**\n * The `scaling factor` of the text being drawn.\n * @private\n */\n this.scalingFactor = 100.0;\n /**\n * Indicates text `wrapping` type.\n * @private\n */\n this.wordWrapType = PdfWordWrapType.Word;\n if (typeof arg1 === 'undefined') {\n this.internalLineLimit = true;\n this.wordWrapType = PdfWordWrapType.Word;\n }\n else if (typeof arg1 === 'string') {\n this.constructor();\n }\n else {\n if (typeof arg2 === 'undefined') {\n this.constructor();\n this.textAlignment = arg1;\n }\n else {\n this.constructor(arg1);\n this.verticalAlignment = arg2;\n }\n }\n }\n Object.defineProperty(PdfStringFormat.prototype, \"alignment\", {\n //Properties\n /**\n * Gets or sets the `horizontal` text alignment\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.textAlignment;\n },\n set: function (value) {\n this.textAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"textDirection\", {\n get: function () {\n return this.direction;\n },\n set: function (value) {\n this.direction = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineAlignment\", {\n /**\n * Gets or sets the `vertical` text alignment.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.verticalAlignment === 'undefined' || this.verticalAlignment == null) {\n return PdfVerticalAlignment.Top;\n }\n else {\n return this.verticalAlignment;\n }\n },\n set: function (value) {\n this.verticalAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"rightToLeft\", {\n /**\n * Gets or sets the value that indicates text `direction` mode.\n * @private\n */\n get: function () {\n if (typeof this.isRightToLeft === 'undefined' || this.isRightToLeft == null) {\n return false;\n }\n else {\n return this.isRightToLeft;\n }\n },\n set: function (value) {\n this.isRightToLeft = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"characterSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the characters in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set character spacing\n * stringFormat.characterSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalCharacterSpacing === 'undefined' || this.internalCharacterSpacing == null) {\n return 0;\n }\n else {\n return this.internalCharacterSpacing;\n }\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the words in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set word spacing\n * stringFormat.wordSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalWordSpacing === 'undefined' || this.internalWordSpacing == null) {\n return 0;\n }\n else {\n return this.internalWordSpacing;\n }\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or sets value that indicates the `vertical distance` between the baselines of adjacent lines of text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set string\n * let text : string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n * incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitati';\n * // set rectangle bounds\n * let rectangle : RectangleF = new RectangleF({x : 0, y : 0}, {width : 300, height : 100})\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set line spacing\n * stringFormat.lineSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString(text, font, blackBrush, rectangle, stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.leading === 'undefined' || this.leading == null) {\n return 0;\n }\n else {\n return this.leading;\n }\n },\n set: function (value) {\n this.leading = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"clipPath\", {\n /**\n * Gets or sets a value indicating whether the text is `clipped` or not.\n * @private\n */\n get: function () {\n if (typeof this.clip === 'undefined' || this.clip == null) {\n return false;\n }\n else {\n return this.clip;\n }\n },\n set: function (value) {\n this.clip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"subSuperScript\", {\n /**\n * Gets or sets value indicating whether the text is in `subscript or superscript` mode.\n * @private\n */\n get: function () {\n if (typeof this.pdfSubSuperScript === 'undefined' || this.pdfSubSuperScript == null) {\n return PdfSubSuperScript.None;\n }\n else {\n return this.pdfSubSuperScript;\n }\n },\n set: function (value) {\n this.pdfSubSuperScript = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"paragraphIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the paragraph.\n * @private\n */\n get: function () {\n if (typeof this.internalParagraphIndent === 'undefined' || this.internalParagraphIndent == null) {\n return 0;\n }\n else {\n return this.internalParagraphIndent;\n }\n },\n set: function (value) {\n this.internalParagraphIndent = value;\n this.firstLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineLimit\", {\n /**\n * Gets or sets a value indicating whether [`line limit`].\n * @private\n */\n get: function () {\n return this.internalLineLimit;\n },\n set: function (value) {\n this.internalLineLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"measureTrailingSpaces\", {\n /**\n * Gets or sets a value indicating whether [`measure trailing spaces`].\n * @private\n */\n get: function () {\n if (typeof this.trailingSpaces === 'undefined' || this.trailingSpaces == null) {\n return false;\n }\n else {\n return this.trailingSpaces;\n }\n },\n set: function (value) {\n this.trailingSpaces = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"noClip\", {\n /**\n * Gets or sets a value indicating whether [`no clip`].\n * @private\n */\n get: function () {\n if (typeof this.isNoClip === 'undefined' || this.isNoClip == null) {\n return false;\n }\n else {\n return this.isNoClip;\n }\n },\n set: function (value) {\n this.isNoClip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordWrap\", {\n /**\n * Gets or sets value indicating type of the text `wrapping`.\n * @private\n */\n get: function () {\n // if (typeof this.wrapType === 'undefined' || this.wrapType == null) {\n // return PdfWordWrapType.Word;\n // } else {\n return this.wordWrapType;\n // }\n },\n set: function (value) {\n this.wordWrapType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"horizontalScalingFactor\", {\n /**\n * Gets or sets the `scaling factor`.\n * @private\n */\n get: function () {\n // if (typeof this.scalingFactor === 'undefined' || this.scalingFactor == null) {\n // return 100;\n // } else {\n return this.scalingFactor;\n // }\n },\n set: function (value) {\n if (value <= 0) {\n throw new Error('ArgumentOutOfRangeException:The scaling factor cant be less of equal to zero, ScalingFactor');\n }\n this.scalingFactor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the text.\n * @private\n */\n get: function () {\n if (typeof this.initialLineIndent === 'undefined' || this.initialLineIndent == null) {\n return 0;\n }\n else {\n return this.initialLineIndent;\n }\n },\n set: function (value) {\n this.initialLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clones` the object.\n * @private\n */\n //IClonable implementation\n PdfStringFormat.prototype.clone = function () {\n var format = this;\n return format;\n };\n return PdfStringFormat;\n}());\nexport { PdfStringFormat };\n","import { SizeF, RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfWordWrapType } from './enum';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Class `lay outing the text`.\n */\nvar PdfStringLayouter = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringLayouter` class.\n * @private\n */\n function PdfStringLayouter() {\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n //\n }\n PdfStringLayouter.prototype.layout = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n if (arg4 instanceof RectangleF) {\n this.initialize(arg1, arg2, arg3, arg4, arg5);\n this.isOverloadWithPosition = arg6;\n this.clientSize = arg7;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n else {\n this.initialize(arg1, arg2, arg3, arg4);\n this.isOverloadWithPosition = arg5;\n this.clientSize = arg6;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n };\n PdfStringLayouter.prototype.initialize = function (text, font, format, rectSize, pageHeight) {\n if (typeof pageHeight === 'number') {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.text = text;\n this.font = font;\n this.format = format;\n this.size = new SizeF(rectSize.width, rectSize.height);\n this.rectangle = rectSize;\n this.pageHeight = pageHeight;\n this.reader = new StringTokenizer(text);\n }\n else {\n this.initialize(text, font, format, new RectangleF(new PointF(0, 0), rectSize), 0);\n }\n };\n /**\n * `Clear` all resources.\n * @private\n */\n PdfStringLayouter.prototype.clear = function () {\n this.font = null;\n this.format = null;\n this.reader.close();\n this.reader = null;\n this.text = null;\n };\n /**\n * `Layouts` the text.\n * @private\n */\n PdfStringLayouter.prototype.doLayout = function () {\n var result = new PdfStringLayoutResult();\n var lineResult = new PdfStringLayoutResult();\n var lines = [];\n var line = this.reader.peekLine();\n var lineIndent = this.getLineIndent(true);\n while (line != null) {\n lineResult = this.layoutLine(line, lineIndent);\n if (lineResult !== null || typeof lineResult !== 'undefined') {\n var numSymbolsInserted = 0;\n /* tslint:disable */\n var returnedValue = this.copyToResult(result, lineResult, lines, /*out*/ numSymbolsInserted);\n /* tslint:enable */\n var success = returnedValue.success;\n numSymbolsInserted = returnedValue.numInserted;\n if (!success) {\n this.reader.read(numSymbolsInserted);\n break;\n }\n }\n // if (lineResult.textRemainder != null && lineResult.textRemainder.length > 0 ) {\n // break;\n // }\n this.reader.readLine();\n line = this.reader.peekLine();\n lineIndent = this.getLineIndent(false);\n }\n this.finalizeResult(result, lines);\n return result;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineIndent = function (firstLine) {\n var lineIndent = 0;\n if (this.format != null) {\n lineIndent = (firstLine) ? this.format.firstLineIndent : this.format.paragraphIndent;\n lineIndent = (this.size.width > 0) ? Math.min(this.size.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates `height` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineHeight = function () {\n var height = this.font.height;\n if (this.format != null && this.format.lineSpacing !== 0) {\n height = this.format.lineSpacing + this.font.height;\n }\n return height;\n };\n /**\n * Calculates `width` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineWidth = function (line) {\n var width = this.font.getLineWidth(line, this.format);\n return width;\n };\n // tslint:disable\n /**\n * `Layouts` line.\n * @private\n */\n PdfStringLayouter.prototype.layoutLine = function (line, lineIndent) {\n var lineResult = new PdfStringLayoutResult();\n lineResult.layoutLineHeight = this.getLineHeight();\n var lines = [];\n var maxWidth = this.size.width;\n var lineWidth = this.getLineWidth(line) + lineIndent;\n var lineType = LineType.FirstParagraphLine;\n var readWord = true;\n // line is in bounds.\n if (maxWidth <= 0 || Math.round(lineWidth) <= Math.round(maxWidth)) {\n this.addToLineResult(lineResult, lines, line, lineWidth, LineType.NewLineBreak | lineType);\n }\n else {\n var builder = '';\n var curLine = '';\n lineWidth = lineIndent;\n var curIndent = lineIndent;\n var reader = new StringTokenizer(line);\n var word = reader.peekWord();\n var isSingleWord = false;\n if (word.length !== reader.length) {\n if (word === ' ') {\n curLine = curLine + word;\n builder = builder + word;\n reader.position += 1;\n word = reader.peekWord();\n }\n }\n while (word != null) {\n curLine = curLine + word;\n var curLineWidth = this.getLineWidth(curLine.toString()) + curIndent /*)*/;\n if (curLine.toString() === ' ') {\n curLine = '';\n curLineWidth = 0;\n }\n if (curLineWidth > maxWidth) {\n if (this.getWrapType() === PdfWordWrapType.None) {\n break;\n }\n if (curLine.length === word.length) {\n // Character wrap is disabled or one symbol is greater than bounds.\n if (this.getWrapType() === PdfWordWrapType.WordOnly) {\n lineResult.textRemainder = line.substring(reader.position);\n break;\n }\n else if (curLine.length === 1) {\n builder = builder + word;\n break;\n }\n else {\n readWord = false;\n curLine = '';\n word = reader.peek().toString();\n continue;\n }\n }\n else {\n if (this.getLineWidth(word.toString()) > maxWidth) {\n this.format.wordWrap = PdfWordWrapType.Character;\n }\n else {\n if (typeof this.format !== 'undefined' && this.format !== null) {\n this.format.wordWrap = PdfWordWrapType.Word;\n }\n }\n if (this.getWrapType() !== PdfWordWrapType.Character || !readWord) {\n var ln = builder.toString();\n // if (ln.indexOf(' ') === -1) {\n // isSingleWord = true;\n // this.addToLineResult(lineResult, lines, curLine, lineWidth, LineType.LayoutBreak | lineType);\n // } else {\n // this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n // } \n if (ln !== ' ') {\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n }\n if (this.isOverloadWithPosition) {\n maxWidth = this.clientSize.width;\n }\n curLine = '';\n builder = '';\n lineWidth = 0;\n curIndent = 0;\n curLineWidth = 0;\n lineType = LineType.None;\n // if (isSingleWord) {\n // reader.readWord();\n // readWord = false;\n // }\n word = (readWord) ? word : reader.peekWord();\n //isSingleWord = false;\n readWord = true;\n }\n else {\n readWord = false;\n curLine = '';\n curLine = curLine + builder.toString();\n word = reader.peek().toString();\n }\n continue;\n }\n }\n /*tslint:disable:max-func-body-length */\n builder = builder + word;\n lineWidth = curLineWidth;\n if (readWord) {\n reader.readWord();\n word = reader.peekWord();\n //isSingleWord = false;\n }\n else {\n reader.read();\n word = reader.peek().toString();\n }\n }\n if (builder.length > 0) {\n var ln = builder.toString();\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.NewLineBreak | LineType.LastParagraphLine);\n }\n reader.close();\n }\n lineResult.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n lineResult.layoutLines.push(lines[index]);\n }\n lines = [];\n return lineResult;\n };\n /**\n * `Adds` line to line result.\n * @private\n */\n PdfStringLayouter.prototype.addToLineResult = function (lineResult, lines, line, lineWidth, breakType) {\n var info = new LineInfo();\n info.text = line;\n info.width = lineWidth;\n info.lineType = breakType;\n lines.push(info);\n var size = lineResult.actualSize;\n size.height += this.getLineHeight();\n size.width = Math.max(size.width, lineWidth);\n lineResult.size = size;\n };\n /**\n * `Copies` layout result from line result to entire result. Checks whether we can proceed lay outing or not.\n * @private\n */\n PdfStringLayouter.prototype.copyToResult = function (result, lineResult, lines, \n /*out*/ numInserted) {\n var success = true;\n var allowPartialLines = (this.format != null && !this.format.lineLimit);\n var height = result.actualSize.height;\n var maxHeight = this.size.height;\n if ((this.pageHeight > 0) && (maxHeight + this.rectangle.y > this.pageHeight)) {\n maxHeight = this.rectangle.y - this.pageHeight;\n maxHeight = Math.max(maxHeight, -maxHeight);\n }\n numInserted = 0;\n if (lineResult.lines != null) {\n for (var i = 0, len = lineResult.lines.length; i < len; i++) {\n var expHeight = height + lineResult.lineHeight;\n if (expHeight <= maxHeight || maxHeight <= 0 || allowPartialLines) {\n var info = lineResult.lines[i];\n numInserted += info.text.length;\n info = this.trimLine(info, (lines.length === 0));\n lines.push(info);\n // Update width.\n var size = result.actualSize;\n size.width = Math.max(size.width, info.width);\n result.size = size;\n // The part of the line fits only and it's allowed to use partial lines.\n // if (expHeight >= maxHeight && maxHeight > 0 && allowPartialLines)\n // {\n // let shouldClip : boolean = (this.format == null || !this.format.noClip);\n // if (shouldClip)\n // {\n // let exceededHeight : number = expHeight - maxHeight;\n // let fitHeight : number = /*Utils.Round(*/ lineResult.lineHeight - exceededHeight /*)*/;\n // height = /*Utils.Round(*/ height + fitHeight /*)*/;\n // }\n // else\n // {\n // height = expHeight;\n // }\n // success = false;\n // break;\n // } else {\n height = expHeight;\n // }\n }\n else {\n success = false;\n break;\n }\n }\n }\n if (height != result.size.height) {\n var size1 = result.actualSize;\n size1.height = height;\n result.size = size1;\n }\n return { success: success, numInserted: numInserted };\n };\n /**\n * `Finalizes` final result.\n * @private\n */\n PdfStringLayouter.prototype.finalizeResult = function (result, lines) {\n result.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n result.layoutLines.push(lines[index]);\n }\n result.layoutLineHeight = this.getLineHeight();\n if (!this.reader.end) {\n result.textRemainder = this.reader.readToEnd();\n }\n lines = [];\n };\n /**\n * `Trims` whitespaces at the line.\n * @private\n */\n PdfStringLayouter.prototype.trimLine = function (info, firstLine) {\n var line = info.text;\n var lineWidth = info.width;\n // Trim start whitespaces if the line is not a start of the paragraph only.\n var trimStartSpaces = ((info.lineType & LineType.FirstParagraphLine) === 0);\n var start = (this.format == null || !this.format.rightToLeft);\n var spaces = StringTokenizer.spaces;\n line = (start) ? line.trim() : line.trim();\n // Recalculate line width.\n if (line.length !== info.text.length) {\n lineWidth = this.getLineWidth(line);\n if ((info.lineType & LineType.FirstParagraphLine) > 0) {\n lineWidth += this.getLineIndent(firstLine);\n }\n }\n info.text = line;\n info.width = lineWidth;\n return info;\n };\n /**\n * Returns `wrap` type.\n * @private\n */\n PdfStringLayouter.prototype.getWrapType = function () {\n var wrapType = (this.format != null) ? this.format.wordWrap : PdfWordWrapType.Word;\n return wrapType;\n };\n return PdfStringLayouter;\n}());\nexport { PdfStringLayouter };\n//Internal declaration\nvar PdfStringLayoutResult = /** @class */ (function () {\n function PdfStringLayoutResult() {\n }\n Object.defineProperty(PdfStringLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets the `text` which is not lay outed.\n * @private\n */\n get: function () {\n return this.textRemainder;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"actualSize\", {\n /**\n * Gets the actual layout text `bounds`.\n * @private\n */\n get: function () {\n if (typeof this.size === 'undefined') {\n this.size = new SizeF(0, 0);\n }\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lines\", {\n /**\n * Gets layout `lines` information.\n * @private\n */\n get: function () {\n return this.layoutLines;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineHeight\", {\n /**\n * Gets the `height` of the line.\n * @private\n */\n get: function () {\n return this.layoutLineHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"empty\", {\n /**\n * Gets value that indicates whether any layout text [`empty`].\n * @private\n */\n get: function () {\n return (this.layoutLines == null || this.layoutLines.length === 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineCount\", {\n /**\n * Gets `number of` the layout lines.\n * @private\n */\n get: function () {\n var count = (!this.empty) ? this.layoutLines.length : 0;\n return count;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStringLayoutResult;\n}());\nexport { PdfStringLayoutResult };\nvar LineInfo = /** @class */ (function () {\n function LineInfo() {\n }\n Object.defineProperty(LineInfo.prototype, \"lineType\", {\n //Properties\n /**\n * Gets the `type` of the line text.\n * @private\n */\n get: function () {\n return this.type;\n },\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"text\", {\n /**\n * Gets the line `text`.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"width\", {\n /**\n * Gets `width` of the line text.\n * @private\n */\n get: function () {\n return this.lineWidth;\n },\n set: function (value) {\n this.lineWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n return LineInfo;\n}());\nexport { LineInfo };\n/**\n* Break type of the `line`.\n* @private\n*/\nexport var LineType;\n(function (LineType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n LineType[LineType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `NewLineBreak`.\n * @private\n */\n LineType[LineType[\"NewLineBreak\"] = 1] = \"NewLineBreak\";\n /**\n * Specifies the type of `LayoutBreak`.\n * @private\n */\n LineType[LineType[\"LayoutBreak\"] = 2] = \"LayoutBreak\";\n /**\n * Specifies the type of `FirstParagraphLine`.\n * @private\n */\n LineType[LineType[\"FirstParagraphLine\"] = 4] = \"FirstParagraphLine\";\n /**\n * Specifies the type of `LastParagraphLine`.\n * @private\n */\n LineType[LineType[\"LastParagraphLine\"] = 8] = \"LastParagraphLine\";\n})(LineType || (LineType = {}));\n","/**\n * StringTokenizer.ts class for EJ2-PDF\n * Utility class for working with strings.\n * @private\n */\nvar StringTokenizer = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringTokenizer` class.\n * @private\n */\n function StringTokenizer(textValue) {\n /**\n * Current `position`.\n * @private\n */\n this.currentPosition = 0;\n if (textValue == null) {\n throw new Error('ArgumentNullException:text');\n }\n this.text = textValue;\n }\n Object.defineProperty(StringTokenizer.prototype, \"length\", {\n // Properties\n /**\n * Gets text `length`.\n * @private\n */\n get: function () {\n return this.text.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"end\", {\n get: function () {\n return (this.currentPosition === this.text.length);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"position\", {\n /**\n * Gets or sets the position.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n StringTokenizer.getCharsCount = function (text, symbols) {\n if (typeof symbols === 'string') {\n if (text == null) {\n throw new Error('ArgumentNullException:wholeText');\n }\n var numSymbols = 0;\n var curIndex = 0;\n for (;;) {\n curIndex = text.indexOf(symbols, curIndex);\n if (curIndex === -1) {\n break;\n }\n else {\n numSymbols++;\n curIndex++;\n }\n }\n return numSymbols;\n }\n else {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (symbols == null) {\n throw new Error('ArgumentNullException:symbols');\n }\n var count = 0;\n for (var i = 0, len = text.length; i < len; i++) {\n var ch = text[i];\n if (this.contains(symbols, ch)) {\n count++;\n }\n }\n return count;\n }\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.readLine = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n': {\n var text = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n this.currentPosition++;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.peekLine = function () {\n var pos = this.currentPosition;\n var line = this.readLine();\n this.currentPosition = pos;\n return line;\n };\n /**\n * Reads a word from the text.\n * @private\n */\n StringTokenizer.prototype.readWord = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n':\n var textValue = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n if (((ch === '\\r') && (this.currentPosition < this.length)) && (this.text[this.currentPosition] === '\\n')) {\n this.currentPosition++;\n }\n return textValue;\n case ' ':\n case '\\t': {\n if (pos === this.currentPosition) {\n pos++;\n }\n var text = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Peeks a word from the text.\n * @private\n */\n StringTokenizer.prototype.peekWord = function () {\n var pos = this.currentPosition;\n var word = this.readWord();\n this.currentPosition = pos;\n return word;\n };\n StringTokenizer.prototype.read = function (count) {\n if (typeof count === 'undefined') {\n var ch = '0';\n if (!this.end) {\n ch = this.text[this.currentPosition];\n this.currentPosition++;\n }\n return ch;\n }\n else {\n var num = 0;\n var builder = '';\n while (!this.end && num < count) {\n var ch = this.read();\n builder = builder + ch;\n num++;\n }\n return builder;\n }\n };\n /**\n * Peeks char form the data.\n * @private\n */\n StringTokenizer.prototype.peek = function () {\n var ch = '0';\n if (!this.end) {\n ch = this.text[this.currentPosition];\n }\n return ch;\n };\n /**\n * Closes a reader.\n * @private\n */\n StringTokenizer.prototype.close = function () {\n this.text = null;\n };\n StringTokenizer.prototype.readToEnd = function () {\n var text;\n if (this.currentPosition === 0) {\n text = this.text;\n }\n else {\n text = this.text.substring(this.length, this.currentPosition);\n }\n this.currentPosition = this.length;\n return text;\n };\n //Implementation\n /**\n * Checks whether array contains a symbol.\n * @private\n */\n StringTokenizer.contains = function (array, symbol) {\n var contains = false;\n for (var i = 0; i < array.length; i++) {\n if (array[i] === symbol) {\n contains = true;\n break;\n }\n }\n return contains;\n };\n // Constants\n /**\n * `Whitespace` symbol.\n * @private\n */\n StringTokenizer.whiteSpace = ' ';\n /**\n * `tab` symbol.\n * @private\n */\n StringTokenizer.tab = '\\t';\n /**\n * Array of `spaces`.\n * @private\n */\n StringTokenizer.spaces = [StringTokenizer.whiteSpace, StringTokenizer.tab];\n /**\n * `Pattern` for WhiteSpace.\n * @private\n */\n StringTokenizer.whiteSpacePattern = '^[ \\t]+$';\n return StringTokenizer;\n}());\nexport { StringTokenizer };\n","/**\n * PdfFont.ts class for EJ2-PDF\n */\nimport { PdfFontStyle } from './enum';\nimport { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfStringFormat } from './pdf-string-format';\nimport { PdfStringLayouter } from './string-layouter';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Defines a particular format for text, including font face, size, and style attributes.\n * @private\n */\nvar PdfFont = /** @class */ (function () {\n function PdfFont(size, style) {\n /**\n * `Style` of the font.\n * @private\n */\n this.fontStyle = PdfFontStyle.Regular;\n if (typeof size === 'number' && typeof style === 'undefined') {\n this.fontSize = size;\n }\n else {\n this.fontSize = size;\n this.setStyle(style);\n }\n }\n Object.defineProperty(PdfFont.prototype, \"name\", {\n //Properties\n /**\n * Gets the face name of this Font.\n * @private\n */\n get: function () {\n return this.metrics.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"size\", {\n /**\n * Gets the size of this font.\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"height\", {\n /**\n * Gets the height of the font in points.\n * @private\n */\n get: function () {\n return this.metrics.getHeight(null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"style\", {\n /**\n * Gets the style information for this font.\n * @private\n */\n get: function () {\n return this.fontStyle;\n },\n set: function (value) {\n this.fontStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"bold\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `bold`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Bold) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"italic\", {\n /**\n * Gets a value indicating whether this `PdfFont` has the `italic` style applied.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Italic) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"strikeout\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `strikeout`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Strikeout) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"underline\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `underline`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Underline) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"metrics\", {\n /**\n * Gets or sets the `metrics` for this font.\n * @private\n */\n get: function () {\n return this.fontMetrics;\n },\n set: function (value) {\n this.fontMetrics = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"element\", {\n // /**\n // * Gets and Sets the font `internals`.\n // * @private\n // */\n // public get fontInternal() : IPdfPrimitive {\n // return this.pdfFontInternals;\n // }\n // public set fontInternal(value : IPdfPrimitive) {\n // this.pdfFontInternals = value;\n // }\n //IPdfWrapper Members\n /**\n * Gets the `element` representing the font.\n * @private\n */\n get: function () {\n return this.pdfFontInternals;\n },\n enumerable: true,\n configurable: true\n });\n PdfFont.prototype.measureString = function (text, arg2, arg3, arg4, arg5) {\n if (typeof text === 'string' && typeof arg2 === 'undefined') {\n return this.measureString(text, null);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'undefined' && typeof arg4 === 'undefined') {\n var temparg2 = arg2;\n var charactersFitted = 0;\n var linesFilled = 0;\n return this.measureString(text, temparg2, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'number' && typeof arg4 === 'number') {\n var temparg2 = arg2;\n return this.measureString(text, 0, temparg2, arg3, arg4);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'number' && typeof arg5 === 'number') {\n var layoutArea = new SizeF(arg2, 0);\n var temparg3 = arg3;\n return this.measureString(text, layoutArea, temparg3, arg4, arg5);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else {\n if (text == null) {\n throw Error(\"ArgumentNullException(\\\"text\\\")\");\n }\n var temparg2 = arg2;\n var temparg3 = arg3;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(text, this, temparg3, temparg2, false, new SizeF(0, 0));\n // arg4 = (result.Remainder == null) ? text.length : text.length - result.Remainder.length;\n arg4 = text.length;\n arg5 = (result.empty) ? 0 : result.lines.length;\n return result.actualSize;\n }\n };\n /* tslint:enable */\n //IPdfCache Members\n /**\n * `Checks` whether the object is similar to another object.\n * @private\n */\n PdfFont.prototype.equalsTo = function (obj) {\n var result = this.equalsToFont(obj);\n return result;\n };\n /**\n * Returns `internals` of the object.\n * @private\n */\n PdfFont.prototype.getInternals = function () {\n return this.pdfFontInternals;\n };\n /**\n * Sets `internals` to the object.\n * @private\n */\n PdfFont.prototype.setInternals = function (internals) {\n if (internals == null) {\n throw new Error('ArgumentNullException:internals');\n }\n this.pdfFontInternals = internals;\n };\n /**\n * Sets the `style` of the font.\n * @private\n */\n PdfFont.prototype.setStyle = function (style) {\n this.fontStyle = style;\n };\n /**\n * Applies `settings` to the default line width.\n * @private\n */\n PdfFont.prototype.applyFormatSettings = function (line, format, width) {\n // if (line == null) {\n // throw new Error(`ArgumentNullException:line`);\n // }\n var realWidth = width;\n if (format != null && width > 0) {\n // Space among characters is not default.\n if (format.characterSpacing !== 0) {\n realWidth += (line.length - 1) * format.characterSpacing;\n }\n // Space among words is not default.\n if (format.wordSpacing !== 0) {\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n realWidth += whitespacesCount * format.wordSpacing;\n }\n }\n return realWidth;\n };\n //Constants\n /**\n * `Multiplier` of the symbol width.\n * @default 0.001\n * @private\n */\n PdfFont.charSizeMultiplier = 0.001;\n /**\n * `Synchronization` object.\n * @private\n */\n PdfFont.syncObject = new Object();\n return PdfFont;\n}());\nexport { PdfFont };\n","/**\n * public Enum for `CompositeFontType`.\n * @private\n */\nexport var ObjectStatus;\n(function (ObjectStatus) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Registered`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"Registered\"] = 1] = \"Registered\";\n})(ObjectStatus || (ObjectStatus = {}));\n","/**\n * Used to `write a string` into output file.\n * @private\n */\nvar PdfWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfWriter` class.\n * @private\n */\n function PdfWriter(stream) {\n this.streamWriter = stream;\n }\n Object.defineProperty(PdfWriter.prototype, \"document\", {\n //properties\n /**\n * Gets and Sets the `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"position\", {\n /**\n * Gets the `position`.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"length\", {\n /**\n * Gets the `length` of the stream'.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"stream\", {\n /**\n * Gets the `stream`.\n * @private\n */\n get: function () {\n var result = this.streamWriter;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n //public Methods\n /**\n * `Writes the specified data`.\n * @private\n */\n PdfWriter.prototype.write = function (overload) {\n var data = [];\n var tempOverload = overload;\n this.streamWriter.write(tempOverload);\n };\n return PdfWriter;\n}());\nexport { PdfWriter };\n","/**\n * PdfMainObjectCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\nimport { ObjectStatus } from './enum';\n/**\n * The collection of all `objects` within a PDF document.\n * @private\n */\nvar PdfMainObjectCollection = /** @class */ (function () {\n function PdfMainObjectCollection() {\n //Fields\n /**\n * The collection of the `indirect objects`.\n * @default []\n * @private\n */\n this.objectCollections = [];\n /**\n * The collection of the `Indirect objects`.\n * @default new Dictionary()\n * @private\n */\n this.mainObjectCollection = new Dictionary();\n /**\n * The collection of `primitive objects`.\n * @private\n */\n this.primitiveObjectCollection = new Dictionary();\n }\n Object.defineProperty(PdfMainObjectCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.objectCollections.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the value of `ObjectInfo` from object collection.\n * @private\n */\n PdfMainObjectCollection.prototype.items = function (index) {\n return this.objectCollections[index];\n };\n Object.defineProperty(PdfMainObjectCollection.prototype, \"outIsNew\", {\n //Methods\n /**\n * Specifies the value of `IsNew`.\n * @private\n */\n get: function () {\n return this.isNew;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element.\n * @private\n */\n PdfMainObjectCollection.prototype.add = function (element) {\n var objInfo = new ObjectInfo(element);\n this.objectCollections.push(objInfo);\n if (!this.primitiveObjectCollection.containsKey(element)) {\n this.primitiveObjectCollection.setValue(element, this.objectCollections.length - 1);\n }\n element.position = this.index = this.objectCollections.length - 1;\n element.status = ObjectStatus.Registered;\n };\n /**\n * `Looks` through the collection for the object specified.\n * @private\n */\n PdfMainObjectCollection.prototype.lookFor = function (obj) {\n var index = -1;\n if (obj.position !== -1) {\n return obj.position;\n }\n if (this.primitiveObjectCollection.containsKey(obj) && this.count === this.primitiveObjectCollection.size()) {\n index = this.primitiveObjectCollection.getValue(obj);\n }\n else {\n for (var i = this.count - 1; i >= 0; i--) {\n var oi = this.objectCollections[i];\n if (oi.object === obj) {\n index = i;\n break;\n }\n }\n }\n return index;\n };\n /**\n * Gets the `reference of the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.getReference = function (index, isNew) {\n this.index = this.lookFor(index);\n var reference;\n this.isNew = false;\n var oi = this.objectCollections[this.index];\n reference = oi.reference;\n var obj = { reference: reference, wasNew: isNew };\n return obj;\n };\n /**\n * Tries to set the `reference to the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.trySetReference = function (obj, reference, found) {\n var result = true;\n found = true;\n this.index = this.lookFor(obj);\n var oi = this.objectCollections[this.index];\n oi.setReference(reference);\n return result;\n };\n PdfMainObjectCollection.prototype.destroy = function () {\n for (var _i = 0, _a = this.objectCollections; _i < _a.length; _i++) {\n var obj = _a[_i];\n if (obj !== undefined) {\n obj.pdfObject.position = -1;\n obj.pdfObject.isSaving = undefined;\n obj.pdfObject.objectCollectionIndex = undefined;\n obj.pdfObject.position = undefined;\n }\n }\n this.objectCollections = [];\n this.mainObjectCollection = new Dictionary();\n this.primitiveObjectCollection = new Dictionary();\n };\n return PdfMainObjectCollection;\n}());\nexport { PdfMainObjectCollection };\nvar ObjectInfo = /** @class */ (function () {\n function ObjectInfo(obj, reference) {\n this.pdfObject = obj;\n this.pdfReference = reference;\n }\n Object.defineProperty(ObjectInfo.prototype, \"object\", {\n //Properties\n /**\n * Gets the `object`.\n * @private\n */\n get: function () {\n return this.pdfObject;\n },\n set: function (value) {\n this.pdfObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ObjectInfo.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `reference`.\n * @private\n */\n ObjectInfo.prototype.setReference = function (reference) {\n this.pdfReference = reference;\n };\n return ObjectInfo;\n}());\nexport { ObjectInfo };\n","/**\n * public Enum for `ObjectType`.\n * @private\n */\nexport var ObjectType;\n(function (ObjectType) {\n /**\n * Specifies the type of `Free`.\n * @private\n */\n ObjectType[ObjectType[\"Free\"] = 0] = \"Free\";\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n ObjectType[ObjectType[\"Normal\"] = 1] = \"Normal\";\n /**\n * Specifies the type of `Packed`.\n * @private\n */\n ObjectType[ObjectType[\"Packed\"] = 2] = \"Packed\";\n})(ObjectType || (ObjectType = {}));\n","import { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { Encoding } from '@syncfusion/ej2-file-utils';\nimport { PdfDocument } from './pdf-document';\n/**\n * `PdfDocumentBase` class represent common properties of PdfDocument classes.\n * @private\n */\nvar PdfDocumentBase = /** @class */ (function () {\n function PdfDocumentBase(document) {\n /**\n * If the stream is copied, then it specifies true.\n * @private\n */\n this.isStreamCopied = false;\n if (document instanceof PdfDocument) {\n this.document = document;\n }\n }\n Object.defineProperty(PdfDocumentBase.prototype, \"pdfObjects\", {\n //Prpperties\n /**\n * Gets the `PDF objects` collection, which stores all objects and references to it..\n * @private\n */\n get: function () {\n return this.objects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"crossTable\", {\n /**\n * Gets the `cross-reference` table.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"currentSavingObj\", {\n /**\n * Gets or sets the current saving `object number`.\n * @private\n */\n get: function () {\n return this.currentSavingObject;\n },\n set: function (value) {\n this.currentSavingObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"catalog\", {\n /**\n * Gets the PDF document `catalog`.\n * @private\n */\n get: function () {\n return this.pdfCatalog;\n },\n set: function (value) {\n this.pdfCatalog = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Sets the `main object collection`.\n * @private\n */\n PdfDocumentBase.prototype.setMainObjectCollection = function (mainObjectCollection) {\n this.objects = mainObjectCollection;\n };\n /**\n * Sets the `cross table`.\n * @private\n */\n PdfDocumentBase.prototype.setCrossTable = function (cTable) {\n this.pdfCrossTable = cTable;\n };\n /**\n * Sets the `catalog`.\n * @private\n */\n PdfDocumentBase.prototype.setCatalog = function (catalog) {\n this.pdfCatalog = catalog;\n };\n PdfDocumentBase.prototype.save = function (filename) {\n var _this = this;\n var encoding = new Encoding(true);\n var SW = new StreamWriter(encoding);\n if (typeof filename === 'undefined') {\n var encoding_1 = new Encoding(true);\n var SW_1 = new StreamWriter(encoding_1);\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */\n var obj = {};\n obj.blobData = new Blob([_this.document.docSave(SW_1, true)], { type: 'application/pdf' });\n resolve(obj);\n });\n }\n else {\n this.document.docSave(SW, filename, true);\n }\n };\n /**\n * `Clone` of parent object - PdfDocument.\n * @private\n */\n PdfDocumentBase.prototype.clone = function () {\n return this.document;\n };\n return PdfDocumentBase;\n}());\nexport { PdfDocumentBase };\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})();\n/**\n * PdfCatalog.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\n/**\n * `PdfCatalog` class represents internal catalog of the Pdf document.\n * @private\n */\nvar PdfCatalog = /** @class */ (function (_super) {\n __extends(PdfCatalog, _super);\n //constructor\n /**\n * Initializes a new instance of the `PdfCatalog` class.\n * @private\n */\n function PdfCatalog() {\n var _this = _super.call(this) || this;\n //fields\n /**\n * Internal variable to store collection of `sections`.\n * @default null\n * @private\n */\n _this.sections = null;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n _this.tempDictionaryProperties = new DictionaryProperties();\n _this.items.setValue(new DictionaryProperties().type, new PdfName('Catalog'));\n return _this;\n }\n Object.defineProperty(PdfCatalog.prototype, \"pages\", {\n //Properties\n /**\n * Gets or sets the sections, which contain `pages`.\n * @private\n */\n get: function () {\n return this.sections;\n },\n set: function (value) {\n var dictionary = value.element;\n // if (this.sections !== value) {\n // this.sections = value;\n // this.Items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n // }\n this.sections = value;\n this.items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n return PdfCatalog;\n}(PdfDictionary));\nexport { PdfCatalog };\n","/**\n * public Enum for `PdfPageOrientation`.\n * @private\n */\nexport var PdfPageOrientation;\n(function (PdfPageOrientation) {\n /**\n * Specifies the type of `Portrait`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Portrait\"] = 0] = \"Portrait\";\n /**\n * Specifies the type of `Landscape`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Landscape\"] = 1] = \"Landscape\";\n})(PdfPageOrientation || (PdfPageOrientation = {}));\n/**\n * public Enum for `PdfPageRotateAngle`.\n * @private\n */\nexport var PdfPageRotateAngle;\n(function (PdfPageRotateAngle) {\n /**\n * Specifies the type of `RotateAngle0`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle0\"] = 0] = \"RotateAngle0\";\n /**\n * Specifies the type of `RotateAngle90`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle90\"] = 1] = \"RotateAngle90\";\n /**\n * Specifies the type of `RotateAngle180`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle180\"] = 2] = \"RotateAngle180\";\n /**\n * Specifies the type of `RotateAngle270`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle270\"] = 3] = \"RotateAngle270\";\n})(PdfPageRotateAngle || (PdfPageRotateAngle = {}));\n/**\n * public Enum for `PdfNumberStyle`.\n * @private\n */\nexport var PdfNumberStyle;\n(function (PdfNumberStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Numeric`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"Numeric\"] = 1] = \"Numeric\";\n /**\n * Specifies the type of `LowerLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerLatin\"] = 2] = \"LowerLatin\";\n /**\n * Specifies the type of `LowerRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerRoman\"] = 3] = \"LowerRoman\";\n /**\n * Specifies the type of `UpperLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperLatin\"] = 4] = \"UpperLatin\";\n /**\n * Specifies the type of `UpperRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperRoman\"] = 5] = \"UpperRoman\";\n})(PdfNumberStyle || (PdfNumberStyle = {}));\n/**\n * public Enum for `PdfDockStyle`.\n * @private\n */\nexport var PdfDockStyle;\n(function (PdfDockStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Bottom\"] = 1] = \"Bottom\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Top\"] = 2] = \"Top\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Right\"] = 4] = \"Right\";\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Fill\"] = 5] = \"Fill\";\n})(PdfDockStyle || (PdfDockStyle = {}));\n/**\n * public Enum for `PdfAlignmentStyle`.\n * @private\n */\nexport var PdfAlignmentStyle;\n(function (PdfAlignmentStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `TopLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopLeft\"] = 1] = \"TopLeft\";\n /**\n * Specifies the type of `TopCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopCenter\"] = 2] = \"TopCenter\";\n /**\n * Specifies the type of `TopRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopRight\"] = 3] = \"TopRight\";\n /**\n * Specifies the type of `MiddleLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleLeft\"] = 4] = \"MiddleLeft\";\n /**\n * Specifies the type of `MiddleCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleCenter\"] = 5] = \"MiddleCenter\";\n /**\n * Specifies the type of `MiddleRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleRight\"] = 6] = \"MiddleRight\";\n /**\n * Specifies the type of `BottomLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomLeft\"] = 7] = \"BottomLeft\";\n /**\n * Specifies the type of `BottomCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomCenter\"] = 8] = \"BottomCenter\";\n /**\n * Specifies the type of `BottomRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomRight\"] = 9] = \"BottomRight\";\n})(PdfAlignmentStyle || (PdfAlignmentStyle = {}));\n/**\n * public Enum for `TemplateType`.\n * @private\n */\nexport var TemplateType;\n(function (TemplateType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n TemplateType[TemplateType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n TemplateType[TemplateType[\"Top\"] = 1] = \"Top\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n TemplateType[TemplateType[\"Bottom\"] = 2] = \"Bottom\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n TemplateType[TemplateType[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n TemplateType[TemplateType[\"Right\"] = 4] = \"Right\";\n})(TemplateType || (TemplateType = {}));\n","import { ObjectStatus } from './../input-output/enum';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './pdf-dictionary-properties';\nimport { Operators } from './pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfReference } from './../primitives/pdf-reference';\nimport { ObjectType } from './cross-table';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfCatalog } from './../document/pdf-catalog';\n/**\n * `PdfCrossTable` is responsible for intermediate level parsing\n * and savingof a PDF document.\n * @private\n */\nvar PdfCrossTable = /** @class */ (function () {\n function PdfCrossTable() {\n /**\n * The modified `objects` that should be saved.\n * @private\n */\n this.objects = new Dictionary();\n /**\n * Holds `maximal generation number` or offset to object.\n * @default 0\n * @private\n */\n this.maxGenNumIndex = 0;\n /**\n * The `number of the objects`.\n * @default 0\n * @private\n */\n this.objectCount = 0;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new PdfDictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n }\n Object.defineProperty(PdfCrossTable.prototype, \"isMerging\", {\n //Properties\n /**\n * Gets or sets if the document `is merged`.\n * @private\n */\n get: function () {\n return this.merging;\n },\n set: function (value) {\n this.merging = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"trailer\", {\n /**\n * Gets the `trailer`.\n * @private\n */\n get: function () {\n if (this.internalTrailer == null) {\n this.internalTrailer = new PdfStream();\n }\n return this.internalTrailer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"document\", {\n /**\n * Gets or sets the main `PdfDocument` class instance.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n this.items = this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"pdfObjects\", {\n /**\n * Gets the catched `PDF object` main collection.\n * @private\n */\n get: function () {\n return this.items;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"objectCollection\", {\n /**\n * Gets the `object collection`.\n * @private\n */\n get: function () {\n return this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"count\", {\n /**\n * Gets or sets the `number of the objects` within the document.\n * @private\n */\n get: function () {\n return this.objectCount;\n },\n set: function (value) {\n this.objectCount = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"nextObjNumber\", {\n /**\n * Returns `next available object number`.\n * @private\n */\n get: function () {\n this.count = this.count + 1;\n return this.count;\n },\n enumerable: true,\n configurable: true\n });\n PdfCrossTable.prototype.save = function (writer, filename) {\n this.saveHead(writer);\n var state = false;\n this.mappedReferences = null;\n this.objects.clear();\n this.markTrailerReferences();\n this.saveObjects(writer);\n var saveCount = this.count;\n var xrefPos = writer.position;\n this.registerObject(0, new PdfReference(0, -1), true);\n var prevXRef = 0;\n writer.write(Operators.xref);\n writer.write(Operators.newLine);\n this.saveSections(writer);\n this.saveTrailer(writer, this.count, prevXRef);\n this.saveTheEndess(writer, xrefPos);\n this.count = saveCount;\n for (var i = 0; i < this.objectCollection.count; ++i) {\n var oi = this.objectCollection.items(i);\n oi.object.isSaving = false;\n }\n if (typeof filename === 'undefined') {\n return writer.stream.buffer;\n }\n else {\n writer.stream.save(filename);\n }\n };\n /**\n * `Saves the endess` of the file.\n * @private\n */\n PdfCrossTable.prototype.saveTheEndess = function (writer, xrefPos) {\n writer.write(Operators.newLine + Operators.startxref + Operators.newLine);\n writer.write(xrefPos.toString() + Operators.newLine);\n writer.write(Operators.eof + Operators.newLine);\n };\n /**\n * `Saves the new trailer` dictionary.\n * @private\n */\n PdfCrossTable.prototype.saveTrailer = function (writer, count, prevXRef) {\n writer.write(Operators.trailer + Operators.newLine);\n // Save the dictionary.\n var trailer = this.trailer;\n trailer.items.setValue(this.dictionaryProperties.size, new PdfNumber(this.objectCount + 1));\n trailer = new PdfDictionary(trailer); // Make it real dictionary.\n trailer.setEncrypt(false);\n trailer.save(writer);\n };\n /**\n * `Saves the xref section`.\n * @private\n */\n PdfCrossTable.prototype.saveSections = function (writer) {\n var objectNum = 0;\n var count = 0;\n do {\n count = this.prepareSubsection(objectNum);\n this.saveSubsection(writer, objectNum, count);\n objectNum += count;\n } while (count !== 0);\n };\n /**\n * `Saves a subsection`.\n * @private\n */\n PdfCrossTable.prototype.saveSubsection = function (writer, objectNum, count) {\n if (count <= 0 || objectNum >= this.count) {\n return;\n }\n var subsectionHead = '{0} {1}{2}';\n writer.write(objectNum + ' ' + (count + 1) + Operators.newLine);\n for (var i = objectNum; i <= objectNum + count; ++i) {\n var obj = this.objects.getValue(i);\n var str = '';\n if (obj.type === ObjectType.Free) {\n str = this.getItem(obj.offset, 65535, true);\n }\n else {\n str = this.getItem(obj.offset, obj.generation, false);\n }\n writer.write(str);\n }\n };\n /**\n * Generates string for `xref table item`.\n * @private\n */\n PdfCrossTable.prototype.getItem = function (offset, genNumber, isFree) {\n var returnString = '';\n var addOffsetLength = 10 - offset.toString().length;\n if (genNumber <= 0) {\n genNumber = 0;\n }\n var addGenNumberLength = (5 - genNumber.toString().length) <= 0 ? 0 : (5 - genNumber.toString().length);\n for (var index = 0; index < addOffsetLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + offset.toString() + ' ';\n for (var index = 0; index < addGenNumberLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + genNumber.toString() + ' ';\n returnString = returnString + ((isFree) ? Operators.f : Operators.n) + Operators.newLine;\n return returnString;\n };\n /**\n * `Prepares a subsection` of the current section within the cross-reference table.\n * @private\n */\n PdfCrossTable.prototype.prepareSubsection = function (objectNum) {\n var count = 0;\n var i;\n var total = this.count;\n for (var k = 0; k < this.document.pdfObjects.count; k++) {\n var reference = this.document.pdfObjects.items(k).reference;\n var refString = reference.toString();\n var refArray = refString.split(' ');\n }\n if (objectNum >= total) {\n return count;\n }\n // search for first changed indirect object.\n for (i = objectNum; i < total; ++i) {\n break;\n }\n objectNum = i;\n // look up for all indirect objects in one subsection.\n for (; i < total; ++i) {\n ++count;\n }\n return count;\n };\n /**\n * `Marks the trailer references` being saved.\n * @private\n */\n PdfCrossTable.prototype.markTrailerReferences = function () {\n var tempArray;\n var keys = this.trailer.items.keys();\n var values = this.trailer.items.values();\n };\n /**\n * `Saves the head`.\n * @private\n */\n PdfCrossTable.prototype.saveHead = function (writer) {\n var version = this.generateFileVersion(writer.document);\n writer.write('%PDF-' + version);\n writer.write(Operators.newLine);\n };\n /**\n * Generates the `version` of the file.\n * @private\n */\n PdfCrossTable.prototype.generateFileVersion = function (document) {\n var iVersion = 4;\n var version = '1.' + iVersion.toString();\n return version;\n };\n PdfCrossTable.prototype.getReference = function (obj, bNew) {\n if (typeof bNew === 'undefined') {\n var wasNew = false;\n return this.getReference(obj, wasNew);\n }\n else {\n //code splitted for reducing lines of code exceeds 100.\n return this.getSubReference(obj, bNew);\n }\n };\n /**\n * Retrieves the `reference` of the object given.\n * @private\n */\n PdfCrossTable.prototype.getSubReference = function (obj, bNew) {\n var isNew = false;\n var wasNew;\n var reference = null;\n // if (obj.IsSaving) {\n if (this.items.count > 0 && obj.objectCollectionIndex > 0 && this.items.count > obj.objectCollectionIndex - 1) {\n var tempObj = this.document.pdfObjects.getReference(obj, wasNew);\n reference = tempObj.reference;\n wasNew = tempObj.wasNew;\n }\n if (reference == null) {\n if (obj.status === ObjectStatus.Registered) {\n wasNew = false;\n }\n else {\n wasNew = true;\n }\n }\n else {\n wasNew = false;\n }\n // need to add mapped reference code\n if (reference == null) {\n var objnumber = this.nextObjNumber;\n reference = new PdfReference(objnumber, 0);\n var found = void 0;\n if (wasNew) {\n this.document.pdfObjects.add(obj);\n this.document.pdfObjects.trySetReference(obj, reference, found);\n var tempIndex = this.document.pdfObjects.count - 1;\n var tempkey = this.document.pdfObjects.objectCollections[tempIndex].reference.objNumber;\n var tempvalue = this.document.pdfObjects.objectCollections[this.document.pdfObjects.count - 1];\n this.document.pdfObjects.mainObjectCollection.setValue(tempkey, tempvalue);\n obj.position = -1;\n }\n else {\n this.document.pdfObjects.trySetReference(obj, reference, found);\n }\n obj.objectCollectionIndex = reference.objNumber;\n obj.status = ObjectStatus.None;\n isNew = true;\n }\n bNew = isNew || this.bForceNew;\n return reference;\n };\n /**\n * `Saves all objects` in the collection.\n * @private\n */\n PdfCrossTable.prototype.saveObjects = function (writer) {\n var objectCollection = this.objectCollection;\n for (var i = 0; i < objectCollection.count; ++i) {\n var oi = objectCollection.items(i);\n var obj = oi.object;\n obj.isSaving = true;\n this.saveIndirectObject(obj, writer);\n }\n };\n /**\n * `Saves indirect object`.\n * @private\n */\n PdfCrossTable.prototype.saveIndirectObject = function (obj, writer) {\n var reference = this.getReference(obj);\n if (obj instanceof PdfCatalog) {\n this.trailer.items.setValue(this.dictionaryProperties.root, reference);\n }\n // NOTE : This is needed for correct string objects encryption.\n this.pdfDocument.currentSavingObj = reference;\n var tempArchive = false;\n tempArchive = obj.getArchive();\n var allowedType = !((obj instanceof PdfStream) || !tempArchive || (obj instanceof PdfCatalog));\n var sigFlag = false;\n this.registerObject(writer.position, reference);\n this.doSaveObject(obj, reference, writer);\n };\n /**\n * Performs `real saving` of the save object.\n * @private\n */\n PdfCrossTable.prototype.doSaveObject = function (obj, reference, writer) {\n var correctPosition = writer.length;\n writer.write(reference.objNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(reference.genNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(Operators.obj);\n writer.write(Operators.newLine);\n obj.save(writer);\n var stream = writer.stream;\n writer.write(Operators.endObj);\n writer.write(Operators.newLine);\n };\n PdfCrossTable.prototype.registerObject = function (offset, reference, free) {\n if (typeof free === 'boolean') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference, free));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n else if (typeof free === 'undefined') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n };\n /**\n * `Dereferences` the specified primitive object.\n * @private\n */\n PdfCrossTable.dereference = function (obj) {\n var rh = obj;\n if (rh != null) {\n obj = rh.object;\n }\n return obj;\n };\n return PdfCrossTable;\n}());\nexport { PdfCrossTable };\nvar RegisteredObject = /** @class */ (function () {\n function RegisteredObject(offset, reference, free) {\n if (typeof free === 'undefined') {\n var tempOffset = offset;\n this.offsetNumber = tempOffset;\n var tempReference = reference;\n this.generation = tempReference.genNumber;\n this.object = tempReference.objNumber;\n this.type = ObjectType.Normal;\n }\n else {\n var tempOffset = offset;\n var tempReference = reference;\n this.constructor(tempOffset, tempReference);\n var tempFree = free;\n this.type = ObjectType.Free;\n }\n }\n Object.defineProperty(RegisteredObject.prototype, \"objectNumber\", {\n //Properties\n /**\n * Gets the `object number`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RegisteredObject.prototype, \"offset\", {\n /**\n * Gets the `offset`.\n * @private\n */\n get: function () {\n var result;\n result = this.offsetNumber;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n return RegisteredObject;\n}());\nexport { RegisteredObject };\n","/**\n * PdfPageSize.ts class for EJ2-PDF\n */\nimport { SizeF } from './../drawing/pdf-drawing';\n/**\n * Represents information about various predefined `page sizes`.\n */\nvar PdfPageSize = /** @class */ (function () {\n //constructor\n /**\n * Initialize an instance for `PdfPageSize` class.\n * @private\n */\n function PdfPageSize() {\n // \n }\n /**\n * Specifies the size of `letter`.\n * @private\n */\n PdfPageSize.letter = new SizeF(612, 792);\n /**\n * Specifies the size of `note`.\n * @private\n */\n PdfPageSize.note = new SizeF(540, 720);\n /**\n * Specifies the size of `legal`.\n * @private\n */\n PdfPageSize.legal = new SizeF(612, 1008);\n /**\n * Specifies the size of `a0`.\n * @private\n */\n PdfPageSize.a0 = new SizeF(2380, 3368);\n /**\n * Specifies the size of `a1`.\n * @private\n */\n PdfPageSize.a1 = new SizeF(1684, 2380);\n /**\n * Specifies the size of `a2`.\n * @private\n */\n PdfPageSize.a2 = new SizeF(1190, 1684);\n /**\n * Specifies the size of `a3`.\n * @private\n */\n PdfPageSize.a3 = new SizeF(842, 1190);\n /**\n * Specifies the size of `a4`.\n * @private\n */\n PdfPageSize.a4 = new SizeF(595, 842);\n /**\n * Specifies the size of `a5`.\n * @private\n */\n PdfPageSize.a5 = new SizeF(421, 595);\n /**\n * Specifies the size of `a6`.\n * @private\n */\n PdfPageSize.a6 = new SizeF(297, 421);\n /**\n * Specifies the size of `a7`.\n * @private\n */\n PdfPageSize.a7 = new SizeF(210, 297);\n /**\n * Specifies the size of `a8`.\n * @private\n */\n PdfPageSize.a8 = new SizeF(148, 210);\n /**\n * Specifies the size of `a9`.\n * @private\n */\n PdfPageSize.a9 = new SizeF(105, 148);\n /**\n * Specifies the size of `a10`.\n * @private\n */\n PdfPageSize.a10 = new SizeF(74, 105);\n /**\n * Specifies the size of `b0`.\n * @private\n */\n PdfPageSize.b0 = new SizeF(2836, 4008);\n /**\n * Specifies the size of `b1`.\n * @private\n */\n PdfPageSize.b1 = new SizeF(2004, 2836);\n /**\n * Specifies the size of `b2`.\n * @private\n */\n PdfPageSize.b2 = new SizeF(1418, 2004);\n /**\n * Specifies the size of `b3`.\n * @private\n */\n PdfPageSize.b3 = new SizeF(1002, 1418);\n /**\n * Specifies the size of `b4`.\n * @private\n */\n PdfPageSize.b4 = new SizeF(709, 1002);\n /**\n * Specifies the size of `b5`.\n * @private\n */\n PdfPageSize.b5 = new SizeF(501, 709);\n /**\n * Specifies the size of `archE`.\n * @private\n */\n PdfPageSize.archE = new SizeF(2592, 3456);\n /**\n * Specifies the size of `archD`.\n * @private\n */\n PdfPageSize.archD = new SizeF(1728, 2592);\n /**\n * Specifies the size of `archC`.\n * @private\n */\n PdfPageSize.archC = new SizeF(1296, 1728);\n /**\n * Specifies the size of `archB`.\n * @private\n */\n PdfPageSize.archB = new SizeF(864, 1296);\n /**\n * Specifies the size of `archA`.\n * @private\n */\n PdfPageSize.archA = new SizeF(648, 864);\n /**\n * Specifies the size of `flsa`.\n * @private\n */\n PdfPageSize.flsa = new SizeF(612, 936);\n /**\n * Specifies the size of `halfLetter`.\n * @private\n */\n PdfPageSize.halfLetter = new SizeF(396, 612);\n /**\n * Specifies the size of `letter11x17`.\n * @private\n */\n PdfPageSize.letter11x17 = new SizeF(792, 1224);\n /**\n * Specifies the size of `ledger`.\n * @private\n */\n PdfPageSize.ledger = new SizeF(1224, 792);\n return PdfPageSize;\n}());\nexport { PdfPageSize };\n","/**\n * PdfMargins.ts class for EJ2-PDF\n * A class representing PDF page margins.\n */\nvar PdfMargins = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfMargins` class.\n * @private\n */\n function PdfMargins() {\n /**\n * Represents the `Default Page Margin` value.\n * @default 0.0\n * @private\n */\n this.pdfMargin = 40.0;\n this.setMargins(this.pdfMargin);\n }\n Object.defineProperty(PdfMargins.prototype, \"left\", {\n //Properties\n /**\n * Gets or sets the `left margin` size.\n * @private\n */\n get: function () {\n return this.leftMargin;\n },\n set: function (value) {\n this.leftMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"top\", {\n /**\n * Gets or sets the `top margin` size.\n * @private\n */\n get: function () {\n return this.topMargin;\n },\n set: function (value) {\n this.topMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"right\", {\n /**\n * Gets or sets the `right margin` size.\n * @private\n */\n get: function () {\n return this.rightMargin;\n },\n set: function (value) {\n this.rightMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom margin` size.\n * @private\n */\n get: function () {\n return this.bottomMargin;\n },\n set: function (value) {\n this.bottomMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"all\", {\n /**\n * Sets the `margins`.\n * @private\n */\n set: function (value) {\n this.setMargins(value);\n },\n enumerable: true,\n configurable: true\n });\n PdfMargins.prototype.setMargins = function (margin1, margin2, margin3, margin4) {\n if (typeof margin2 === 'undefined') {\n this.leftMargin = this.topMargin = this.rightMargin = this.bottomMargin = margin1;\n }\n else {\n if (typeof margin3 === 'undefined') {\n this.leftMargin = this.rightMargin = margin1;\n this.bottomMargin = this.topMargin = margin2;\n }\n else {\n this.leftMargin = margin1;\n this.topMargin = margin2;\n this.rightMargin = margin3;\n this.bottomMargin = margin4;\n }\n }\n };\n /**\n * `Clones` the object.\n * @private\n */\n PdfMargins.prototype.clone = function () {\n return this;\n };\n return PdfMargins;\n}());\nexport { PdfMargins };\n","/**\n * ImageDecoder class\n */\nimport { ByteArray } from './byte-array';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfBoolean } from './../../primitives/pdf-boolean';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\n/**\n * Specifies the image `format`.\n * @private\n */\nexport var ImageFormat;\n(function (ImageFormat) {\n /**\n * Specifies the type of `Unknown`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `Bmp`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Bmp\"] = 1] = \"Bmp\";\n /**\n * Specifies the type of `Emf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Emf\"] = 2] = \"Emf\";\n /**\n * Specifies the type of `Gif`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Gif\"] = 3] = \"Gif\";\n /**\n * Specifies the type of `Jpeg`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Jpeg\"] = 4] = \"Jpeg\";\n /**\n * Specifies the type of `Png`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Png\"] = 5] = \"Png\";\n /**\n * Specifies the type of `Wmf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Wmf\"] = 6] = \"Wmf\";\n /**\n * Specifies the type of `Icon`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Icon\"] = 7] = \"Icon\";\n})(ImageFormat || (ImageFormat = {}));\n/**\n * `Decode the image stream`.\n * @private\n */\nvar ImageDecoder = /** @class */ (function () {\n /**\n * Initialize the new instance for `image-decoder` class.\n * @private\n */\n function ImageDecoder(stream) {\n /**\n * Specifies `format` of image.\n * @hidden\n * @private\n */\n this.mFormat = ImageFormat.Unknown;\n /**\n * `Bits per component`.\n * @default 8\n * @hidden\n * @private\n */\n this.mbitsPerComponent = 8;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.mStream = stream;\n this.initialize();\n }\n Object.defineProperty(ImageDecoder.prototype, \"height\", {\n /**\n * Gets the `height` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"width\", {\n /**\n * Gets the `width` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"bitsPerComponent\", {\n /**\n * Gets `bits per component`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mbitsPerComponent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"size\", {\n /**\n * Gets the `size` of an image data.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageData\", {\n /**\n * Gets the value of an `image data`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageDataAsNumberArray\", {\n /**\n * Gets the value of an `image data as number array`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.internalBuffer.buffer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Initialize` image data and image stream.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.initialize = function () {\n if (this.mFormat === ImageFormat.Unknown && this.checkIfJpeg()) {\n this.mFormat = ImageFormat.Jpeg;\n this.parseJpegImage();\n }\n this.reset();\n this.mImageData = new ByteArray(this.mStream.count);\n this.mStream.read(this.mImageData, 0, this.mImageData.count);\n };\n /**\n * `Reset` stream position into 0.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.reset = function () {\n this.mStream.position = 0;\n };\n /**\n * `Parse` Jpeg image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.parseJpegImage = function () {\n this.reset();\n var imgData = new ByteArray(this.mStream.count);\n this.mStream.read(imgData, 0, imgData.count);\n var i = 4;\n /* tslint:disable */\n if (String.fromCharCode(imgData.getBuffer(i + 2)) === 'J' && String.fromCharCode(imgData.getBuffer(i + 3)) === 'F' && String.fromCharCode(imgData.getBuffer(i + 4)) === 'I' && String.fromCharCode(imgData.getBuffer(i + 5)) === 'F' && imgData.getBuffer(i + 6) === 0) {\n var length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n while (i + length_1 < imgData.count) {\n i += length_1;\n if (imgData.getBuffer(i + 1) === 192) {\n this.mHeight = imgData.getBuffer(i + 5) * 256 + imgData.getBuffer(i + 6);\n this.mWidth = imgData.getBuffer(i + 7) * 256 + imgData.getBuffer(i + 8);\n return;\n }\n else {\n i += 2;\n length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n }\n }\n }\n /* tslint:enable */\n };\n Object.defineProperty(ImageDecoder.prototype, \"format\", {\n /**\n * Gets the image `format`.\n * @private\n * @hidden\n */\n get: function () {\n return this.mFormat;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Checks if JPG`.\n * @private\n * @hidden\n */\n ImageDecoder.prototype.checkIfJpeg = function () {\n this.reset();\n for (var i = 0; i < ImageDecoder.mJpegHeader.length; i++) {\n if (ImageDecoder.mJpegHeader[i] !== this.mStream.readByte(i)) {\n return false;\n }\n this.mStream.position++;\n }\n return true;\n };\n /**\n * Return image `dictionary`.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getImageDictionary = function () {\n if (this.mFormat === ImageFormat.Jpeg) {\n var tempArrayBuffer = this.imageData.internalBuffer.length;\n this.imageStream = new PdfStream();\n this.imageStream.isImage = true;\n var tempString = '';\n var decodedString = '';\n for (var i = 0; i < this.imageDataAsNumberArray.byteLength; i++) {\n tempString += String.fromCharCode(null, this.mStream.readByte(i));\n }\n for (var i = 0; i < tempString.length; i++) {\n if (i % 2 !== 0) {\n decodedString += tempString[i];\n }\n }\n this.imageStream.data = [decodedString];\n this.imageStream.compress = false;\n this.imageStream.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.xObject));\n this.imageStream.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.image));\n this.imageStream.items.setValue(this.dictionaryProperties.width, new PdfNumber(this.width));\n this.imageStream.items.setValue(this.dictionaryProperties.height, new PdfNumber(this.height));\n this.imageStream.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n this.imageStream.items.setValue(this.dictionaryProperties.filter, new PdfName(this.dictionaryProperties.dctdecode));\n this.imageStream.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(this.getColorSpace()));\n this.imageStream.items.setValue(this.dictionaryProperties.decodeParms, this.getDecodeParams());\n return this.imageStream;\n }\n else {\n return this.imageStream;\n }\n };\n /**\n * Return `colorSpace` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getColorSpace = function () {\n return this.dictionaryProperties.deviceRgb;\n };\n /**\n * Return `decode parameters` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getDecodeParams = function () {\n var decodeParams = new PdfDictionary();\n decodeParams.items.setValue(this.dictionaryProperties.columns, new PdfNumber(this.width));\n decodeParams.items.setValue(this.dictionaryProperties.blackIs1, new PdfBoolean(true));\n decodeParams.items.setValue(this.dictionaryProperties.k, new PdfNumber(-1));\n decodeParams.items.setValue(this.dictionaryProperties.predictor, new PdfNumber(15));\n decodeParams.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n return decodeParams;\n };\n /**\n * Number array for `png header`.\n * @hidden\n * @private\n */\n ImageDecoder.mPngHeader = [137, 80, 78, 71, 13, 10, 26, 10];\n /**\n * Number Array for `jpeg header`.\n * @hidden\n * @private\n */\n ImageDecoder.mJpegHeader = [255, 216];\n /**\n * Number array for `gif header`.\n * @hidden\n * @private\n */\n ImageDecoder.GIF_HEADER = 'G,I,F,8';\n /**\n * Number array for `bmp header.`\n * @hidden\n * @private\n */\n ImageDecoder.BMP_HEADER = 'B,M';\n return ImageDecoder;\n}());\nexport { ImageDecoder };\n","/**\n * PdfPageSettings.ts class for EJ2-PDF\n */\nimport { SizeF, PointF } from './../drawing/pdf-drawing';\nimport { PdfPageSize } from './pdf-page-size';\nimport { PdfPageRotateAngle, PdfPageOrientation } from './enum';\nimport { PdfMargins } from './../graphics/pdf-margins';\n/**\n * The class provides various `setting` related with PDF pages.\n */\nvar PdfPageSettings = /** @class */ (function () {\n function PdfPageSettings(margins) {\n //Fields\n /**\n * The page `margins`.\n * @private\n */\n this.pageMargins = new PdfMargins();\n /**\n * The page `size`.\n * @default a4\n * @private\n */\n this.pageSize = PdfPageSize.a4;\n /**\n * The page `rotation angle`.\n * @default PdfPageRotateAngle.RotateAngle0\n * @private\n */\n this.rotateAngle = PdfPageRotateAngle.RotateAngle0;\n /**\n * The page `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.pageOrientation = PdfPageOrientation.Portrait;\n /**\n * The page `origin`.\n * @default 0,0\n * @private\n */\n this.pageOrigin = new PointF(0, 0);\n /**\n * Checks the Whether the `rotation` is applied or not.\n * @default false\n * @private\n */\n this.isRotation = false;\n if (typeof margins === 'number') {\n this.pageMargins.setMargins(margins);\n }\n }\n Object.defineProperty(PdfPageSettings.prototype, \"size\", {\n //Properties\n /**\n * Gets or sets the `size` of the page.\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.setSize(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"orientation\", {\n /**\n * Gets or sets the page `orientation`.\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (orientation) {\n if (this.pageOrientation !== orientation) {\n this.pageOrientation = orientation;\n this.updateSize(orientation);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"margins\", {\n /**\n * Gets or sets the `margins` of the page.\n * @private\n */\n get: function () {\n return this.pageMargins;\n },\n set: function (value) {\n this.pageMargins = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.width;\n },\n set: function (value) {\n this.pageSize.width = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.height;\n },\n set: function (value) {\n this.pageSize.height = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"origin\", {\n /**\n * Gets or sets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"rotate\", {\n /**\n * Gets or sets the number of degrees by which the page should be `rotated` clockwise when displayed or printed.\n * @private\n */\n get: function () {\n return this.rotateAngle;\n },\n set: function (value) {\n this.rotateAngle = value;\n this.isRotation = true;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Update page size` depending on orientation.\n * @private\n */\n PdfPageSettings.prototype.updateSize = function (orientation) {\n var min = Math.min(this.pageSize.width, this.pageSize.height);\n var max = Math.max(this.pageSize.width, this.pageSize.height);\n switch (orientation) {\n case PdfPageOrientation.Portrait:\n this.pageSize = new SizeF(min, max);\n break;\n case PdfPageOrientation.Landscape:\n this.pageSize = new SizeF(max, min);\n break;\n }\n };\n /**\n * Creates a `clone` of the object.\n * @private\n */\n PdfPageSettings.prototype.clone = function () {\n var settings = this;\n settings.pageMargins = this.pageMargins.clone();\n // if (GetTransition() != null)\n // {\n // settings.Transition = (PdfPageTransition)Transition.clone();\n // }\n return settings;\n };\n /**\n * Returns `size`, shrinked by the margins.\n * @private\n */\n PdfPageSettings.prototype.getActualSize = function () {\n var width = this.width - (this.margins.left + this.margins.right);\n var height = this.height - (this.margins.top + this.margins.bottom);\n var size = new SizeF(width, height);\n return size;\n };\n /**\n * Sets `size` to the page aaccording to the orientation.\n * @private\n */\n PdfPageSettings.prototype.setSize = function (size) {\n var min = Math.min(size.width, size.height);\n var max = Math.max(size.width, size.height);\n if (this.orientation === PdfPageOrientation.Portrait) {\n this.pageSize = new SizeF(min, max);\n }\n else {\n this.pageSize = new SizeF(max, min);\n }\n };\n return PdfPageSettings;\n}());\nexport { PdfPageSettings };\n","import { Operators } from './pdf-operators';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * Helper class to `write PDF graphic streams` easily.\n * @private\n */\nvar PdfStreamWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfStreamWriter` class.\n * @private\n */\n function PdfStreamWriter(stream) {\n if (stream == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.stream = stream;\n }\n //Implementation\n /**\n * `Clear` the stream.\n * @public\n */\n PdfStreamWriter.prototype.clear = function () {\n this.stream.clearStream();\n };\n PdfStreamWriter.prototype.setGraphicsState = function (dictionaryName) {\n if (dictionaryName instanceof PdfName) {\n this.stream.write(dictionaryName.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n else {\n this.stream.write(Operators.slash);\n this.stream.write(dictionaryName);\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n };\n /**\n * `Executes the XObject`.\n * @private\n */\n PdfStreamWriter.prototype.executeObject = function (name) {\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.paintXObject);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes path object`.\n * @private\n */\n PdfStreamWriter.prototype.closePath = function () {\n this.writeOperator(Operators.closePath);\n };\n /**\n * `Clips the path`.\n * @private\n */\n PdfStreamWriter.prototype.clipPath = function (useEvenOddRule) {\n this.stream.write(Operators.clipPath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n }\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.endPath);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes, then fills and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.closeFillStrokePath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills and strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.fillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.fillStroke);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills path`.\n * @private\n */\n PdfStreamWriter.prototype.fillPath = function (useEvenOddRule) {\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Ends the path`.\n * @private\n */\n PdfStreamWriter.prototype.endPath = function () {\n this.writeOperator(Operators.n);\n };\n /**\n * `Closes and fills the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillPath = function (useEvenOddRule) {\n this.writeOperator(Operators.closePath);\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Closes and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeStrokePath = function () {\n this.writeOperator(Operators.closeStrokePath);\n };\n /**\n * `Sets the text scaling`.\n * @private\n */\n PdfStreamWriter.prototype.setTextScaling = function (textScaling) {\n this.stream.write(PdfNumber.floatToString(textScaling));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextScaling);\n };\n /**\n * `Strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.strokePath = function () {\n this.writeOperator(Operators.stroke);\n };\n /**\n * `Restores` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.restoreGraphicsState = function () {\n this.writeOperator(Operators.restoreState);\n };\n /**\n * `Saves` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.saveGraphicsState = function () {\n this.writeOperator(Operators.saveState);\n };\n PdfStreamWriter.prototype.startNextLine = function (arg1, arg2) {\n if (typeof arg1 === 'undefined') {\n this.writeOperator(Operators.goToNextLine);\n }\n else if (arg1 instanceof PointF) {\n this.writePoint(arg1);\n this.writeOperator(Operators.setCoords);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.setCoords);\n }\n };\n /**\n * Shows the `text`.\n * @private\n */\n PdfStreamWriter.prototype.showText = function (text) {\n this.checkTextParam(text);\n this.writeText(text);\n this.writeOperator(Operators.setText);\n };\n /**\n * Sets `text leading`.\n * @private\n */\n PdfStreamWriter.prototype.setLeading = function (leading) {\n this.stream.write(PdfNumber.floatToString(leading));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextLeading);\n };\n /**\n * `Begins the path`.\n * @private\n */\n PdfStreamWriter.prototype.beginPath = function (x, y) {\n this.writePoint(x, y);\n this.writeOperator(Operators.beginPath);\n };\n /**\n * `Begins text`.\n * @private\n */\n PdfStreamWriter.prototype.beginText = function () {\n this.writeOperator(Operators.beginText);\n };\n /**\n * `Ends text`.\n * @private\n */\n PdfStreamWriter.prototype.endText = function () {\n this.writeOperator(Operators.endText);\n };\n PdfStreamWriter.prototype.appendRectangle = function (arg1, arg2, arg3, arg4) {\n if (arg1 instanceof RectangleF) {\n this.appendRectangle(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writePoint(arg3, arg4);\n this.writeOperator(Operators.appendRectangle);\n }\n };\n PdfStreamWriter.prototype.appendLineSegment = function (arg1, arg2) {\n if (arg1 instanceof PointF) {\n this.appendLineSegment(arg1.x, arg1.y);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.appendLineSegment);\n }\n };\n /**\n * Sets the `text rendering mode`.\n * @private\n */\n PdfStreamWriter.prototype.setTextRenderingMode = function (renderingMode) {\n this.stream.write(renderingMode.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setRenderingMode);\n };\n /**\n * Sets the `character spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setCharacterSpacing = function (charSpacing) {\n this.stream.write(PdfNumber.floatToString(charSpacing));\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.setCharacterSpace);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `word spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setWordSpacing = function (wordSpacing) {\n this.stream.write(PdfNumber.floatToString(wordSpacing));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setWordSpace);\n };\n PdfStreamWriter.prototype.showNextLineText = function (arg1, arg2) {\n if (arg1 instanceof PdfString) {\n this.checkTextParam(arg1);\n this.writeText(arg1);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n else {\n this.checkTextParam(arg1);\n this.writeText(arg1, arg2);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n };\n PdfStreamWriter.prototype.setColorSpace = function (arg1, arg2) {\n if (arg1 instanceof PdfName && typeof arg2 === 'boolean') {\n var temparg1 = arg1;\n var temparg2 = arg2;\n // if (temparg1 == null) {\n // throw new Error('ArgumentNullException:name');\n // }\n var op = (temparg2) ? Operators.selectcolorspaceforstroking : Operators.selectcolorspacefornonstroking;\n this.stream.write(temparg1.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(op);\n this.stream.write(Operators.newLine);\n }\n else {\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.setColorSpace(new PdfName(temparg1), temparg2);\n }\n };\n /**\n * Modifies current `transformation matrix`.\n * @private\n */\n PdfStreamWriter.prototype.modifyCtm = function (matrix) {\n if (matrix == null) {\n throw new Error('ArgumentNullException:matrix');\n }\n this.stream.write(matrix.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.modifyCtm);\n };\n PdfStreamWriter.prototype.setFont = function (font, name, size) {\n if (typeof name === 'string') {\n this.setFont(font, new PdfName(name), size);\n }\n else {\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(PdfNumber.floatToString(size));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setFont);\n }\n };\n /**\n * `Writes the operator`.\n * @private\n */\n PdfStreamWriter.prototype.writeOperator = function (opcode) {\n this.stream.write(opcode);\n this.stream.write(Operators.newLine);\n };\n PdfStreamWriter.prototype.checkTextParam = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (typeof text === 'string' && text === '') {\n throw new Error('ArgumentException:The text can not be an empty string, text');\n }\n };\n PdfStreamWriter.prototype.writeText = function (arg1, arg2) {\n if ((arg1 instanceof PdfString) && (typeof arg2 === 'undefined')) {\n this.stream.write(arg1.pdfEncode());\n }\n else {\n var start = void 0;\n var end = void 0;\n if (arg2) {\n start = PdfString.hexStringMark[0];\n end = PdfString.hexStringMark[1];\n }\n else {\n start = PdfString.stringMark[0];\n end = PdfString.stringMark[1];\n }\n this.stream.write(start);\n this.stream.write(arg1);\n this.stream.write(end);\n }\n };\n PdfStreamWriter.prototype.writePoint = function (arg1, arg2) {\n if ((arg1 instanceof PointF) && (typeof arg2 === 'undefined')) {\n this.writePoint(arg1.x, arg1.y);\n }\n else {\n var temparg1 = arg1;\n this.stream.write(PdfNumber.floatToString(temparg1));\n this.stream.write(Operators.whiteSpace);\n // NOTE: Change Y co-ordinate because we shifted co-ordinate system only.\n arg2 = this.updateY(arg2);\n this.stream.write(PdfNumber.floatToString(arg2));\n this.stream.write(Operators.whiteSpace);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfStreamWriter.prototype.updateY = function (arg) {\n return -arg;\n };\n /**\n * `Writes string` to the file.\n * @private\n */\n PdfStreamWriter.prototype.write = function (string) {\n var builder = '';\n builder += string;\n builder += Operators.newLine;\n this.writeOperator(builder);\n };\n /**\n * `Writes comment` to the file.\n * @private\n */\n PdfStreamWriter.prototype.writeComment = function (comment) {\n if (comment != null && comment.length > 0) {\n var builder = '';\n builder += Operators.comment;\n builder += Operators.whiteSpace;\n builder += comment;\n //builder.Append( Operators.NewLine );\n this.writeOperator(builder);\n }\n else {\n throw new Error('Invalid comment');\n }\n };\n /**\n * Sets the `color and space`.\n * @private\n */\n PdfStreamWriter.prototype.setColorAndSpace = function (color, colorSpace, forStroking) {\n if (!color.isEmpty) {\n // bool test = color is PdfExtendedColor;\n this.stream.write(color.toString(colorSpace, forStroking));\n this.stream.write(Operators.newLine);\n }\n };\n // public setLineDashPattern(pattern : number[], patternOffset : number) : void\n // {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n // }\n // private setLineDashPatternHelper(pattern : PdfArray, patternOffset : PdfNumber) : void\n // {\n // pattern.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // patternOffset.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // this.writeOperator(Operators.setDashPattern);\n // }\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPattern = function (pattern, patternOffset) {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n this.setLineDashPatternHelper(pattern, patternOffset);\n };\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPatternHelper = function (pattern, patternOffset) {\n var tempPattern = '[';\n if (pattern.length > 1) {\n for (var index = 0; index < pattern.length; index++) {\n if (index === pattern.length - 1) {\n tempPattern += pattern[index].toString();\n }\n else {\n tempPattern += pattern[index].toString() + ' ';\n }\n }\n }\n tempPattern += '] ';\n tempPattern += patternOffset.toString();\n tempPattern += ' ' + Operators.setDashPattern;\n this.stream.write(tempPattern);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `miter limit`.\n * @private\n */\n PdfStreamWriter.prototype.setMiterLimit = function (miterLimit) {\n this.stream.write(PdfNumber.floatToString(miterLimit));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setMiterLimit);\n };\n /**\n * Sets the `width of the line`.\n * @private\n */\n PdfStreamWriter.prototype.setLineWidth = function (width) {\n this.stream.write(PdfNumber.floatToString(width));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineWidth);\n };\n /**\n * Sets the `line cap`.\n * @private\n */\n PdfStreamWriter.prototype.setLineCap = function (lineCapStyle) {\n this.stream.write((lineCapStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineCapStyle);\n };\n /**\n * Sets the `line join`.\n * @private\n */\n PdfStreamWriter.prototype.setLineJoin = function (lineJoinStyle) {\n this.stream.write((lineJoinStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineJoinStyle);\n };\n Object.defineProperty(PdfStreamWriter.prototype, \"position\", {\n //IPdfWriter members\n /**\n * Gets or sets the current `position` within the stream.\n * @private\n */\n get: function () {\n return this.stream.position;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"length\", {\n /**\n * Gets `stream length`.\n * @private\n */\n get: function () {\n var returnValue = 0;\n if (this.stream.data.length !== 0 && this.stream.data.length !== -1) {\n for (var index = 0; index < this.stream.data.length; index++) {\n returnValue += this.stream.data[index].length;\n }\n }\n return returnValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"document\", {\n /**\n * Gets and Sets the `current document`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStreamWriter;\n}());\nexport { PdfStreamWriter };\n","/**\n * PdfPen.ts class for EJ2-PDF\n */\nimport { PdfColor } from './pdf-color';\nimport { PdfDashStyle, PdfColorSpace } from './enum';\nimport { PdfBrush } from './brushes/pdf-brush';\n/**\n * `PdfPen` class defining settings for drawing operations, that determines the color,\n * width, and style of the drawing elements.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPen = /** @class */ (function () {\n function PdfPen(arg1, arg2) {\n //Fields\n /**\n * Specifies the `color of the pen`.\n * @default new PdfColor()\n * @private\n */\n this.pdfColor = new PdfColor(0, 0, 0);\n /**\n * Specifies the `dash offset of the pen`.\n * @default 0\n * @private\n */\n this.dashOffsetValue = 0;\n /**\n * Specifies the `dash pattern of the pen`.\n * @default [0]\n * @private\n */\n this.penDashPattern = [0];\n /**\n * Specifies the `dash style of the pen`.\n * @default Solid\n * @private\n */\n this.pdfDashStyle = PdfDashStyle.Solid;\n /**\n * Specifies the `line cap of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineCap = 0;\n /**\n * Specifies the `line join of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineJoin = 0;\n /**\n * Specifies the `width of the pen`.\n * @default 1.0\n * @private\n */\n this.penWidth = 1.0;\n /**\n * Specifies the `mitter limit of the pen`.\n * @default 0.0\n * @private\n */\n this.internalMiterLimit = 0.0;\n /**\n * Stores the `colorspace` value.\n * @default Rgb\n * @private\n */\n this.colorSpace = PdfColorSpace.Rgb;\n if (typeof arg2 === 'number') {\n this.constructor(arg1);\n this.width = arg2;\n }\n else if (typeof arg2 === 'undefined' && arg1 instanceof PdfBrush) {\n this.setBrush(arg1);\n }\n else if (typeof arg2 === 'undefined' && arg1 instanceof PdfColor) {\n this.color = arg1;\n }\n }\n Object.defineProperty(PdfPen.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color of the pen`.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashOffset\", {\n /**\n * Gets or sets the `dash offset of the pen`.\n * @private\n */\n get: function () {\n if (typeof this.dashOffsetValue === 'undefined' || this.dashOffsetValue == null) {\n return 0;\n }\n else {\n return this.dashOffsetValue;\n }\n },\n set: function (value) {\n this.dashOffsetValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashPattern\", {\n /**\n * Gets or sets the `dash pattern of the pen`.\n * @private\n */\n get: function () {\n return this.penDashPattern;\n },\n set: function (value) {\n this.penDashPattern = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashStyle\", {\n /**\n * Gets or sets the `dash style of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen style\n * pen.dashStyle = PdfDashStyle.DashDot;\n * // get pen style\n * let style : PdfDashStyle = pen.dashStyle;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfDashStyle;\n },\n set: function (value) {\n if (this.pdfDashStyle !== value) {\n this.pdfDashStyle = value;\n switch (this.pdfDashStyle) {\n case PdfDashStyle.Custom:\n break;\n case PdfDashStyle.Dash:\n this.penDashPattern = [3, 1];\n break;\n case PdfDashStyle.Dot:\n this.penDashPattern = [1, 1];\n break;\n case PdfDashStyle.DashDot:\n this.penDashPattern = [3, 1, 1, 1];\n break;\n case PdfDashStyle.DashDotDot:\n this.penDashPattern = [3, 1, 1, 1, 1, 1];\n break;\n case PdfDashStyle.Solid:\n break;\n default:\n this.pdfDashStyle = PdfDashStyle.Solid;\n this.penDashPattern = [0];\n break;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineCap\", {\n /**\n * Gets or sets the `line cap of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineCap;\n },\n set: function (value) {\n this.pdfLineCap = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineJoin\", {\n /**\n * Gets or sets the `line join style of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineJoin;\n },\n set: function (value) {\n this.pdfLineJoin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"miterLimit\", {\n /**\n * Gets or sets the `miter limit`.\n * @private\n */\n get: function () {\n return this.internalMiterLimit;\n },\n set: function (value) {\n this.internalMiterLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"width\", {\n /**\n * Gets or sets the `width of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen width\n * pen.width = 2;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.penWidth;\n },\n set: function (value) {\n this.penWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Helper\n /**\n * `Clones` this instance of PdfPen class.\n * @private\n */\n PdfPen.prototype.clone = function () {\n var pen = this;\n return pen;\n };\n /**\n * `Sets the brush`.\n * @private\n */\n PdfPen.prototype.setBrush = function (brush) {\n var sBrush = brush;\n this.color = sBrush.color;\n this.pdfBrush = sBrush;\n };\n /**\n * `Monitors the changes`.\n * @private\n */\n PdfPen.prototype.monitorChanges = function (currentPen, streamWriter, getResources, saveState, currentColorSpace, matrix) {\n var diff = false;\n saveState = true;\n if (currentPen == null) {\n diff = true;\n }\n diff = this.dashControl(currentPen, saveState, streamWriter);\n streamWriter.setLineWidth(this.width);\n streamWriter.setLineJoin(this.lineJoin);\n streamWriter.setLineCap(this.lineCap);\n var miterLimit = this.miterLimit;\n if (miterLimit > 0) {\n streamWriter.setMiterLimit(miterLimit);\n diff = true;\n }\n var brush = this.pdfBrush;\n streamWriter.setColorAndSpace(this.color, currentColorSpace, true);\n diff = true;\n return diff;\n };\n /**\n * `Controls the dash style` and behaviour of each line.\n * @private\n */\n PdfPen.prototype.dashControl = function (pen, saveState, streamWriter) {\n saveState = true;\n var lineWidth = this.width;\n var pattern = this.getPattern();\n streamWriter.setLineDashPattern(pattern, this.dashOffset * lineWidth);\n return saveState;\n };\n /**\n * `Gets the pattern` of PdfPen.\n * @private\n */\n PdfPen.prototype.getPattern = function () {\n var pattern = this.dashPattern;\n for (var i = 0; i < pattern.length; ++i) {\n pattern[i] *= this.width;\n }\n return pattern;\n };\n return PdfPen;\n}());\nexport { PdfPen };\n","/**\n * PdfTransformationMatrix.ts class for EJ2-PDF\n */\nimport { PointF } from './../drawing/pdf-drawing';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * Class for representing Root `transformation matrix`.\n */\nvar PdfTransformationMatrix = /** @class */ (function () {\n function PdfTransformationMatrix(value) {\n /**\n * Value for `angle converting`.\n * @default 180.0 / Math.PI\n * @private\n */\n this.radDegFactor = 180.0 / Math.PI;\n if (typeof value === 'undefined') {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, 1.00, 0.00, 0.00);\n }\n else {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, -1.00, 0.00, 0.00);\n }\n }\n Object.defineProperty(PdfTransformationMatrix.prototype, \"matrix\", {\n // Properties\n /**\n * Gets or sets the `internal matrix object`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n set: function (value) {\n this.transformationMatrix = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.translate = function (offsetX, offsetY) {\n this.transformationMatrix.translate(offsetX, offsetY);\n };\n /**\n * `Scales` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.scale = function (scaleX, scaleY) {\n this.transformationMatrix.elements[0] = scaleX;\n this.transformationMatrix.elements[3] = scaleY;\n };\n /**\n * `Rotates` coordinate system in counterclockwise direction.\n * @private\n */\n PdfTransformationMatrix.prototype.rotate = function (angle) {\n //Convert from degree to radian \n angle = (angle * Math.PI) / 180;\n //Rotation \n this.transformationMatrix.elements[0] = Math.cos(angle);\n this.transformationMatrix.elements[1] = Math.sin(angle);\n this.transformationMatrix.elements[2] = -Math.sin(angle);\n this.transformationMatrix.elements[3] = Math.cos(angle);\n };\n // Overrides\n /**\n * Gets `PDF representation`.\n * @private\n */\n PdfTransformationMatrix.prototype.toString = function () {\n var builder = '';\n var whitespace = ' ';\n for (var i = 0, len = this.transformationMatrix.elements.length; i < len; i++) {\n var temp = this.matrix.elements[i];\n builder += PdfNumber.floatToString(this.transformationMatrix.elements[i]);\n builder += whitespace;\n }\n return builder;\n };\n // Implementation\n /**\n * `Multiplies` matrices (changes coordinate system.)\n * @private\n */\n PdfTransformationMatrix.prototype.multiply = function (matrix) {\n this.transformationMatrix.multiply(matrix.matrix);\n };\n /**\n * Converts `degrees to radians`.\n * @private\n */\n PdfTransformationMatrix.degreesToRadians = function (degreesX) {\n return this.degRadFactor * degreesX;\n };\n /**\n * Converts `radians to degrees`.\n * @private\n */\n PdfTransformationMatrix.prototype.radiansToDegrees = function (radians) {\n return this.radDegFactor * radians;\n };\n /**\n * `Clones` this instance of PdfTransformationMatrix.\n * @private\n */\n PdfTransformationMatrix.prototype.clone = function () {\n return this;\n };\n // Constants\n /**\n * Value for `angle converting`.\n * @default Math.PI / 180.0\n * @private\n */\n PdfTransformationMatrix.degRadFactor = Math.PI / 180.0;\n return PdfTransformationMatrix;\n}());\nexport { PdfTransformationMatrix };\nvar Matrix = /** @class */ (function () {\n function Matrix(arg1, arg2, arg3, arg4, arg5, arg6) {\n if (typeof arg1 === 'undefined') {\n this.metrixElements = [];\n }\n else if (typeof arg1 === 'number') {\n this.constructor();\n this.metrixElements.push(arg1);\n this.metrixElements.push(arg2);\n this.metrixElements.push(arg3);\n this.metrixElements.push(arg4);\n this.metrixElements.push(arg5);\n this.metrixElements.push(arg6);\n }\n else {\n this.metrixElements = arg1;\n }\n }\n Object.defineProperty(Matrix.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `elements`.\n * @private\n */\n get: function () {\n return this.metrixElements;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetX\", {\n /**\n * Gets the off set `X`.\n * @private\n */\n get: function () {\n return this.metrixElements[4];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetY\", {\n /**\n * Gets the off set `Y`.\n * @private\n */\n get: function () {\n return this.metrixElements[5];\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n Matrix.prototype.translate = function (offsetX, offsetY) {\n this.metrixElements[4] = offsetX;\n this.metrixElements[5] = offsetY;\n };\n /**\n * `Translates` the specified offset X.\n * @private\n */\n Matrix.prototype.transform = function (point) {\n var x = point.x;\n var y = point.y;\n var x2 = x * this.elements[0] + y * this.elements[2] + this.offsetX;\n var y2 = x * this.elements[1] + y * this.elements[3] + this.offsetY;\n return new PointF(x2, y2);\n };\n /**\n * `Multiplies matrices` (changes coordinate system.)\n * @private\n */\n Matrix.prototype.multiply = function (matrix) {\n var tempMatrix = [];\n tempMatrix.push(this.elements[0] * matrix.elements[0] + this.elements[1] * matrix.elements[2]);\n tempMatrix[1] = (this.elements[0] * matrix.elements[1] + this.elements[1] * matrix.elements[3]);\n tempMatrix[2] = (this.elements[2] * matrix.elements[0] + this.elements[3] * matrix.elements[2]);\n tempMatrix[3] = (this.elements[2] * matrix.elements[1] + this.elements[3] * matrix.elements[3]);\n tempMatrix[4] = (this.offsetX * matrix.elements[0] + this.offsetY * matrix.elements[2] + matrix.offsetX);\n tempMatrix[5] = (this.offsetX * matrix.elements[1] + this.offsetY * matrix.elements[3] + matrix.offsetY);\n for (var i = 0; i < tempMatrix.length; i++) {\n this.elements[i] = tempMatrix[i];\n }\n };\n // IDisposable Members\n /**\n * `Dispose` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.dispose = function () {\n this.metrixElements = null;\n };\n // ICloneable Members\n /**\n * `Clones` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.clone = function () {\n var m = new Matrix(this.metrixElements);\n return m;\n };\n return Matrix;\n}());\nexport { Matrix };\n","/**\n * `constants.ts` class for EJ2-PDF\n * @private\n */\nvar ProcedureSets = /** @class */ (function () {\n function ProcedureSets() {\n /**\n * Specifies the `PDF` procedure set.\n * @private\n */\n this.pdf = 'PDF';\n /**\n * Specifies the `Text` procedure set.\n * @private\n */\n this.text = 'Text';\n /**\n * Specifies the `ImageB` procedure set.\n * @private\n */\n this.imageB = 'ImageB';\n /**\n * Specifies the `ImageC` procedure set.\n * @private\n */\n this.imageC = 'ImageC';\n /**\n * Specifies the `ImageI` procedure set.\n * @private\n */\n this.imageI = 'ImageI';\n }\n return ProcedureSets;\n}());\nexport { ProcedureSets };\n","/**\n * Dictionary class\n * @private\n * @hidden\n */\nvar TemporaryDictionary = /** @class */ (function () {\n function TemporaryDictionary() {\n /**\n * @hidden\n * @private\n */\n this.mKeys = [];\n /**\n * @hidden\n * @private\n */\n this.mValues = [];\n }\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.size = function () {\n return this.mKeys.length;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.add = function (key, value) {\n if (key === undefined || key === null || value === undefined || value === null) {\n throw new ReferenceError('Provided key or value is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n return 1;\n }\n else {\n throw new RangeError('An item with the same key has already been added.');\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.keys = function () {\n return this.mKeys;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.values = function () {\n return this.mValues;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.getValue = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n return this.mValues[index];\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.setValue = function (key, value) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n }\n else {\n this.mValues[index] = value;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.remove = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.mKeys.splice(index, 1);\n this.mValues.splice(index, 1);\n return true;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.containsKey = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n return false;\n }\n return true;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.clear = function () {\n this.mKeys = [];\n this.mValues = [];\n };\n return TemporaryDictionary;\n}());\nexport { TemporaryDictionary };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents a simple `transparency`.\n * @private\n */\nvar PdfTransparency = /** @class */ (function () {\n // Properties\n // /**\n // * Gets the `stroke` operation alpha value.\n // * @private\n // */\n // public get stroke() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.CA);\n // return result;\n // }\n // /**\n // * Gets the `fill` operation alpha value.\n // * @private\n // */\n // public get fill() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.ca);\n // return result;\n // }\n // /**\n // * Gets the `blend mode`.\n // * @private\n // */\n // public get mode() : PdfBlendMode {\n // let result : string = this.getName(this.dictionaryProperties.ca);\n // return PdfBlendMode.Normal;\n // }\n // Constructors\n /**\n * Initializes a new instance of the `Transparency` class.\n * @private\n */\n function PdfTransparency(stroke, fill, mode) {\n // Fields\n /**\n * Internal variable to store `dictionary`.\n * @default new PdfDictionary()\n * @private\n */\n this.dictionary = new PdfDictionary();\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new DictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.dictionary.items.setValue(this.dictionaryProperties.CA, new PdfNumber(stroke));\n this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(fill));\n this.dictionary.items.setValue(this.dictionaryProperties.BM, new PdfName(mode.toString()));\n }\n Object.defineProperty(PdfTransparency.prototype, \"element\", {\n // // Implementation\n // /**\n // * Gets the `number value`.\n // * @private\n // */\n // private getNumber(keyName : string) : number {\n // let result : number = 0.0;\n // let numb : PdfNumber = this.dictionary.items.getValue(keyName) as PdfNumber;\n // result = numb.intValue;\n // return result;\n // }\n // /**\n // * Gets the `name value`.\n // * @private\n // */\n // private getName(keyName : string) : string {\n // let result : string = null;\n // let name : PdfName = this.dictionary.items.getValue(keyName) as PdfName;\n // result = name.value;\n // return result;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTransparency;\n}());\nexport { PdfTransparency };\n","/**\n * Represent a `collection of automatic fields information`.\n * @private\n */\nvar PdfAutomaticFieldInfoCollection = /** @class */ (function () {\n /**\n * Initializes a new instance of the 'PdfPageNumberFieldInfoCollection' class.\n * @private\n */\n function PdfAutomaticFieldInfoCollection() {\n /**\n * Internal variable to store instance of `pageNumberFields` class.\n * @private\n */\n this.automaticFieldsInformation = [];\n //\n }\n Object.defineProperty(PdfAutomaticFieldInfoCollection.prototype, \"automaticFields\", {\n /**\n * Gets the `page number fields collection`.\n * @private\n */\n get: function () {\n return this.automaticFieldsInformation;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /// Adds the specified field info.\n /**\n * Add page number field into collection.\n * @private\n */\n PdfAutomaticFieldInfoCollection.prototype.add = function (fieldInfo) {\n return this.automaticFields.push(fieldInfo);\n };\n return PdfAutomaticFieldInfoCollection;\n}());\nexport { PdfAutomaticFieldInfoCollection };\n","/**\n * Represents a base class for all page graphics elements.\n */\nvar PdfGraphicsElement = /** @class */ (function () {\n // Constructors\n function PdfGraphicsElement() {\n //\n }\n /**\n * `Draws` the page number field.\n * @public\n */\n PdfGraphicsElement.prototype.drawHelper = function (graphics, x, y) {\n var bNeedSave = (x !== 0 || y !== 0);\n var gState = null;\n // Translate co-ordinates.\n if (bNeedSave) {\n // Save state.\n gState = graphics.save();\n graphics.translateTransform(x, y);\n }\n this.drawInternal(graphics);\n if (bNeedSave) {\n // Restore state.\n graphics.restore(gState);\n }\n };\n return PdfGraphicsElement;\n}());\nexport { PdfGraphicsElement };\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})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfDocument } from './../pdf-document';\nimport { PdfGraphicsElement } from './../../graphics/figures/base/graphics-element';\nimport { PdfAutomaticFieldInfo } from './automatic-field-info';\n/**\n * Represents a fields which is calculated before the document saves.\n */\nvar PdfAutomaticField = /** @class */ (function (_super) {\n __extends(PdfAutomaticField, _super);\n // Constructors\n function PdfAutomaticField() {\n var _this = _super.call(this) || this;\n // Fields\n _this.internalBounds = new RectangleF(0, 0, 0, 0);\n _this.internalTemplateSize = new SizeF(0, 0);\n return _this;\n }\n Object.defineProperty(PdfAutomaticField.prototype, \"bounds\", {\n // Properties\n get: function () {\n return this.internalBounds;\n },\n set: function (value) {\n this.internalBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"size\", {\n get: function () {\n return new SizeF(this.bounds.width, this.bounds.height);\n },\n set: function (value) {\n this.bounds.width = value.width;\n this.bounds.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"location\", {\n get: function () {\n return new PointF(this.bounds.x, this.bounds.y);\n },\n set: function (value) {\n this.bounds.x = value.x;\n this.bounds.y = value.y;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"font\", {\n get: function () {\n return this.internalFont;\n },\n set: function (value) {\n this.internalFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"brush\", {\n get: function () {\n return this.internalBrush;\n },\n set: function (value) {\n this.internalBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"pen\", {\n get: function () {\n return this.internalPen;\n },\n set: function (value) {\n this.internalPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"stringFormat\", {\n get: function () {\n return this.internalStringFormat;\n },\n set: function (value) {\n this.internalStringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfAutomaticField.prototype.performDrawHelper = function (graphics, location, scalingX, scalingY) {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n var text = this.getValue(graphics);\n this.internalTemplateSize = this.getFont().measureString(text, this.size, this.stringFormat);\n }\n };\n PdfAutomaticField.prototype.draw = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n var location_1 = new PointF(0, 0);\n this.draw(arg1, location_1);\n }\n else if (arg2 instanceof PointF) {\n this.draw(arg1, arg2.x, arg2.y);\n }\n else {\n this.drawHelper(arg1, arg2, arg3);\n var info = new PdfAutomaticFieldInfo(this, new PointF(arg2, arg3));\n arg1.automaticFields.add(info);\n }\n };\n PdfAutomaticField.prototype.getSize = function () {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n return this.internalTemplateSize;\n }\n else {\n return this.size;\n }\n };\n PdfAutomaticField.prototype.drawInternal = function (graphics) {\n //\n };\n /* tslint:disable */\n PdfAutomaticField.prototype.getBrush = function () {\n return (typeof this.internalBrush === 'undefined' || this.internalBrush == null) ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.internalBrush;\n };\n PdfAutomaticField.prototype.getFont = function () {\n return (typeof this.internalFont === 'undefined' || this.internalFont == null) ? PdfDocument.defaultFont : this.internalFont;\n };\n /* tslint:enable */\n PdfAutomaticField.prototype.getPageFromGraphics = function (graphics) {\n if (typeof graphics.page !== 'undefined' && graphics.page !== null) {\n var page = graphics.page;\n return page;\n }\n else {\n var page = graphics.currentPage;\n return page;\n }\n };\n return PdfAutomaticField;\n}(PdfGraphicsElement));\nexport { PdfAutomaticField };\n","/**\n * PdfAutomaticFieldInfo.ts class for EJ2-PDF\n * @private\n */\nimport { PointF } from './../../drawing/pdf-drawing';\nimport { PdfAutomaticField } from './automatic-field';\n/**\n * Represents information about the automatic field.\n * @private\n */\nvar PdfAutomaticFieldInfo = /** @class */ (function () {\n function PdfAutomaticFieldInfo(field, location, scaleX, scaleY) {\n // Fields\n /**\n * Internal variable to store location of the field.\n * @private\n */\n this.pageNumberFieldLocation = new PointF();\n /**\n * Internal variable to store field.\n * @private\n */\n this.pageNumberField = null;\n /**\n * Internal variable to store x scaling factor.\n * @private\n */\n this.scaleX = 1;\n /**\n * Internal variable to store y scaling factor.\n * @private\n */\n this.scaleY = 1;\n if (typeof location === 'undefined' && field instanceof PdfAutomaticFieldInfo) {\n this.pageNumberField = field.field;\n this.pageNumberFieldLocation = field.location;\n this.scaleX = field.scalingX;\n this.scaleY = field.scalingY;\n }\n else if (typeof scaleX === 'undefined' && location instanceof PointF && field instanceof PdfAutomaticField) {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n }\n else {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n this.scaleX = scaleX;\n this.scaleY = scaleY;\n }\n }\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"location\", {\n /* tslint:enable */\n // Properties\n /**\n * Gets or sets the location.\n * @private\n */\n get: function () {\n return this.pageNumberFieldLocation;\n },\n set: function (value) {\n this.pageNumberFieldLocation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"field\", {\n /**\n * Gets or sets the field.\n * @private\n */\n get: function () {\n return this.pageNumberField;\n },\n set: function (value) {\n this.pageNumberField = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingX\", {\n /**\n * Gets or sets the scaling X factor.\n * @private\n */\n get: function () {\n return this.scaleX;\n },\n set: function (value) {\n this.scaleX = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingY\", {\n /**\n * Gets or sets the scaling Y factor.\n * @private\n */\n get: function () {\n return this.scaleY;\n },\n set: function (value) {\n this.scaleY = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAutomaticFieldInfo;\n}());\nexport { PdfAutomaticFieldInfo };\n","/**\n * ByteArray class\n * Used to keep information about image stream as byte array.\n * @private\n */\nvar ByteArray = /** @class */ (function () {\n /**\n * Initialize the new instance for `byte-array` class\n * @hidden\n * @private\n */\n function ByteArray(length) {\n /**\n * Current stream `position`.\n * @default 0\n * @private\n */\n this.mPosition = 0;\n this.buffer = new Uint8Array(length);\n this.dataView = new DataView(this.buffer.buffer);\n }\n Object.defineProperty(ByteArray.prototype, \"position\", {\n /**\n * Gets and Sets a current `position` of byte array.\n * @hidden\n * @private\n */\n get: function () {\n return this.mPosition;\n },\n set: function (value) {\n this.mPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Read` from current stream position.\n * @default 0\n * @hidden\n * @private\n */\n ByteArray.prototype.read = function (buffer, offset, count) {\n for (var index = offset; index < count; index++) {\n var position = this.position;\n buffer.buffer[index] = this.readByte(position);\n this.position++;\n }\n };\n /**\n * @hidden\n */\n ByteArray.prototype.getBuffer = function (index) {\n return this.buffer[index];\n };\n /**\n * @hidden\n */\n ByteArray.prototype.writeFromBase64String = function (base64) {\n var arr = this.encodedString(base64);\n this.buffer = arr;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n var dataUrlPrefix = 'data:';\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = keyStr.indexOf(input.charAt(i++));\n enc2 = keyStr.indexOf(input.charAt(i++));\n enc3 = keyStr.indexOf(input.charAt(i++));\n enc4 = keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n output[resultIndex++] = chr2;\n output[resultIndex++] = chr3;\n }\n return output;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.readByte = function (offset) {\n return (this.buffer[offset]);\n };\n Object.defineProperty(ByteArray.prototype, \"internalBuffer\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ByteArray.prototype, \"count\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer.byteLength;\n },\n enumerable: true,\n configurable: true\n });\n return ByteArray;\n}());\nexport { ByteArray };\n","/**\n * `PdfBoolean` class is used to perform boolean related primitive operations.\n * @private\n */\nvar PdfBoolean = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfBoolean` class.\n * @private\n */\n function PdfBoolean(value) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.currentPosition = -1;\n this.value = value;\n }\n Object.defineProperty(PdfBoolean.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.objectStatus;\n },\n set: function (value) {\n this.objectStatus = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.saving;\n },\n set: function (value) {\n this.saving = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index;\n },\n set: function (value) {\n this.index = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfBoolean.prototype.save = function (writer) {\n writer.write(this.boolToStr(this.value));\n };\n /**\n * Creates a `copy of PdfBoolean`.\n * @private\n */\n PdfBoolean.prototype.clone = function (crossTable) {\n var newNumber = new PdfBoolean(this.value);\n return newNumber;\n };\n // Implementation\n /**\n * Converts `boolean to string` - 0/1 'true'/'false'.\n * @private\n */\n PdfBoolean.prototype.boolToStr = function (value) {\n return value ? 'true' : 'false';\n };\n return PdfBoolean;\n}());\nexport { PdfBoolean };\n","/**\n * public Enum for `PdfLayoutType`.\n * @private\n */\nexport var PdfLayoutType;\n(function (PdfLayoutType) {\n /**\n * Specifies the type of `Paginate`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"Paginate\"] = 0] = \"Paginate\";\n /**\n * Specifies the type of `OnePage`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"OnePage\"] = 1] = \"OnePage\";\n})(PdfLayoutType || (PdfLayoutType = {}));\n/**\n * public Enum for `PdfLayoutBreakType`.\n * @private\n */\nexport var PdfLayoutBreakType;\n(function (PdfLayoutBreakType) {\n /**\n * Specifies the type of `FitPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitPage\"] = 0] = \"FitPage\";\n /**\n * Specifies the type of `FitElement`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitElement\"] = 1] = \"FitElement\";\n /**\n * Specifies the type of `FitColumnsToPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitColumnsToPage\"] = 2] = \"FitColumnsToPage\";\n})(PdfLayoutBreakType || (PdfLayoutBreakType = {}));\n","/**\n * Used to perform `convertion between pixels and points`.\n * @private\n */\nvar PdfUnitConverter = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `UnitConvertor` class with DPI value.\n * @private\n */\n function PdfUnitConverter(dpi) {\n this.updateProportionsHelper(dpi);\n }\n /**\n * `Converts` the value, from one graphics unit to another graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertUnits = function (value, from, to) {\n return this.convertFromPixels(this.convertToPixels(value, from), to);\n };\n /**\n * Converts the value `to pixel` from specified graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertToPixels = function (value, from) {\n var index = from;\n var result = (value * this.proportions[index]);\n return result;\n };\n /**\n * Converts value, to specified graphics unit `from Pixel`.\n * @private\n */\n PdfUnitConverter.prototype.convertFromPixels = function (value, to) {\n var index = to;\n var result = (value / this.proportions[index]);\n return result;\n };\n /**\n * `Update proportions` matrix according to Graphics settings.\n * @private\n */\n PdfUnitConverter.prototype.updateProportionsHelper = function (pixelPerInch) {\n this.proportions = [\n pixelPerInch / 2.54,\n pixelPerInch / 6.0,\n 1,\n pixelPerInch / 72.0,\n pixelPerInch,\n pixelPerInch / 300.0,\n pixelPerInch / 25.4 // Millimeter\n ];\n };\n //Fields\n /**\n * Indicates default `horizontal resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.horizontalResolution = 96;\n /**\n * Indicates default `vertical resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.verticalResolution = 96;\n return PdfUnitConverter;\n}());\nexport { PdfUnitConverter };\n","import { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfGraphicsUnit } from './../enum';\nimport { PdfUnitConverter } from './../unit-convertor';\n/**\n * `PdfImage` class represents the base class for images and provides functionality for the 'PdfBitmap' class.\n * @private\n */\nvar PdfImage = /** @class */ (function () {\n function PdfImage() {\n }\n Object.defineProperty(PdfImage.prototype, \"width\", {\n /**\n * Gets and Sets the `width` of an image.\n * @private\n */\n get: function () {\n return this.imageWidth;\n },\n set: function (value) {\n this.imageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"height\", {\n /**\n * Gets and Sets the `height` of an image.\n * @private\n */\n get: function () {\n return this.imageHeight;\n },\n set: function (value) {\n this.imageHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"size\", {\n /**\n * Gets or sets the size of the image.\n * @private\n */\n set: function (value) {\n this.width = value.width;\n this.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"physicalDimension\", {\n /**\n * Gets the `physical dimension` of an image.\n * @private\n */\n get: function () {\n this.imagePhysicalDimension = this.getPointSize(this.width, this.height, this.horizontalResolution, this.verticalResolution);\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"element\", {\n // /**\n // * Gets the `image stream as string`.\n // * @private\n // */\n // public static fromString(string : string) : PdfImage {\n // let image : PdfImage = new PdfBitmap(string);\n // return image;\n // }\n /**\n * Gets the `element` image stream.\n * @private\n */\n get: function () {\n return this.imageStream;\n },\n enumerable: true,\n configurable: true\n });\n PdfImage.prototype.getPointSize = function (width, height, horizontalResolution, verticalResolution) {\n if (typeof horizontalResolution === 'undefined') {\n var dpiX = PdfUnitConverter.horizontalResolution;\n var dpiY = PdfUnitConverter.verticalResolution;\n var size = this.getPointSize(width, height, dpiX, dpiY);\n return size;\n }\n else {\n var ucX = new PdfUnitConverter(horizontalResolution);\n var ucY = new PdfUnitConverter(verticalResolution);\n var ptWidth = ucX.convertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var ptHeight = ucY.convertUnits(height, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var size = new SizeF(ptWidth, ptHeight);\n return size;\n }\n };\n return PdfImage;\n}());\nexport { PdfImage };\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})();\n/**\n * PdfBitmap.ts class for EJ2-PDF\n */\nimport { ImageDecoder } from './../../graphics/images/image-decoder';\nimport { ByteArray } from './../../graphics/images/byte-array';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfImage } from './pdf-image';\n/**\n * The 'PdfBitmap' contains methods and properties to handle the Bitmap images.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfBitmap = /** @class */ (function (_super) {\n __extends(PdfBitmap, _super);\n /**\n * Create an instance for `PdfBitmap` class.\n * @param encodedString Base64 string of an image.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * //\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * //\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n function PdfBitmap(encodedString) {\n var _this = _super.call(this) || this;\n //Fields\n /**\n * Specifies the `status` of an image.\n * @default true.\n * @hidden\n * @private\n */\n _this.imageStatus = true;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n _this.loadImage(encodedString);\n return _this;\n }\n /**\n * `Load image`.\n * @hidden\n * @private\n */\n PdfBitmap.prototype.loadImage = function (encodedString) {\n var task = this.initializeAsync(encodedString);\n };\n /**\n * `Initialize` image parameters.\n * @private\n */\n PdfBitmap.prototype.initializeAsync = function (encodedString) {\n var byteArray = new ByteArray(encodedString.length);\n byteArray.writeFromBase64String(encodedString);\n this.decoder = new ImageDecoder(byteArray);\n this.height = this.decoder.height;\n this.width = this.decoder.width;\n // FrameCount = BitmapImageDecoder.FrameCount;\n this.bitsPerComponent = this.decoder.bitsPerComponent;\n };\n /**\n * `Saves` the image into stream.\n * @private\n */\n PdfBitmap.prototype.save = function () {\n this.imageStatus = true;\n this.imageStream = this.decoder.getImageDictionary();\n };\n return PdfBitmap;\n}(PdfImage));\nexport { PdfBitmap };\n","/**\n * TtfTableInfo.ts class for EJ2-PDF\n */\nvar TtfTableInfo = /** @class */ (function () {\n function TtfTableInfo() {\n }\n Object.defineProperty(TtfTableInfo.prototype, \"empty\", {\n //Properties\n /**\n * Gets a value indicating whether this table is empty.\n * @private\n */\n get: function () {\n var empty = (this.offset === this.length && this.length === this.checksum && this.checksum === 0);\n return empty;\n },\n enumerable: true,\n configurable: true\n });\n return TtfTableInfo;\n}());\nexport { TtfTableInfo };\n","var TtfNameTable = /** @class */ (function () {\n function TtfNameTable() {\n }\n return TtfNameTable;\n}());\nexport { TtfNameTable };\n","/**\n * TtfNameRecord.ts class for EJ2-PDF\n */\nvar TtfNameRecord = /** @class */ (function () {\n function TtfNameRecord() {\n }\n return TtfNameRecord;\n}());\nexport { TtfNameRecord };\n","/**\n * TtfHeadTable.ts class for EJ2-PDF\n */\nvar TtfHeadTable = /** @class */ (function () {\n function TtfHeadTable() {\n }\n return TtfHeadTable;\n}());\nexport { TtfHeadTable };\n","var TtfMetrics = /** @class */ (function () {\n function TtfMetrics() {\n }\n Object.defineProperty(TtfMetrics.prototype, \"isItalic\", {\n //Properties\n /**\n * Gets a value indicating whether this instance is italic.\n */\n get: function () {\n return ((this.macStyle & 2) !== 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfMetrics.prototype, \"isBold\", {\n /**\n * Gets a value indicating whether this instance is bold.\n */\n get: function () {\n return ((this.macStyle & 1) !== 0);\n },\n enumerable: true,\n configurable: true\n });\n return TtfMetrics;\n}());\nexport { TtfMetrics };\n","/**\n * TtfHorizontalHeaderTable.ts class for EJ2-PDF\n */\nvar TtfHorizontalHeaderTable = /** @class */ (function () {\n function TtfHorizontalHeaderTable() {\n }\n return TtfHorizontalHeaderTable;\n}());\nexport { TtfHorizontalHeaderTable };\n","/**\n * TtfOS2Table.ts class for EJ2-PDF\n * The OS/2 table consists of a set of metrics that are required by Windows and OS/2.\n */\nvar TtfOS2Table = /** @class */ (function () {\n function TtfOS2Table() {\n }\n return TtfOS2Table;\n}());\nexport { TtfOS2Table };\n","/**\n * TtfPostTable.ts class for EJ2-PDF\n */\nvar TtfPostTable = /** @class */ (function () {\n function TtfPostTable() {\n }\n return TtfPostTable;\n}());\nexport { TtfPostTable };\n","/**\n * TtfLongHorMetric.ts class for EJ2-PDF\n */\nvar TtfLongHorMetric = /** @class */ (function () {\n function TtfLongHorMetric() {\n }\n return TtfLongHorMetric;\n}());\nexport { TtfLongHorMetric };\n","/**\n * TtfCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfCmapSubTable = /** @class */ (function () {\n function TtfCmapSubTable() {\n }\n return TtfCmapSubTable;\n}());\nexport { TtfCmapSubTable };\n","/**\n * TtfCmapTable.ts class for EJ2-PDF\n */\nvar TtfCmapTable = /** @class */ (function () {\n function TtfCmapTable() {\n }\n return TtfCmapTable;\n}());\nexport { TtfCmapTable };\n","/**\n * TtfGlyphInfo.ts class for EJ2-PDF\n */\nvar TtfGlyphInfo = /** @class */ (function () {\n function TtfGlyphInfo() {\n }\n Object.defineProperty(TtfGlyphInfo.prototype, \"empty\", {\n //Properties\n /**\n * Gets a value indicating whether this TtfGlyphInfo is empty.\n */\n get: function () {\n var empty = (this.index === this.width && this.width === this.charCode && this.charCode === 0);\n return empty;\n },\n enumerable: true,\n configurable: true\n });\n //IComparable implementation\n /**\n * Compares two WidthDescriptor objects.\n */\n TtfGlyphInfo.prototype.compareTo = function (obj) {\n var glyph = obj;\n return this.index - glyph.index;\n };\n return TtfGlyphInfo;\n}());\nexport { TtfGlyphInfo };\n","/**\n * TtfLocaTable.ts class for EJ2-PDF\n */\nvar TtfLocaTable = /** @class */ (function () {\n function TtfLocaTable() {\n }\n return TtfLocaTable;\n}());\nexport { TtfLocaTable };\n","/**\n * TtfAppleCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfAppleCmapSubTable = /** @class */ (function () {\n function TtfAppleCmapSubTable() {\n }\n return TtfAppleCmapSubTable;\n}());\nexport { TtfAppleCmapSubTable };\n","/**\n * TtfMicrosoftCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfMicrosoftCmapSubTable = /** @class */ (function () {\n function TtfMicrosoftCmapSubTable() {\n }\n return TtfMicrosoftCmapSubTable;\n}());\nexport { TtfMicrosoftCmapSubTable };\n","/**\n * TtfTrimmedCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfTrimmedCmapSubTable = /** @class */ (function () {\n function TtfTrimmedCmapSubTable() {\n }\n return TtfTrimmedCmapSubTable;\n}());\nexport { TtfTrimmedCmapSubTable };\n","/**\n * TtfLocaTable.ts class for EJ2-PDF\n */\nvar TtfGlyphHeader = /** @class */ (function () {\n function TtfGlyphHeader() {\n }\n return TtfGlyphHeader;\n}());\nexport { TtfGlyphHeader };\n","/**\n * Writes data in BigEndian order.\n */\nvar BigEndianWriter = /** @class */ (function () {\n //Constructors\n /**\n * Creates a new writer.\n */\n function BigEndianWriter(capacity) {\n //Constants\n /**\n * Size of Int32 type.\n */\n this.int32Size = 4;\n /**\n * Size of Int16 type.\n */\n this.int16Size = 2;\n /**\n * Size of long type.\n */\n this.int64Size = 8;\n this.bufferLength = capacity;\n this.buffer = [];\n }\n Object.defineProperty(BigEndianWriter.prototype, \"data\", {\n //Properties\n /**\n * Gets data written to the writer.\n */\n get: function () {\n if (this.buffer.length < this.bufferLength) {\n var length_1 = this.bufferLength - this.buffer.length;\n for (var i = 0; i < length_1; i++) {\n this.buffer.push(0);\n }\n }\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BigEndianWriter.prototype, \"position\", {\n /// \n /// Gets position of the internal buffer.\n /// \n get: function () {\n if (this.internalPosition === undefined || this.internalPosition === null) {\n this.internalPosition = 0;\n }\n return this.internalPosition;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Writes short value.\n */\n BigEndianWriter.prototype.writeShort = function (value) {\n var bytes = [((value & 0x0000ff00) >> 8), value & 0x000000ff];\n this.flush(bytes);\n };\n /**\n * Writes int value.\n */\n BigEndianWriter.prototype.writeInt = function (value) {\n var i1 = (value & 0xff000000) >> 24;\n i1 = i1 < 0 ? 256 + i1 : i1;\n var i2 = (value & 0x00ff0000) >> 16;\n i2 = i2 < 0 ? 256 + i2 : i2;\n var i3 = (value & 0x0000ff00) >> 8;\n i3 = i3 < 0 ? 256 + i3 : i3;\n var i4 = value & 0x000000ff;\n i4 = i4 < 0 ? 256 + i4 : i4;\n var bytes = [(value & 0xff000000) >> 24, (value & 0x00ff0000) >> 16, (value & 0x0000ff00) >> 8, value & 0x000000ff];\n this.flush(bytes);\n };\n /**\n * Writes u int value.\n */\n BigEndianWriter.prototype.writeUInt = function (value) {\n var buff = [(value & 0xff000000) >> 24, (value & 0x00ff0000) >> 16, (value & 0x0000ff00) >> 8, value & 0x000000ff];\n this.flush(buff);\n };\n /**\n * Writes string value.\n */\n BigEndianWriter.prototype.writeString = function (value) {\n if (value == null) {\n throw new Error('Argument Null Exception : value');\n }\n var bytes = [];\n for (var i = 0; i < value.length; i++) {\n bytes.push(value.charCodeAt(i));\n }\n this.flush(bytes);\n };\n /**\n * Writes byte[] value.\n */\n BigEndianWriter.prototype.writeBytes = function (value) {\n this.flush(value);\n };\n // //Implementation\n BigEndianWriter.prototype.flush = function (buff) {\n if (buff === null) {\n throw new Error('Argument Null Exception : buff');\n }\n var result = [];\n for (var i = 0; i < this.position; i++) {\n result.push(this.buffer[i]);\n }\n for (var i = 0; i < buff.length; i++) {\n result.push(buff[i]);\n }\n for (var i = this.position; i < this.buffer.length; i++) {\n result.push(this.buffer[i]);\n }\n this.buffer = result;\n this.internalPosition += buff.length;\n };\n return BigEndianWriter;\n}());\nexport { BigEndianWriter };\n","/**\n * TtfReader.ts class for EJ2-PDF\n */\nimport { TtfTableInfo } from './ttf-table-info';\nimport { Dictionary } from './../../collections/dictionary';\nimport { TtfNameTable } from './ttf-name-table';\nimport { TtfNameRecord } from './ttf-name-record';\nimport { TtfHeadTable } from './ttf-head-table';\nimport { TtfMetrics } from './ttf-metrics';\nimport { TtfHorizontalHeaderTable } from './ttf-horizontal-header-table';\nimport { TtfOS2Table } from './ttf-OS2-Table';\nimport { TtfPostTable } from './ttf-post-table';\nimport { TtfLongHorMetric } from './ttf-long-hor-metric';\nimport { TtfCmapSubTable } from './ttf-cmap-sub-table';\nimport { TtfCmapTable } from './ttf-cmap-table';\nimport { TtfGlyphInfo } from './ttf-glyph-info';\nimport { TtfLocaTable } from './ttf-loca-table';\nimport { TtfAppleCmapSubTable } from './ttf-apple-cmap-sub-table';\nimport { TtfMicrosoftCmapSubTable } from './ttf-microsoft-cmap-sub-table';\nimport { TtfTrimmedCmapSubTable } from './ttf-trimmed-cmap-sub-table';\nimport { TtfGlyphHeader } from './ttf-glyph-header';\nimport { Rectangle } from './../../drawing/pdf-drawing';\nimport { StringTokenizer } from './string-tokenizer';\nimport { TtfCmapFormat, TtfCmapEncoding, TtfPlatformID } from './enum';\nimport { TtfMicrosoftEncodingID, TtfMacintoshEncodingID, TtfCompositeGlyphFlags } from './enum';\nimport { BigEndianWriter } from './../../input-output/big-endian-writer';\nvar TtfReader = /** @class */ (function () {\n //Constructors\n function TtfReader(fontData) {\n this.int32Size = 4;\n this.isTtcFont = false;\n this.isMacTtf = false;\n this.metricsName = '';\n this.isMacTTF = false;\n this.missedGlyphs = 0;\n this.tableNames = ['cvt ', 'fpgm', 'glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp', 'prep'];\n this.entrySelectors = [0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4];\n this.fontData = fontData;\n this.initialize();\n }\n Object.defineProperty(TtfReader.prototype, \"macintosh\", {\n //Properties\n /**\n * Gets glyphs for Macintosh or Symbol fonts (char - key, glyph - value).\n */\n get: function () {\n if (this.macintoshDictionary === null || this.macintoshDictionary === undefined) {\n this.macintoshDictionary = new Dictionary();\n }\n return this.macintoshDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"microsoft\", {\n /**\n * Gets glyphs for Microsoft or Symbol fonts (char - key, glyph - value).\n */\n get: function () {\n if (this.microsoftDictionary === null || this.microsoftDictionary === undefined) {\n this.microsoftDictionary = new Dictionary();\n }\n return this.microsoftDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"macintoshGlyphs\", {\n /**\n * Gets glyphs for Macintosh or Symbol fonts (glyph index - key, glyph - value).\n */\n get: function () {\n if (this.internalMacintoshGlyphs === null || this.internalMacintoshGlyphs === undefined) {\n this.internalMacintoshGlyphs = new Dictionary();\n }\n return this.internalMacintoshGlyphs;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"microsoftGlyphs\", {\n /**\n * Gets glyphs for Microsoft Unicode fonts (glyph index - key, glyph - value).\n */\n get: function () {\n if (this.internalMicrosoftGlyphs === null || this.internalMicrosoftGlyphs === undefined) {\n this.internalMicrosoftGlyphs = new Dictionary();\n }\n return this.internalMicrosoftGlyphs;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n TtfReader.prototype.initialize = function () {\n if (this.metrics === undefined) {\n this.metrics = new TtfMetrics();\n }\n this.readFontDictionary();\n var nameTable = this.readNameTable();\n var headTable = this.readHeadTable();\n this.initializeFontName(nameTable);\n this.metrics.macStyle = headTable.macStyle;\n };\n TtfReader.prototype.readFontDictionary = function () {\n this.offset = 0;\n var version = this.checkPreambula();\n //this.offset += 4;\n var numTables = this.readInt16(this.offset);\n var searchRange = this.readInt16(this.offset);\n var entrySelector = this.readInt16(this.offset);\n var rangeShift = this.readInt16(this.offset);\n if (this.tableDirectory === undefined) {\n this.tableDirectory = new Dictionary();\n }\n for (var i = 0; i < numTables; ++i) {\n var table = new TtfTableInfo();\n var tableKey = this.readString(this.int32Size);\n table.checksum = this.readInt32(this.offset);\n table.offset = this.readInt32(this.offset);\n table.length = this.readInt32(this.offset);\n this.tableDirectory.setValue(tableKey, table);\n }\n this.lowestPosition = this.offset;\n if (!this.isTtcFont) {\n this.fixOffsets();\n }\n };\n TtfReader.prototype.fixOffsets = function () {\n var minOffset = Number.MAX_VALUE;\n // Search for a smallest offset and compare it with the lowest position found.\n var tableKeys = this.tableDirectory.keys();\n for (var i = 0; i < tableKeys.length; i++) {\n var value = this.tableDirectory.getValue(tableKeys[i]);\n var offset = value.offset;\n if (minOffset > offset) {\n minOffset = offset;\n if (minOffset <= this.lowestPosition) {\n break;\n }\n }\n }\n var shift = minOffset - this.lowestPosition;\n if (shift !== 0) {\n var table = new Dictionary();\n for (var i = 0; i < tableKeys.length; i++) {\n var value = this.tableDirectory.getValue(tableKeys[i]);\n value.offset -= shift;\n table.setValue(tableKeys[i], value);\n }\n this.tableDirectory = table;\n }\n };\n TtfReader.prototype.checkPreambula = function () {\n var version = this.readInt32(this.offset);\n this.isMacTtf = (version === 0x74727565) ? true : false;\n if (version !== 0x10000 && version !== 0x74727565 && version !== 0x4f54544f) {\n this.isTtcFont = true;\n this.offset = 0;\n var fontTag = this.readString(4);\n if (fontTag !== 'ttcf') {\n throw new Error('Can not read TTF font data');\n }\n //skip 4\n this.offset += 4;\n var ttcIdentificationNumber = this.readInt32(this.offset);\n if (ttcIdentificationNumber < 0) {\n throw new Error('Can not read TTF font data');\n }\n this.offset = this.readInt32(this.offset);\n version = this.readInt32(this.offset);\n }\n return version;\n };\n TtfReader.prototype.readNameTable = function () {\n var tableInfo = this.getTable('name');\n this.offset = tableInfo.offset;\n var table = new TtfNameTable();\n table.formatSelector = this.readUInt16(this.offset);\n table.recordsCount = this.readUInt16(this.offset);\n table.offset = this.readUInt16(this.offset);\n table.nameRecords = [];\n var recordSize = 12;\n var position = this.offset;\n for (var i = 0; i < table.recordsCount; i++) {\n this.offset = position;\n var record = new TtfNameRecord();\n record.platformID = this.readUInt16(this.offset);\n record.encodingID = this.readUInt16(this.offset);\n record.languageID = this.readUInt16(this.offset);\n record.nameID = this.readUInt16(this.offset);\n record.length = this.readUInt16(this.offset);\n record.offset = this.readUInt16(this.offset);\n this.offset = tableInfo.offset + table.offset + record.offset;\n var unicode = (record.platformID === 0 || record.platformID === 3);\n record.name = this.readString(record.length, unicode);\n table.nameRecords[i] = record;\n position += recordSize;\n }\n return table;\n };\n TtfReader.prototype.readHeadTable = function () {\n var tableInfo = this.getTable('head');\n this.offset = tableInfo.offset;\n var table = new TtfHeadTable();\n table.version = this.readFixed(this.offset);\n table.fontRevision = this.readFixed(this.offset);\n table.checkSumAdjustment = this.readUInt32(this.offset);\n table.magicNumber = this.readUInt32(this.offset);\n table.flags = this.readUInt16(this.offset);\n table.unitsPerEm = this.readUInt16(this.offset);\n table.created = this.readInt64(this.offset);\n table.modified = this.readInt64(this.offset);\n table.xMin = this.readInt16(this.offset);\n table.yMin = this.readInt16(this.offset);\n table.xMax = this.readInt16(this.offset);\n table.yMax = this.readInt16(this.offset);\n table.macStyle = this.readUInt16(this.offset);\n table.lowestReadableSize = this.readUInt16(this.offset);\n table.fontDirectionHint = this.readInt16(this.offset);\n table.indexToLocalFormat = this.readInt16(this.offset);\n table.glyphDataFormat = this.readInt16(this.offset);\n return table;\n };\n TtfReader.prototype.readHorizontalHeaderTable = function () {\n var tableInfo = this.getTable('hhea');\n this.offset = tableInfo.offset;\n var table = new TtfHorizontalHeaderTable();\n table.version = this.readFixed(this.offset);\n table.ascender = this.readInt16(this.offset);\n table.descender = this.readInt16(this.offset);\n table.lineGap = this.readInt16(this.offset);\n table.advanceWidthMax = this.readUInt16(this.offset);\n table.minLeftSideBearing = this.readInt16(this.offset);\n table.minRightSideBearing = this.readInt16(this.offset);\n table.xMaxExtent = this.readInt16(this.offset);\n table.caretSlopeRise = this.readInt16(this.offset);\n table.caretSlopeRun = this.readInt16(this.offset);\n //skip 2 * 5\n this.offset += 10;\n table.metricDataFormat = this.readInt16(this.offset);\n table.numberOfHMetrics = this.readUInt16(this.offset);\n return table;\n };\n TtfReader.prototype.readOS2Table = function () {\n var tableInfo = this.getTable('OS/2');\n this.offset = tableInfo.offset;\n var table = new TtfOS2Table();\n table.version = this.readUInt16(this.offset);\n table.xAvgCharWidth = this.readInt16(this.offset);\n table.usWeightClass = this.readUInt16(this.offset);\n table.usWidthClass = this.readUInt16(this.offset);\n table.fsType = this.readInt16(this.offset);\n table.ySubscriptXSize = this.readInt16(this.offset);\n table.ySubscriptYSize = this.readInt16(this.offset);\n table.ySubscriptXOffset = this.readInt16(this.offset);\n table.ySubscriptYOffset = this.readInt16(this.offset);\n table.ySuperscriptXSize = this.readInt16(this.offset);\n table.ySuperscriptYSize = this.readInt16(this.offset);\n table.ySuperscriptXOffset = this.readInt16(this.offset);\n table.ySuperscriptYOffset = this.readInt16(this.offset);\n table.yStrikeoutSize = this.readInt16(this.offset);\n table.yStrikeoutPosition = this.readInt16(this.offset);\n table.sFamilyClass = this.readInt16(this.offset);\n table.panose = this.readBytes(10);\n table.ulUnicodeRange1 = this.readUInt32(this.offset);\n table.ulUnicodeRange2 = this.readUInt32(this.offset);\n table.ulUnicodeRange3 = this.readUInt32(this.offset);\n table.ulUnicodeRange4 = this.readUInt32(this.offset);\n table.vendorIdentifier = this.readBytes(4);\n table.fsSelection = this.readUInt16(this.offset);\n table.usFirstCharIndex = this.readUInt16(this.offset);\n table.usLastCharIndex = this.readUInt16(this.offset);\n table.sTypoAscender = this.readInt16(this.offset);\n table.sTypoDescender = this.readInt16(this.offset);\n table.sTypoLineGap = this.readInt16(this.offset);\n table.usWinAscent = this.readUInt16(this.offset);\n table.usWinDescent = this.readUInt16(this.offset);\n table.ulCodePageRange1 = this.readUInt32(this.offset);\n table.ulCodePageRange2 = this.readUInt32(this.offset);\n if (table.version > 1) {\n table.sxHeight = this.readInt16(this.offset);\n table.sCapHeight = this.readInt16(this.offset);\n table.usDefaultChar = this.readUInt16(this.offset);\n table.usBreakChar = this.readUInt16(this.offset);\n table.usMaxContext = this.readUInt16(this.offset);\n }\n else {\n table.sxHeight = 0;\n table.sCapHeight = 0;\n table.usDefaultChar = 0;\n table.usBreakChar = 0;\n table.usMaxContext = 0;\n }\n return table;\n };\n TtfReader.prototype.readPostTable = function () {\n var tableInfo = this.getTable('post');\n this.offset = tableInfo.offset;\n var table = new TtfPostTable();\n table.formatType = this.readFixed(this.offset);\n table.italicAngle = this.readFixed(this.offset);\n table.underlinePosition = this.readInt16(this.offset);\n table.underlineThickness = this.readInt16(this.offset);\n table.isFixedPitch = this.readUInt32(this.offset);\n table.minType42 = this.readUInt32(this.offset);\n table.maxType42 = this.readUInt32(this.offset);\n table.minType1 = this.readUInt32(this.offset);\n table.maxType1 = this.readUInt32(this.offset);\n return table;\n };\n /**\n * Reads Width of the glyphs.\n */\n TtfReader.prototype.readWidthTable = function (glyphCount, unitsPerEm) {\n var tableInfo = this.getTable('hmtx');\n this.offset = tableInfo.offset;\n var width = [];\n for (var i = 0; i < glyphCount; i++) {\n var glyph = new TtfLongHorMetric();\n glyph.advanceWidth = this.readUInt16(this.offset);\n glyph.lsb = this.readInt16(this.offset);\n var glyphWidth = glyph.advanceWidth * 1000 / unitsPerEm;\n width.push(Math.floor(glyphWidth));\n }\n return width;\n };\n /**\n * Reads the cmap table.\n */\n TtfReader.prototype.readCmapTable = function () {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset;\n var table = new TtfCmapTable();\n table.version = this.readUInt16(this.offset);\n table.tablesCount = this.readUInt16(this.offset);\n var position = this.offset;\n var subTables = [];\n for (var i = 0; i < table.tablesCount; i++) {\n this.offset = position;\n var subTable = new TtfCmapSubTable();\n subTable.platformID = this.readUInt16(this.offset);\n subTable.encodingID = this.readUInt16(this.offset);\n subTable.offset = this.readUInt32(this.offset);\n position = this.offset;\n this.readCmapSubTable(subTable);\n subTables[i] = subTable;\n }\n return subTables;\n };\n /**\n * Reads the cmap sub table.\n */\n TtfReader.prototype.readCmapSubTable = function (subTable) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var format = this.readUInt16(this.offset);\n var encoding = this.getCmapEncoding(subTable.platformID, subTable.encodingID);\n var platform = (encoding === TtfCmapEncoding.Macintosh) ? TtfPlatformID.Macintosh : TtfPlatformID.Microsoft;\n if (encoding !== TtfCmapEncoding.Unknown) {\n switch (format) {\n case TtfCmapFormat.Apple:\n this.readAppleCmapTable(subTable, encoding);\n break;\n case TtfCmapFormat.Microsoft:\n this.readMicrosoftCmapTable(subTable, encoding);\n break;\n case TtfCmapFormat.Trimmed:\n this.readTrimmedCmapTable(subTable, encoding);\n break;\n }\n }\n };\n /**\n * Reads Symbol cmap table.\n */\n TtfReader.prototype.readAppleCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var table = new TtfAppleCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n if (this.maxMacIndex === null || this.maxMacIndex === undefined) {\n this.maxMacIndex = 0;\n }\n for (var i = 0; i < 256; ++i) {\n var glyphInfo = new TtfGlyphInfo();\n glyphInfo.index = this.readByte(this.offset);\n glyphInfo.width = this.getWidth(glyphInfo.index);\n glyphInfo.charCode = i;\n this.macintosh.setValue(i, glyphInfo);\n this.addGlyph(glyphInfo, encoding);\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n this.maxMacIndex = Math.max(i, this.maxMacIndex);\n }\n };\n /**\n * Reads Symbol cmap table.\n */\n TtfReader.prototype.readMicrosoftCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var collection = (encoding === TtfCmapEncoding.Unicode) ? this.microsoft : this.macintosh;\n var table = new TtfMicrosoftCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n table.segCountX2 = this.readUInt16(this.offset);\n table.searchRange = this.readUInt16(this.offset);\n table.entrySelector = this.readUInt16(this.offset);\n table.rangeShift = this.readUInt16(this.offset);\n var segCount = table.segCountX2 / 2;\n table.endCount = this.readUshortArray(segCount);\n table.reservedPad = this.readUInt16(this.offset);\n table.startCount = this.readUshortArray(segCount);\n table.idDelta = this.readUshortArray(segCount);\n table.idRangeOffset = this.readUshortArray(segCount);\n var length = (table.length / 2 - 8) - (segCount * 4);\n table.glyphID = this.readUshortArray(length);\n // Process glyphIdArray array.\n var codeOffset = 0;\n var index = 0;\n for (var j = 0; j < segCount; j++) {\n for (var k = table.startCount[j]; k <= table.endCount[j] && k !== 65535; k++) {\n if (table.idRangeOffset[j] === 0) {\n codeOffset = (k + table.idDelta[j]) & 65535;\n }\n else {\n index = j + table.idRangeOffset[j] / 2 - segCount + k - table.startCount[j];\n if (index >= table.glyphID.length) {\n continue;\n }\n codeOffset = (table.glyphID[index] + table.idDelta[j]) & 65535;\n }\n var glyph = new TtfGlyphInfo();\n glyph.index = codeOffset;\n glyph.width = this.getWidth(glyph.index);\n var id = (encoding === TtfCmapEncoding.Symbol) ? ((k & 0xff00) === 0xf000 ? k & 0xff : k) : k;\n glyph.charCode = id;\n collection.setValue(id, glyph);\n this.addGlyph(glyph, encoding);\n }\n }\n };\n /**\n * Reads Trimed cmap table.\n */\n TtfReader.prototype.readTrimmedCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var table = new TtfTrimmedCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n table.firstCode = this.readUInt16(this.offset);\n table.entryCount = this.readUInt16(this.offset);\n for (var i = 0; i < table.entryCount; ++i) {\n var glyphInfo = new TtfGlyphInfo();\n glyphInfo.index = this.readUInt16(this.offset);\n glyphInfo.width = this.getWidth(glyphInfo.index);\n glyphInfo.charCode = i + table.firstCode;\n this.macintosh.setValue(i, glyphInfo);\n this.addGlyph(glyphInfo, encoding);\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n this.maxMacIndex = Math.max(i, this.maxMacIndex);\n }\n };\n TtfReader.prototype.initializeFontName = function (nameTable) {\n for (var i = 0; i < nameTable.recordsCount; i++) {\n var record = nameTable.nameRecords[i];\n if (record.nameID === 1) {\n //font family\n this.metrics.fontFamily = record.name;\n }\n else if (record.nameID === 6) {\n //post script name\n this.metrics.postScriptName = record.name;\n }\n /* tslint:disable */\n if (this.metrics.fontFamily !== null && this.metrics.fontFamily !== undefined && this.metrics.postScriptName !== null && this.metrics.postScriptName !== undefined) {\n break;\n }\n /* tslint:disable */\n }\n };\n TtfReader.prototype.getTable = function (name) {\n // if (name === null) {\n // throw new Error('Argument Null Exception : name');\n // }\n var table = new TtfTableInfo();\n var obj;\n if (this.tableDirectory.containsKey(name)) {\n obj = this.tableDirectory.getValue(name);\n }\n if (obj !== null && obj !== undefined) {\n table = obj;\n }\n return table;\n };\n /**\n * Returns width of the glyph.\n */\n TtfReader.prototype.getWidth = function (glyphCode) {\n glyphCode = (glyphCode < this.width.length) ? glyphCode : this.width.length - 1;\n return this.width[glyphCode];\n };\n /**\n * Gets CMAP encoding based on platform ID and encoding ID.\n */\n /* tslint:disable */\n TtfReader.prototype.getCmapEncoding = function (platformID, encodingID) {\n var format = TtfCmapEncoding.Unknown;\n if (platformID == TtfPlatformID.Microsoft && encodingID == TtfMicrosoftEncodingID.Undefined) {\n // When building a symbol font for Windows,\n // the platform ID should be 3 and the encoding ID should be 0.\n format = TtfCmapEncoding.Symbol;\n }\n else if (platformID == TtfPlatformID.Microsoft && encodingID == TtfMicrosoftEncodingID.Unicode) {\n // When building a Unicode font for Windows,\n // the platform ID should be 3 and the encoding ID should be 1.\n format = TtfCmapEncoding.Unicode;\n }\n else if (platformID == TtfPlatformID.Macintosh && encodingID == TtfMacintoshEncodingID.Roman) {\n // When building a font that will be used on the Macintosh,\n // the platform ID should be 1 and the encoding ID should be 0.\n format = TtfCmapEncoding.Macintosh;\n }\n return format;\n };\n /* tslint:enable */\n /**\n * Adds glyph to the collection.\n */\n TtfReader.prototype.addGlyph = function (glyph, encoding) {\n var collection = null;\n switch (encoding) {\n case TtfCmapEncoding.Unicode:\n collection = this.microsoftGlyphs;\n break;\n case TtfCmapEncoding.Macintosh:\n case TtfCmapEncoding.Symbol:\n collection = this.macintoshGlyphs;\n break;\n }\n collection.setValue(glyph.index, glyph);\n };\n /**\n * Initializes metrics.\n */\n /* tslint:disable */\n TtfReader.prototype.initializeMetrics = function (nameTable, headTable, horizontalHeadTable, os2Table, postTable, cmapTables) {\n /* tslint:enable */\n // if (cmapTables === null) {\n // throw new Error('ArgumentNullException : cmapTables');\n // }\n this.initializeFontName(nameTable);\n // Get font encoding.\n var bSymbol = false;\n for (var i = 0; i < cmapTables.length; i++) {\n var subTable = cmapTables[i];\n var encoding = this.getCmapEncoding(subTable.platformID, subTable.encodingID);\n if (encoding === TtfCmapEncoding.Symbol) {\n bSymbol = true;\n break;\n }\n }\n this.metrics.isSymbol = bSymbol;\n this.metrics.macStyle = headTable.macStyle;\n this.metrics.isFixedPitch = (postTable.isFixedPitch !== 0);\n this.metrics.italicAngle = postTable.italicAngle;\n var factor = 1000 / headTable.unitsPerEm;\n this.metrics.winAscent = os2Table.sTypoAscender * factor;\n this.metrics.macAscent = horizontalHeadTable.ascender * factor;\n //m_metrics.MacAscent = os2Table.UsWinAscent * factor;\n // NOTE: This is stange workaround. The value is good if os2Table.SCapHeight != 0, otherwise it should be properly computed.\n this.metrics.capHeight = (os2Table.sCapHeight !== 0) ? os2Table.sCapHeight : 0.7 * headTable.unitsPerEm * factor;\n this.metrics.winDescent = os2Table.sTypoDescender * factor;\n this.metrics.macDescent = horizontalHeadTable.descender * factor;\n //m_metrics.MacDescent = -os2Table.UsWinDescent * factor;\n this.metrics.leading = (os2Table.sTypoAscender - os2Table.sTypoDescender + os2Table.sTypoLineGap) * factor;\n this.metrics.lineGap = Math.ceil(horizontalHeadTable.lineGap * factor);\n var left = headTable.xMin * factor;\n var top = Math.ceil(this.metrics.macAscent + this.metrics.lineGap);\n var right = headTable.xMax * factor;\n var bottom = this.metrics.macDescent;\n this.metrics.fontBox = new Rectangle(left, top, right, bottom);\n // NOTE: Strange!\n this.metrics.stemV = 80;\n this.metrics.widthTable = this.updateWidth();\n this.metrics.contains = this.tableDirectory.containsKey('CFF');\n this.metrics.subScriptSizeFactor = headTable.unitsPerEm / os2Table.ySubscriptYSize;\n this.metrics.superscriptSizeFactor = headTable.unitsPerEm / os2Table.ySuperscriptYSize;\n };\n /**\n * Updates chars structure which is used in the case of ansi encoding (256 bytes).\n */\n TtfReader.prototype.updateWidth = function () {\n var count = 256;\n var bytes = [];\n if (this.metrics.isSymbol) {\n for (var i = 0; i < count; i++) {\n var glyphInfo = this.getGlyph(String.fromCharCode(i));\n bytes[i] = (glyphInfo.empty) ? 0 : glyphInfo.width;\n }\n }\n else {\n var byteToProcess = [];\n var unknown = '?';\n var space = String.fromCharCode(32);\n for (var i = 0; i < count; i++) {\n byteToProcess[0] = i;\n var text = this.getString(byteToProcess, 0, byteToProcess.length);\n var ch = (text.length > 0) ? text[0] : unknown;\n var glyphInfo = this.getGlyph(ch);\n if (!glyphInfo.empty) {\n bytes[i] = glyphInfo.width;\n }\n else {\n glyphInfo = this.getGlyph(space);\n bytes[i] = (glyphInfo.empty) ? 0 : glyphInfo.width;\n }\n }\n }\n return bytes;\n };\n /**\n * Returns default glyph.\n */\n TtfReader.prototype.getDefaultGlyph = function () {\n var glyph = this.getGlyph(StringTokenizer.whiteSpace);\n return glyph;\n };\n /**\n * Reads unicode string from byte array.\n */\n TtfReader.prototype.getString = function (byteToProcess, start, length) {\n var result = '';\n for (var index = 0; index < length; index++) {\n result += String.fromCharCode(byteToProcess[index + start]);\n }\n return result;\n };\n /**\n * Reads loca table.\n */\n TtfReader.prototype.readLocaTable = function (bShort) {\n var tableInfo = this.getTable('loca');\n this.offset = tableInfo.offset;\n var table = new TtfLocaTable();\n var buffer = null;\n if (bShort) {\n var len = tableInfo.length / 2;\n buffer = [];\n for (var i = 0; i < len; i++) {\n buffer[i] = this.readUInt16(this.offset) * 2;\n }\n }\n else {\n var len = tableInfo.length / 4;\n buffer = [];\n for (var i = 0; i < len; i++) {\n buffer[i] = this.readUInt32(this.offset);\n }\n }\n table.offsets = buffer;\n return table;\n };\n /**\n * Updates hash table of used glyphs.\n */\n TtfReader.prototype.updateGlyphChars = function (glyphChars, locaTable) {\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n // Add zero key.\n if (!glyphChars.containsKey(0)) {\n glyphChars.setValue(0, 0);\n }\n var clone = new Dictionary();\n var glyphCharKeys = glyphChars.keys();\n for (var i = 0; i < glyphCharKeys.length; i++) {\n clone.setValue(glyphCharKeys[i], glyphChars.getValue(glyphCharKeys[i]));\n }\n for (var i = 0; i < glyphCharKeys.length; i++) {\n var nextKey = glyphCharKeys[i];\n this.processCompositeGlyph(glyphChars, nextKey, locaTable);\n }\n };\n /**\n * Checks if glyph is composite or not.\n */\n TtfReader.prototype.processCompositeGlyph = function (glyphChars, glyph, locaTable) {\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n // Is in range.\n if (glyph < locaTable.offsets.length - 1) {\n var glyphOffset = locaTable.offsets[glyph];\n if (glyphOffset !== locaTable.offsets[glyph + 1]) {\n var tableInfo = this.getTable('glyf');\n this.offset = tableInfo.offset + glyphOffset;\n var glyphHeader = new TtfGlyphHeader();\n glyphHeader.numberOfContours = this.readInt16(this.offset);\n glyphHeader.xMin = this.readInt16(this.offset);\n glyphHeader.yMin = this.readInt16(this.offset);\n glyphHeader.xMax = this.readInt16(this.offset);\n glyphHeader.yMax = this.readInt16(this.offset);\n // Glyph is composite.\n if (glyphHeader.numberOfContours < 0) {\n var skipBytes = 0;\n var entry = true;\n while (entry) {\n var flags = this.readUInt16(this.offset);\n var glyphIndex = this.readUInt16(this.offset);\n if (!glyphChars.containsKey(glyphIndex)) {\n glyphChars.setValue(glyphIndex, 0);\n }\n if ((flags & TtfCompositeGlyphFlags.MoreComponents) === 0) {\n break;\n }\n skipBytes = ((flags & TtfCompositeGlyphFlags.Arg1And2AreWords) !== 0) ? 4 : 2;\n if ((flags & TtfCompositeGlyphFlags.WeHaveScale) !== 0) {\n skipBytes += 2;\n }\n else if ((flags & TtfCompositeGlyphFlags.WeHaveAnXyScale) !== 0) {\n skipBytes += 4;\n }\n else if ((flags & TtfCompositeGlyphFlags.WeHaveTwoByTwo) !== 0) {\n skipBytes += 2 * 4;\n }\n this.offset += skipBytes;\n }\n }\n }\n }\n };\n /**\n * Creates new glyph tables based on chars that are used for output.\n */\n /* tslint:disable */\n TtfReader.prototype.generateGlyphTable = function (glyphChars, locaTable, newLocaTable, newGlyphTable) {\n /* tslint:enable */\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n newLocaTable = [];\n // Sorting used glyphs keys.\n var activeGlyphs = glyphChars.keys();\n activeGlyphs.sort(function (a, b) { return a - b; });\n var glyphSize = 0;\n for (var i = 0; i < activeGlyphs.length; i++) {\n var glyphIndex = activeGlyphs[i];\n if (locaTable.offsets.length > 0) {\n glyphSize += locaTable.offsets[glyphIndex + 1] - locaTable.offsets[glyphIndex];\n }\n }\n var glyphSizeAligned = this.align(glyphSize);\n newGlyphTable = [];\n for (var i = 0; i < glyphSizeAligned; i++) {\n newGlyphTable.push(0);\n }\n var nextGlyphOffset = 0;\n var nextGlyphIndex = 0;\n var table = this.getTable('glyf');\n // Creating NewLocaTable - that would hold offsets for filtered glyphs.\n for (var i = 0; i < locaTable.offsets.length; i++) {\n newLocaTable.push(nextGlyphOffset);\n if (nextGlyphIndex < activeGlyphs.length && activeGlyphs[nextGlyphIndex] === i) {\n ++nextGlyphIndex;\n newLocaTable[i] = nextGlyphOffset;\n var oldGlyphOffset = locaTable.offsets[i];\n var oldNextGlyphOffset = locaTable.offsets[i + 1] - oldGlyphOffset;\n if (oldNextGlyphOffset > 0) {\n this.offset = table.offset + oldGlyphOffset;\n var result = this.read(newGlyphTable, nextGlyphOffset, oldNextGlyphOffset);\n newGlyphTable = result.buffer;\n nextGlyphOffset += oldNextGlyphOffset;\n }\n }\n }\n return { glyphTableSize: glyphSize, newLocaTable: newLocaTable, newGlyphTable: newGlyphTable };\n };\n /**\n * Updates new Loca table.\n */\n /* tslint:disable */\n TtfReader.prototype.updateLocaTable = function (newLocaTable, bLocaIsShort, newLocaTableOut) {\n /* tslint:enable */\n if (newLocaTable === null) {\n throw new Error('Argument Null Exception : newLocaTable');\n }\n var size = (bLocaIsShort) ? newLocaTable.length * 2 : newLocaTable.length * 4;\n var count = this.align(size);\n //BigEndianWiter\n var writer = new BigEndianWriter(count);\n for (var i = 0; i < newLocaTable.length; i++) {\n var value = newLocaTable[i];\n if (bLocaIsShort) {\n value /= 2;\n writer.writeShort(value);\n }\n else {\n writer.writeInt(value);\n }\n }\n return { newLocaUpdated: writer.data, newLocaSize: size };\n };\n /**\n * Aligns number to be divisible on 4.\n */\n TtfReader.prototype.align = function (value) {\n return (value + 3) & (~3);\n };\n /**\n * Returns font program data.\n */\n /* tslint:disable */\n TtfReader.prototype.getFontProgram = function (newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize) {\n /* tslint:enable */\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n var result = this.getFontProgramLength(newLocaTableOut, newGlyphTable, 0);\n var fontProgramLength = result.fontProgramLength;\n var numTables = result.numTables;\n var writer = new BigEndianWriter(fontProgramLength);\n writer.writeInt(0x10000);\n writer.writeShort(numTables);\n var entrySelector = this.entrySelectors[numTables];\n writer.writeShort((1 << (entrySelector & 31)) * 16);\n writer.writeShort(entrySelector);\n writer.writeShort((numTables - (1 << (entrySelector & 31))) * 16);\n // Writing to destination buffer - checksums && sizes of used tables.\n this.writeCheckSums(writer, numTables, newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize);\n // // Writing to destination buffer - used glyphs.\n this.writeGlyphs(writer, newLocaTableOut, newGlyphTable);\n return writer.data;\n };\n /* tslint:disable */\n TtfReader.prototype.getFontProgramLength = function (newLocaTableOut, newGlyphTable, numTables) {\n /* tslint:enable */\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n // glyf and loca are used by default;\n numTables = 2;\n var tableNames = this.tableNames;\n var fontProgramLength = 0;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n if (tableName !== 'glyf' && tableName !== 'loca') {\n var table = this.getTable(tableName);\n if (!table.empty) {\n ++numTables;\n fontProgramLength += this.align(table.length);\n }\n }\n }\n fontProgramLength += newLocaTableOut.length;\n fontProgramLength += newGlyphTable.length;\n var usedTablesSize = numTables * 16 + (3 * 4);\n fontProgramLength += usedTablesSize;\n return { fontProgramLength: fontProgramLength, numTables: numTables };\n };\n /**\n * Writing to destination buffer - checksums and sizes of used tables.\n */\n /* tslint:disable */\n TtfReader.prototype.writeCheckSums = function (writer, numTables, newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize) {\n /* tslint:enable */\n if (writer === null) {\n throw new Error('Argument Null Exception : writer');\n }\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n var usedTablesSize = numTables * 16 + (3 * 4);\n var nextTableSize = 0;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n var tableInfo = this.getTable(tableName);\n if (tableInfo.empty) {\n continue;\n }\n writer.writeString(tableName);\n if (tableName === 'glyf') {\n var checksum = this.calculateCheckSum(newGlyphTable);\n writer.writeInt(checksum);\n nextTableSize = glyphTableSize;\n }\n else if (tableName === 'loca') {\n var checksum = this.calculateCheckSum(newLocaTableOut);\n writer.writeInt(checksum);\n nextTableSize = locaTableSize;\n }\n else {\n writer.writeInt(tableInfo.checksum);\n nextTableSize = tableInfo.length;\n }\n writer.writeUInt(usedTablesSize);\n writer.writeUInt(nextTableSize);\n usedTablesSize += this.align(nextTableSize);\n }\n };\n /**\n * Gets checksum from source buffer.\n */\n TtfReader.prototype.calculateCheckSum = function (bytes) {\n if (bytes === null) {\n throw new Error('Argument Null Exception : bytes');\n }\n var pos = 0;\n var byte1 = 0;\n var byte2 = 0;\n var byte3 = 0;\n var byte4 = 0;\n for (var i = 0; i < (bytes.length + 1) / 4; i++) {\n byte4 += (bytes[pos++] & 255);\n byte3 += (bytes[pos++] & 255);\n byte2 += (bytes[pos++] & 255);\n byte1 += (bytes[pos++] & 255);\n }\n var result = byte1;\n result += (byte2 << 8);\n result += (byte3 << 16);\n result += (byte4 << 24);\n return result;\n };\n /**\n * Writing to destination buffer - used glyphs.\n */\n TtfReader.prototype.writeGlyphs = function (writer, newLocaTable, newGlyphTable) {\n if (writer === null) {\n throw new Error('Argument Null Exception : writer');\n }\n if (newLocaTable === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n var tableInfo = this.getTable(tableName);\n if (tableInfo.empty) {\n continue;\n }\n if (tableName === 'glyf') {\n writer.writeBytes(newGlyphTable);\n }\n else if (tableName === 'loca') {\n writer.writeBytes(newLocaTable);\n }\n else {\n var count = this.align(tableInfo.length);\n var buff = [];\n for (var i_1 = 0; i_1 < count; i_1++) {\n buff.push(0);\n }\n this.offset = tableInfo.offset;\n var result = this.read(buff, 0, tableInfo.length);\n writer.writeBytes(result.buffer);\n }\n }\n };\n //public methods\n /**\n * Sets position value of font data.\n */\n TtfReader.prototype.setOffset = function (offset) {\n this.offset = offset;\n };\n /**\n * Creates font Internals\n * @private\n */\n TtfReader.prototype.createInternals = function () {\n this.metrics = new TtfMetrics();\n var nameTable = this.readNameTable();\n var headTable = this.readHeadTable();\n this.bIsLocaShort = (headTable.indexToLocalFormat === 0);\n var horizontalHeadTable = this.readHorizontalHeaderTable();\n var os2Table = this.readOS2Table();\n var postTable = this.readPostTable();\n this.width = this.readWidthTable(horizontalHeadTable.numberOfHMetrics, headTable.unitsPerEm);\n var subTables = this.readCmapTable();\n this.initializeMetrics(nameTable, headTable, horizontalHeadTable, os2Table, postTable, subTables);\n };\n TtfReader.prototype.getGlyph = function (charCode) {\n if (typeof charCode === 'number') {\n var obj1 = null;\n if (!this.metrics.isSymbol && this.microsoftGlyphs != null) {\n if (this.microsoftGlyphs.containsKey(charCode)) {\n obj1 = this.microsoftGlyphs.getValue(charCode);\n }\n }\n else if (this.metrics.isSymbol && this.macintoshGlyphs != null) {\n if (this.macintoshGlyphs.containsKey(charCode)) {\n obj1 = this.macintoshGlyphs.getValue(charCode);\n }\n }\n var glyph = (obj1 != null) ? obj1 : this.getDefaultGlyph();\n return glyph;\n }\n else {\n var obj = null;\n var code = charCode.charCodeAt(0);\n if (!this.metrics.isSymbol && this.microsoft !== null) {\n if (this.microsoft.containsKey(code)) {\n obj = this.microsoft.getValue(code);\n if (code !== StringTokenizer.whiteSpace.charCodeAt(0)) {\n this.isFontPresent = true;\n }\n }\n else if (code !== StringTokenizer.whiteSpace.charCodeAt(0)) {\n this.isFontPresent = false;\n }\n }\n else if (this.metrics.isSymbol && this.macintosh !== null || this.isMacTTF) {\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n if (this.maxMacIndex !== 0) {\n code %= this.maxMacIndex + 1;\n }\n else {\n code = ((code & 0xff00) === 0xf000 ? code & 0xff : code);\n }\n if (this.macintosh.containsKey(code)) {\n obj = this.macintosh.getValue(code);\n this.isFontPresent = true;\n }\n }\n // Fix for StackOverFlow exception in XPS to PDF converter\n if (charCode === StringTokenizer.whiteSpace && obj === null) {\n obj = new TtfGlyphInfo();\n }\n var glyph = (obj !== null) ? obj : this.getDefaultGlyph();\n return glyph;\n }\n };\n /**\n * Gets hash table with chars indexed by glyph index.\n */\n TtfReader.prototype.getGlyphChars = function (chars) {\n if (chars === null || chars === undefined) {\n throw new Error('Argument Null Exception : chars');\n }\n var dictionary = new Dictionary();\n var charKeys = chars.keys();\n for (var i = 0; i < charKeys.length; i++) {\n var ch = charKeys[i];\n var glyph = this.getGlyph(ch);\n if (!glyph.empty) {\n dictionary.setValue(glyph.index, ch.charCodeAt(0));\n }\n }\n return dictionary;\n };\n /**\n * Gets all glyphs.\n */\n TtfReader.prototype.getAllGlyphs = function () {\n var allGlyphInfo = [];\n var info = new TtfGlyphInfo();\n var index = 0;\n for (var i = 0; i < this.width.length; i++) {\n var width = this.width[i];\n info.index = index;\n info.width = width;\n allGlyphInfo.push(info);\n index++;\n }\n return allGlyphInfo;\n };\n /**\n * Reads a font's program.\n * @private\n */\n TtfReader.prototype.readFontProgram = function (chars) {\n var glyphChars = this.getGlyphChars(chars);\n var locaTable = this.readLocaTable(this.bIsLocaShort);\n if (glyphChars.size() < chars.size()) {\n this.missedGlyphs = chars.size() - glyphChars.size();\n }\n this.updateGlyphChars(glyphChars, locaTable);\n /* tslint:disable */\n var result1 = this.generateGlyphTable(glyphChars, locaTable, null, null);\n /* tslint:enable */\n var glyphTableSize = result1.glyphTableSize;\n var newLocaTable = result1.newLocaTable;\n var newGlyphTable = result1.newGlyphTable;\n var result2 = this.updateLocaTable(newLocaTable, this.bIsLocaShort, null);\n var newLocaSize = result2.newLocaSize;\n var newLocaUpdated = result2.newLocaUpdated;\n var fontProgram = this.getFontProgram(newLocaUpdated, newGlyphTable, glyphTableSize, newLocaSize);\n return fontProgram;\n };\n /**\n * Reconverts string to be in proper format saved into PDF file.\n */\n TtfReader.prototype.convertString = function (text) {\n if (text === null) {\n throw new Error('Argument Null Exception : text');\n }\n var glyph = '';\n var i = 0;\n for (var k = 0; k < text.length; k++) {\n var ch = text[k];\n var glyphInfo = this.getGlyph(ch);\n if (!glyphInfo.empty) {\n glyph += String.fromCharCode(glyphInfo.index);\n i++;\n }\n }\n return glyph;\n };\n /**\n * Gets char width.\n */\n TtfReader.prototype.getCharWidth = function (code) {\n var glyphInfo = this.getGlyph(code);\n glyphInfo = (!glyphInfo.empty) ? glyphInfo : this.getDefaultGlyph();\n var codeWidth = (!glyphInfo.empty) ? glyphInfo.width : 0;\n return codeWidth;\n };\n TtfReader.prototype.readString = function (length, isUnicode) {\n if (isUnicode === undefined) {\n return this.readString(length, false);\n }\n else {\n //let buffer : number[] = this.readBytes(length);\n var result = '';\n if (isUnicode) {\n for (var i = 0; i < length; i++) {\n if (i % 2 !== 0) {\n result += String.fromCharCode(this.fontData[this.offset]);\n }\n this.offset += 1;\n }\n }\n else {\n for (var i = 0; i < length; i++) {\n result += String.fromCharCode(this.fontData[this.offset]);\n this.offset += 1;\n }\n }\n return result;\n }\n };\n TtfReader.prototype.readFixed = function (offset) {\n var integer = this.readInt16(offset);\n var sFraction = this.readInt16(offset + 2);\n var fraction = sFraction / 16384;\n return integer + fraction;\n };\n TtfReader.prototype.readInt32 = function (offset) {\n var i1 = this.fontData[offset + 3];\n var i2 = this.fontData[offset + 2];\n var i3 = this.fontData[offset + 1];\n var i4 = this.fontData[offset];\n this.offset += 4;\n return i1 + (i2 << 8) + (i3 << 16) + (i4 << 24);\n };\n TtfReader.prototype.readUInt32 = function (offset) {\n var i1 = this.fontData[offset + 3];\n var i2 = this.fontData[offset + 2];\n var i3 = this.fontData[offset + 1];\n var i4 = this.fontData[offset];\n this.offset += 4;\n return (i1 | i2 << 8 | i3 << 16 | i4 << 24);\n };\n // private readInt16(offset : number) : number {\n // let result : number = (this.fontData[offset] << 8) + this.fontData[offset + 1];\n // this.offset += 2;\n // return result;\n // }\n TtfReader.prototype.readInt16 = function (offset) {\n var result = (this.fontData[offset] << 8) + this.fontData[offset + 1];\n result = result & (1 << 15) ? result - 0x10000 : result;\n this.offset += 2;\n return result;\n };\n TtfReader.prototype.readInt64 = function (offset) {\n var low = this.readInt32(offset + 4);\n var n = this.readInt32(offset) * 4294967296.0 + low;\n if (low < 0) {\n n += 4294967296;\n }\n return n;\n };\n TtfReader.prototype.readUInt16 = function (offset) {\n var result = (this.fontData[offset] << 8) | this.fontData[offset + 1];\n this.offset += 2;\n return result;\n };\n /**\n * Reads ushort array.\n */\n TtfReader.prototype.readUshortArray = function (length) {\n var buffer = [];\n for (var i = 0; i < length; i++) {\n buffer[i] = this.readUInt16(this.offset);\n }\n return buffer;\n };\n TtfReader.prototype.readBytes = function (length) {\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(this.fontData[this.offset]);\n this.offset += 1;\n }\n return result;\n };\n TtfReader.prototype.readByte = function (offset) {\n var result = this.fontData[offset];\n this.offset += 1;\n return result;\n };\n /**\n * Reads bytes to array in BigEndian order.\n * @private\n */\n TtfReader.prototype.read = function (buffer, index, count) {\n if (buffer === null) {\n throw new Error('Argument Null Exception : buffer');\n }\n var written = 0;\n var read = 0;\n do {\n for (var i = 0; (i < count - written) && (this.offset + i < this.fontData.length); i++) {\n buffer[index + i] = this.fontData[this.offset + i];\n }\n read = count - written;\n this.offset += read;\n written += read;\n } while (written < count);\n return { buffer: buffer, written: written };\n };\n return TtfReader;\n}());\nexport { TtfReader };\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 { PdfFont } from './pdf-font';\nimport { PdfSubSuperScript } from './enum';\nimport { PdfArray } from './../../primitives/pdf-array';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar PdfFontMetrics = /** @class */ (function () {\n function PdfFontMetrics() {\n /**\n * `Line gap`.\n * @private\n */\n this.lineGap = 0;\n }\n // Public methods\n /**\n * Returns `ascent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getAscent = function (format) {\n var returnValue = this.ascent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `descent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getDescent = function (format) {\n var returnValue = this.descent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `Line gap` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getLineGap = function (format) {\n var returnValue = this.lineGap * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `height` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getHeight = function (format) {\n var height;\n var clearTypeFonts = ['cambria', 'candara', 'constantia', 'corbel', 'cariadings'];\n var clearTypeFontCollection = [];\n for (var index = 0; index < clearTypeFonts.length; index++) {\n var font = clearTypeFonts[index];\n clearTypeFontCollection.push(font);\n }\n if (this.getDescent(format) < 0) {\n // if ((clearTypeFontCollection.indexOf(this.name.toLowerCase()) !== -1) && !this.isUnicodeFont) {\n // height = (this.GetAscent(format) - this.GetDescent(format) - this.GetLineGap(format));\n // } else {\n height = (this.getAscent(format) - this.getDescent(format) + this.getLineGap(format));\n // }\n }\n else {\n height = (this.getAscent(format) + this.getDescent(format) + this.getLineGap(format));\n }\n return height;\n };\n /**\n * Calculates `size` of the font depending on the subscript/superscript value.\n * @private\n */\n PdfFontMetrics.prototype.getSize = function (format) {\n var size = this.size;\n if (format != null) {\n switch (format.subSuperScript) {\n case PdfSubSuperScript.SubScript:\n size /= this.subScriptSizeFactor;\n break;\n case PdfSubSuperScript.SuperScript:\n size /= this.superscriptSizeFactor;\n break;\n }\n }\n return size;\n };\n /**\n * `Clones` the metrics.\n * @private\n */\n PdfFontMetrics.prototype.clone = function () {\n var metrics = this;\n metrics.widthTable = WidthTable.clone();\n return metrics;\n };\n Object.defineProperty(PdfFontMetrics.prototype, \"widthTable\", {\n // Properies\n /**\n * Gets or sets the `width table`.\n * @private\n */\n get: function () {\n return this.internalWidthTable;\n },\n set: function (value) {\n this.internalWidthTable = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfFontMetrics;\n}());\nexport { PdfFontMetrics };\nvar WidthTable = /** @class */ (function () {\n function WidthTable() {\n }\n /**\n * Static `clones` this instance of the WidthTable class.\n * @private\n */\n WidthTable.clone = function () {\n return null;\n };\n return WidthTable;\n}());\nexport { WidthTable };\nvar StandardWidthTable = /** @class */ (function (_super) {\n __extends(StandardWidthTable, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StandardWidthTable` class.\n * @private\n */\n function StandardWidthTable(widths) {\n var _this = _super.call(this) || this;\n if (widths == null) {\n throw new Error('ArgumentNullException:widths');\n }\n _this.widths = widths;\n return _this;\n }\n //Properties\n /**\n * Gets the `32 bit number` at the specified index.\n * @private\n */\n StandardWidthTable.prototype.items = function (index) {\n if (index < 0 || index >= this.widths.length) {\n throw new Error('ArgumentOutOfRangeException:index, The character is not supported by the font.');\n }\n var result = this.widths[index];\n return result;\n };\n Object.defineProperty(StandardWidthTable.prototype, \"length\", {\n /**\n * Gets the `length` of the internal array.\n * @private\n */\n get: function () {\n return this.widths.length;\n },\n enumerable: true,\n configurable: true\n });\n //Overrides\n /**\n * `Clones` this instance of the WidthTable class.\n * @private\n */\n StandardWidthTable.prototype.clone = function () {\n var swt = this;\n swt.widths = this.widths;\n return swt;\n };\n /**\n * Converts width table to a `PDF array`.\n * @private\n */\n StandardWidthTable.prototype.toArray = function () {\n var arr = new PdfArray(this.widths);\n return arr;\n };\n return StandardWidthTable;\n}(WidthTable));\nexport { StandardWidthTable };\n","/**\n * TrueTypeFont.ts class for EJ2-PDF\n */\nimport { ByteArray } from './../../graphics/images/index';\nimport { TtfReader } from './ttf-reader';\nimport { PdfDictionary, SaveDescendantFontEventHandler, SaveFontDictionaryEventHandler } from './../../primitives/pdf-dictionary';\nimport { SaveFontProgramEventHandler, SaveCmapEventHandler } from './../../primitives/pdf-stream';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfString } from './../../primitives/pdf-string';\nimport { PdfReferenceHolder } from './../../primitives/pdf-reference';\nimport { PdfFontMetrics } from './pdf-font-metrics';\nimport { StandardWidthTable } from './pdf-font-metrics';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { Dictionary } from './../../collections/dictionary';\nimport { FontDescriptorFlags } from './enum';\nimport { RectangleF } from './../../drawing/pdf-drawing';\nimport { Operators } from './../../input-output/pdf-operators';\nvar UnicodeTrueTypeFont = /** @class */ (function () {\n /* tslint:enable */\n //Constructors\n /**\n * Initializes a new instance of the `PdfTrueTypeFont` class.\n * @private\n */\n function UnicodeTrueTypeFont(base64String, size) {\n // Fields\n this.nameString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Indicates whether the font program is compressed or not.\n * @private\n */\n this.isCompress = false;\n /**\n * Indicates whether the font is embedded or not.\n */\n this.isEmbedFont = false;\n /**\n * Cmap table's start prefix.\n */\n /* tslint:disable */\n this.cmapPrefix = '/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap' + Operators.newLine + '/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0>> def\\n/CMapName ' + '/Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange' + Operators.newLine;\n /* tslint:enable */\n /**\n * Cmap table's start suffix.\n */\n this.cmapEndCodespaceRange = 'endcodespacerange' + Operators.newLine;\n /**\n * Cmap's begin range marker.\n */\n this.cmapBeginRange = 'beginbfrange' + Operators.newLine;\n /**\n * Cmap's end range marker.\n */\n this.cmapEndRange = 'endbfrange' + Operators.newLine;\n /**\n * Cmap table's end\n */\n /* tslint:disable */\n this.cmapSuffix = 'endbfrange\\nendcmap\\nCMapName currentdict ' + '/CMap defineresource pop\\nend end' + Operators.newLine;\n if (base64String === null || base64String === undefined) {\n throw new Error('ArgumentNullException:base64String');\n }\n this.fontSize = size;\n this.fontString = base64String;\n this.Initialize();\n }\n //Implementation\n /**\n * Returns width of the char symbol.\n */\n UnicodeTrueTypeFont.prototype.getCharWidth = function (charCode) {\n var codeWidth = this.ttfReader.getCharWidth(charCode);\n return codeWidth;\n };\n /**\n * Returns width of the text line.\n */\n UnicodeTrueTypeFont.prototype.getLineWidth = function (line) {\n // if (line == null) {\n // throw new Error('ArgumentNullException : line');\n // }\n var width = 0;\n for (var i = 0, len = line.length; i < len; i++) {\n var ch = line[i];\n var charWidth = this.getCharWidth(ch);\n width += charWidth;\n }\n return width;\n };\n /**\n * Initializes a new instance of the `PdfTrueTypeFont` class.\n * @private\n */\n UnicodeTrueTypeFont.prototype.Initialize = function () {\n var byteArray = new ByteArray(this.fontString.length);\n byteArray.writeFromBase64String(this.fontString);\n this.fontData = byteArray.internalBuffer;\n this.ttfReader = new TtfReader(this.fontData);\n this.ttfMetrics = this.ttfReader.metrics;\n };\n UnicodeTrueTypeFont.prototype.createInternals = function () {\n this.fontDictionary = new PdfDictionary();\n this.fontProgram = new PdfStream();\n this.cmap = new PdfStream();\n this.descendantFont = new PdfDictionary();\n this.metrics = new PdfFontMetrics();\n this.ttfReader.createInternals();\n this.ttfMetrics = this.ttfReader.metrics;\n this.initializeMetrics();\n // Create all the dictionaries of the font.\n this.subsetName = this.getFontName();\n this.createDescendantFont();\n this.createCmap();\n this.createFontDictionary();\n this.createFontProgram();\n };\n UnicodeTrueTypeFont.prototype.getInternals = function () {\n return this.fontDictionary;\n };\n /**\n * Initializes metrics.\n */\n UnicodeTrueTypeFont.prototype.initializeMetrics = function () {\n var ttfMetrics = this.ttfReader.metrics;\n this.metrics.ascent = ttfMetrics.macAscent;\n this.metrics.descent = ttfMetrics.macDescent;\n this.metrics.height = ttfMetrics.macAscent - ttfMetrics.macDescent + ttfMetrics.lineGap;\n this.metrics.name = ttfMetrics.fontFamily;\n this.metrics.postScriptName = ttfMetrics.postScriptName;\n this.metrics.size = this.fontSize;\n this.metrics.widthTable = new StandardWidthTable(ttfMetrics.widthTable);\n this.metrics.lineGap = ttfMetrics.lineGap;\n this.metrics.subScriptSizeFactor = ttfMetrics.subScriptSizeFactor;\n this.metrics.superscriptSizeFactor = ttfMetrics.superscriptSizeFactor;\n this.metrics.isBold = ttfMetrics.isBold;\n };\n /**\n * Gets random string.\n */\n UnicodeTrueTypeFont.prototype.getFontName = function () {\n var builder = '';\n var name;\n // if (this.isEmbed === false) {\n for (var i = 0; i < 6; i++) {\n var index = Math.floor(Math.random() * (25 - 0 + 1)) + 0;\n builder += this.nameString[index];\n }\n builder += '+';\n // }\n builder += this.ttfReader.metrics.postScriptName;\n name = builder.toString();\n // if (name === '') {\n // name = this.ttfReader.metrics.fontFamily;\n // }\n name = this.formatName(name);\n return name;\n };\n /**\n * Generates name of the font.\n */\n UnicodeTrueTypeFont.prototype.formatName = function (fontName) {\n // if (fontName === null) {\n // throw new Error('ArgumentNullException : fontName');\n // }\n // if (fontName === '') {\n // throw new Error('ArgumentOutOfRangeException : fontName, Parameter can not be empty');\n // }\n var ret = fontName.replace('(', '#28');\n ret = ret.replace(')', '#29');\n ret = ret.replace('[', '#5B');\n ret = ret.replace(']', '#5D');\n ret = ret.replace('<', '#3C');\n ret = ret.replace('>', '#3E');\n ret = ret.replace('{', '#7B');\n ret = ret.replace('}', '#7D');\n ret = ret.replace('/', '#2F');\n ret = ret.replace('%', '#25');\n return ret.replace(' ', '#20');\n };\n /**\n * Creates descendant font.\n */\n UnicodeTrueTypeFont.prototype.createDescendantFont = function () {\n // Set property used to clone Font every time\n this.descendantFont.isFont = true;\n this.descendantFont.descendantFontBeginSave = new SaveDescendantFontEventHandler(this);\n this.descendantFont.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n this.descendantFont.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.cIDFontType2));\n this.descendantFont.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.subsetName));\n this.descendantFont.items.setValue(this.dictionaryProperties.cIDToGIDMap, new PdfName(this.dictionaryProperties.identity));\n this.descendantFont.items.setValue(this.dictionaryProperties.dw, new PdfNumber(1000));\n this.fontDescriptor = this.createFontDescriptor();\n this.descendantFont.items.setValue(this.dictionaryProperties.fontDescriptor, new PdfReferenceHolder(this.fontDescriptor));\n var systemInfo = this.createSystemInfo();\n this.descendantFont.items.setValue(this.dictionaryProperties.cIDSystemInfo, systemInfo);\n };\n /**\n * Creates font descriptor.\n */\n UnicodeTrueTypeFont.prototype.createFontDescriptor = function () {\n var descriptor = new PdfDictionary();\n var metrics = this.ttfReader.metrics;\n // Set property used to clone Font every time\n descriptor.isFont = true;\n descriptor.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.fontDescriptor));\n descriptor.items.setValue(this.dictionaryProperties.fontName, new PdfName(this.subsetName));\n descriptor.items.setValue(this.dictionaryProperties.flags, new PdfNumber(this.getDescriptorFlags()));\n descriptor.items.setValue(this.dictionaryProperties.fontBBox, PdfArray.fromRectangle(this.getBoundBox()));\n descriptor.items.setValue(this.dictionaryProperties.missingWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.stemV, new PdfNumber(metrics.stemV));\n descriptor.items.setValue(this.dictionaryProperties.italicAngle, new PdfNumber(metrics.italicAngle));\n descriptor.items.setValue(this.dictionaryProperties.capHeight, new PdfNumber(metrics.capHeight));\n descriptor.items.setValue(this.dictionaryProperties.ascent, new PdfNumber(metrics.winAscent));\n descriptor.items.setValue(this.dictionaryProperties.descent, new PdfNumber(metrics.winDescent));\n descriptor.items.setValue(this.dictionaryProperties.leading, new PdfNumber(metrics.leading));\n descriptor.items.setValue(this.dictionaryProperties.avgWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.fontFile2, new PdfReferenceHolder(this.fontProgram));\n descriptor.items.setValue(this.dictionaryProperties.maxWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.xHeight, new PdfNumber(0));\n descriptor.items.setValue(this.dictionaryProperties.stemH, new PdfNumber(0));\n return descriptor;\n };\n /**\n * Generates cmap.\n * @private\n */\n UnicodeTrueTypeFont.prototype.createCmap = function () {\n this.cmap.cmapBeginSave = new SaveCmapEventHandler(this);\n };\n /**\n * Generates font dictionary.\n */\n UnicodeTrueTypeFont.prototype.createFontDictionary = function () {\n // Set property used to clone Font every time\n this.fontDictionary.isFont = true;\n this.fontDictionary.fontDictionaryBeginSave = new SaveFontDictionaryEventHandler(this);\n this.fontDictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n this.fontDictionary.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.subsetName));\n this.fontDictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.type0));\n this.fontDictionary.items.setValue(this.dictionaryProperties.encoding, new PdfName(this.dictionaryProperties.identityH));\n var descFonts = new PdfArray();\n var reference = new PdfReferenceHolder(this.descendantFont);\n // Set property used to clone Font every time\n descFonts.isFont = true;\n descFonts.add(reference);\n this.fontDictionary.items.setValue(this.dictionaryProperties.descendantFonts, descFonts);\n };\n /**\n * Creates font program.\n */\n UnicodeTrueTypeFont.prototype.createFontProgram = function () {\n this.fontProgram.fontProgramBeginSave = new SaveFontProgramEventHandler(this);\n };\n /**\n * Creates system info dictionary for CID font.\n * @private\n */\n UnicodeTrueTypeFont.prototype.createSystemInfo = function () {\n var systemInfo = new PdfDictionary();\n systemInfo.items.setValue(this.dictionaryProperties.registry, new PdfString('Adobe'));\n systemInfo.items.setValue(this.dictionaryProperties.ordering, new PdfString(this.dictionaryProperties.identity));\n systemInfo.items.setValue(this.dictionaryProperties.supplement, new PdfNumber(0));\n return systemInfo;\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n UnicodeTrueTypeFont.prototype.descendantFontBeginSave = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var width = this.getDescendantWidth();\n if (width !== null) {\n this.descendantFont.items.setValue(this.dictionaryProperties.w, width);\n }\n }\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n UnicodeTrueTypeFont.prototype.cmapBeginSave = function () {\n this.generateCmap();\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n /* tslint:disable */\n UnicodeTrueTypeFont.prototype.fontDictionaryBeginSave = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0 && !this.fontDictionary.containsKey(this.dictionaryProperties.toUnicode)) {\n this.fontDictionary.items.setValue(this.dictionaryProperties.toUnicode, new PdfReferenceHolder(this.cmap));\n }\n };\n /* tslint:enable */\n /**\n * Runs before font program stream save.\n */\n UnicodeTrueTypeFont.prototype.fontProgramBeginSave = function () {\n this.isCompress = true;\n this.generateFontProgram();\n };\n /**\n * Gets width description pad array for c i d font.\n */\n UnicodeTrueTypeFont.prototype.getDescendantWidth = function () {\n var array = new PdfArray();\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var glyphInfo = [];\n // if (!this.isEmbedFont) {\n var keys = this.usedChars.keys();\n for (var i = 0; i < keys.length; i++) {\n var chLen = keys[i];\n var glyph = this.ttfReader.getGlyph(chLen);\n if (glyph.empty) {\n continue;\n }\n glyphInfo.push(glyph);\n }\n // } else {\n // glyphInfo = this.ttfReader.getAllGlyphs();\n // }\n glyphInfo.sort(function (a, b) { return a.index - b.index; });\n var firstGlyphIndex = 0;\n var lastGlyphIndex = 0;\n var firstGlyphIndexWasSet = false;\n var widthDetails = new PdfArray();\n // if (!this.isEmbedFont) {\n for (var i = 0; i < glyphInfo.length; i++) {\n var glyph = glyphInfo[i];\n if (!firstGlyphIndexWasSet) {\n firstGlyphIndexWasSet = true;\n firstGlyphIndex = glyph.index;\n lastGlyphIndex = glyph.index - 1;\n }\n if ((lastGlyphIndex + 1 !== glyph.index || (i + 1 === glyphInfo.length)) && glyphInfo.length > 1) {\n // Add glyph index / width.\n array.add(new PdfNumber(firstGlyphIndex));\n if (i !== 0) {\n array.add(widthDetails);\n }\n firstGlyphIndex = glyph.index;\n widthDetails = new PdfArray();\n }\n widthDetails.add(new PdfNumber(glyph.width));\n if (i + 1 === glyphInfo.length) {\n array.add(new PdfNumber(firstGlyphIndex));\n array.add(widthDetails);\n }\n lastGlyphIndex = glyph.index;\n }\n // } else {\n // for (let i : number = 0; i < glyphInfo.length; i++) {\n // let glyph : TtfGlyphInfo = glyphInfo[i];\n // if (!firstGlyphIndexWasSet) {\n // firstGlyphIndexWasSet = true;\n // lastGlyphIndex = glyph.index - 1;\n // }\n // firstGlyphIndex = glyph.index;\n // if ((lastGlyphIndex + 1 === glyph.index || (i + 1 === glyphInfo.length)) && glyphInfo.length > 1) {\n // // Add glyph index / width.\n // widthDetails.add(new PdfNumber(glyph.width));\n // array.add(new PdfNumber(firstGlyphIndex));\n // array.add(widthDetails);\n // widthDetails = new PdfArray();\n // }\n // lastGlyphIndex = glyph.index;\n // }\n // }\n }\n return array;\n };\n /**\n * Creates cmap.\n */\n UnicodeTrueTypeFont.prototype.generateCmap = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var glyphChars = this.ttfReader.getGlyphChars(this.usedChars);\n if (glyphChars.size() > 0) {\n var keys = glyphChars.keys().sort();\n // add first and last glyph indexes\n var first = keys[0];\n var last = keys[keys.length - 1];\n var middlePart = this.toHexString(first, false) + this.toHexString(last, false) + Operators.newLine;\n var builder = '';\n builder += this.cmapPrefix;\n builder += middlePart;\n builder += this.cmapEndCodespaceRange;\n var nextRange = 0;\n for (var i = 0; i < keys.length; i++) {\n if (nextRange === 0) {\n if (i !== 0) {\n builder += this.cmapEndRange;\n }\n nextRange = Math.min(100, keys.length - i);\n builder += nextRange;\n builder += Operators.whiteSpace;\n builder += this.cmapBeginRange;\n }\n nextRange -= 1;\n var key = keys[i];\n /* tslint:disable */\n builder += this.toHexString(key, true) + this.toHexString(key, true) + this.toHexString(glyphChars.getValue(key), true) + '\\n';\n /* tslint:enable */\n }\n builder += this.cmapSuffix;\n this.cmap.clearStream();\n this.cmap.isFont = true;\n this.cmap.write(builder);\n }\n }\n };\n /**\n * Generates font program.\n */\n UnicodeTrueTypeFont.prototype.generateFontProgram = function () {\n var fontProgram = null;\n this.usedChars = (this.usedChars === null || this.usedChars === undefined) ? new Dictionary() : this.usedChars;\n this.ttfReader.setOffset(0);\n fontProgram = this.ttfReader.readFontProgram(this.usedChars);\n this.fontProgram.clearStream();\n this.fontProgram.isFont = true;\n this.fontProgram.writeBytes(fontProgram);\n };\n /**\n * Calculates flags for the font descriptor.\n * @private\n */\n UnicodeTrueTypeFont.prototype.getDescriptorFlags = function () {\n var flags = 0;\n var metrics = this.ttfReader.metrics;\n if (metrics.isFixedPitch) {\n flags |= FontDescriptorFlags.FixedPitch;\n }\n if (metrics.isSymbol) {\n flags |= FontDescriptorFlags.Symbolic;\n }\n else {\n flags |= FontDescriptorFlags.Nonsymbolic;\n }\n if (metrics.isItalic) {\n flags |= FontDescriptorFlags.Italic;\n }\n if (metrics.isBold) {\n flags |= FontDescriptorFlags.ForceBold;\n }\n return flags;\n };\n /**\n * Calculates BoundBox of the descriptor.\n * @private\n */\n UnicodeTrueTypeFont.prototype.getBoundBox = function () {\n var rect = this.ttfReader.metrics.fontBox;\n var width = Math.abs(rect.right - rect.left);\n var height = Math.abs(rect.top - rect.bottom);\n var rectangle = new RectangleF(rect.left, rect.bottom, width, height);\n return rectangle;\n };\n /**\n * Converts integer of decimal system to hex integer.\n */\n UnicodeTrueTypeFont.prototype.toHexString = function (n, isCaseChange) {\n var s = n.toString(16);\n if (isCaseChange) {\n s = s.toUpperCase();\n }\n return '<0000'.substring(0, 5 - s.length) + s + '>';\n };\n /**\n * Stores used symbols.\n */\n UnicodeTrueTypeFont.prototype.setSymbols = function (text) {\n if (text === null) {\n throw new Error('Argument Null Exception : text');\n }\n if (this.usedChars === null || this.usedChars === undefined) {\n this.usedChars = new Dictionary();\n }\n for (var i = 0; i < text.length; i++) {\n var ch = text[i];\n this.usedChars.setValue(ch, String.fromCharCode(0));\n }\n // else {\n // if (text === null) {\n // throw new Error('Argument Null Exception : glyphs');\n // }\n // if (this.usedChars === null || this.usedChars === undefined) {\n // this.usedChars = new Dictionary();\n // }\n // for (let i : number = 0; i < text.length; i++) {\n // let glyphIndex : number = text[i];\n // let glyph : TtfGlyphInfo = this.ttfReader.getGlyph(glyphIndex);\n // if (!glyph == null) {\n // let c : string = glyph.charCode.toLocaleString();\n // this.usedChars.setValue(c, String.fromCharCode(0));\n // }\n // }\n // }\n if (this.isEmbedFont === false) {\n this.getDescendantWidth();\n }\n };\n return UnicodeTrueTypeFont;\n}());\nexport { UnicodeTrueTypeFont };\n","/**\n * ArabicShapeRenderer.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../../../collections/dictionary';\nvar ArabicShapeRenderer = /** @class */ (function () {\n //#endregion\n //#region Constructor\n function ArabicShapeRenderer() {\n //#region Constants\n this.arabicCharTable = [['\\u0621', '\\uFE80'], ['\\u0622', '\\uFE81', '\\uFE82'],\n ['\\u0623', '\\uFE83', '\\uFE84'],\n ['\\u0624', '\\uFE85', '\\uFE86'],\n ['\\u0625', '\\uFE87', '\\uFE88'],\n ['\\u0626', '\\uFE89', '\\uFE8A', '\\uFE8B', '\\uFE8C'],\n ['\\u0627', '\\uFE8D', '\\uFE8E'],\n ['\\u0628', '\\uFE8F', '\\uFE90', '\\uFE91', '\\uFE92'],\n ['\\u0629', '\\uFE93', '\\uFE94'],\n ['\\u062A', '\\uFE95', '\\uFE96', '\\uFE97', '\\uFE98'],\n ['\\u062B', '\\uFE99', '\\uFE9A', '\\uFE9B', '\\uFE9C'],\n ['\\u062C', '\\uFE9D', '\\uFE9E', '\\uFE9F', '\\uFEA0'],\n ['\\u062D', '\\uFEA1', '\\uFEA2', '\\uFEA3', '\\uFEA4'],\n ['\\u062E', '\\uFEA5', '\\uFEA6', '\\uFEA7', '\\uFEA8'],\n ['\\u062F', '\\uFEA9', '\\uFEAA'],\n ['\\u0630', '\\uFEAB', '\\uFEAC'],\n ['\\u0631', '\\uFEAD', '\\uFEAE'],\n ['\\u0632', '\\uFEAF', '\\uFEB0'],\n ['\\u0633', '\\uFEB1', '\\uFEB2', '\\uFEB3', '\\uFEB4'],\n ['\\u0634', '\\uFEB5', '\\uFEB6', '\\uFEB7', '\\uFEB8'],\n ['\\u0635', '\\uFEB9', '\\uFEBA', '\\uFEBB', '\\uFEBC'],\n ['\\u0636', '\\uFEBD', '\\uFEBE', '\\uFEBF', '\\uFEC0'],\n ['\\u0637', '\\uFEC1', '\\uFEC2', '\\uFEC3', '\\uFEC4'],\n ['\\u0638', '\\uFEC5', '\\uFEC6', '\\uFEC7', '\\uFEC8'],\n ['\\u0639', '\\uFEC9', '\\uFECA', '\\uFECB', '\\uFECC'],\n ['\\u063A', '\\uFECD', '\\uFECE', '\\uFECF', '\\uFED0'],\n ['\\u0640', '\\u0640', '\\u0640', '\\u0640', '\\u0640'],\n ['\\u0641', '\\uFED1', '\\uFED2', '\\uFED3', '\\uFED4'],\n ['\\u0642', '\\uFED5', '\\uFED6', '\\uFED7', '\\uFED8'],\n ['\\u0643', '\\uFED9', '\\uFEDA', '\\uFEDB', '\\uFEDC'],\n ['\\u0644', '\\uFEDD', '\\uFEDE', '\\uFEDF', '\\uFEE0'],\n ['\\u0645', '\\uFEE1', '\\uFEE2', '\\uFEE3', '\\uFEE4'],\n ['\\u0646', '\\uFEE5', '\\uFEE6', '\\uFEE7', '\\uFEE8'],\n ['\\u0647', '\\uFEE9', '\\uFEEA', '\\uFEEB', '\\uFEEC'],\n ['\\u0648', '\\uFEED', '\\uFEEE'],\n ['\\u0649', '\\uFEEF', '\\uFEF0', '\\uFBE8', '\\uFBE9'],\n ['\\u064A', '\\uFEF1', '\\uFEF2', '\\uFEF3', '\\uFEF4'],\n ['\\u0671', '\\uFB50', '\\uFB51'],\n ['\\u0679', '\\uFB66', '\\uFB67', '\\uFB68', '\\uFB69'],\n ['\\u067A', '\\uFB5E', '\\uFB5F', '\\uFB60', '\\uFB61'],\n ['\\u067B', '\\uFB52', '\\uFB53', '\\uFB54', '\\uFB55'],\n ['\\u067E', '\\uFB56', '\\uFB57', '\\uFB58', '\\uFB59'],\n ['\\u067F', '\\uFB62', '\\uFB63', '\\uFB64', '\\uFB65'],\n ['\\u0680', '\\uFB5A', '\\uFB5B', '\\uFB5C', '\\uFB5D'],\n ['\\u0683', '\\uFB76', '\\uFB77', '\\uFB78', '\\uFB79'],\n ['\\u0684', '\\uFB72', '\\uFB73', '\\uFB74', '\\uFB75'],\n ['\\u0686', '\\uFB7A', '\\uFB7B', '\\uFB7C', '\\uFB7D'],\n ['\\u0687', '\\uFB7E', '\\uFB7F', '\\uFB80', '\\uFB81'],\n ['\\u0688', '\\uFB88', '\\uFB89'],\n ['\\u068C', '\\uFB84', '\\uFB85'],\n ['\\u068D', '\\uFB82', '\\uFB83'],\n ['\\u068E', '\\uFB86', '\\uFB87'],\n ['\\u0691', '\\uFB8C', '\\uFB8D'],\n ['\\u0698', '\\uFB8A', '\\uFB8B'],\n ['\\u06A4', '\\uFB6A', '\\uFB6B', '\\uFB6C', '\\uFB6D'],\n ['\\u06A6', '\\uFB6E', '\\uFB6F', '\\uFB70', '\\uFB71'],\n ['\\u06A9', '\\uFB8E', '\\uFB8F', '\\uFB90', '\\uFB91'],\n ['\\u06AD', '\\uFBD3', '\\uFBD4', '\\uFBD5', '\\uFBD6'],\n ['\\u06AF', '\\uFB92', '\\uFB93', '\\uFB94', '\\uFB95'],\n ['\\u06B1', '\\uFB9A', '\\uFB9B', '\\uFB9C', '\\uFB9D'],\n ['\\u06B3', '\\uFB96', '\\uFB97', '\\uFB98', '\\uFB99'],\n ['\\u06BA', '\\uFB9E', '\\uFB9F'],\n ['\\u06BB', '\\uFBA0', '\\uFBA1', '\\uFBA2', '\\uFBA3'],\n ['\\u06BE', '\\uFBAA', '\\uFBAB', '\\uFBAC', '\\uFBAD'],\n ['\\u06C0', '\\uFBA4', '\\uFBA5'],\n ['\\u06C1', '\\uFBA6', '\\uFBA7', '\\uFBA8', '\\uFBA9'],\n ['\\u06C5', '\\uFBE0', '\\uFBE1'],\n ['\\u06C6', '\\uFBD9', '\\uFBDA'],\n ['\\u06C7', '\\uFBD7', '\\uFBD8'],\n ['\\u06C8', '\\uFBDB', '\\uFBDC'],\n ['\\u06C9', '\\uFBE2', '\\uFBE3'],\n ['\\u06CB', '\\uFBDE', '\\uFBDF'],\n ['\\u06CC', '\\uFBFC', '\\uFBFD', '\\uFBFE', '\\uFBFF'],\n ['\\u06D0', '\\uFBE4', '\\uFBE5', '\\uFBE6', '\\uFBE7'],\n ['\\u06D2', '\\uFBAE', '\\uFBAF'],\n ['\\u06D3', '\\uFBB0', '\\uFBB1']\n ];\n this.alef = '\\u0627';\n this.alefHamza = '\\u0623';\n this.alefHamzaBelow = '\\u0625';\n this.alefMadda = '\\u0622';\n this.lam = '\\u0644';\n this.hamza = '\\u0621';\n this.zeroWidthJoiner = '\\u200D';\n this.hamzaAbove = '\\u0654';\n this.hamzaBelow = '\\u0655';\n this.wawHamza = '\\u0624';\n this.yehHamza = '\\u0626';\n this.waw = '\\u0648';\n this.alefMaksura = '\\u0649';\n this.yeh = '\\u064A';\n this.farsiYeh = '\\u06CC';\n this.shadda = '\\u0651';\n this.madda = '\\u0653';\n this.lwa = '\\uFEFB';\n this.lwawh = '\\uFEF7';\n this.lwawhb = '\\uFEF9';\n this.lwawm = '\\uFEF5';\n this.bwhb = '\\u06D3';\n this.fathatan = '\\u064B';\n this.superScriptalef = '\\u0670';\n this.vowel = 0x1;\n // #endregion\n //#region Fields\n this.arabicMapTable = new Dictionary();\n for (var i = 0; i < this.arabicCharTable.length; i++) {\n this.arabicMapTable.setValue(this.arabicCharTable[i][0], this.arabicCharTable[i]);\n }\n }\n //#endregion\n //#region implementation\n ArabicShapeRenderer.prototype.getCharacterShape = function (input, index) {\n if ((input >= this.hamza) && (input <= this.bwhb)) {\n var value = [];\n if (this.arabicMapTable.getValue(input)) {\n value = this.arabicMapTable.getValue(input);\n return value[index + 1];\n }\n }\n else if (input >= this.lwawm && input <= this.lwa) {\n return (input);\n }\n return input;\n };\n ArabicShapeRenderer.prototype.shape = function (text, level) {\n var builder = '';\n var str2 = '';\n for (var i = 0; i < text.length; i++) {\n var c = text[i];\n if (c >= '؀' && c <= 'ۿ') {\n //if(c>= 0x0600.toString() && c<= 0x06FF.toString()) {\n str2 = str2 + c;\n }\n else {\n if (str2.length > 0) {\n var st = this.doShape(str2.toString(), 0);\n builder = builder + st;\n str2 = '';\n }\n builder = builder + c;\n }\n }\n if (str2.length > 0) {\n var st = this.doShape(str2.toString(), 0);\n builder = builder + st;\n }\n return builder.toString();\n };\n ArabicShapeRenderer.prototype.doShape = function (input, level) {\n var str = '';\n var ligature = 0;\n var len = 0;\n var i = 0;\n var next = '';\n var previous = new ArabicShape();\n var present = new ArabicShape();\n while (i < input.length) {\n next = input[i++];\n ligature = this.ligature(next, present);\n if (ligature === 0) {\n var shapeCount = this.getShapeCount(next);\n len = (shapeCount === 1) ? 0 : 2;\n if (previous.Shapes > 2) {\n len += 1;\n }\n len = len % (present.Shapes);\n present.Value = this.getCharacterShape(present.Value, len);\n str = this.append(str, previous, level);\n previous = present;\n present = new ArabicShape();\n present.Value = next;\n present.Shapes = shapeCount;\n present.Ligature++;\n }\n }\n len = (previous.Shapes > 2) ? 1 : 0;\n len = len % (present.Shapes);\n present.Value = this.getCharacterShape(present.Value, len);\n str = this.append(str, previous, level);\n str = this.append(str, present, level);\n return str.toString();\n };\n ArabicShapeRenderer.prototype.append = function (builder, shape, level) {\n if (shape.Value !== '') {\n builder = builder + shape.Value;\n shape.Ligature -= 1;\n if (shape.Type !== '') {\n if ((level & this.vowel) === 0) {\n builder = builder + shape.Type;\n shape.Ligature -= 1;\n }\n else {\n shape.Ligature -= 1;\n }\n }\n if (shape.vowel !== '') {\n if ((level & this.vowel) === 0) {\n builder = builder + shape.vowel;\n shape.Ligature -= 1;\n }\n else {\n shape.Ligature -= 1;\n }\n }\n }\n return builder;\n };\n ArabicShapeRenderer.prototype.ligature = function (value, shape) {\n if (shape.Value !== '') {\n var result = 0;\n if ((value >= this.fathatan && value <= this.hamzaBelow) || value === this.superScriptalef) {\n result = 1;\n if ((shape.vowel !== '') && (value !== this.shadda)) {\n result = 2;\n }\n if (value === this.shadda) {\n if (shape.Type == null) {\n shape.Type = this.shadda;\n }\n else {\n return 0;\n }\n }\n else if (value === this.hamzaBelow) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefHamzaBelow;\n result = 2;\n }\n else if (value === this.lwa) {\n shape.Value = this.lwawhb;\n result = 2;\n }\n else {\n shape.Type = this.hamzaBelow;\n }\n }\n else if (value === this.hamzaAbove) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefHamza;\n result = 2;\n }\n else if (shape.Value === this.lwa) {\n shape.Value = this.lwawh;\n result = 2;\n }\n else if (shape.Value === this.waw) {\n shape.Value = this.wawHamza;\n result = 2;\n }\n else if (shape.Value === this.yeh || shape.Value === this.alefMaksura || shape.Value === this.farsiYeh) {\n shape.Value = this.yehHamza;\n result = 2;\n }\n else {\n shape.Type = this.hamzaAbove;\n }\n }\n else if (value === this.madda) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefMadda;\n result = 2;\n }\n }\n else {\n shape.vowel = value;\n }\n if (result === 1) {\n shape.Ligature++;\n }\n return result;\n }\n if (shape.vowel !== '') {\n return 0;\n }\n if (shape.Value === this.lam) {\n if (value === this.alef) {\n shape.Value = this.lwa;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefHamza) {\n shape.Value = this.lwawh;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefHamzaBelow) {\n shape.Value = this.lwawhb;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefMadda) {\n shape.Value = this.lwawm;\n shape.Shapes = 2;\n result = 3;\n }\n }\n // else if (shape.Value === '') {\n // shape.Value = value;\n // shape.Shapes = this.getShapeCount(value);\n // result = 1;\n // }\n return result;\n }\n else {\n return 0;\n }\n };\n ArabicShapeRenderer.prototype.getShapeCount = function (shape) {\n if ((shape >= this.hamza) && (shape <= this.bwhb) && !((shape >= this.fathatan && shape <= this.hamzaBelow)\n || shape === this.superScriptalef)) {\n var c = [];\n if (this.arabicMapTable.getValue(shape)) {\n c = this.arabicMapTable.getValue(shape);\n return c.length - 1;\n }\n }\n else if (shape === this.zeroWidthJoiner) {\n return 4;\n }\n return 1;\n };\n return ArabicShapeRenderer;\n}());\nexport { ArabicShapeRenderer };\n//#endregion\n//#region Internals\nvar ArabicShape = /** @class */ (function () {\n function ArabicShape() {\n //#region Fields\n this.shapeValue = '';\n this.shapeType = '';\n this.shapeVowel = '';\n this.shapeLigature = 0;\n this.shapeShapes = 1;\n //#endregion\n }\n Object.defineProperty(ArabicShape.prototype, \"Value\", {\n //#endregion\n //#region Properties \n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeValue;\n },\n set: function (value) {\n this.shapeValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Type\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeType;\n },\n set: function (value) {\n this.shapeType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"vowel\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeVowel;\n },\n set: function (value) {\n this.shapeVowel = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Ligature\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeLigature;\n },\n set: function (value) {\n this.shapeLigature = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Shapes\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeShapes;\n },\n set: function (value) {\n this.shapeShapes = value;\n },\n enumerable: true,\n configurable: true\n });\n return ArabicShape;\n}());\nexport { ArabicShape };\n//#endregion\n","/**\n * Bidi.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../../../collections/dictionary';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar Bidi = /** @class */ (function () {\n //#endregion\n //#region Constructor\n function Bidi() {\n //#region Fields\n this.indexes = [];\n this.indexLevels = [];\n this.mirroringShapeCharacters = new Dictionary();\n this.update();\n }\n //#endregion\n //#region implementation\n Bidi.prototype.doMirrorShaping = function (text) {\n var result = [];\n for (var i = 0; i < text.length; i++) {\n if (((this.indexLevels[i] & 1) === 1) && this.mirroringShapeCharacters.containsKey(text[i].charCodeAt(0))) {\n result[i] = String.fromCharCode(this.mirroringShapeCharacters.getValue(text[i].charCodeAt(0)));\n }\n else {\n result[i] = text[i].toString();\n }\n }\n var res = '';\n for (var j = 0; j < result.length; j++) {\n res = res + result[j];\n }\n return res;\n };\n Bidi.prototype.getLogicalToVisualString = function (inputText, isRtl) {\n var rtlCharacters = new RtlCharacters();\n this.indexLevels = rtlCharacters.getVisualOrder(inputText, isRtl);\n this.setDefaultIndexLevel();\n this.doOrder(0, this.indexLevels.length - 1);\n var text = this.doMirrorShaping(inputText);\n //let text : string = inputText;\n var resultBuilder = '';\n for (var i = 0; i < this.indexes.length; i++) {\n var index = this.indexes[i];\n resultBuilder += text[index];\n }\n return resultBuilder.toString();\n };\n Bidi.prototype.setDefaultIndexLevel = function () {\n for (var i = 0; i < this.indexLevels.length; i++) {\n this.indexes[i] = i;\n }\n };\n Bidi.prototype.doOrder = function (sIndex, eIndex) {\n var max = this.indexLevels[sIndex];\n var min = max;\n var odd = max;\n var even = max;\n for (var i = sIndex + 1; i <= eIndex; ++i) {\n var data = this.indexLevels[i];\n if (data > max) {\n max = data;\n }\n else if (data < min) {\n min = data;\n }\n odd &= data;\n even |= data;\n }\n if ((even & 1) === 0) {\n return;\n }\n if ((odd & 1) === 1) {\n this.reArrange(sIndex, eIndex + 1);\n return;\n }\n min |= 1;\n while (max >= min) {\n var pstart = sIndex;\n /*tslint:disable:no-constant-condition */\n while (true) {\n while (pstart <= eIndex) {\n if (this.indexLevels[pstart] >= max) {\n break;\n }\n pstart += 1;\n }\n if (pstart > eIndex) {\n break;\n }\n var pend = pstart + 1;\n while (pend <= eIndex) {\n if (this.indexLevels[pend] < max) {\n break;\n }\n pend += 1;\n }\n this.reArrange(pstart, pend);\n pstart = pend + 1;\n }\n max -= 1;\n }\n };\n Bidi.prototype.reArrange = function (i, j) {\n var length = (i + j) / 2;\n --j;\n for (; i < length; ++i, --j) {\n var temp = this.indexes[i];\n this.indexes[i] = this.indexes[j];\n this.indexes[j] = temp;\n }\n };\n Bidi.prototype.update = function () {\n this.mirroringShapeCharacters.setValue(40, 41);\n this.mirroringShapeCharacters.setValue(41, 40);\n this.mirroringShapeCharacters.setValue(60, 62);\n this.mirroringShapeCharacters.setValue(62, 60);\n this.mirroringShapeCharacters.setValue(91, 93);\n this.mirroringShapeCharacters.setValue(93, 91);\n this.mirroringShapeCharacters.setValue(123, 125);\n this.mirroringShapeCharacters.setValue(125, 123);\n this.mirroringShapeCharacters.setValue(171, 187);\n this.mirroringShapeCharacters.setValue(187, 171);\n this.mirroringShapeCharacters.setValue(8249, 8250);\n this.mirroringShapeCharacters.setValue(8250, 8249);\n this.mirroringShapeCharacters.setValue(8261, 8262);\n this.mirroringShapeCharacters.setValue(8262, 8261);\n this.mirroringShapeCharacters.setValue(8317, 8318);\n this.mirroringShapeCharacters.setValue(8318, 8317);\n this.mirroringShapeCharacters.setValue(8333, 8334);\n this.mirroringShapeCharacters.setValue(8334, 8333);\n this.mirroringShapeCharacters.setValue(8712, 8715);\n this.mirroringShapeCharacters.setValue(8713, 8716);\n this.mirroringShapeCharacters.setValue(8714, 8717);\n this.mirroringShapeCharacters.setValue(8715, 8712);\n this.mirroringShapeCharacters.setValue(8716, 8713);\n this.mirroringShapeCharacters.setValue(8717, 8714);\n this.mirroringShapeCharacters.setValue(8725, 10741);\n this.mirroringShapeCharacters.setValue(8764, 8765);\n this.mirroringShapeCharacters.setValue(8765, 8764);\n this.mirroringShapeCharacters.setValue(8771, 8909);\n this.mirroringShapeCharacters.setValue(8786, 8787);\n this.mirroringShapeCharacters.setValue(8787, 8786);\n this.mirroringShapeCharacters.setValue(8788, 8789);\n this.mirroringShapeCharacters.setValue(8789, 8788);\n this.mirroringShapeCharacters.setValue(8804, 8805);\n this.mirroringShapeCharacters.setValue(8805, 8804);\n this.mirroringShapeCharacters.setValue(8806, 8807);\n this.mirroringShapeCharacters.setValue(8807, 8806);\n this.mirroringShapeCharacters.setValue(8808, 8809);\n this.mirroringShapeCharacters.setValue(8809, 8808);\n this.mirroringShapeCharacters.setValue(8810, 8811);\n this.mirroringShapeCharacters.setValue(8811, 8810);\n this.mirroringShapeCharacters.setValue(8814, 8815);\n this.mirroringShapeCharacters.setValue(8815, 8814);\n this.mirroringShapeCharacters.setValue(8816, 8817);\n this.mirroringShapeCharacters.setValue(8817, 8816);\n this.mirroringShapeCharacters.setValue(8818, 8819);\n this.mirroringShapeCharacters.setValue(8819, 8818);\n this.mirroringShapeCharacters.setValue(8820, 8821);\n this.mirroringShapeCharacters.setValue(8821, 8820);\n this.mirroringShapeCharacters.setValue(8822, 8823);\n this.mirroringShapeCharacters.setValue(8823, 8822);\n this.mirroringShapeCharacters.setValue(8824, 8825);\n this.mirroringShapeCharacters.setValue(8825, 8824);\n this.mirroringShapeCharacters.setValue(8826, 8827);\n this.mirroringShapeCharacters.setValue(8827, 8826);\n this.mirroringShapeCharacters.setValue(8828, 8829);\n this.mirroringShapeCharacters.setValue(8829, 8828);\n this.mirroringShapeCharacters.setValue(8830, 8831);\n this.mirroringShapeCharacters.setValue(8831, 8830);\n this.mirroringShapeCharacters.setValue(8832, 8833);\n this.mirroringShapeCharacters.setValue(8833, 8832);\n this.mirroringShapeCharacters.setValue(8834, 8835);\n this.mirroringShapeCharacters.setValue(8835, 8834);\n this.mirroringShapeCharacters.setValue(8836, 8837);\n this.mirroringShapeCharacters.setValue(8837, 8836);\n this.mirroringShapeCharacters.setValue(8838, 8839);\n this.mirroringShapeCharacters.setValue(8839, 8838);\n this.mirroringShapeCharacters.setValue(8840, 8841);\n this.mirroringShapeCharacters.setValue(8841, 8840);\n this.mirroringShapeCharacters.setValue(8842, 8843);\n this.mirroringShapeCharacters.setValue(8843, 8842);\n this.mirroringShapeCharacters.setValue(8847, 8848);\n this.mirroringShapeCharacters.setValue(8848, 8847);\n this.mirroringShapeCharacters.setValue(8849, 8850);\n this.mirroringShapeCharacters.setValue(8850, 8849);\n this.mirroringShapeCharacters.setValue(8856, 10680);\n this.mirroringShapeCharacters.setValue(8866, 8867);\n this.mirroringShapeCharacters.setValue(8867, 8866);\n this.mirroringShapeCharacters.setValue(8870, 10974);\n this.mirroringShapeCharacters.setValue(8872, 10980);\n this.mirroringShapeCharacters.setValue(8873, 10979);\n this.mirroringShapeCharacters.setValue(8875, 10981);\n this.mirroringShapeCharacters.setValue(8880, 8881);\n this.mirroringShapeCharacters.setValue(8881, 8880);\n this.mirroringShapeCharacters.setValue(8882, 8883);\n this.mirroringShapeCharacters.setValue(8883, 8882);\n this.mirroringShapeCharacters.setValue(8884, 8885);\n this.mirroringShapeCharacters.setValue(8885, 8884);\n /*tslint:disable:max-func-body-length */\n this.mirroringShapeCharacters.setValue(8886, 8887);\n this.mirroringShapeCharacters.setValue(8887, 8886);\n this.mirroringShapeCharacters.setValue(8905, 8906);\n this.mirroringShapeCharacters.setValue(8906, 8905);\n this.mirroringShapeCharacters.setValue(8907, 8908);\n this.mirroringShapeCharacters.setValue(8908, 8907);\n this.mirroringShapeCharacters.setValue(8909, 8771);\n this.mirroringShapeCharacters.setValue(8912, 8913);\n this.mirroringShapeCharacters.setValue(8913, 8912);\n this.mirroringShapeCharacters.setValue(8918, 8919);\n this.mirroringShapeCharacters.setValue(8919, 8918);\n this.mirroringShapeCharacters.setValue(8920, 8921);\n this.mirroringShapeCharacters.setValue(8921, 8920);\n this.mirroringShapeCharacters.setValue(8922, 8923);\n this.mirroringShapeCharacters.setValue(8923, 8922);\n this.mirroringShapeCharacters.setValue(8924, 8925);\n this.mirroringShapeCharacters.setValue(8925, 8924);\n this.mirroringShapeCharacters.setValue(8926, 8927);\n this.mirroringShapeCharacters.setValue(8927, 8926);\n this.mirroringShapeCharacters.setValue(8928, 8929);\n this.mirroringShapeCharacters.setValue(8929, 8928);\n this.mirroringShapeCharacters.setValue(8930, 8931);\n this.mirroringShapeCharacters.setValue(8931, 8930);\n this.mirroringShapeCharacters.setValue(8932, 8933);\n this.mirroringShapeCharacters.setValue(8933, 8932);\n this.mirroringShapeCharacters.setValue(8934, 8935);\n this.mirroringShapeCharacters.setValue(8935, 8934);\n this.mirroringShapeCharacters.setValue(8936, 8937);\n this.mirroringShapeCharacters.setValue(8937, 8936);\n this.mirroringShapeCharacters.setValue(8938, 8939);\n this.mirroringShapeCharacters.setValue(8939, 8938);\n this.mirroringShapeCharacters.setValue(8940, 8941);\n this.mirroringShapeCharacters.setValue(8941, 8940);\n this.mirroringShapeCharacters.setValue(8944, 8945);\n this.mirroringShapeCharacters.setValue(8945, 8944);\n this.mirroringShapeCharacters.setValue(8946, 8954);\n this.mirroringShapeCharacters.setValue(8947, 8955);\n this.mirroringShapeCharacters.setValue(8948, 8956);\n this.mirroringShapeCharacters.setValue(8950, 8957);\n this.mirroringShapeCharacters.setValue(8951, 8958);\n this.mirroringShapeCharacters.setValue(8954, 8946);\n this.mirroringShapeCharacters.setValue(8955, 8947);\n this.mirroringShapeCharacters.setValue(8956, 8948);\n this.mirroringShapeCharacters.setValue(8957, 8950);\n this.mirroringShapeCharacters.setValue(8958, 8951);\n this.mirroringShapeCharacters.setValue(8968, 8969);\n this.mirroringShapeCharacters.setValue(8969, 8968);\n this.mirroringShapeCharacters.setValue(8970, 8971);\n this.mirroringShapeCharacters.setValue(8971, 8970);\n this.mirroringShapeCharacters.setValue(9001, 9002);\n this.mirroringShapeCharacters.setValue(9002, 9001);\n this.mirroringShapeCharacters.setValue(10088, 10089);\n this.mirroringShapeCharacters.setValue(10089, 10088);\n this.mirroringShapeCharacters.setValue(10090, 10091);\n this.mirroringShapeCharacters.setValue(10091, 10090);\n this.mirroringShapeCharacters.setValue(10092, 10093);\n this.mirroringShapeCharacters.setValue(10093, 10092);\n this.mirroringShapeCharacters.setValue(10094, 10095);\n this.mirroringShapeCharacters.setValue(10095, 10094);\n this.mirroringShapeCharacters.setValue(10096, 10097);\n this.mirroringShapeCharacters.setValue(10097, 10096);\n this.mirroringShapeCharacters.setValue(10098, 10099);\n this.mirroringShapeCharacters.setValue(10099, 10098);\n this.mirroringShapeCharacters.setValue(10100, 10101);\n this.mirroringShapeCharacters.setValue(10101, 10100);\n this.mirroringShapeCharacters.setValue(10197, 10198);\n this.mirroringShapeCharacters.setValue(10198, 10197);\n this.mirroringShapeCharacters.setValue(10205, 10206);\n this.mirroringShapeCharacters.setValue(10206, 10205);\n this.mirroringShapeCharacters.setValue(10210, 10211);\n this.mirroringShapeCharacters.setValue(10211, 10210);\n this.mirroringShapeCharacters.setValue(10212, 10213);\n this.mirroringShapeCharacters.setValue(10213, 10212);\n this.mirroringShapeCharacters.setValue(10214, 10215);\n this.mirroringShapeCharacters.setValue(10215, 10214);\n this.mirroringShapeCharacters.setValue(10216, 10217);\n this.mirroringShapeCharacters.setValue(10217, 10216);\n this.mirroringShapeCharacters.setValue(10218, 10219);\n this.mirroringShapeCharacters.setValue(10219, 10218);\n this.mirroringShapeCharacters.setValue(10627, 10628);\n this.mirroringShapeCharacters.setValue(10628, 10627);\n this.mirroringShapeCharacters.setValue(10629, 10630);\n this.mirroringShapeCharacters.setValue(10630, 10629);\n this.mirroringShapeCharacters.setValue(10631, 10632);\n this.mirroringShapeCharacters.setValue(10632, 10631);\n this.mirroringShapeCharacters.setValue(10633, 10634);\n this.mirroringShapeCharacters.setValue(10634, 10633);\n this.mirroringShapeCharacters.setValue(10635, 10636);\n this.mirroringShapeCharacters.setValue(10636, 10635);\n this.mirroringShapeCharacters.setValue(10637, 10640);\n this.mirroringShapeCharacters.setValue(10638, 10639);\n this.mirroringShapeCharacters.setValue(10639, 10638);\n this.mirroringShapeCharacters.setValue(10640, 10637);\n this.mirroringShapeCharacters.setValue(10641, 10642);\n this.mirroringShapeCharacters.setValue(10642, 10641);\n this.mirroringShapeCharacters.setValue(10643, 10644);\n this.mirroringShapeCharacters.setValue(10644, 10643);\n this.mirroringShapeCharacters.setValue(10645, 10646);\n this.mirroringShapeCharacters.setValue(10646, 10645);\n this.mirroringShapeCharacters.setValue(10647, 10648);\n this.mirroringShapeCharacters.setValue(10648, 10647);\n this.mirroringShapeCharacters.setValue(10680, 8856);\n this.mirroringShapeCharacters.setValue(10688, 10689);\n this.mirroringShapeCharacters.setValue(10689, 10688);\n this.mirroringShapeCharacters.setValue(10692, 10693);\n this.mirroringShapeCharacters.setValue(10693, 10692);\n this.mirroringShapeCharacters.setValue(10703, 10704);\n this.mirroringShapeCharacters.setValue(10704, 10703);\n this.mirroringShapeCharacters.setValue(10705, 10706);\n this.mirroringShapeCharacters.setValue(10706, 10705);\n this.mirroringShapeCharacters.setValue(10708, 10709);\n this.mirroringShapeCharacters.setValue(10709, 10708);\n this.mirroringShapeCharacters.setValue(10712, 10713);\n this.mirroringShapeCharacters.setValue(10713, 10712);\n this.mirroringShapeCharacters.setValue(10714, 10715);\n this.mirroringShapeCharacters.setValue(10715, 10714);\n this.mirroringShapeCharacters.setValue(10741, 8725);\n this.mirroringShapeCharacters.setValue(10744, 10745);\n this.mirroringShapeCharacters.setValue(10745, 10744);\n this.mirroringShapeCharacters.setValue(10748, 10749);\n this.mirroringShapeCharacters.setValue(10749, 10748);\n this.mirroringShapeCharacters.setValue(10795, 10796);\n this.mirroringShapeCharacters.setValue(10796, 10795);\n this.mirroringShapeCharacters.setValue(10797, 10796);\n this.mirroringShapeCharacters.setValue(10798, 10797);\n this.mirroringShapeCharacters.setValue(10804, 10805);\n this.mirroringShapeCharacters.setValue(10805, 10804);\n this.mirroringShapeCharacters.setValue(10812, 10813);\n this.mirroringShapeCharacters.setValue(10813, 10812);\n this.mirroringShapeCharacters.setValue(10852, 10853);\n this.mirroringShapeCharacters.setValue(10853, 10852);\n this.mirroringShapeCharacters.setValue(10873, 10874);\n this.mirroringShapeCharacters.setValue(10874, 10873);\n this.mirroringShapeCharacters.setValue(10877, 10878);\n this.mirroringShapeCharacters.setValue(10878, 10877);\n this.mirroringShapeCharacters.setValue(10879, 10880);\n this.mirroringShapeCharacters.setValue(10880, 10879);\n this.mirroringShapeCharacters.setValue(10881, 10882);\n this.mirroringShapeCharacters.setValue(10882, 10881);\n this.mirroringShapeCharacters.setValue(10883, 10884);\n this.mirroringShapeCharacters.setValue(10884, 10883);\n this.mirroringShapeCharacters.setValue(10891, 10892);\n this.mirroringShapeCharacters.setValue(10892, 10891);\n this.mirroringShapeCharacters.setValue(10897, 10898);\n this.mirroringShapeCharacters.setValue(10898, 10897);\n this.mirroringShapeCharacters.setValue(10899, 10900);\n this.mirroringShapeCharacters.setValue(10900, 10899);\n this.mirroringShapeCharacters.setValue(10901, 10902);\n this.mirroringShapeCharacters.setValue(10902, 10901);\n this.mirroringShapeCharacters.setValue(10903, 10904);\n this.mirroringShapeCharacters.setValue(10904, 10903);\n this.mirroringShapeCharacters.setValue(10905, 10906);\n this.mirroringShapeCharacters.setValue(10906, 10905);\n this.mirroringShapeCharacters.setValue(10907, 10908);\n this.mirroringShapeCharacters.setValue(10908, 10907);\n this.mirroringShapeCharacters.setValue(10913, 10914);\n this.mirroringShapeCharacters.setValue(10914, 10913);\n this.mirroringShapeCharacters.setValue(10918, 10919);\n this.mirroringShapeCharacters.setValue(10919, 10918);\n this.mirroringShapeCharacters.setValue(10920, 10921);\n this.mirroringShapeCharacters.setValue(10921, 10920);\n this.mirroringShapeCharacters.setValue(10922, 10923);\n this.mirroringShapeCharacters.setValue(10923, 10922);\n this.mirroringShapeCharacters.setValue(10924, 10925);\n this.mirroringShapeCharacters.setValue(10925, 10924);\n this.mirroringShapeCharacters.setValue(10927, 10928);\n this.mirroringShapeCharacters.setValue(10928, 10927);\n this.mirroringShapeCharacters.setValue(10931, 10932);\n this.mirroringShapeCharacters.setValue(10932, 10931);\n this.mirroringShapeCharacters.setValue(10939, 10940);\n this.mirroringShapeCharacters.setValue(10940, 10939);\n this.mirroringShapeCharacters.setValue(10941, 10942);\n this.mirroringShapeCharacters.setValue(10942, 10941);\n this.mirroringShapeCharacters.setValue(10943, 10944);\n this.mirroringShapeCharacters.setValue(10944, 10943);\n this.mirroringShapeCharacters.setValue(10945, 10946);\n this.mirroringShapeCharacters.setValue(10946, 10945);\n this.mirroringShapeCharacters.setValue(10947, 10948);\n this.mirroringShapeCharacters.setValue(10948, 10947);\n this.mirroringShapeCharacters.setValue(10949, 10950);\n this.mirroringShapeCharacters.setValue(10950, 10949);\n this.mirroringShapeCharacters.setValue(10957, 10958);\n this.mirroringShapeCharacters.setValue(10958, 10957);\n this.mirroringShapeCharacters.setValue(10959, 10960);\n this.mirroringShapeCharacters.setValue(10960, 10959);\n this.mirroringShapeCharacters.setValue(10961, 10962);\n this.mirroringShapeCharacters.setValue(10962, 10961);\n this.mirroringShapeCharacters.setValue(10963, 10964);\n this.mirroringShapeCharacters.setValue(10964, 10963);\n this.mirroringShapeCharacters.setValue(10965, 10966);\n this.mirroringShapeCharacters.setValue(10966, 10965);\n this.mirroringShapeCharacters.setValue(10974, 8870);\n this.mirroringShapeCharacters.setValue(10979, 8873);\n this.mirroringShapeCharacters.setValue(10980, 8872);\n this.mirroringShapeCharacters.setValue(10981, 8875);\n this.mirroringShapeCharacters.setValue(10988, 10989);\n this.mirroringShapeCharacters.setValue(10989, 10988);\n this.mirroringShapeCharacters.setValue(10999, 11000);\n this.mirroringShapeCharacters.setValue(11000, 10999);\n this.mirroringShapeCharacters.setValue(11001, 11002);\n this.mirroringShapeCharacters.setValue(11002, 11001);\n this.mirroringShapeCharacters.setValue(12296, 12297);\n this.mirroringShapeCharacters.setValue(12297, 12296);\n this.mirroringShapeCharacters.setValue(12298, 12299);\n this.mirroringShapeCharacters.setValue(12299, 12298);\n this.mirroringShapeCharacters.setValue(12300, 12301);\n this.mirroringShapeCharacters.setValue(12301, 12300);\n this.mirroringShapeCharacters.setValue(12302, 12303);\n this.mirroringShapeCharacters.setValue(12303, 12302);\n this.mirroringShapeCharacters.setValue(12304, 12305);\n this.mirroringShapeCharacters.setValue(12305, 12304);\n this.mirroringShapeCharacters.setValue(12308, 12309);\n this.mirroringShapeCharacters.setValue(12309, 12308);\n this.mirroringShapeCharacters.setValue(12310, 12311);\n this.mirroringShapeCharacters.setValue(12311, 12310);\n this.mirroringShapeCharacters.setValue(12312, 12313);\n this.mirroringShapeCharacters.setValue(12313, 12312);\n this.mirroringShapeCharacters.setValue(12314, 12315);\n this.mirroringShapeCharacters.setValue(12315, 12314);\n this.mirroringShapeCharacters.setValue(65288, 65289);\n this.mirroringShapeCharacters.setValue(65289, 65288);\n this.mirroringShapeCharacters.setValue(65308, 65310);\n this.mirroringShapeCharacters.setValue(65310, 65308);\n this.mirroringShapeCharacters.setValue(65339, 65341);\n this.mirroringShapeCharacters.setValue(65341, 65339);\n this.mirroringShapeCharacters.setValue(65371, 65373);\n this.mirroringShapeCharacters.setValue(65373, 65371);\n this.mirroringShapeCharacters.setValue(65375, 65376);\n this.mirroringShapeCharacters.setValue(65376, 65375);\n this.mirroringShapeCharacters.setValue(65378, 65379);\n this.mirroringShapeCharacters.setValue(65379, 65378);\n };\n return Bidi;\n}());\nexport { Bidi };\nvar RtlCharacters = /** @class */ (function () {\n //#endregion\n //#region constructors\n function RtlCharacters() {\n //#region fields\n /// \n /// Specifies the character types.\n /// \n this.types = [];\n /// \n /// Specifies the text order (RTL or LTR).\n /// \n this.textOrder = -1;\n /// \n /// Specifies the RTL character types.\n /// \n /* tslint:disable-next-line:prefer-array-literal */\n this.rtlCharacterTypes = new Array(65536);\n //#endregion\n //#region constants\n /// \n /// Left-to-Right (Non-European or non-Arabic digits).\n /// \n this.L = 0;\n /// \n /// Left-to-Right Embedding\n /// \n this.LRE = 1;\n /// \n /// Left-to-Right Override\n /// \n this.LRO = 2;\n /// \n /// Right-to-Left (Hebrew alphabet, and related punctuation).\n /// \n this.R = 3;\n /// \n /// Right-to-Left Arabic \n /// \n this.AL = 4;\n /// \n /// Right-to-Left Embedding.\n /// \n this.RLE = 5;\n /// \n /// Right-to-Left Override\n /// \n this.RLO = 6;\n /// \n /// Pop Directional Format\n /// \n this.PDF = 7;\n /// \n /// European Number (European digits, Eastern Arabic-Indic digits).\n /// \n this.EN = 8;\n /// \n /// European Number Separator (Plus sign, Minus sign).\n /// \n this.ES = 9;\n /// \n /// European Number Terminator (Degree sign, currency symbols).\n /// \n this.ET = 10;\n /// \n /// Arabic Number (Arabic-Indic digits, Arabic decimal and thousands separators).\n /// \n this.AN = 11;\n /// \n /// Common Number Separator (Colon, Comma, Full Stop, No-Break Space.\n /// \n this.CS = 12;\n /// \n /// Nonspacing Mark (Characters with the General_Category values).\n /// \n this.NSM = 13;\n /// \n /// Boundary Neutral (Default ignorables, non-characters, and control characters, other than those explicitly given other types.)\n /// \n this.BN = 14;\n /// \n /// Paragraph Separator (Paragraph separator, appropriate Newline Functions, higher-level protocol paragraph determination).\n /// \n this.B = 15;\n /// \n /// \tSegment Separator (tab).\n /// \n this.S = 16;\n /// \n /// Whitespace (Space, Figure space, Line separator, Form feed, General Punctuation spaces).\n /// \n this.WS = 17;\n /// \n /// Other Neutrals (All other characters, including object replacement character).\n /// \n this.ON = 18;\n /// \n /// RTL character types.\n /// \n this.charTypes = [\n this.L, this.EN, this.BN, this.ES, this.ES, this.S, this.ET, this.ET, this.B, this.AN, this.AN, this.S, this.CS, this.CS,\n this.WS, this.NSM, this.NSM, this.B, this.BN, 27, this.BN, 28, 30, this.B, 31, 31, this.S, 32, 32, this.WS, 33, 34,\n this.ON, 35, 37, this.ET, 38, 42, this.ON, 43, 43, this.ET, 44, 44, this.CS, 45, 45, this.ET, 46, 46, this.CS,\n 47, 47, this.CS, 48, 57, this.EN, 58, 58, this.CS, 59, 64, this.ON, 65, 90, this.L, 91, 96, this.ON, 97, 122, this.L,\n 123, 126, this.ON, 127, 132, this.BN, 133, 133, this.B, 134, 159, this.BN, 160, 160, this.CS,\n 161, 161, this.ON, 162, 165, this.ET, 166, 169, this.ON, 170, 170, this.L, 171, 175, this.ON,\n 176, 177, this.ET, 178, 179, this.EN, 180, 180, this.ON, 181, 181, this.L, 182, 184, this.ON,\n 185, 185, this.EN, 186, 186, this.L, 187, 191, this.ON, 192, 214, this.L, 215, 215, this.ON,\n 216, 246, this.L, 247, 247, this.ON, 248, 696, this.L, 697, 698, this.ON, 699, 705, this.L,\n 706, 719, this.ON, 720, 721, this.L, 722, 735, this.ON, 736, 740, this.L, 741, 749, this.ON,\n 750, 750, this.L, 751, 767, this.ON, 768, 855, this.NSM, 856, 860, this.L, 861, 879, this.NSM,\n 880, 883, this.L, 884, 885, this.ON, 886, 893, this.L, 894, 894, this.ON, 895, 899, this.L,\n 900, 901, this.ON, 902, 902, this.L, 903, 903, this.ON, 904, 1013, this.L, 1014, 1014, this.ON,\n 1015, 1154, this.L, 1155, 1158, this.NSM, 1159, 1159, this.L, 1160, 1161, this.NSM,\n 1162, 1417, this.L, 1418, 1418, this.ON, 1419, 1424, this.L, 1425, 1441, this.NSM,\n 1442, 1442, this.L, 1443, 1465, this.NSM, 1466, 1466, this.L, 1467, 1469, this.NSM,\n 1470, 1470, this.R, 1471, 1471, this.NSM, 1472, 1472, this.R, 1473, 1474, this.NSM,\n 1475, 1475, this.R, 1476, 1476, this.NSM, 1477, 1487, this.L, 1488, 1514, this.R,\n 1515, 1519, this.L, 1520, 1524, this.R, 1525, 1535, this.L, 1536, 1539, this.AL,\n 1540, 1547, this.L, 1548, 1548, this.CS, 1549, 1549, this.AL, 1550, 1551, this.ON,\n 1552, 1557, this.NSM, 1558, 1562, this.L, 1563, 1563, this.AL, 1564, 1566, this.L,\n 1567, 1567, this.AL, 1568, 1568, this.L, 1569, 1594, this.AL, 1595, 1599, this.L,\n 1600, 1610, this.AL, 1611, 1624, this.NSM, 1625, 1631, this.L, 1632, 1641, this.AN,\n 1642, 1642, this.ET, 1643, 1644, this.AN, 1645, 1647, this.AL, 1648, 1648, this.NSM,\n 1649, 1749, this.AL, 1750, 1756, this.NSM, 1757, 1757, this.AL, 1758, 1764, this.NSM,\n 1765, 1766, this.AL, 1767, 1768, this.NSM, 1769, 1769, this.ON, 1770, 1773, this.NSM,\n 1774, 1775, this.AL, 1776, 1785, this.EN, 1786, 1805, this.AL, 1806, 1806, this.L,\n 1807, 1807, this.BN, 1808, 1808, this.AL, 1809, 1809, this.NSM, 1810, 1839, this.AL,\n 1840, 1866, this.NSM, 1867, 1868, this.L, 1869, 1871, this.AL, 1872, 1919, this.L,\n 1920, 1957, this.AL, 1958, 1968, this.NSM, 1969, 1969, this.AL, 1970, 2304, this.L,\n 2305, 2306, this.NSM, 2307, 2363, this.L, 2364, 2364, this.NSM, 2365, 2368, this.L,\n 2369, 2376, this.NSM, 2377, 2380, this.L, 2381, 2381, this.NSM, 2382, 2384, this.L,\n 2385, 2388, this.NSM, 2389, 2401, this.L, 2402, 2403, this.NSM, 2404, 2432, this.L,\n 2433, 2433, this.NSM, 2434, 2491, this.L, 2492, 2492, this.NSM, 2493, 2496, this.L,\n 2497, 2500, this.NSM, 2501, 2508, this.L, 2509, 2509, this.NSM, 2510, 2529, this.L,\n 2530, 2531, this.NSM, 2532, 2545, this.L, 2546, 2547, this.ET, 2548, 2560, this.L,\n 2561, 2562, this.NSM, 2563, 2619, this.L, 2620, 2620, this.NSM, 2621, 2624, this.L,\n 2625, 2626, this.NSM, 2627, 2630, this.L, 2631, 2632, this.NSM, 2633, 2634, this.L,\n 2635, 2637, this.NSM, 2638, 2671, this.L, 2672, 2673, this.NSM, 2674, 2688, this.L,\n 2689, 2690, this.NSM, 2691, 2747, this.L, 2748, 2748, this.NSM, 2749, 2752, this.L,\n 2753, 2757, this.NSM, 2758, 2758, this.L, 2759, 2760, this.NSM, 2761, 2764, this.L,\n 2765, 2765, this.NSM, 2766, 2785, this.L, 2786, 2787, this.NSM, 2788, 2800, this.L,\n 2801, 2801, this.ET, 2802, 2816, this.L, 2817, 2817, this.NSM, 2818, 2875, this.L,\n 2876, 2876, this.NSM, 2877, 2878, this.L, 2879, 2879, this.NSM, 2880, 2880, this.L,\n 2881, 2883, this.NSM, 2884, 2892, this.L, 2893, 2893, this.NSM, 2894, 2901, this.L,\n 2902, 2902, this.NSM, 2903, 2945, this.L, 2946, 2946, this.NSM, 2947, 3007, this.L,\n 3008, 3008, this.NSM, 3009, 3020, this.L, 3021, 3021, this.NSM, 3022, 3058, this.L,\n 3059, 3064, this.ON, 3065, 3065, this.ET, 3066, 3066, this.ON, 3067, 3133, this.L,\n 3134, 3136, this.NSM, 3137, 3141, this.L, 3142, 3144, this.NSM, 3145, 3145, this.L,\n 3146, 3149, this.NSM, 3150, 3156, this.L, 3157, 3158, this.NSM, 3159, 3259, this.L,\n 3260, 3260, this.NSM, 3261, 3275, this.L, 3276, 3277, this.NSM, 3278, 3392, this.L,\n 3393, 3395, this.NSM, 3396, 3404, this.L, 3405, 3405, this.NSM, 3406, 3529, this.L,\n 3530, 3530, this.NSM, 3531, 3537, this.L, 3538, 3540, this.NSM, 3541, 3541, this.L,\n 3542, 3542, this.NSM, 3543, 3632, this.L, 3633, 3633, this.NSM, 3634, 3635, this.L,\n 3636, 3642, this.NSM, 3643, 3646, this.L, 3647, 3647, this.ET, 3648, 3654, this.L,\n 3655, 3662, this.NSM, 3663, 3760, this.L, 3761, 3761, this.NSM, 3762, 3763, this.L,\n 3764, 3769, this.NSM, 3770, 3770, this.L, 3771, 3772, this.NSM, 3773, 3783, this.L,\n 3784, 3789, this.NSM, 3790, 3863, this.L, 3864, 3865, this.NSM, 3866, 3892, this.L,\n 3893, 3893, this.NSM, 3894, 3894, this.L, 3895, 3895, this.NSM, 3896, 3896, this.L,\n 3897, 3897, this.NSM, 3898, 3901, this.ON, 3902, 3952, this.L, 3953, 3966, this.NSM,\n 3967, 3967, this.L, 3968, 3972, this.NSM, 3973, 3973, this.L, 3974, 3975, this.NSM,\n 3976, 3983, this.L, 3984, 3991, this.NSM, 3992, 3992, this.L, 3993, 4028, this.NSM,\n 4029, 4037, this.L, 4038, 4038, this.NSM, 4039, 4140, this.L, 4141, 4144, this.NSM,\n 4145, 4145, this.L, 4146, 4146, this.NSM, 4147, 4149, this.L, 4150, 4151, this.NSM,\n 4152, 4152, this.L, 4153, 4153, this.NSM, 4154, 4183, this.L, 4184, 4185, this.NSM,\n 4186, 5759, this.L, 5760, 5760, this.WS, 5761, 5786, this.L, 5787, 5788, this.ON,\n 5789, 5905, this.L, 5906, 5908, this.NSM, 5909, 5937, this.L, 5938, 5940, this.NSM,\n 5941, 5969, this.L, 5970, 5971, this.NSM, 5972, 6001, this.L, 6002, 6003, this.NSM,\n 6004, 6070, this.L, 6071, 6077, this.NSM, 6078, 6085, this.L, 6086, 6086, this.NSM,\n 6087, 6088, this.L, 6089, 6099, this.NSM, 6100, 6106, this.L, 6107, 6107, this.ET,\n 6108, 6108, this.L, 6109, 6109, this.NSM, 6110, 6127, this.L, 6128, 6137, this.ON,\n 6138, 6143, this.L, 6144, 6154, this.ON, 6155, 6157, this.NSM, 6158, 6158, this.WS,\n 6159, 6312, this.L, 6313, 6313, this.NSM, 6314, 6431, this.L, 6432, 6434, this.NSM,\n 6435, 6438, this.L, 6439, 6443, this.NSM, 6444, 6449, this.L, 6450, 6450, this.NSM,\n 6451, 6456, this.L, 6457, 6459, this.NSM, 6460, 6463, this.L, 6464, 6464, this.ON,\n 6465, 6467, this.L, 6468, 6469, this.ON, 6470, 6623, this.L, 6624, 6655, this.ON,\n 6656, 8124, this.L, 8125, 8125, this.ON, 8126, 8126, this.L, 8127, 8129, this.ON,\n 8130, 8140, this.L, 8141, 8143, this.ON, 8144, 8156, this.L, 8157, 8159, this.ON,\n 8160, 8172, this.L, 8173, 8175, this.ON, 8176, 8188, this.L, 8189, 8190, this.ON,\n 8191, 8191, this.L, 8192, 8202, this.WS, 8203, 8205, this.BN, 8206, 8206, this.L,\n 8207, 8207, this.R, 8208, 8231, this.ON, 8232, 8232, this.WS, 8233, 8233, this.B,\n 8234, 8234, this.LRE, 8235, 8235, this.RLE, 8236, 8236, this.PDF, 8237, 8237, this.LRO,\n 8238, 8238, this.RLO, 8239, 8239, this.WS, 8240, 8244, this.ET, 8245, 8276, this.ON,\n 8277, 8278, this.L, 8279, 8279, this.ON, 8280, 8286, this.L, 8287, 8287, this.WS,\n 8288, 8291, this.BN, 8292, 8297, this.L, 8298, 8303, this.BN, 8304, 8304, this.EN,\n 8305, 8307, this.L, 8308, 8313, this.EN, 8314, 8315, this.ET, 8316, 8318, this.ON,\n 8319, 8319, this.L, 8320, 8329, this.EN, 8330, 8331, this.ET, 8332, 8334, this.ON,\n 8335, 8351, this.L, 8352, 8369, this.ET, 8370, 8399, this.L, 8400, 8426, this.NSM,\n 8427, 8447, this.L, 8448, 8449, this.ON, 8450, 8450, this.L, 8451, 8454, this.ON,\n 8455, 8455, this.L, 8456, 8457, this.ON, 8458, 8467, this.L, 8468, 8468, this.ON,\n 8469, 8469, this.L, 8470, 8472, this.ON, 8473, 8477, this.L, 8478, 8483, this.ON,\n 8484, 8484, this.L, 8485, 8485, this.ON, 8486, 8486, this.L, 8487, 8487, this.ON,\n 8488, 8488, this.L, 8489, 8489, this.ON, 8490, 8493, this.L, 8494, 8494, this.ET,\n 8495, 8497, this.L, 8498, 8498, this.ON, 8499, 8505, this.L, 8506, 8507, this.ON,\n 8508, 8511, this.L, 8512, 8516, this.ON, 8517, 8521, this.L, 8522, 8523, this.ON,\n 8524, 8530, this.L, 8531, 8543, this.ON, 8544, 8591, this.L, 8592, 8721, this.ON,\n 8722, 8723, this.ET, 8724, 9013, this.ON, 9014, 9082, this.L, 9083, 9108, this.ON,\n 9109, 9109, this.L, 9110, 9168, this.ON, 9169, 9215, this.L, 9216, 9254, this.ON,\n 9255, 9279, this.L, 9280, 9290, this.ON, 9291, 9311, this.L, 9312, 9371, this.EN,\n 9372, 9449, this.L, 9450, 9450, this.EN, 9451, 9751, this.ON, 9752, 9752, this.L,\n 9753, 9853, this.ON, 9854, 9855, this.L, 9856, 9873, this.ON, 9874, 9887, this.L,\n 9888, 9889, this.ON, 9890, 9984, this.L, 9985, 9988, this.ON, 9989, 9989, this.L,\n 9990, 9993, this.ON, 9994, 9995, this.L, 9996, 10023, this.ON, 10024, 10024, this.L,\n 10025, 10059, this.ON, 10060, 10060, this.L, 10061, 10061, this.ON, 10062, 10062, this.L,\n 10063, 10066, this.ON, 10067, 10069, this.L, 10070, 10070, this.ON, 10071, 10071, this.L,\n 10072, 10078, this.ON, 10079, 10080, this.L, 10081, 10132, this.ON, 10133, 10135, this.L,\n 10136, 10159, this.ON, 10160, 10160, this.L, 10161, 10174, this.ON, 10175, 10191, this.L,\n 10192, 10219, this.ON, 10220, 10223, this.L, 10224, 11021, this.ON, 11022, 11903, this.L,\n 11904, 11929, this.ON, 11930, 11930, this.L, 11931, 12019, this.ON, 12020, 12031, this.L,\n 12032, 12245, this.ON, 12246, 12271, this.L, 12272, 12283, this.ON, 12284, 12287, this.L,\n 12288, 12288, this.WS, 12289, 12292, this.ON, 12293, 12295, this.L, 12296, 12320, this.ON,\n 12321, 12329, this.L, 12330, 12335, this.NSM, 12336, 12336, this.ON, 12337, 12341, this.L,\n 12342, 12343, this.ON, 12344, 12348, this.L, 12349, 12351, this.ON, 12352, 12440, this.L,\n 12441, 12442, this.NSM, 12443, 12444, this.ON, 12445, 12447, this.L, 12448, 12448, this.ON,\n 12449, 12538, this.L, 12539, 12539, this.ON, 12540, 12828, this.L, 12829, 12830, this.ON,\n 12831, 12879, this.L, 12880, 12895, this.ON, 12896, 12923, this.L, 12924, 12925, this.ON,\n 12926, 12976, this.L, 12977, 12991, this.ON, 12992, 13003, this.L, 13004, 13007, this.ON,\n 13008, 13174, this.L, 13175, 13178, this.ON, 13179, 13277, this.L, 13278, 13279, this.ON,\n 13280, 13310, this.L, 13311, 13311, this.ON, 13312, 19903, this.L, 19904, 19967, this.ON,\n 19968, 42127, this.L, 42128, 42182, this.ON, 42183, 64284, this.L, 64285, 64285, this.R,\n 64286, 64286, this.NSM, 64287, 64296, this.R, 64297, 64297, this.ET, 64298, 64310, this.R,\n 64311, 64311, this.L, 64312, 64316, this.R, 64317, 64317, this.L, 64318, 64318, this.R,\n 64319, 64319, this.L, 64320, 64321, this.R, 64322, 64322, this.L, 64323, 64324, this.R,\n 64325, 64325, this.L, 64326, 64335, this.R, 64336, 64433, this.AL, 64434, 64466, this.L,\n 64467, 64829, this.AL, 64830, 64831, this.ON, 64832, 64847, this.L, 64848, 64911, this.AL,\n 64912, 64913, this.L, 64914, 64967, this.AL, 64968, 65007, this.L, 65008, 65020, this.AL,\n 65021, 65021, this.ON, 65022, 65023, this.L, 65024, 65039, this.NSM, 65040, 65055, this.L,\n 65056, 65059, this.NSM, 65060, 65071, this.L, 65072, 65103, this.ON, 65104, 65104, this.CS,\n 65105, 65105, this.ON, 65106, 65106, this.CS, 65107, 65107, this.L, 65108, 65108, this.ON,\n 65109, 65109, this.CS, 65110, 65118, this.ON, 65119, 65119, this.ET, 65120, 65121, this.ON,\n 65122, 65123, this.ET, 65124, 65126, this.ON, 65127, 65127, this.L, 65128, 65128, this.ON,\n 65129, 65130, this.ET, 65131, 65131, this.ON, 65132, 65135, this.L, 65136, 65140, this.AL,\n 65141, 65141, this.L, 65142, 65276, this.AL, 65277, 65278, this.L, 65279, 65279, this.BN,\n 65280, 65280, this.L, 65281, 65282, this.ON, 65283, 65285, this.ET, 65286, 65290, this.ON,\n 65291, 65291, this.ET, 65292, 65292, this.CS, 65293, 65293, this.ET, 65294, 65294, this.CS,\n 65295, 65295, this.ES, 65296, 65305, this.EN, 65306, 65306, this.CS, 65307, 65312, this.ON,\n 65313, 65338, this.L, 65339, 65344, this.ON, 65345, 65370, this.L, 65371, 65381, this.ON,\n 65382, 65503, this.L, 65504, 65505, this.ET, 65506, 65508, this.ON, 65509, 65510, this.ET,\n 65511, 65511, this.L, 65512, 65518, this.ON, 65519, 65528, this.L, 65529, 65531, this.BN,\n 65532, 65533, this.ON, 65534, 65535, this.L\n ];\n for (var i = 0; i < this.charTypes.length; ++i) {\n var start = this.charTypes[i];\n var end = this.charTypes[++i];\n var b = this.charTypes[++i];\n while (start <= end) {\n this.rtlCharacterTypes[start++] = b;\n }\n }\n }\n //#endregion\n //#region implementation\n RtlCharacters.prototype.getVisualOrder = function (inputText, isRtl) {\n this.types = this.getCharacterCode(inputText);\n this.textOrder = isRtl ? this.LRE : this.L;\n this.doVisualOrder();\n var result = [];\n for (var i = 0; i < this.levels.length; i++) {\n result[i] = this.levels[i];\n }\n return result;\n };\n RtlCharacters.prototype.getCharacterCode = function (text) {\n var characterCodes = [];\n for (var i = 0; i < text.length; i++) {\n characterCodes[i] = this.rtlCharacterTypes[text[i].charCodeAt(0)];\n }\n return characterCodes;\n };\n RtlCharacters.prototype.setDefaultLevels = function () {\n for (var i = 0; i < this.length; i++) {\n this.levels[i] = this.textOrder;\n }\n };\n RtlCharacters.prototype.setLevels = function () {\n this.setDefaultLevels();\n for (var n = 0; n < this.length; ++n) {\n var level = this.levels[n];\n if ((level & 0x80) !== 0) {\n level &= 0x7f;\n this.result[n] = ((level & 0x1) === 0) ? this.L : this.R;\n }\n this.levels[n] = level;\n }\n };\n RtlCharacters.prototype.updateLevels = function (index, level, length) {\n if ((level & 1) === 0) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.R) {\n this.levels[i] += 1;\n }\n else if (this.result[i] !== this.L) {\n this.levels[i] += 2;\n }\n }\n }\n else {\n for (var i = index; i < length; ++i) {\n if (this.result[i] !== this.R) {\n this.levels[i] += 1;\n }\n }\n }\n };\n RtlCharacters.prototype.doVisualOrder = function () {\n this.length = this.types.length;\n this.result = this.types;\n this.levels = [];\n this.setLevels();\n this.length = this.getEmbeddedCharactersLength();\n var preview = this.textOrder;\n var i = 0;\n while (i < this.length) {\n var level = this.levels[i];\n var preType = ((Math.max(preview, level) & 0x1) === 0) ? this.L : this.R;\n var length_1 = i + 1;\n while (length_1 < this.length && this.levels[length_1] === level) {\n ++length_1;\n }\n var success = length_1 < this.length ? this.levels[length_1] : this.textOrder;\n var type = ((Math.max(success, level) & 0x1) === 0) ? this.L : this.R;\n this.checkNSM(i, length_1, level, preType, type);\n this.updateLevels(i, level, length_1);\n preview = level;\n i = length_1;\n }\n this.checkEmbeddedCharacters(this.length);\n };\n RtlCharacters.prototype.getEmbeddedCharactersLength = function () {\n var index = 0;\n for (var i = 0; i < this.length; ++i) {\n if (!(this.types[i] === this.LRE || this.types[i] === this.RLE || this.types[i] === this.LRO ||\n this.types[i] === this.RLO || this.types[i] === this.PDF || this.types[i] === this.BN)) {\n this.result[index] = this.result[i];\n this.levels[index] = this.levels[i];\n index++;\n }\n }\n return index;\n };\n RtlCharacters.prototype.checkEmbeddedCharacters = function (length) {\n for (var i = this.types.length - 1; i >= 0; --i) {\n if (this.types[i] === this.LRE || this.types[i] === this.RLE || this.types[i] === this.LRO ||\n this.types[i] === this.RLO || this.types[i] === this.PDF || this.types[i] === this.BN) {\n this.result[i] = this.types[i];\n this.levels[i] = -1;\n }\n else {\n length -= 1;\n this.result[i] = this.result[length];\n this.levels[i] = this.levels[length];\n }\n }\n for (var i = 0; i < this.types.length; i++) {\n if (this.levels[i] === -1) {\n if (i === 0) {\n this.levels[i] = this.textOrder;\n }\n else {\n this.levels[i] = this.levels[i - 1];\n }\n }\n }\n };\n RtlCharacters.prototype.checkNSM = function (index, length, level, startType, endType) {\n var charType = startType;\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.NSM) {\n this.result[i] = charType;\n }\n else {\n charType = this.result[i];\n }\n }\n this.checkEuropeanDigits(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanDigits = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.EN) {\n for (var j = i - 1; j >= index; --j) {\n if (this.result[j] === this.L || this.result[j] === this.R || this.result[j] === this.AL) {\n if (this.result[j] === this.AL) {\n this.result[i] = this.AN;\n }\n break;\n }\n }\n }\n }\n this.checkArabicCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkArabicCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.AL) {\n this.result[i] = this.R;\n }\n }\n this.checkEuropeanNumberSeparator(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanNumberSeparator = function (index, length, level, startType, endType) {\n for (var i = index + 1; i < length - 1; ++i) {\n if (this.result[i] === this.ES || this.result[i] === this.CS) {\n var preview = this.result[i - 1];\n var success = this.result[i + 1];\n if (preview === this.EN && success === this.EN) {\n this.result[i] = this.EN;\n }\n else if (this.result[i] === this.CS && preview === this.AN && success === this.AN) {\n this.result[i] = this.AN;\n }\n }\n }\n this.checkEuropeanNumberTerminator(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanNumberTerminator = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.ET) {\n var s = i;\n var b = [];\n b.push(this.ET);\n var l = this.getLength(s, length, b);\n var data = s === index ? startType : this.result[s - 1];\n if (data !== this.EN) {\n data = (l === length) ? endType : this.result[l];\n }\n if (data === this.EN) {\n for (var j = s; j < l; ++j) {\n this.result[j] = this.EN;\n }\n }\n i = l;\n }\n }\n this.checkOtherNeutrals(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkOtherNeutrals = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.ES || this.result[i] === this.ET || this.result[i] === this.CS) {\n this.result[i] = this.ON;\n }\n }\n this.checkOtherCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkOtherCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.EN) {\n var pst = startType;\n for (var j = i - 1; j >= index; --j) {\n if (this.result[j] === this.L || this.result[j] === this.R) {\n pst = this.result[j];\n break;\n }\n }\n if (pst === this.L) {\n this.result[i] = this.L;\n }\n }\n }\n this.checkCommanCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.getLength = function (index, length, validSet) {\n --index;\n while (++index < length) {\n var t = this.result[index];\n for (var i = 0; i < validSet.length; ++i) {\n if (t === validSet[i]) {\n index = this.getLength(++index, length, validSet);\n }\n }\n return index;\n }\n return length;\n };\n RtlCharacters.prototype.checkCommanCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.WS || this.result[i] === this.ON || this.result[i] === this.B ||\n this.result[i] === this.S) {\n var s = i;\n var byte = [this.B, this.S, this.WS, this.ON];\n var l = this.getLength(s, length, byte);\n var lt = 0;\n var tt = 0;\n var rt = 0;\n if (s === index) {\n lt = startType;\n }\n else {\n lt = this.result[s - 1];\n if (lt === this.AN) {\n lt = this.R;\n }\n else if (lt === this.EN) {\n lt = this.R;\n }\n }\n if (l === length) {\n tt = endType;\n }\n else {\n tt = this.result[l];\n if (tt === this.AN) {\n tt = this.R;\n }\n else if (tt === this.EN) {\n tt = this.R;\n }\n }\n if (lt === tt) {\n rt = lt;\n }\n else {\n rt = ((level & 0x1) === 0) ? this.L : this.R;\n }\n for (var j = s; j < l; ++j) {\n this.result[j] = rt;\n }\n i = l;\n }\n }\n };\n return RtlCharacters;\n}());\nexport { RtlCharacters };\n","import { PdfString } from './../../primitives/pdf-string';\nimport { ArabicShapeRenderer } from './rtl/rtl-text-shape';\nimport { PdfTextDirection } from './../enum';\nimport { Bidi } from './rtl/rtl-bidirectional';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar RtlRenderer = /** @class */ (function () {\n function RtlRenderer() {\n //region Constants\n /// Open bracket symbol.\n /// \n this.openBracket = '(';\n /// \n /// Close bracket symbol.\n /// \n this.closeBracket = ')';\n //#endregion\n }\n //#region Constructors\n /// \n /// Initializes a new instance of the class.\n /// \n // public constructor() {\n // }\n //#region Public Methods\n /// \n /// Layouts text. Changes blocks position in the RTL text.\n /// Ligates the text if needed.\n /// \n /// Line of the text.\n /// Font to be used for string printing.\n /// Font alignment.\n /// Indicates whether Word Spacing used or not.\n /// Layout string.\n RtlRenderer.prototype.layout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var result = [];\n if (font.Unicode) {\n result = this.customLayout(line, rtl, format, font, wordSpace);\n }\n else {\n result = [];\n result[0] = line;\n }\n return result;\n };\n /// \n /// Layouts a string and splits it by the words and using correct lay outing.\n /// \n /// Text line.\n /// Font object.\n /// Indicates whether RTL should be applied.\n /// Indicates whether word spacing is used.\n /// Array of words if converted, null otherwise.\n RtlRenderer.prototype.splitLayout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var words = [];\n var system = false;\n if (!system || words == null) {\n words = this.customSplitLayout(line, font, rtl, wordSpace, format);\n }\n return words;\n };\n //#endregion\n //#region Implementation\n // private isEnglish( word : string) : boolean\n // {\n // let c : string = (word.length > 0) ? word[0] : '';\n // return (c >= '0' && c < 'ÿ');\n // }\n // private keepOrder( words : string, startIndex : number, count: number, result : string[], resultIndex : number) : void\n // {\n // for (let i : number = 0, ri = resultIndex - count + 1; i < count; ++i, ++ri) {\n // result[ri] = words[i + startIndex];\n // }\n // }\n /// \n /// Uses system API to layout the text.\n /// \n /// Line of the text to be layouted.\n /// Font which is used for text printing.\n /// Indicates whether we use RTL or RTL lay outing of the text container.\n /// Layout string.\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.getGlyphIndex = function (line, font, rtl, /*out*/ glyphs, custom) {\n var success = true;\n var fail = false;\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n glyphs = null;\n if (line.length === 0) {\n return { success: fail, glyphs: glyphs };\n }\n var renderer = new ArabicShapeRenderer();\n var text = renderer.shape(line, 0);\n var internalFont = font.fontInternal;\n var ttfReader = internalFont.ttfReader;\n glyphs = new Uint16Array(text.length);\n var i = 0;\n for (var k = 0, len = text.length; k < len; k++) {\n var ch = text[k];\n var glyphInfo = ttfReader.getGlyph(ch);\n if (glyphInfo !== null && typeof glyphInfo !== 'undefined') {\n glyphs[i++] = (glyphInfo).index;\n }\n }\n return { success: success, glyphs: glyphs };\n };\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.customLayout = function (line, rtl, format, font, wordSpace) {\n if (wordSpace === null || typeof wordSpace === 'undefined') {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n var result = null;\n //bidirectional order.\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n var bidi = new Bidi();\n result = bidi.getLogicalToVisualString(line, rtl);\n }\n return result;\n }\n else {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var layouted = null;\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n var renderer = new ArabicShapeRenderer();\n var txt = renderer.shape(line, 0);\n layouted = this.customLayout(txt, rtl, format);\n }\n // else {\n // layouted = this.customLayout(line, rtl, format);\n // }\n // We have unicode font, but from the file. \n var result = [];\n // Split the text by words if word spacing is not default.\n if (wordSpace) {\n var words = layouted.split('');\n var count = words.length;\n for (var i = 0; i < count; i++) {\n words[i] = this.addChars(font, words[i]);\n }\n result = words;\n }\n else {\n result = [];\n result[0] = this.addChars(font, layouted);\n }\n return result;\n }\n };\n /// \n /// Add information about used glyphs to the font.\n /// \n /// Font used for text rendering.\n /// Array of used glyphs.\n /// String in the form to be written to the file.\n RtlRenderer.prototype.addChars = function (font, glyphs) {\n var line = glyphs;\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n var text = line;\n var internalFont = font.fontInternal;\n var ttfReader = internalFont.ttfReader;\n font.setSymbols(text);\n // Reconvert string according to unicode standard.\n text = ttfReader.convertString(text);\n var bytes = PdfString.toUnicodeArray(text, false);\n text = PdfString.byteToString(bytes);\n return text;\n // else {\n // if (font == null) {\n // throw new Error('ArgumentNullException : font');\n // }\n // if (glyphs == null) {\n // throw new Error('ArgumentNullException : glyphs');\n // }\n // // Mark the chars as used.\n // let text : string = '';\n // font.setSymbols(glyphs);\n // // Create string from the glyphs.\n // \n // let chars : string[] = [];\n // for (let i : number = 0; i < glyphs.length; i++) {\n // chars[i] = glyphs[i].toString();\n // }\n // for (let j : number = 0 ; j < chars.length; j++) {\n // text = text + chars[j];\n // }\n // let bytes : number[] = PdfString.toUnicodeArray(text, false);\n // text = PdfString.byteToString(bytes);\n // return text;\n // }\n };\n /// \n /// Layouts a string and splits it by the words by using custom lay outing.\n /// \n /// Text line.\n /// Font object.\n /// Indicates whether RTL should be applied.\n /// Indicates whether word spacing is used.\n /// Array of words if converted, null otherwise.\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.customSplitLayout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var reversedLine = this.customLayout(line, rtl, format);\n var words = reversedLine.split('');\n return words;\n };\n return RtlRenderer;\n}());\nexport { RtlRenderer };\n","/**\n * PdfGraphics.ts class for EJ2-PDF\n */\nimport { PdfColorSpace, TextRenderingMode, PdfFillMode, PdfTextAlignment } from './enum';\nimport { PdfVerticalAlignment, PdfBlendMode } from './enum';\nimport { PdfSubSuperScript } from './fonts/enum';\nimport { PdfStreamWriter } from './../input-output/pdf-stream-writer';\nimport { PdfPen } from './pdf-pen';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfSolidBrush } from './brushes/pdf-solid-brush';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTransformationMatrix } from './pdf-transformation-matrix';\nimport { PointF, SizeF, RectangleF } from './../drawing/pdf-drawing';\nimport { ProcedureSets } from './constants';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfStringFormat } from './fonts/pdf-string-format';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfStringLayouter, LineType } from './fonts/string-layouter';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { StringTokenizer } from './fonts/string-tokenizer';\nimport { PdfAutomaticFieldInfoCollection } from './../document/automatic-fields/automatic-field-info-collection';\nimport { PdfAutomaticFieldInfo } from './../document/automatic-fields/automatic-field-info';\nimport { Operators } from './../input-output/pdf-operators';\nimport { UnicodeTrueTypeFont } from './fonts/unicode-true-type-font';\nimport { InternalEnum } from './../primitives/pdf-string';\nimport { RtlRenderer } from './fonts/rtl-renderer';\nimport { PdfTextDirection } from './enum';\n/**\n * `PdfGraphics` class represents a graphics context of the objects.\n * It's used for performing all the graphics operations.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * //graphics of the page\n * let page1Graphics : PdfGraphics = page1.graphics;\n * // draw the text on the page1 graphics\n * page1Graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfGraphics = /** @class */ (function () {\n function PdfGraphics(arg1, arg2, arg3) {\n /**\n * Represents the `Current color space`.\n * @private\n */\n this.currentColorSpace = PdfColorSpace.Rgb;\n /**\n * Stores `previous rendering mode`.\n * @private\n */\n this.previousTextRenderingMode = TextRenderingMode.Fill;\n /**\n * Previous `character spacing` value or 0.\n * @private\n */\n this.previousCharacterSpacing = 0.0;\n /**\n * Previous `word spacing` value or 0.\n * @private\n */\n this.previousWordSpacing = 0.0;\n /**\n * The `previously used text scaling` value.\n * @private\n */\n this.previousTextScaling = 100.0;\n /**\n * Instance of `ProcedureSets` class.\n * @private\n */\n this.procedureSets = new ProcedureSets();\n /**\n * To check wihether it is a `direct text rendering`.\n * @default true\n * @private\n */\n this.isNormalRender = true;\n /**\n * check whether to `use font size` to calculate the shift.\n * @default false\n * @private\n */\n this.isUseFontSize = false;\n /**\n * check whether the font is in `italic type`.\n * @default false\n * @private\n */\n this.isItalic = false;\n /**\n * Check whether it is an `emf Text Matrix`.\n * @default false\n * @private\n */\n this.isEmfTextScaled = false;\n /**\n * Check whether it is an `emf` call.\n * @default false\n * @private\n */\n this.isEmf = false;\n /**\n * Check whether it is an `emf plus` call.\n * @default false\n * @private\n */\n this.isEmfPlus = false;\n /**\n * Check whether it is in `base line format`.\n * @default true\n * @private\n */\n this.isBaselineFormat = true;\n /**\n * Emf Text `Scaling Factor`.\n * @private\n */\n this.emfScalingFactor = new SizeF(0, 0);\n /**\n * To check whether the `last color space` of document and garphics is saved.\n * @private\n */\n this.colorSpaceChanged = false;\n /**\n * Stores an instance of `DictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isPointOverload = false;\n /**\n * Current colorspaces.\n * @hidden\n * @private\n */\n this.currentColorSpaces = ['RGB', 'CMYK', 'GrayScale', 'Indexed'];\n /**\n * Checks the current image `is optimized` or not.\n * @default false.\n * @private\n */\n this.isImageOptimized = false;\n /**\n * Stores the `graphics states`.\n * @private\n */\n this.graphicsState = [];\n /**\n * Indicates whether the object `had trasparency`.\n * @default false\n * @private\n */\n this.istransparencySet = false;\n /**\n * Stores the instance of `PdfAutomaticFieldInfoCollection` class .\n * @default null\n * @private\n */\n this.internalAutomaticFields = null;\n /**\n * Stores the index of the start line that should draw with in the next page.\n * @private\n */\n this.startCutIndex = -1;\n if (arg3 instanceof PdfStreamWriter) {\n this.pdfStreamWriter = arg3;\n this.getResources = arg2;\n this.canvasSize = arg1;\n this.initialize();\n }\n else {\n this.constructor(arg1, arg2, new PdfStreamWriter(arg3));\n }\n }\n Object.defineProperty(PdfGraphics.prototype, \"stringLayoutResult\", {\n // Properties\n /**\n * Returns the `result` after drawing string.\n * @private\n */\n get: function () {\n return this.pdfStringLayoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"size\", {\n /**\n * Gets the `size` of the canvas.\n * @private\n */\n get: function () {\n return this.canvasSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"mediaBoxUpperRightBound\", {\n /**\n * Gets and Sets the value of `MediaBox upper right bound`.\n * @private\n */\n get: function () {\n if (typeof this.internalMediaBoxUpperRightBound === 'undefined') {\n this.internalMediaBoxUpperRightBound = 0;\n }\n return this.internalMediaBoxUpperRightBound;\n },\n set: function (value) {\n this.internalMediaBoxUpperRightBound = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"clientSize\", {\n /**\n * Gets the `size` of the canvas reduced by margins and page templates.\n * @private\n */\n get: function () {\n return new SizeF(this.clipBounds.width, this.clipBounds.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"colorSpace\", {\n /**\n * Gets or sets the current `color space` of the document\n * @private\n */\n get: function () {\n return this.currentColorSpace;\n },\n set: function (value) {\n this.currentColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"streamWriter\", {\n /**\n * Gets the `stream writer`.\n * @private\n */\n get: function () {\n return this.pdfStreamWriter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"matrix\", {\n /**\n * Gets the `transformation matrix` reflecting current transformation.\n * @private\n */\n get: function () {\n if (this.transformationMatrix == null) {\n this.transformationMatrix = new PdfTransformationMatrix();\n }\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"layer\", {\n /**\n * Gets the `layer` for the graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"page\", {\n /**\n * Gets the `page` for this graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer.page;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"automaticFields\", {\n get: function () {\n if (this.internalAutomaticFields == null || typeof this.internalAutomaticFields === 'undefined') {\n this.internalAutomaticFields = new PdfAutomaticFieldInfoCollection();\n }\n return this.internalAutomaticFields;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` this instance.\n * @private\n */\n PdfGraphics.prototype.initialize = function () {\n this.bStateSaved = false;\n this.currentPen = null;\n this.currentBrush = null;\n this.currentFont = null;\n this.currentColorSpace = PdfColorSpace.Rgb;\n this.bCSInitialized = false;\n this.transformationMatrix = null;\n this.previousTextRenderingMode = (-1); //.Fill;\n this.previousCharacterSpacing = -1.0;\n this.previousWordSpacing = -1.0;\n this.previousTextScaling = -100.0;\n // this.m_trasparencies = null;\n this.currentStringFormat = null;\n this.clipBounds = new RectangleF(new PointF(0, 0), this.size);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n };\n PdfGraphics.prototype.drawPdfTemplate = function (template, location, size) {\n if (typeof size === 'undefined') {\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n this.drawPdfTemplate(template, location, template.size);\n }\n else {\n // let crossTable : PdfCrossTable = null;\n // if (this.pageLayer != null) {\n // crossTable = (this.page as PdfPage).section.parentDocument.crossTable;\n // }\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n var scaleX = (template.width > 0) ? size.width / template.width : 1;\n var scaleY = (template.height > 0) ? size.height / template.height : 1;\n var bNeedScale = !(scaleX === 1 && scaleY === 1);\n // Save state.\n var state = this.save();\n // Take into consideration that rect location is bottom/left.\n var matrix = new PdfTransformationMatrix();\n if (this.pageLayer != null) {\n this.getTranslateTransform(location.x, location.y + size.height, matrix);\n }\n if (bNeedScale) {\n this.getScaleTransform(scaleX, scaleY, matrix);\n }\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n var name_1 = resources.getName(template);\n this.pdfStreamWriter.executeObject(name_1);\n // Restore state.\n this.restore(state);\n //Transfer automatic fields from template.\n var g = template.graphics;\n if (g != null) {\n for (var index = 0; index < g.automaticFields.automaticFields.length; index++) {\n var fieldInfo = g.automaticFields.automaticFields[index];\n var newLocation = new PointF(fieldInfo.location.x + location.x, fieldInfo.location.y + location.y);\n var scalingX = template.size.width == 0 ? 0 : size.width / template.size.width;\n var scalingY = template.size.height == 0 ? 0 : size.height / template.size.height;\n this.automaticFields.add(new PdfAutomaticFieldInfo(fieldInfo.field, newLocation, scalingX, scalingY));\n this.page.dictionary.modify();\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageB);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageC);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageI);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n }\n };\n /* tslint:disable */\n /**\n * @public\n */\n PdfGraphics.prototype.drawString = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {\n if (typeof arg1 === 'string' && arg2 instanceof PdfFont && (arg3 instanceof PdfPen || arg3 === null) && (arg4 instanceof PdfBrush || arg4 === null) && typeof arg5 === 'number' && typeof arg6 === 'number' && (arg7 instanceof PdfStringFormat || arg7 === null) && typeof arg8 === 'undefined') {\n this.isOverloadWithPosition = true;\n this.drawString(arg1, arg2, arg3, arg4, arg5, arg6, (this.clientSize.width - arg5), 0, arg7);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n var temparg7 = arg7;\n var temparg8 = arg8;\n var temparg9 = arg9;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(arg1, arg2, temparg9, new SizeF(temparg7, temparg8), this.isOverloadWithPosition, this.clientSize);\n if (!result.empty) {\n var rect = this.checkCorrectLayoutRectangle(result.actualSize, temparg5, temparg6, temparg9);\n if (temparg7 <= 0) {\n temparg5 = rect.x;\n temparg7 = rect.width;\n }\n if (temparg8 <= 0) {\n temparg6 = rect.y;\n temparg8 = rect.height;\n }\n this.drawStringLayoutResult(result, arg2, temparg3, temparg4, new RectangleF(temparg5, temparg6, temparg7, temparg8), temparg9);\n this.isEmfTextScaled = false;\n this.emfScalingFactor = new SizeF(0, 0);\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n this.isNormalRender = true;\n this.pdfStringLayoutResult = result;\n this.isUseFontSize = false;\n }\n }; /* tslint:enable */\n PdfGraphics.prototype.drawLine = function (arg1, arg2, arg3, arg4, arg5) {\n if (arg2 instanceof PointF) {\n var temparg2 = arg2;\n var temparg3 = arg3;\n this.drawLine(arg1, temparg2.x, temparg2.y, temparg3.x, temparg3.y);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n this.stateControl(arg1, null, null);\n var sw = this.streamWriter;\n sw.beginPath(temparg2, temparg3);\n sw.appendLineSegment(temparg4, temparg5);\n sw.strokePath();\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawRectangle = function (arg1, arg2, arg3, arg4, arg5, arg6) {\n if (arg1 instanceof PdfPen && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(arg1, null, arg2, temparg3, arg4, arg5);\n }\n else if (arg1 instanceof PdfBrush && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(null, arg1, arg2, temparg3, arg4, arg5);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n if (arg2 instanceof PdfSolidBrush && arg2.color.isEmpty) {\n arg2 = null;\n }\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.stateControl(temparg1, temparg2, null);\n this.streamWriter.appendRectangle(temparg3, temparg4, temparg5, temparg6);\n this.drawPath(temparg1, temparg2, false);\n }\n };\n PdfGraphics.prototype.drawPath = function (arg1, arg2, arg3, arg4) {\n if (typeof arg3 === 'boolean') {\n var temparg3 = arg3;\n this.drawPath(arg1, arg2, PdfFillMode.Winding, temparg3);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var isPen = arg1 != null;\n var isBrush = arg2 != null;\n var isEvenOdd = (temparg3 === PdfFillMode.Alternate);\n if (isPen && isBrush) {\n this.streamWriter.fillStrokePath(isEvenOdd);\n }\n else if (!isPen && !isBrush) {\n this.streamWriter.endPath();\n }\n else if (isPen) {\n this.streamWriter.strokePath();\n }\n else {\n this.streamWriter.fillPath(isEvenOdd);\n }\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawImage = function (arg1, arg2, arg3, arg4, arg5) {\n if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n var size = arg1.physicalDimension;\n this.drawImage(arg1, arg2, arg3, size.width, size.height);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n arg1.save();\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(temparg2, (temparg3 + temparg5), matrix);\n this.getScaleTransform(arg4, arg5, matrix);\n this.pdfStreamWriter.write('q');\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n if (typeof this.pageLayer !== 'undefined' && this.page != null) {\n resources.document = this.page.document;\n }\n var name_2 = resources.getName(arg1);\n if (typeof this.pageLayer !== 'undefined') {\n this.page.setResources(resources);\n }\n this.pdfStreamWriter.executeObject(name_2);\n this.pdfStreamWriter.write(Operators.restoreState);\n this.pdfStreamWriter.write(Operators.newLine);\n var resource = this.getResources.getResources();\n resource.requireProcedureSet(this.procedureSets.imageB);\n resource.requireProcedureSet(this.procedureSets.imageC);\n resource.requireProcedureSet(this.procedureSets.imageI);\n resource.requireProcedureSet(this.procedureSets.text);\n }\n };\n //Implementation\n /* tslint:disable */\n /**\n * Returns `bounds` of the line info.\n * @private\n */\n PdfGraphics.prototype.getLineBounds = function (lineIndex, result, font, layoutRectangle, format) {\n var bounds;\n if (!result.empty && lineIndex < result.lineCount && lineIndex >= 0) {\n var line = result.lines[lineIndex];\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var y = vShift + layoutRectangle.y + (result.lineHeight * lineIndex);\n var lineWidth = line.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(line, format, layoutRectangle, (lineIndex === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x = layoutRectangle.x + hShift;\n /* tslint:disable */\n var width = (!this.shouldJustify(line, layoutRectangle.width, format)) ? lineWidth - lineIndent : layoutRectangle.width - lineIndent; /* tslint:enable */\n var height = result.lineHeight;\n bounds = new RectangleF(x, y, width, height);\n }\n else {\n bounds = new RectangleF(0, 0, 0, 0);\n }\n return bounds;\n };\n /**\n * Creates `lay outed rectangle` depending on the text settings.\n * @private\n */\n PdfGraphics.prototype.checkCorrectLayoutRectangle = function (textSize, x, y, format) {\n var layoutedRectangle = new RectangleF(x, y, textSize.width, textSize.width);\n if (format != null) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n layoutedRectangle.x -= layoutedRectangle.width / 2;\n break;\n case PdfTextAlignment.Right:\n layoutedRectangle.x -= layoutedRectangle.width;\n break;\n }\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n layoutedRectangle.y -= layoutedRectangle.height / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n layoutedRectangle.y -= layoutedRectangle.height;\n break;\n }\n }\n return layoutedRectangle;\n };\n /**\n * Sets the `layer` for the graphics.\n * @private\n */\n PdfGraphics.prototype.setLayer = function (layer) {\n this.pageLayer = layer;\n var page = layer.page;\n if (page != null && typeof page !== 'undefined') {\n page.beginSave = this.pageSave;\n }\n };\n /**\n * Adding page number field before page saving.\n * @private\n */\n /* tslint:disable */\n PdfGraphics.prototype.pageSave = function (page) {\n if (page.graphics.automaticFields != null) {\n for (var i = 0; i < page.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = page.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(page.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n };\n /**\n * `Draws a layout result`.\n * @private\n */\n PdfGraphics.prototype.drawStringLayoutResult = function (result, font, pen, brush, layoutRectangle, format) {\n if (!result.empty) {\n this.applyStringSettings(font, pen, brush, format, layoutRectangle);\n // Set text scaling\n var textScaling = (format != null) ? format.horizontalScalingFactor : 100.0;\n if (textScaling !== this.previousTextScaling && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setTextScaling(textScaling);\n this.previousTextScaling = textScaling;\n }\n var height = (format == null || format.lineSpacing === 0) ? font.height : format.lineSpacing + font.height;\n var subScript = (format != null && format.subSuperScript === PdfSubSuperScript.SubScript);\n var shift = 0;\n shift = (subScript) ? height - (font.height + font.metrics.getDescent(format)) : (height - font.metrics.getAscent(format));\n this.shift = shift;\n this.pdfStreamWriter.startNextLine(layoutRectangle.x, layoutRectangle.y - shift);\n this.pdfStreamWriter.setLeading(+height);\n var resultHeight = 0;\n var remainingString = '';\n for (var i = 0; i < result.lines.length; i++) {\n resultHeight += result.lineHeight;\n if ((layoutRectangle.y + resultHeight) > this.clientSize.height) {\n this.startCutIndex = i;\n break;\n }\n }\n for (var j = this.startCutIndex; (j < result.lines.length && j >= 0); j++) {\n remainingString += result.lines[j].text;\n }\n var bounds = new RectangleF(layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height);\n this.drawLayoutResult(result, font, format, layoutRectangle);\n this.underlineStrikeoutText(pen, brush, result, font, bounds, format);\n this.isEmfPlus = false;\n this.isUseFontSize = false;\n if (this.startCutIndex !== -1) {\n var page = this.getNextPage();\n page.graphics.drawString(remainingString, font, pen, brush, layoutRectangle.x, 0, layoutRectangle.width, 0, format);\n }\n }\n else {\n throw new Error('ArgumentNullException:result');\n }\n };\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGraphics.prototype.getNextPage = function () {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n return nextPage;\n };\n PdfGraphics.prototype.setClip = function (rectangle, mode) {\n if (typeof mode === 'undefined') {\n this.setClip(rectangle, PdfFillMode.Winding);\n }\n else {\n this.pdfStreamWriter.appendRectangle(rectangle);\n this.pdfStreamWriter.clipPath((mode === PdfFillMode.Alternate));\n }\n };\n /**\n * Applies all the `text settings`.\n * @private\n */\n PdfGraphics.prototype.applyStringSettings = function (font, pen, brush, format, bounds) {\n var setLineWidth = false;\n var tm = this.getTextRenderingMode(pen, brush, format);\n this.stateControl(pen, brush, font, format);\n this.pdfStreamWriter.beginText();\n if ((tm) !== this.previousTextRenderingMode) {\n this.pdfStreamWriter.setTextRenderingMode(tm);\n this.previousTextRenderingMode = tm;\n }\n // Set character spacing.\n var cs = (format != null) ? format.characterSpacing : 0;\n if (cs !== this.previousCharacterSpacing && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setCharacterSpacing(cs);\n this.previousCharacterSpacing = cs;\n }\n // Set word spacing.\n // NOTE: it works only if the space code is equal to 32 (0x20).\n var ws = (format != null) ? format.wordSpacing : 0;\n if (ws !== this.previousWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(ws);\n this.previousWordSpacing = ws;\n }\n };\n /**\n * Calculates `shift value` if the text is vertically aligned.\n * @private\n */\n PdfGraphics.prototype.getTextVerticalAlignShift = function (textHeight, boundsHeight, format) {\n var shift = 0;\n if (boundsHeight >= 0 && format != null && format.lineAlignment !== PdfVerticalAlignment.Top) {\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n shift = (boundsHeight - textHeight) / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n shift = boundsHeight - textHeight;\n break;\n }\n }\n return shift;\n };\n /* tslint:disable */\n /**\n * `Draws layout result`.\n * @private\n */\n PdfGraphics.prototype.drawLayoutResult = function (result, font, format, layoutRectangle) {\n var vAlignShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, vAlignShift);\n }\n var ttfFont = font;\n var unicode = (ttfFont != null && ttfFont.isUnicode);\n var embed = (ttfFont != null && ttfFont.isEmbedFont);\n var lines = result.lines;\n for (var i = 0, len = lines.length; (i < len && i !== this.startCutIndex); i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hAlignShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hAlignShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(hAlignShift, 0);\n }\n if (unicode) {\n this.drawUnicodeLine(lineInfo, layoutRectangle, font, format);\n }\n else {\n this.drawAsciiLine(lineInfo, layoutRectangle, font, format);\n }\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(-hAlignShift, 0);\n }\n if (this.isOverloadWithPosition && lines.length > 1) {\n this.pdfStreamWriter.startNextLine(-(layoutRectangle.x), 0);\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n this.isOverloadWithPosition = false;\n this.isPointOverload = true;\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, -(vAlignShift - result.lineHeight));\n }\n this.pdfStreamWriter.endText();\n };\n /**\n * `Draws Ascii line`.\n * @private\n */\n PdfGraphics.prototype.drawAsciiLine = function (lineInfo, layoutRectangle, font, format) {\n this.justifyLine(lineInfo, layoutRectangle.width, format);\n var value = '';\n if (lineInfo.text.indexOf('(') !== -1 || lineInfo.text.indexOf(')') !== -1) {\n for (var i = 0; i < lineInfo.text.length; i++) {\n if (lineInfo.text[i] === '(') {\n value += '\\\\\\(';\n }\n else if (lineInfo.text[i] === ')') {\n value += '\\\\\\)';\n }\n else {\n value += lineInfo.text[i];\n }\n }\n }\n if (value === '') {\n value = lineInfo.text;\n }\n var line = '(' + value + ')';\n this.pdfStreamWriter.showNextLineText(new PdfString(line));\n };\n /**\n * Draws unicode line.\n * @private\n */\n PdfGraphics.prototype.drawUnicodeLine = function (lineInfo, layoutRectangle, font, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var rtl = (format !== null && format.rightToLeft);\n var useWordSpace = (format !== null && (format.wordSpacing !== 0 || format.alignment === PdfTextAlignment.Justify));\n var ttfFont = font;\n var wordSpacing = this.justifyLine(lineInfo, layoutRectangle.width, format);\n var rtlRender = new RtlRenderer();\n if (rtl || (format !== null && format.textDirection !== PdfTextDirection.None)) {\n var blocks = null;\n var rightAlign = (format !== null && format.alignment === PdfTextAlignment.Right);\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n /* tslint:disable-next-line:max-line-length */\n blocks = rtlRender.layout(line, ttfFont, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, useWordSpace, format);\n }\n else {\n blocks = rtlRender.layout(line, ttfFont, rightAlign, useWordSpace, format);\n }\n var words = null;\n if (blocks.length > 1) {\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n /* tslint:disable-next-line:max-line-length */\n words = rtlRender.splitLayout(line, ttfFont, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, useWordSpace, format);\n }\n else {\n words = rtlRender.splitLayout(line, ttfFont, rightAlign, useWordSpace, format);\n }\n }\n else {\n words = [line];\n }\n this.drawUnicodeBlocks(blocks, words, ttfFont, format, wordSpacing);\n }\n else {\n if (useWordSpace) {\n var result = this.breakUnicodeLine(line, ttfFont, null);\n var blocks = result.tokens;\n var words = result.words;\n this.drawUnicodeBlocks(blocks, words, ttfFont, format, wordSpacing);\n }\n else {\n var token = this.convertToUnicode(line, ttfFont);\n var value = this.getUnicodeString(token);\n this.streamWriter.showNextLineText(value);\n }\n }\n };\n /**\n * Draws array of unicode tokens.\n */\n /* tslint:disable */\n PdfGraphics.prototype.drawUnicodeBlocks = function (blocks, words, font, format, wordSpacing) {\n /* tslint:enable */\n if (blocks == null) {\n throw new Error('Argument Null Exception : blocks');\n }\n if (words == null) {\n throw new Error('Argument Null Exception : words');\n }\n if (font == null) {\n throw new Error('Argument Null Exception : font');\n }\n this.streamWriter.startNextLine();\n var x = 0;\n var xShift = 0;\n var firstLineIndent = 0;\n var paragraphIndent = 0;\n try {\n if (format !== null) {\n firstLineIndent = format.firstLineIndent;\n paragraphIndent = format.paragraphIndent;\n format.firstLineIndent = 0;\n format.paragraphIndent = 0;\n }\n var spaceWidth = font.getCharWidth(StringTokenizer.whiteSpace, format) + wordSpacing;\n var characterSpacing = (format != null) ? format.characterSpacing : 0;\n var wordSpace = (format !== null && wordSpacing === 0) ? format.wordSpacing : 0;\n spaceWidth += characterSpacing + wordSpace;\n for (var i = 0; i < blocks.length; i++) {\n var token = blocks[i];\n var word = words[i];\n var tokenWidth = 0;\n if (x !== 0) {\n this.streamWriter.startNextLine(x, 0);\n }\n if (word.length > 0) {\n tokenWidth += /*Utils.Round(*/ font.measureString(word, format).width /*)*/;\n tokenWidth += characterSpacing;\n var val = this.getUnicodeString(token);\n this.streamWriter.showText(val);\n }\n if (i !== blocks.length - 1) {\n x = tokenWidth + spaceWidth;\n xShift += x;\n }\n }\n // Rolback current line position.\n if (xShift > 0) {\n this.streamWriter.startNextLine(-xShift, 0);\n }\n }\n finally {\n if (format !== null) {\n format.firstLineIndent = firstLineIndent;\n format.paragraphIndent = paragraphIndent;\n }\n }\n };\n /**\n * Breakes the unicode line to the words and converts symbols to glyphs.\n */\n PdfGraphics.prototype.breakUnicodeLine = function (line, ttfFont, words) {\n if (line === null) {\n throw new Error('Argument Null Exception : line');\n }\n words = line.split(null);\n var tokens = [];\n for (var i = 0; i < words.length; i++) {\n // Reconvert string according to unicode standard.\n var word = words[i];\n var token = this.convertToUnicode(word, ttfFont);\n tokens[i] = token;\n }\n return { tokens: tokens, words: words };\n };\n /**\n * Creates PdfString from the unicode text.\n */\n PdfGraphics.prototype.getUnicodeString = function (token) {\n if (token === null) {\n throw new Error('Argument Null Exception : token');\n }\n var val = new PdfString(token);\n val.converted = true;\n val.encode = InternalEnum.ForceEncoding.Ascii;\n return val;\n };\n /**\n * Converts to unicode format.\n */\n PdfGraphics.prototype.convertToUnicode = function (text, ttfFont) {\n var token = null;\n if (text == null) {\n throw new Error('Argument Null Exception : text');\n }\n if (ttfFont == null) {\n throw new Error('Argument Null Exception : ttfFont');\n }\n if (ttfFont.fontInternal instanceof UnicodeTrueTypeFont) {\n var ttfReader = ttfFont.fontInternal.ttfReader;\n ttfFont.setSymbols(text);\n token = ttfReader.convertString(text);\n var bytes = PdfString.toUnicodeArray(token, false);\n token = PdfString.byteToString(bytes);\n }\n return token;\n };\n /**\n * `Justifies` the line if needed.\n * @private\n */\n PdfGraphics.prototype.justifyLine = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var shouldJustify = this.shouldJustify(lineInfo, boundsWidth, format);\n var hasWordSpacing = (format != null && format.wordSpacing !== 0);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var wordSpace = 0;\n if (shouldJustify) {\n // Correct line width.\n if (hasWordSpacing) {\n lineWidth -= (whitespacesCount * format.wordSpacing);\n }\n var difference = boundsWidth - lineWidth;\n wordSpace = difference / whitespacesCount;\n this.pdfStreamWriter.setWordSpacing(wordSpace);\n }\n else {\n // If there is justifying, but the line shouldn't be justified, restore default word spacing.\n if (hasWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(format.wordSpacing);\n }\n else {\n this.pdfStreamWriter.setWordSpacing(0);\n }\n }\n return wordSpace;\n };\n /**\n * `Reset` or reinitialize the current graphic value.\n * @private\n */\n PdfGraphics.prototype.reset = function (size) {\n this.canvasSize = size;\n this.streamWriter.clear();\n this.initialize();\n this.initializeCoordinates();\n };\n /**\n * Checks whether the line should be `justified`.\n * @private\n */\n PdfGraphics.prototype.shouldJustify = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var justifyStyle = (format != null && format.alignment === PdfTextAlignment.Justify);\n var goodWidth = (boundsWidth >= 0 && lineWidth < boundsWidth);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var hasSpaces = (whitespacesCount > 0 && line[0] !== StringTokenizer.whiteSpace);\n var goodLineBreakStyle = ((lineInfo.lineType & LineType.LayoutBreak) > 0);\n /* tslint:disable */\n var shouldJustify = (justifyStyle && goodWidth && hasSpaces && (goodLineBreakStyle || format.alignment === PdfTextAlignment.Justify)); /* tslint:enable */\n return shouldJustify;\n };\n /* tslint:disable */\n /**\n * Emulates `Underline, Strikeout` of the text if needed.\n * @private\n */\n PdfGraphics.prototype.underlineStrikeoutText = function (pen, brush, result, font, layoutRectangle, format) {\n if (font.underline || font.strikeout) {\n // Calculate line width.\n var linePen = this.createUnderlineStikeoutPen(pen, brush, font, format);\n if (linePen != null) {\n // Approximate line positions.\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var underlineYOffset = 0;\n underlineYOffset = layoutRectangle.y + vShift + font.metrics.getAscent(format) + 1.5 * linePen.width;\n var strikeoutYOffset = layoutRectangle.y + vShift + font.metrics.getHeight(format) / 2 + 1.5 * linePen.width;\n var lines = result.lines;\n // Run through the text and draw lines.\n for (var i = 0, len = result.lineCount; i < len; i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x1 = layoutRectangle.x + hShift;\n /* tslint:disable */\n var x2 = (!this.shouldJustify(lineInfo, layoutRectangle.width, format)) ? x1 + lineWidth - lineIndent : x1 + layoutRectangle.width - lineIndent;\n /* tslint:enable */\n if (font.underline) {\n var y = underlineYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n underlineYOffset += result.lineHeight;\n }\n if (font.strikeout) {\n var y = strikeoutYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n strikeoutYOffset += result.lineHeight;\n }\n if (this.isPointOverload && lines.length > 1) {\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n }\n }\n this.isPointOverload = false;\n }\n }\n };\n /**\n * `Creates a pen` for drawing lines in the text.\n * @private\n */\n PdfGraphics.prototype.createUnderlineStikeoutPen = function (pen, brush, font, format) {\n // Calculate line width.\n var lineWidth = font.metrics.getSize(format) / 20;\n var linePen = null;\n // Create a pen fo the lines.\n if (pen != null) {\n linePen = new PdfPen(pen.color, lineWidth);\n }\n else if (brush != null) {\n linePen = new PdfPen(brush, lineWidth);\n }\n return linePen;\n };\n /**\n * Return `text rendering mode`.\n * @private\n */\n PdfGraphics.prototype.getTextRenderingMode = function (pen, brush, format) {\n var tm = TextRenderingMode.None;\n if (pen != null && brush != null) {\n tm = TextRenderingMode.FillStroke;\n }\n else if (pen != null) {\n tm = TextRenderingMode.Stroke;\n }\n else {\n tm = TextRenderingMode.Fill;\n }\n if (format != null && format.clipPath) {\n tm |= TextRenderingMode.ClipFlag;\n }\n return tm;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfGraphics.prototype.getLineIndent = function (lineInfo, format, layoutBounds, firstLine) {\n var lineIndent = 0;\n var firstParagraphLine = ((lineInfo.lineType & LineType.FirstParagraphLine) > 0);\n if (format != null && firstParagraphLine) {\n lineIndent = (firstLine) ? format.firstLineIndent : format.paragraphIndent;\n lineIndent = (layoutBounds.width > 0) ? Math.min(layoutBounds.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates shift value if the line is `horizontaly aligned`.\n * @private\n */\n PdfGraphics.prototype.getHorizontalAlignShift = function (lineWidth, boundsWidth, format) {\n var shift = 0;\n if (boundsWidth >= 0 && format != null && format.alignment !== PdfTextAlignment.Left) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n shift = (boundsWidth - lineWidth) / 2;\n break;\n case PdfTextAlignment.Right:\n shift = boundsWidth - lineWidth;\n break;\n }\n }\n return shift;\n };\n /**\n * Gets or sets the value that indicates `text direction` mode.\n * @private\n */\n PdfGraphics.prototype.rightToLeft = function (format) {\n var rtl = (format != null && format.rightToLeft);\n if (format !== null && typeof format !== 'undefined') {\n if (format.textDirection !== PdfTextDirection.None && typeof format.textDirection !== 'undefined') {\n rtl = true;\n }\n }\n return rtl;\n };\n PdfGraphics.prototype.stateControl = function (pen, brush, font, format) {\n if (typeof format === 'undefined') {\n this.stateControl(pen, brush, font, null);\n }\n else {\n var saveState = false;\n if (brush !== null) {\n var solidBrush = brush;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n if (this.colorSpaceChanged === false) {\n this.lastDocumentCS = this.pageLayer.page.document.colorSpace;\n this.lastGraphicsCS = this.pageLayer.page.graphics.colorSpace;\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n this.colorSpaceChanged = true;\n }\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n else if (pen != null) {\n var pdfPen = pen;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n /* tslint:disable */\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n this.penControl(pen, saveState);\n this.brushControl(brush, saveState);\n this.fontControl(font, format, saveState);\n }\n };\n /**\n * Initializes the `current color space`.\n * @private\n */\n PdfGraphics.prototype.initCurrentColorSpace = function (colorspace) {\n var re = this.getResources.getResources();\n if (!this.bCSInitialized) {\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], true);\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], false);\n this.bCSInitialized = true;\n }\n };\n /**\n * Controls the `pen state`.\n * @private\n */\n PdfGraphics.prototype.penControl = function (pen, saveState) {\n if (pen != null) {\n this.currentPen = pen;\n this.colorSpace = PdfColorSpace.Rgb;\n /* tslint:disable */\n pen.monitorChanges(this.currentPen, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace, this.matrix.clone());\n /* tslint:enable */\n this.currentPen = pen.clone();\n }\n };\n /**\n * Controls the `brush state`.\n * @private\n */\n PdfGraphics.prototype.brushControl = function (brush, saveState) {\n if (brush != null) {\n this.currentBrush = brush;\n /* tslint:disable */\n brush.monitorChanges(this.currentBrush, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace);\n /* tslint:enable */\n this.currentBrush = brush;\n brush = null;\n }\n };\n /**\n * Saves the font and other `font settings`.\n * @private\n */\n PdfGraphics.prototype.fontControl = function (font, format, saveState) {\n if (font != null) {\n var curSubSuper = (format != null) ? format.subSuperScript : PdfSubSuperScript.None;\n /* tslint:disable */\n var prevSubSuper = (this.currentStringFormat != null) ? this.currentStringFormat.subSuperScript : PdfSubSuperScript.None; /* tslint:enable */\n if (saveState || font !== this.currentFont || curSubSuper !== prevSubSuper) {\n var resources = this.getResources.getResources();\n this.currentFont = font;\n this.currentStringFormat = format;\n var size = font.metrics.getSize(format);\n /* tslint:disable */\n this.isEmfTextScaled = false;\n var fontName = resources.getName(font);\n this.pdfStreamWriter.setFont(font, fontName, size);\n }\n }\n };\n PdfGraphics.prototype.setTransparency = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n this.istransparencySet = true;\n this.setTransparency(arg1, arg1, PdfBlendMode.Normal);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.setTransparency(arg1, arg2, PdfBlendMode.Normal);\n }\n else {\n if (this.trasparencies == null) {\n this.trasparencies = new TemporaryDictionary();\n }\n var transp = null;\n var td = new TransparencyData(arg1, arg2, arg3);\n if (this.trasparencies.containsKey(td)) {\n transp = this.trasparencies.getValue(td);\n }\n if (transp == null) {\n transp = new PdfTransparency(arg1, arg2, arg3);\n this.trasparencies.setValue(td, transp);\n }\n var resources = this.getResources.getResources();\n var name_3 = resources.getName(transp);\n var sw = this.streamWriter;\n sw.setGraphicsState(name_3);\n }\n };\n PdfGraphics.prototype.clipTranslateMargins = function (x, y, left, top, right, bottom) {\n if (x instanceof RectangleF && typeof y === 'undefined') {\n this.clipBounds = x;\n this.pdfStreamWriter.writeComment('Clip margins.');\n this.pdfStreamWriter.appendRectangle(x);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment('Translate co-ordinate system.');\n this.translateTransform(x.x, x.y);\n }\n else if (typeof x === 'number') {\n var clipArea = new RectangleF(left, top, this.size.width - left - right, this.size.height - top - bottom);\n this.clipBounds = clipArea;\n this.pdfStreamWriter.writeComment(\"Clip margins.\");\n this.pdfStreamWriter.appendRectangle(clipArea);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment(\"Translate co-ordinate system.\");\n this.translateTransform(x, y);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfGraphics.prototype.updateY = function (y) {\n return -y;\n };\n /**\n * Used to `translate the transformation`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set translate transform\n * page1.graphics.translateTransform(100, 100);\n * //\n * // draw the rectangle after applying translate transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param offsetX The x-coordinate of the translation.\n * @param offsetY The y-coordinate of the translation.\n */\n PdfGraphics.prototype.translateTransform = function (offsetX, offsetY) {\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(offsetX, offsetY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Translates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getTranslateTransform = function (x, y, input) {\n input.translate(x, this.updateY(y));\n return input;\n };\n /* tslint:disable */\n /**\n * Applies the specified `scaling operation` to the transformation matrix of this Graphics by prepending it to the object's transformation matrix.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // apply scaling trasformation\n * page1.graphics.scaleTransform(1.5, 2);\n * //\n * // draw the rectangle after applying scaling transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param scaleX Scale factor in the x direction.\n * @param scaleY Scale factor in the y direction.\n */\n /* tslint:enable */\n PdfGraphics.prototype.scaleTransform = function (scaleX, scaleY) {\n var matrix = new PdfTransformationMatrix();\n this.getScaleTransform(scaleX, scaleY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Scales` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getScaleTransform = function (x, y, input) {\n if (input == null) {\n input = new PdfTransformationMatrix();\n }\n input.scale(x, y);\n return input;\n };\n /**\n * Applies the specified `rotation` to the transformation matrix of this Graphics.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set RotateTransform with 25 degree of angle\n * page1.graphics.rotateTransform(25);\n * //\n * // draw the rectangle after RotateTransformation\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param angle Angle of rotation in degrees.\n */\n PdfGraphics.prototype.rotateTransform = function (angle) {\n var matrix = new PdfTransformationMatrix();\n this.getRotateTransform(angle, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Initializes coordinate system`.\n * @private\n */\n PdfGraphics.prototype.initializeCoordinates = function () {\n // Matrix equation: TM(T-1)=M', where T=[1 0 0 -1 0 h]\n this.pdfStreamWriter.writeComment('Change co-ordinate system to left/top.');\n // Translate co-ordinates only, don't flip.\n if (this.mediaBoxUpperRightBound !== -(this.size.height)) {\n if (this.cropBox == null) {\n if (this.mediaBoxUpperRightBound === this.size.height || this.mediaBoxUpperRightBound === 0) {\n this.translateTransform(0, this.updateY(this.size.height));\n }\n else {\n this.translateTransform(0, this.updateY(this.mediaBoxUpperRightBound));\n }\n }\n }\n };\n /**\n * `Rotates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getRotateTransform = function (angle, input) {\n if (input == null || typeof input === 'undefined') {\n input = new PdfTransformationMatrix();\n }\n input.rotate(this.updateY(angle));\n return input;\n };\n /**\n * `Saves` the current state of this Graphics and identifies the saved state with a GraphicsState.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // save the graphics state\n * let state1 : PdfGraphicsState = page1.graphics.save();\n * //\n * page1.graphics.scaleTransform(1.5, 2);\n * // draw the rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // restore the graphics state\n * page1.graphics.restore(state1);\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfGraphics.prototype.save = function () {\n var state = new PdfGraphicsState(this, this.matrix.clone());\n state.brush = this.currentBrush;\n state.pen = this.currentPen;\n state.font = this.currentFont;\n state.colorSpace = this.currentColorSpace;\n state.characterSpacing = this.previousCharacterSpacing;\n state.wordSpacing = this.previousWordSpacing;\n state.textScaling = this.previousTextScaling;\n state.textRenderingMode = this.previousTextRenderingMode;\n this.graphicsState.push(state);\n this.pdfStreamWriter.saveGraphicsState();\n return state;\n };\n PdfGraphics.prototype.restore = function (state) {\n if (typeof state === 'undefined') {\n if (this.graphicsState.length > 0) {\n this.doRestoreState();\n }\n }\n else {\n if (this.graphicsState.indexOf(state) !== -1) {\n for (;;) {\n if (this.graphicsState.length === 0) {\n break;\n }\n var popState = this.doRestoreState();\n if (popState === state) {\n break;\n }\n }\n }\n }\n };\n /**\n * `Restores graphics state`.\n * @private\n */\n PdfGraphics.prototype.doRestoreState = function () {\n var state = this.graphicsState.pop();\n this.transformationMatrix = state.matrix;\n this.currentBrush = state.brush;\n this.currentPen = state.pen;\n this.currentFont = state.font;\n this.currentColorSpace = state.colorSpace;\n this.previousCharacterSpacing = state.characterSpacing;\n this.previousWordSpacing = state.wordSpacing;\n this.previousTextScaling = state.textScaling;\n this.previousTextRenderingMode = state.textRenderingMode;\n this.pdfStreamWriter.restoreGraphicsState();\n return state;\n };\n // Constants\n /**\n * Specifies the mask of `path type values`.\n * @private\n */\n PdfGraphics.pathTypesValuesMask = 0xf;\n /**\n * Checks whether the object is `transparencyObject`.\n * @hidden\n * @private\n */\n PdfGraphics.transparencyObject = false;\n return PdfGraphics;\n}());\nexport { PdfGraphics };\n/**\n * `GetResourceEventHandler` class is alternate for event handlers and delegates.\n * @private\n * @hidden\n */\nvar GetResourceEventHandler = /** @class */ (function () {\n /**\n * Initialize instance of `GetResourceEventHandler` class.\n * Alternate for event handlers and delegates.\n * @private\n */\n function GetResourceEventHandler(sender) {\n this.sender = sender;\n }\n /**\n * Return the instance of `PdfResources` class.\n * @private\n */\n GetResourceEventHandler.prototype.getResources = function () {\n return this.sender.getResources();\n };\n return GetResourceEventHandler;\n}());\nexport { GetResourceEventHandler };\nvar PdfGraphicsState = /** @class */ (function () {\n function PdfGraphicsState(graphics, matrix) {\n /**\n * Stores `previous rendering mode`.\n * @default TextRenderingMode.Fill\n * @private\n */\n this.internalTextRenderingMode = TextRenderingMode.Fill;\n /**\n * `Previous character spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalCharacterSpacing = 0.0;\n /**\n * `Previous word spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalWordSpacing = 0.0;\n /**\n * The previously used `text scaling value`.\n * @default 100.0\n * @private\n */\n this.internalTextScaling = 100.0;\n /**\n * `Current color space`.\n * @default PdfColorSpace.Rgb\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n if (typeof graphics !== 'undefined') {\n this.pdfGraphics = graphics;\n this.transformationMatrix = matrix;\n }\n }\n Object.defineProperty(PdfGraphicsState.prototype, \"graphics\", {\n // Properties\n /**\n * Gets the parent `graphics object`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"matrix\", {\n /**\n * Gets the `current matrix`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"characterSpacing\", {\n /**\n * Gets or sets the `current character spacing`.\n * @private\n */\n get: function () {\n return this.internalCharacterSpacing;\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"wordSpacing\", {\n /**\n * Gets or sets the `word spacing` value.\n * @private\n */\n get: function () {\n return this.internalWordSpacing;\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textScaling\", {\n /**\n * Gets or sets the `text scaling` value.\n * @private\n */\n get: function () {\n return this.internalTextScaling;\n },\n set: function (value) {\n this.internalTextScaling = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"pen\", {\n /**\n * Gets or sets the `current pen` object.\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"brush\", {\n /**\n * Gets or sets the `brush`.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"font\", {\n /**\n * Gets or sets the `current font` object.\n * @private\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"colorSpace\", {\n /**\n * Gets or sets the `current color space` value.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textRenderingMode\", {\n /**\n * Gets or sets the `text rendering mode`.\n * @private\n */\n get: function () {\n return this.internalTextRenderingMode;\n },\n set: function (value) {\n this.internalTextRenderingMode = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGraphicsState;\n}());\nexport { PdfGraphicsState };\nvar TransparencyData = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `TransparencyData` class.\n * @private\n */\n function TransparencyData(alphaPen, alphaBrush, blendMode) {\n this.alphaPen = alphaPen;\n this.alphaBrush = alphaBrush;\n this.blendMode = blendMode;\n }\n return TransparencyData;\n}());\n","import { PdfStream } from './../primitives/pdf-stream';\nimport { PdfGraphics, GetResourceEventHandler } from './../graphics/pdf-graphics';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * The `PdfPageLayer` used to create layers in PDF document.\n * @private\n */\nvar PdfPageLayer = /** @class */ (function () {\n function PdfPageLayer(page, streamClipPageTemplates) {\n // private bSaved : boolean;\n /**\n * Local Variable to store the `color space` of the document.\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n /**\n * Local Variable to set `visibility`.\n * @default true\n * @private\n */\n this.isVisible = true;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n this.sublayer = false;\n /**\n * Local variable to store `length` of the graphics.\n * @default 0\n * @private\n */\n this.contentLength = 0;\n /**\n * Instance for `PdfDictionaryProperties` Class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (typeof streamClipPageTemplates === 'undefined') {\n this.pdfPage = page;\n this.clipPageTemplates = true;\n this.content = new PdfStream();\n }\n else if (streamClipPageTemplates instanceof PdfStream || streamClipPageTemplates === null) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n if (streamClipPageTemplates == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.pdfPage = page;\n this.content = streamClipPageTemplates;\n }\n else {\n this.constructor(page);\n this.clipPageTemplates = streamClipPageTemplates;\n }\n }\n Object.defineProperty(PdfPageLayer.prototype, \"colorSpace\", {\n // Properties\n /**\n * Get or set the `color space`.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"page\", {\n /**\n * Gets parent `page` of the layer.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layerId\", {\n /**\n * Gets and Sets the `id of the layer`.\n * @private\n */\n get: function () {\n return this.layerid;\n },\n set: function (value) {\n this.layerid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"name\", {\n /**\n * Gets or sets the `name` of the layer.\n * @private\n */\n get: function () {\n return this.layerName;\n },\n set: function (value) {\n this.layerName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"visible\", {\n /**\n * Gets or sets the `visibility` of the layer.\n * @private\n */\n get: function () {\n return this.isVisible;\n },\n set: function (value) {\n this.isVisible = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"graphics\", {\n /**\n * Gets `Graphics` context of the layer, used to draw various graphical content on layer.\n * @private\n */\n get: function () {\n if ((this.pdfGraphics == null)) {\n this.initializeGraphics(this.page);\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layers\", {\n /**\n * Gets the collection of `PdfPageLayer`, this collection handle by the class 'PdfPageLayerCollection'.\n * @private\n */\n get: function () {\n if (this.layer == null) {\n this.layer = new PdfPageLayerCollection(this.page);\n this.layer.sublayer = true;\n return this.layer;\n }\n else {\n return this.layer;\n }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Adds` a new PDF Page layer.\n * @private\n */\n PdfPageLayer.prototype.add = function () {\n var layer = new PdfPageLayer(this.pdfPage);\n layer.name = '';\n return layer;\n };\n /**\n * Returns a value indicating the `sign` of a single-precision floating-point number.\n * @private\n */\n PdfPageLayer.prototype.sign = function (number) {\n if (number === 0) {\n return 0;\n }\n else if (number > 0) {\n return 1;\n }\n else {\n return -1;\n }\n };\n /**\n * `Initializes Graphics context` of the layer.\n * @private\n */\n PdfPageLayer.prototype.initializeGraphics = function (page) {\n var oPage = page;\n var gr = new GetResourceEventHandler(this.page);\n var cropBox = null;\n this.pdfGraphics = new PdfGraphics(page.size, gr, this.content);\n this.pdfGraphics.mediaBoxUpperRightBound = 0;\n if (oPage != null) {\n var sc = oPage.section.parent;\n if (sc != null) {\n this.pdfGraphics.colorSpace = sc.document.colorSpace;\n this.colorSpace = sc.document.colorSpace;\n }\n }\n // Transform coordinates to the left/top and activate margins.\n var isSame = (this.sign(page.origin.y) === this.sign(page.origin.x));\n // if (page != null) {\n if (page.origin.x >= 0 && page.origin.y >= 0 || !(isSame)) {\n this.pdfGraphics.initializeCoordinates();\n }\n else {\n // this.m_graphics.InitializeCoordinates(page);\n }\n var clipRect = oPage.section.getActualBounds(oPage, true);\n var margins = oPage.section.pageSettings.margins;\n if (this.clipPageTemplates) {\n if (page.origin.x >= 0 && page.origin.y >= 0) {\n this.pdfGraphics.clipTranslateMargins(clipRect);\n }\n }\n else {\n this.graphics.clipTranslateMargins(clipRect.x, clipRect.y, margins.left, margins.top, margins.right, margins.bottom);\n }\n this.pdfGraphics.setLayer(this);\n // this.bSaved = false;\n };\n Object.defineProperty(PdfPageLayer.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPageLayer;\n}());\nexport { PdfPageLayer };\n","/**\n * PdfCollection.ts class for EJ2-PDF\n * The class used to handle the collection of PdF objects.\n */\nvar PdfCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `Collection` class.\n * @private\n */\n function PdfCollection() {\n //\n }\n Object.defineProperty(PdfCollection.prototype, \"count\", {\n // Properties\n /**\n * Gets the `Count` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCollection.prototype, \"list\", {\n /**\n * Gets the `list` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCollection;\n}());\nexport { PdfCollection };\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})();\n/**\n * PdfPageLayerCollection.ts class for EJ2-PDF\n */\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfPageLayer } from './pdf-page-layer';\nimport { PdfCollection } from './../general/pdf-collection';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfStream } from './../primitives/pdf-stream';\n/**\n * The class provides methods and properties to handle the collections of `PdfPageLayer`.\n */\nvar PdfPageLayerCollection = /** @class */ (function (_super) {\n __extends(PdfPageLayerCollection, _super);\n function PdfPageLayerCollection(page) {\n var _this = _super.call(this) || this;\n /**\n * Stores the `number of first level layers` in the document.\n * @default 0\n * @private\n */\n _this.parentLayerCount = 0;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n _this.sublayer = false;\n /**\n * Stores the `optional content dictionary`.\n * @private\n */\n _this.optionalContent = new PdfDictionary();\n if (page instanceof PdfPageBase) {\n // if (page == null) {\n // throw new Error('ArgumentNullException:page');\n // }\n _this.page = page;\n var lPage = page;\n // if (lPage != null) {\n _this.parseLayers(lPage);\n // }\n }\n return _this;\n }\n PdfPageLayerCollection.prototype.items = function (index, value) {\n if (typeof index === 'number' && typeof value === 'undefined') {\n var obj = this.list[index];\n return obj;\n }\n else {\n if (value == null) {\n throw new Error('ArgumentNullException: layer');\n }\n if (value.page !== this.page) {\n throw new Error('ArgumentException: The layer belongs to another page');\n }\n // // Add/remove the layer.\n // let layer : PdfPageLayer = this.items(index);\n // if (layer != null) {\n // this.RemoveLayer(layer);\n // }\n // this.List[index] = value;\n // this.InsertLayer(index, value);\n }\n };\n PdfPageLayerCollection.prototype.add = function (firstArgument, secondArgument) {\n if (typeof firstArgument === 'undefined') {\n var layer = new PdfPageLayer(this.page);\n layer.name = '';\n this.add(layer);\n return layer;\n }\n else if (firstArgument instanceof PdfPageLayer) {\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var index = this.list.push(firstArgument);\n // Register layer.\n this.addLayer(index, firstArgument);\n return index;\n }\n else {\n return 0;\n }\n };\n /**\n * Registers `layer` at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.addLayer = function (index, layer) {\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.add(reference);\n };\n // private RemoveLayer(layer : PdfPageLayer) : void {\n // if (layer == null) {\n // throw new Error('ArgumentNullException:layer');\n // }\n // let reference : PdfReferenceHolder = new PdfReferenceHolder(layer);\n // if (this.page != null) {\n // this.page.Contents.Remove(reference);\n // }\n // }\n /**\n * Inserts `PdfPageLayer` into the collection at specified index.\n * @private\n */\n PdfPageLayerCollection.prototype.insert = function (index, layer) {\n // if (index < 0)\n // throw new ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\");\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var list = [];\n var length = this.list.length;\n for (var i = index; i < length; i++) {\n list.push(this.list.pop());\n }\n this.list.push(layer);\n for (var i = 0; i < list.length; i++) {\n this.list.push(list[i]);\n }\n // Register layer.\n this.insertLayer(index, layer);\n };\n /**\n * Registers layer at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.insertLayer = function (index, layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException:layer');\n }\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.insert(index, reference);\n };\n // tslint:disable\n /**\n * `Parses the layers`.\n * @private\n */\n PdfPageLayerCollection.prototype.parseLayers = function (loadedPage) {\n // if (loadedPage == null) {\n // throw new Error('ArgumentNullException:loadedPage');\n // }\n var contents = this.page.contents;\n var resource = this.page.getResources();\n var crossTable = null;\n var ocproperties = null;\n var propertie = null;\n var isLayerAdded = false;\n // if (loadedPage instanceof PdfPage) {\n crossTable = loadedPage.crossTable;\n // } else {\n // crossTable = (loadedPage as PdfLoadedPage).CrossTable;\n // Propertie = PdfCrossTable.Dereference(Resource[DictionaryProperties.Properties]) as PdfDictionary;\n // ocproperties = PdfCrossTable.Dereference((loadedPage as PdfLoadedPage).\n // Document.Catalog[DictionaryProperties.OCProperties]) as PdfDictionary;\n // }\n var saveStream = new PdfStream();\n var restoreStream = new PdfStream();\n var saveState = 'q';\n var newLine = '\\n';\n var restoreState = 'Q';\n // for (let index : number = 0; index < contents.Items.length; index++) {\n // let obj : IPdfPrimitive = contents[index];\n // let stream : PdfStream = crossTable.GetObject(obj) as PdfStream;\n // if (stream == null)\n // throw new PdfDocumentException(\"Invalid contents array.\");\n // // if (stream.Compress)\n // {\n // if (!loadedPage.Imported)\n // stream.Decompress();\n // }\n // byte[] contentId = stream.Data;\n // string str = PdfString.ByteToString(contentId);\n // if (!loadedPage.Imported && (contents.Count == 1) && ((stream.Data[stream.Data.Length - 2] ==\n // RestoreState) || (stream.Data[stream.Data.Length - 1] == RestoreState)))\n // {\n // byte[] content = stream.Data;\n // byte[] data = new byte[content.Length + 4];\n // data[0] = SaveState;\n // data[1] = NewLine;\n // content.CopyTo(data, 2);\n // data[data.Length - 2] = NewLine;\n // data[data.Length - 1] = RestoreState;\n // stream.Data = data;\n // }\n // if (ocproperties != null)\n // {\n // if (Propertie != null)\n // {\n // foreach (KeyValuePair prop in Propertie.Items)\n // {\n // String Key = prop.Key.ToString();\n // PdfReferenceHolder refh = prop.Value as PdfReferenceHolder;\n // PdfDictionary Dict = null;\n // if (refh != null)\n // {\n // Dict = refh.Object as PdfDictionary;\n // }\n // else\n // {\n // Dict = prop.Value as PdfDictionary;\n // }\n // PdfDictionary m_usage = PdfCrossTable.Dereference(Dict[DictionaryProperties.Usage]) as PdfDictionary;\n // if (m_usage != null)\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // PdfDictionary printoption = PdfCrossTable.Dereference(m_usage[DictionaryProperties.Print])\n // as PdfDictionary;\n // if (printoption != null)\n // {\n // layer.m_printOption = printoption;\n // foreach (KeyValuePair value in printoption.Items)\n // {\n // if (value.Key.Value.Equals(DictionaryProperties.PrintState))\n // {\n // string printState = (value.Value as PdfName).Value;\n // if (printState.Equals(DictionaryProperties.OCGON))\n // {\n // layer.PrintState = PdfPrintState.AlwaysPrint;\n // break;\n // }\n // else\n // {\n // layer.PrintState = PdfPrintState.NeverPrint;\n // break;\n // }\n // }\n // }\n // }\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // List.add(layer);\n // isLayerAdded = true;\n // if(!str.Contains(\"EMC\"))\n // break;\n // }\n // }\n // else\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // if(Dict.ContainsKey(DictionaryProperties.Name))\n // {\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // }\n // isLayerAdded = true;\n // break;\n // }\n // }\n // }\n // }\n // }\n // if (!isLayerAdded)\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // }\n // else\n // isLayerAdded = false;\n // }\n var saveData = [];\n saveData.push(saveState);\n saveStream.data = saveData;\n contents.insert(0, new PdfReferenceHolder(saveStream));\n saveData = [];\n saveData.push(restoreState);\n restoreStream.data = saveData;\n contents.insert(contents.count, new PdfReferenceHolder(restoreStream));\n };\n /**\n * Returns `index of` the `PdfPageLayer` in the collection if exists, -1 otherwise.\n * @private\n */\n PdfPageLayerCollection.prototype.indexOf = function (layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException: layer');\n }\n var index = this.list.indexOf(layer);\n return index;\n };\n return PdfPageLayerCollection;\n}(PdfCollection));\nexport { PdfPageLayerCollection };\n","/**\n * PdfTemplate.ts class for EJ2-PDF\n */\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfGraphics } from './../pdf-graphics';\nimport { PdfResources } from './../pdf-resources';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PointF, SizeF, RectangleF } from './../../drawing/pdf-drawing';\nimport { GetResourceEventHandler } from './../pdf-graphics';\n/**\n * Represents `Pdf Template` object.\n * @private\n */\nvar PdfTemplate = /** @class */ (function () {\n function PdfTemplate(arg1, arg2) {\n /**\n * Initialize an instance for `DictionaryProperties` class.\n * @private\n * @hidden\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the transformation 'is performed'.\n * @default true\n * @private\n */\n this.writeTransformation = true;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.content = new PdfStream();\n var tempSize = new SizeF(arg1.width, arg1.height);\n this.setSize(tempSize);\n this.initialize();\n }\n else {\n this.content = new PdfStream();\n this.setSize(new SizeF(arg1, arg2));\n this.initialize();\n }\n }\n Object.defineProperty(PdfTemplate.prototype, \"size\", {\n //Properties\n /**\n * Gets the size of the 'PdfTemplate'.\n */\n get: function () {\n return this.templateSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"width\", {\n /**\n * Gets the width of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"height\", {\n /**\n * Gets the height of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"graphics\", {\n /**\n * Gets the `graphics` of the 'PdfTemplate'.\n */\n get: function () {\n if (this.pdfGraphics == null || typeof this.pdfGraphics === 'undefined') {\n var gr = new GetResourceEventHandler(this);\n var g = new PdfGraphics(this.size, gr, this.content);\n this.pdfGraphics = g;\n // if(this.writeTransformation) {\n // Transform co-ordinates to Top/Left.\n this.pdfGraphics.initializeCoordinates();\n // }\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the resources and modifies the template dictionary.\n * @private\n */\n PdfTemplate.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.content.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n // Public methods\n /**\n * `Initialize` the type and subtype of the template.\n * @private\n */\n PdfTemplate.prototype.initialize = function () {\n this.addType();\n this.addSubType();\n };\n /**\n * `Adds type key`.\n * @private\n */\n PdfTemplate.prototype.addType = function () {\n var value = new PdfName(this.dictionaryProperties.xObject);\n this.content.items.setValue(this.dictionaryProperties.type, value);\n };\n /**\n * `Adds SubType key`.\n * @private\n */\n PdfTemplate.prototype.addSubType = function () {\n var value = new PdfName(this.dictionaryProperties.form);\n this.content.items.setValue(this.dictionaryProperties.subtype, value);\n };\n PdfTemplate.prototype.reset = function (size) {\n if (typeof size === 'undefined') {\n if (this.resources != null) {\n this.resources = null;\n this.content.remove(this.dictionaryProperties.resources);\n }\n if (this.graphics != null) {\n this.graphics.reset(this.size);\n }\n }\n else {\n this.setSize(size);\n this.reset();\n }\n };\n /**\n * `Set the size` of the 'PdfTemplate'.\n * @private\n */\n PdfTemplate.prototype.setSize = function (size) {\n var rect = new RectangleF(new PointF(0, 0), size);\n var val = PdfArray.fromRectangle(rect);\n this.content.items.setValue(this.dictionaryProperties.bBox, val);\n this.templateSize = size;\n };\n Object.defineProperty(PdfTemplate.prototype, \"element\", {\n // /**\n // * Returns the value of current graphics.\n // * @private\n // */\n // public GetGraphics(g : PdfGraphics) : PdfGraphics {\n // if (this.graphics == null || typeof this.graphics === 'undefined') {\n // this.graphics = g;\n // this.graphics.Size = this.Size;\n // this.graphics.StreamWriter = new PdfStreamWriter(this.content)\n // this.graphics.Initialize();\n // if(this.writeTransformation) {\n // this.graphics.InitializeCoordinates();\n // }\n // }\n // return this.graphics;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `content stream` of 'PdfTemplate' class.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplate;\n}());\nexport { PdfTemplate };\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})();\n/**\n * PdfResources.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTemplate } from './figures/pdf-template';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfBitmap } from './../graphics/images/pdf-bitmap';\nimport { PdfImage } from './../graphics/images/pdf-image';\n/**\n * `PdfResources` class used to set resource contents like font, image.\n * @private\n */\nvar PdfResources = /** @class */ (function (_super) {\n __extends(PdfResources, _super);\n function PdfResources(baseDictionary) {\n var _this = _super.call(this) || this;\n /**\n * Dictionary for the `properties names`.\n * @private\n */\n _this.properties = new PdfDictionary();\n if (baseDictionary instanceof PdfDictionary) {\n _this = _super.call(this, baseDictionary) || this;\n }\n return _this;\n }\n Object.defineProperty(PdfResources.prototype, \"names\", {\n //Properties\n /**\n * Gets the `font names`.\n * @private\n */\n get: function () {\n return this.getNames();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfResources.prototype, \"document\", {\n /**\n * Get or set the `page document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public Methods\n /**\n * `Generates name` for the object and adds to the resource if the object is new.\n * @private\n */\n PdfResources.prototype.getName = function (obj) {\n var primitive = obj.element;\n var name = null;\n if (this.names.containsKey(primitive)) {\n name = this.names.getValue(primitive);\n }\n // Object is new.\n if (name == null) {\n var sName = this.generateName();\n name = new PdfName(sName);\n this.names.setValue(primitive, name);\n if (obj instanceof PdfFont) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfTemplate) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfTransparency) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfImage || obj instanceof PdfBitmap) {\n this.add(obj, name);\n }\n }\n return name;\n };\n /**\n * Gets `resource names` to font dictionaries.\n * @private\n */\n PdfResources.prototype.getNames = function () {\n if (this.pdfNames == null) {\n this.pdfNames = new TemporaryDictionary();\n }\n var fonts = this.items.getValue(this.dictionaryProperties.font);\n if (fonts != null) {\n var reference = fonts;\n var dictionary = fonts;\n dictionary = PdfCrossTable.dereference(fonts);\n }\n return this.pdfNames;\n };\n /**\n * Add `RequireProcedureSet` into procset array.\n * @private\n */\n PdfResources.prototype.requireProcedureSet = function (procedureSetName) {\n if (procedureSetName == null) {\n throw new Error('ArgumentNullException:procedureSetName');\n }\n var procSets = this.items.getValue(this.dictionaryProperties.procset);\n if (procSets == null) {\n procSets = new PdfArray();\n this.items.setValue(this.dictionaryProperties.procset, procSets);\n }\n var name = new PdfName(procedureSetName);\n if (!procSets.contains(name)) {\n procSets.add(name);\n }\n };\n //Helper Methods\n /**\n * `Remove font` from array.\n * @private\n */\n PdfResources.prototype.removeFont = function (name) {\n var key = null;\n var keys = this.pdfNames.keys();\n for (var index = 0; index < this.pdfNames.size(); index++) {\n if (this.pdfNames.getValue(keys[index]) === new PdfName(name)) {\n key = keys[index];\n break;\n }\n }\n if (key != null) {\n this.pdfNames.remove(key);\n }\n };\n /**\n * Generates `Unique string name`.\n * @private\n */\n PdfResources.prototype.generateName = function () {\n var name = Guid.getNewGuidString();\n return name;\n };\n PdfResources.prototype.add = function (arg1, arg2) {\n if (arg1 instanceof PdfFont) {\n var dictionary = null;\n var fonts = this.items.getValue(this.dictionaryProperties.font);\n if (fonts != null) {\n var reference = fonts;\n dictionary = fonts;\n dictionary = fonts;\n }\n else {\n dictionary = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.font, dictionary);\n }\n dictionary.items.setValue(arg2.value, new PdfReferenceHolder(arg1.element));\n }\n else if (arg1 instanceof PdfTemplate) {\n var xobjects = void 0;\n xobjects = this.items.getValue(this.dictionaryProperties.xObject);\n // Create fonts dictionary.\n if (xobjects == null) {\n xobjects = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.xObject, xobjects);\n }\n xobjects.items.setValue(arg2.value, new PdfReferenceHolder(arg1.element));\n }\n else if (arg1 instanceof PdfBrush) {\n // let savable : IPdfPrimitive = (arg1 as IPdfWrapper).Element;\n // if (savable != null)\n // {\n // let pattern : PdfDictionary = this.Items.getValue(this.dictionaryProperties.pattern) as PdfDictionary;\n // // Create a new pattern dictionary.\n // if (pattern == null) {\n // pattern = new PdfDictionary();\n // this.Items.setValue(this.dictionaryProperties.pattern, pattern);\n // }\n // pattern.Items.setValue(name, new PdfReferenceHolder(savable));\n // }\n }\n else if (arg1 instanceof PdfTransparency) {\n var savable = arg1.element;\n var transDic = null;\n transDic = this.items.getValue(this.dictionaryProperties.extGState);\n // Create a new pattern dictionary.\n if (transDic == null) {\n transDic = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.extGState, transDic);\n }\n transDic.items.setValue(arg2.value, new PdfReferenceHolder(savable));\n }\n else {\n /* tslint:disable */\n var xobjects = this.Dictionary.items.getValue(this.dictionaryProperties.xObject);\n var parentXObjects = void 0;\n if (typeof this.pdfDocument !== 'undefined') {\n parentXObjects = this.pdfDocument.sections.element.items.getValue(this.dictionaryProperties.resources).items.getValue(this.dictionaryProperties.xObject);\n }\n var values = this.Dictionary.items.values();\n var hasSameImageStream = false;\n var oldReference = void 0;\n if (typeof this.pdfDocument !== 'undefined' && (typeof parentXObjects === undefined || parentXObjects == null)) {\n parentXObjects = new PdfDictionary();\n this.pdfDocument.sections.element.items.getValue(this.dictionaryProperties.resources).items.setValue(this.dictionaryProperties.xObject, parentXObjects);\n }\n else if (typeof this.pdfDocument !== 'undefined') {\n var values_1 = parentXObjects.items.values();\n for (var i = 0; i < values_1.length; i++) {\n if (typeof values_1[i] !== 'undefined' && typeof values_1[i].element !== 'undefined') {\n if (values_1[i].element.data[0] === arg1.element.data[0]) {\n oldReference = values_1[i];\n hasSameImageStream = true;\n }\n }\n }\n }\n if (xobjects == null) {\n xobjects = new PdfDictionary();\n this.Dictionary.items.setValue(this.dictionaryProperties.xObject, xobjects);\n }\n if (hasSameImageStream && typeof oldReference !== 'undefined') {\n xobjects.items.setValue(arg2.value, oldReference);\n }\n else {\n var reference = new PdfReferenceHolder(arg1.element);\n xobjects.items.setValue(arg2.value, reference);\n if (typeof this.pdfDocument !== 'undefined') {\n parentXObjects.items.setValue(arg2.value, reference);\n }\n }\n /* tslint:enable */\n }\n };\n return PdfResources;\n}(PdfDictionary));\nexport { PdfResources };\n/**\n * Used to create new guid for resources.\n * @private\n */\nvar Guid = /** @class */ (function () {\n /**\n * Initialize an `instance of GUID` class.\n * @private\n */\n function Guid(stringValue) {\n this.stringValue = stringValue || Guid.getNewGuidString();\n }\n Object.defineProperty(Guid, \"randomNumber\", {\n /**\n * Generate `Random number` for GUID.\n * @private\n */\n get: function () {\n Guid.guid = Guid.guid + 1;\n Guid.guid = Guid.guid > 999999999999 ? 0 : Guid.guid;\n return Guid.guid;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return the value of `GUID as string`.\n * @private\n */\n Guid.prototype.toString = function () {\n return this.stringValue;\n };\n /**\n * Generate `new GUID`.\n * @private\n */\n Guid.getNewGuidString = function () {\n var guid = 'abc7def4-ghi9-jkl2-m6n3-';\n var temproaryString = 'opqrstuvwxyz';\n var randomString = Guid.randomNumber.toString();\n randomString = guid + temproaryString.substr(0, (12 - randomString.length)) + randomString;\n return randomString;\n };\n /**\n * static field to store `endding value of current GUID`.\n * @private\n */\n Guid.guid = 0;\n return Guid;\n}());\nexport { Guid };\n","import { PdfArray } from './../primitives/pdf-array';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfResources } from './../graphics/pdf-resources';\n/**\n * The abstract base class for all pages,\n * `PdfPageBase` class provides methods and properties to create PDF pages and its elements.\n * @private\n */\nvar PdfPageBase = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `PdfPageBase` class.\n * @private\n */\n function PdfPageBase(dictionary) {\n /**\n * `Index` of the default layer.\n * @default -1.\n * @private\n */\n this.defLayerIndex = -1;\n /**\n * Local variable to store if page `updated`.\n * @default false.\n * @private\n */\n this.modified = false;\n /**\n * Instance of `DictionaryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.pageDictionary = dictionary;\n }\n Object.defineProperty(PdfPageBase.prototype, \"section\", {\n //Properties\n /**\n * Gets the `section` of a page.\n * @private\n */\n get: function () {\n // if (this.pdfSection === null) {\n // throw new Error('PdfException : Page must be added to some section before using.');\n // }\n return this.pdfSection;\n },\n set: function (value) {\n this.pdfSection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"dictionary\", {\n /**\n * Gets the page `dictionary`.\n * @private\n */\n get: function () {\n return this.pageDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.pageDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"defaultLayer\", {\n /**\n * Gets the `default layer` of the page (Read only).\n * @private\n */\n get: function () {\n var layer = this.layers;\n var index = this.defaultLayerIndex;\n var returnlayer = layer.items(index);\n return returnlayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"defaultLayerIndex\", {\n /**\n * Gets or sets `index of the default layer`.\n * @private\n */\n get: function () {\n if (this.layerCollection.count === 0 || this.defLayerIndex === -1) {\n var layer = this.layerCollection.add();\n this.defLayerIndex = this.layerCollection.indexOf(layer);\n }\n return this.defLayerIndex;\n },\n /**\n * Gets or sets` index of the default layer`.\n * @private\n */\n set: function (value) {\n if (value < 0 || value > this.layers.count - 1) {\n throw new Error('ArgumentOutOfRangeException : value, Index can not be less 0 and greater Layers.Count - 1');\n }\n else {\n this.defLayerIndex = value;\n this.modified = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"layers\", {\n /**\n * Gets the collection of the page's `layers` (Read only).\n * @private\n */\n get: function () {\n if (this.layerCollection == null || typeof this.layerCollection === 'undefined') {\n this.layerCollection = new PdfPageLayerCollection(this);\n }\n return this.layerCollection;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return an instance of `PdfResources` class.\n * @private\n */\n PdfPageBase.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.dictionary.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n Object.defineProperty(PdfPageBase.prototype, \"contents\", {\n /**\n * Gets `array of page's content`.\n * @private\n */\n get: function () {\n var obj = this.pageDictionary.items.getValue(this.dictionaryProperties.contents);\n var contents = obj;\n var rh = obj;\n if (contents == null) {\n contents = new PdfArray();\n this.pageDictionary.items.setValue(this.dictionaryProperties.contents, contents);\n }\n return contents;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `resources`.\n * @private\n */\n PdfPageBase.prototype.setResources = function (res) {\n this.resources = res;\n this.dictionary.items.setValue(this.dictionaryProperties.resources, this.resources);\n this.modified = true;\n };\n return PdfPageBase;\n}());\nexport { PdfPageBase };\n","import { PdfArray } from './../primitives/pdf-array';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { SizeF, RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfStringLayouter } from './../graphics/fonts/string-layouter';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * `PdfAnnotationCollection` class represents the collection of 'PdfAnnotation' objects.\n * @private\n */\nvar PdfAnnotationCollection = /** @class */ (function () {\n function PdfAnnotationCollection(page) {\n // Constants\n /**\n * `Error` constant message.\n * @private\n */\n this.alreadyExistsAnnotationError = 'This annotatation had been already added to page';\n /**\n * `Error` constant message.\n * @private\n */\n this.missingAnnotationException = 'Annotation is not contained in collection.';\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Array of the `annotations`.\n * @private\n */\n this.internalAnnotations = new PdfArray();\n /**\n * privte `list` for the annotations.\n * @private\n */\n this.lists = [];\n if (typeof page !== 'undefined') {\n this.page = page;\n }\n }\n Object.defineProperty(PdfAnnotationCollection.prototype, \"annotations\", {\n /**\n * Gets the `PdfAnnotation` object at the specified index. Read-Only.\n * @private\n */\n get: function () {\n return this.internalAnnotations;\n },\n set: function (value) {\n this.internalAnnotations = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Adds` a new annotation to the collection.\n * @private\n */\n PdfAnnotationCollection.prototype.add = function (annotation) {\n // this.SetPrint(annotation);\n this.doAdd(annotation);\n };\n /**\n * `Adds` a Annotation to collection.\n * @private\n */\n /* tslint:disable */\n PdfAnnotationCollection.prototype.doAdd = function (annotation) {\n if (typeof annotation.destination !== 'undefined') {\n var layout = new PdfStringLayouter();\n var layoutResult = layout.layout(annotation.text, annotation.font, annotation.stringFormat, new SizeF((annotation.bounds.width), 0), false, new SizeF(0, 0));\n var lastPosition = annotation.bounds.y;\n if (layoutResult.lines.length === 1) {\n var size = annotation.font.measureString(layoutResult.lines[0].text);\n annotation.bounds = new RectangleF(new PointF(annotation.bounds.x, lastPosition), size);\n annotation.text = layoutResult.lines[0].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annotation.text, annotation.font, null, annotation.brush, annotation.bounds.x, annotation.bounds.y, annotation.bounds.width, annotation.bounds.height, null);\n //Add annotation to dictionary.\n annotation.setPage(this.page);\n this.setColor(annotation);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n this.lists.push(annotation);\n }\n else {\n for (var i = 0; i < layoutResult.lines.length; i++) {\n var size = annotation.font.measureString(layoutResult.lines[i].text);\n if (i === 0) {\n annotation.bounds = new RectangleF(annotation.bounds.x, lastPosition, size.width, size.height);\n annotation.text = layoutResult.lines[i].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annotation.text, annotation.font, null, annotation.brush, annotation.bounds.x, lastPosition, size.width, size.height, null);\n //Add annotation to dictionary.\n annotation.setPage(this.page);\n this.setColor(annotation);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n this.lists.push(annotation);\n //Update y for drawing next line of the text.\n lastPosition += annotation.bounds.height;\n }\n else {\n var annot = annotation.clone();\n annot.bounds = new RectangleF(new PointF(annotation.bounds.x, lastPosition), size);\n annot.text = layoutResult.lines[i].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annot.text, annot.font, null, annot.brush, annot.bounds.x, annot.bounds.y, annot.bounds.width, annot.bounds.height, null);\n //Add annotation to dictionary.\n annot.setPage(this.page);\n this.setColor(annot);\n this.internalAnnotations.add(new PdfReferenceHolder(annot));\n this.lists.push(annot);\n //Update y for drawing next line of the text.\n lastPosition += annot.bounds.height;\n }\n }\n }\n }\n else {\n annotation.setPage(this.page);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n return this.lists.push(annotation);\n }\n };\n /* tslint:enable */\n /**\n * `Set a color of an annotation`.\n * @private\n */\n PdfAnnotationCollection.prototype.setColor = function (annotation) {\n var cs = PdfColorSpace.Rgb;\n var colours = annotation.color.toArray(cs);\n annotation.dictionary.items.setValue(this.dictionaryProperties.c, colours);\n };\n Object.defineProperty(PdfAnnotationCollection.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the `Element` representing this object.\n * @private\n */\n get: function () {\n return this.internalAnnotations;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAnnotationCollection;\n}());\nexport { PdfAnnotationCollection };\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 { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary, SaveTemplateEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { SizeF } from './../drawing/pdf-drawing';\nimport { PdfAnnotationCollection } from './../annotations/annotation-collection';\nimport { PdfPageLayer } from './pdf-page-layer';\n/**\n * Provides methods and properties to create pages and its elements.\n * `PdfPage` class inherited from the `PdfPageBase` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPage = /** @class */ (function (_super) {\n __extends(PdfPage, _super);\n //constructors\n /**\n * Initialize the new instance for `PdfPage` class.\n * @private\n */\n function PdfPage() {\n var _this = _super.call(this, new PdfDictionary()) || this;\n /**\n * Stores the instance of `PdfAnnotationCollection` class.\n * @hidden\n * @default null\n * @private\n */\n _this.annotationCollection = null;\n /**\n * Stores the instance of `PageBeginSave` event for Page Number Field.\n * @default null\n * @private\n */\n _this.beginSave = null;\n _this.initialize();\n return _this;\n }\n Object.defineProperty(PdfPage.prototype, \"document\", {\n //Properties\n /**\n * Gets current `document`.\n * @private\n */\n get: function () {\n if (this.section !== null && this.section.parent !== null) {\n return this.section.parent.document;\n }\n else {\n return null;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"graphics\", {\n /**\n * Get the current `graphics`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // get graphics\n * let graphics : PdfGraphics = page1.graphics;\n * //\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n var result = this.defaultLayer.graphics;\n result.currentPage = this;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"crossTable\", {\n /**\n * Gets the `cross table`.\n * @private\n */\n get: function () {\n if (this.section === null) {\n throw new Error('PdfDocumentException : Page is not created');\n }\n return this.section.parent === null ? this.section.parentDocument.crossTable : this.section.parent.document.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"size\", {\n /**\n * Gets the size of the PDF page- Read only.\n * @public\n */\n get: function () {\n return this.section.pageSettings.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"origin\", {\n /**\n * Gets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.section.pageSettings.origin;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"annotations\", {\n /**\n * Gets a collection of the `annotations` of the page- Read only.\n * @private\n */\n get: function () {\n if (this.annotationCollection == null) {\n this.annotationCollection = new PdfAnnotationCollection(this);\n // if (!this.Dictionary.ContainsKey(this.dictionaryProperties.annots)) {\n this.dictionary.items.setValue(this.dictionaryProperties.annots, this.annotationCollection.element);\n // }\n this.annotationCollection.annotations = this.dictionary.items.getValue(this.dictionaryProperties.annots);\n }\n return this.annotationCollection;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` a page.\n * @private\n */\n PdfPage.prototype.initialize = function () {\n this.dictionary.items.setValue(this.dictionaryProperties.type, new PdfName('Page'));\n this.dictionary.pageBeginDrawTemplate = new SaveTemplateEventHandler(this);\n };\n /**\n * Sets parent `section` to the page.\n * @private\n */\n PdfPage.prototype.setSection = function (section) {\n this.section = section;\n this.dictionary.items.setValue(this.dictionaryProperties.parent, new PdfReferenceHolder(section));\n };\n /**\n * `Resets the progress`.\n * @private\n */\n PdfPage.prototype.resetProgress = function () {\n this.isProgressOn = false;\n };\n /**\n * Get the page size reduced by page margins and page template dimensions.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the specified point using `getClientSize` method\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfPage.prototype.getClientSize = function () {\n var returnValue = this.section.getActualBounds(this, true);\n return new SizeF(returnValue.width, returnValue.height);\n };\n /**\n * Helper method to retrive the instance of `PageBeginSave` event for header and footer elements.\n * @private\n */\n PdfPage.prototype.pageBeginSave = function () {\n var doc = this.document;\n if (typeof doc !== undefined && doc != null) {\n this.drawPageTemplates(doc);\n }\n if (this.beginSave != null && typeof this.beginSave !== 'undefined') {\n this.beginSave(this);\n }\n };\n /**\n * Helper method to draw template elements.\n * @private\n */\n PdfPage.prototype.drawPageTemplates = function (document) {\n // Draw Background templates.\n var hasBackTemplates = this.section.containsTemplates(document, this, false);\n if (hasBackTemplates) {\n var backLayer = new PdfPageLayer(this, false);\n this.layers.insert(0, backLayer);\n this.section.drawTemplates(this, backLayer, document, false);\n if (backLayer.graphics !== null && typeof backLayer.graphics !== 'undefined') {\n for (var i = 0; i < backLayer.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = backLayer.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(backLayer.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n }\n // Draw Foreground templates.\n var hasFrontTemplates = this.section.containsTemplates(document, this, true);\n if (hasFrontTemplates) {\n var frontLayer = new PdfPageLayer(this, false);\n this.layers.add(frontLayer);\n this.section.drawTemplates(this, frontLayer, document, true);\n }\n };\n return PdfPage;\n}(PdfPageBase));\nexport { PdfPage };\n","/**\n * Provides data for `PageAddedEventHandler` event.\n * This event raises when adding the new PDF page to the PDF document.\n */\nvar PageAddedEventArgs = /** @class */ (function () {\n function PageAddedEventArgs(page) {\n if (typeof page !== 'undefined') {\n this.pdfPage = page;\n }\n else {\n this.pdfPage = null;\n }\n }\n Object.defineProperty(PageAddedEventArgs.prototype, \"page\", {\n /**\n * Gets the `newly added page`.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return PageAddedEventArgs;\n}());\nexport { PageAddedEventArgs };\n","/**\n * Represents the `collection of pages in a section`.\n * @private\n */\nvar PdfSectionPageCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfSectionPageCollection` class.\n * @private\n */\n function PdfSectionPageCollection(section) {\n // Fields\n /**\n * @hidden\n * @private\n */\n this.pdfSection = null;\n if (section == null) {\n throw Error('ArgumentNullException(\"section\")');\n }\n this.section = section;\n }\n Object.defineProperty(PdfSectionPageCollection.prototype, \"section\", {\n // Properties\n /**\n * Gets the `PdfPage` at the specified index.\n * @private\n */\n get: function () {\n return this.pdfSection;\n },\n set: function (value) {\n this.pdfSection = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public Methods\n /**\n * `Determines` whether the specified page is within the collection.\n * @private\n */\n PdfSectionPageCollection.prototype.contains = function (page) {\n return this.section.contains(page);\n };\n /**\n * `Removes` the specified page from collection.\n * @private\n */\n PdfSectionPageCollection.prototype.remove = function (page) {\n this.section.remove(page);\n };\n /**\n * `Adds` a new page from collection.\n * @private\n */\n PdfSectionPageCollection.prototype.add = function () {\n return this.section.add();\n };\n return PdfSectionPageCollection;\n}());\nexport { PdfSectionPageCollection };\n","import { TemplateType } from './../pages/enum';\n// import { PdfStampCollection } from `./../Pages/PdfStampCollection`;\n/**\n * `PdfDocumentTemplate` class encapsulates a page template for all the pages in the document.\n * @private\n */\nvar PdfDocumentTemplate = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfDocumentTemplate` class.\n * @public\n */\n function PdfDocumentTemplate() {\n //\n }\n Object.defineProperty(PdfDocumentTemplate.prototype, \"left\", {\n // private m_stamps : PdfStampCollection;\n // Properties\n /**\n * `Left` page template object.\n * @public\n */\n get: function () {\n return this.leftTemplate;\n },\n set: function (value) {\n this.leftTemplate = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"top\", {\n /**\n * `Top` page template object.\n * @public\n */\n get: function () {\n return this.topTemplate;\n },\n set: function (value) {\n this.topTemplate = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"right\", {\n /**\n * `Right` page template object.\n * @public\n */\n get: function () {\n return this.rightTemplate;\n },\n set: function (value) {\n this.rightTemplate = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"bottom\", {\n /**\n * `Bottom` page template object.\n * @public\n */\n get: function () {\n return this.bottomTemplate;\n },\n set: function (value) {\n this.bottomTemplate = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenLeft\", {\n /**\n * `EvenLeft` page template object.\n * @public\n */\n get: function () {\n return this.evenLeft;\n },\n set: function (value) {\n this.evenLeft = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenTop\", {\n /**\n * `EvenTop` page template object.\n * @public\n */\n get: function () {\n return this.evenTop;\n },\n set: function (value) {\n this.evenTop = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenRight\", {\n /**\n * `EvenRight` page template object.\n * @public\n */\n get: function () {\n return this.evenRight;\n },\n set: function (value) {\n this.evenRight = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenBottom\", {\n /**\n * `EvenBottom` page template object.\n * @public\n */\n get: function () {\n return this.evenBottom;\n },\n set: function (value) {\n this.evenBottom = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddLeft\", {\n /**\n * `OddLeft` page template object.\n * @public\n */\n get: function () {\n return this.oddLeft;\n },\n set: function (value) {\n this.oddLeft = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddTop\", {\n /**\n * `OddTop` page template object.\n * @public\n */\n get: function () {\n return this.oddTop;\n },\n set: function (value) {\n this.oddTop = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddRight\", {\n /**\n * `OddRight` page template object.\n * @public\n */\n get: function () {\n return this.oddRight;\n },\n set: function (value) {\n this.oddRight = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddBottom\", {\n /**\n * `OddBottom` page template object.\n * @public\n */\n get: function () {\n return this.oddBottom;\n },\n set: function (value) {\n this.oddBottom = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Returns `left` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getLeft = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenLeft != null) ? this.EvenLeft : this.left;\n }\n else {\n template = (this.OddLeft != null) ? this.OddLeft : this.left;\n }\n // }\n return template;\n };\n /**\n * Returns `top` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getTop = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenTop != null) ? this.EvenTop : this.top;\n }\n else {\n template = (this.OddTop != null) ? this.OddTop : this.top;\n }\n // }\n return template;\n };\n /**\n * Returns `right` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getRight = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenRight != null) ? this.EvenRight : this.right;\n }\n else {\n template = (this.OddRight != null) ? this.OddRight : this.right;\n }\n // }\n return template;\n };\n /**\n * Returns `bottom` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getBottom = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenBottom != null) ? this.EvenBottom : this.bottom;\n }\n else {\n template = (this.OddBottom != null) ? this.OddBottom : this.bottom;\n }\n // }\n return template;\n };\n /**\n * Checks whether the page `is even`.\n * @private\n */\n PdfDocumentTemplate.prototype.isEven = function (page) {\n var pages = page.section.document.pages;\n var index = 0;\n if (pages.pageCollectionIndex.containsKey(page)) {\n index = pages.pageCollectionIndex.getValue(page) + 1;\n }\n else {\n index = pages.indexOf(page) + 1;\n }\n var even = ((index % 2) === 0);\n return even;\n };\n /**\n * Checks a `template element`.\n * @private\n */\n PdfDocumentTemplate.prototype.checkElement = function (templateElement, type) {\n if (templateElement != null) {\n if ((typeof templateElement.type !== 'undefined') && (templateElement.type !== TemplateType.None)) {\n throw new Error('NotSupportedException:Can not reassign the template element. Please, create new one.');\n }\n templateElement.type = type;\n }\n return templateElement;\n };\n return PdfDocumentTemplate;\n}());\nexport { PdfDocumentTemplate };\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})();\n/**\n * PdfSectionTemplate.ts class for EJ2-PDF\n */\nimport { PdfDocumentTemplate } from './../document/pdf-document-template';\n/**\n * Represents a `page template` for all the pages in the section.\n */\nvar PdfSectionTemplate = /** @class */ (function (_super) {\n __extends(PdfSectionTemplate, _super);\n // Constructors\n /**\n * `Creates a new object`.\n * @private\n */\n function PdfSectionTemplate() {\n var _this = _super.call(this) || this;\n _this.leftValue = _this.topValue = _this.rightValue = _this.bottomValue = _this.stampValue = true;\n return _this;\n }\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentLeftTemplate\", {\n // Properties\n /**\n * Gets or sets value indicating whether parent `Left page template should be used or not`.\n * @private\n */\n get: function () {\n return this.leftValue;\n },\n set: function (value) {\n this.leftValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentTopTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Top page template should be used or not`.\n * @private\n */\n get: function () {\n return this.topValue;\n },\n set: function (value) {\n this.topValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentRightTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Right page template should be used or not`.\n * @private\n */\n get: function () {\n return this.rightValue;\n },\n set: function (value) {\n this.rightValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentBottomTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Bottom page template should be used or not`.\n * @private\n */\n get: function () {\n return this.bottomValue;\n },\n set: function (value) {\n this.bottomValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentStamps\", {\n /**\n * Gets or sets value indicating whether the `stamp value` is true or not.\n * @private\n */\n get: function () {\n return this.stampValue;\n },\n set: function (value) {\n this.stampValue = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfSectionTemplate;\n}(PdfDocumentTemplate));\nexport { PdfSectionTemplate };\n","import { PdfPage } from './pdf-page';\nimport { PageAddedEventArgs } from './page-added-event-arguments';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { SaveSectionEventHandler } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfSectionCollection } from './pdf-section-collection';\nimport { PdfSectionPageCollection } from './pdf-section-page-collection';\nimport { RectangleF } from './../drawing/pdf-drawing';\nimport { PdfSectionTemplate } from './pdf-section-templates';\n/**\n * Represents a `section` entity. A section it's a set of the pages with similar page settings.\n */\nvar PdfSection = /** @class */ (function () {\n function PdfSection(document, pageSettings) {\n //Fields\n //public PageAdded() : PageAddedEventArgs.PageAddedEventHandler = new PageAddedEventArgs.PageAddedEventHandler(Object,args)\n /**\n * @hidden\n * @private\n */\n this.pageAdded = new PageAddedEventArgs();\n /**\n * @hidden\n * @private\n */\n this.pdfPages = [];\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (typeof pageSettings === 'undefined') {\n this.constructor(document, document.pageSettings);\n }\n else {\n this.pdfDocument = document;\n this.settings = pageSettings.clone();\n this.initialSettings = this.settings.clone();\n this.initialize();\n }\n }\n Object.defineProperty(PdfSection.prototype, \"parent\", {\n //Property\n /**\n * Gets or sets the `parent`.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n set: function (value) {\n this.sectionCollection = value;\n this.section.items.setValue(this.dictionaryProperties.parent, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"parentDocument\", {\n /**\n * Gets the `parent document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"pageSettings\", {\n /**\n * Gets or sets the `page settings` of the section.\n * @private\n */\n get: function () {\n return this.settings;\n },\n set: function (value) {\n if (value != null) {\n this.settings = value;\n }\n else {\n throw Error('Value can not be null.');\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.section;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"count\", {\n /**\n * Gets the `count` of the pages in the section.\n * @private\n */\n get: function () {\n return this.pagesReferences.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"template\", {\n /**\n * Gets or sets a `template` for the pages in the section.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfSectionTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"document\", {\n /**\n * Gets the `document`.\n * @private\n */\n get: function () {\n return this.sectionCollection.document;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"pages\", {\n /**\n * Gets the collection of `pages` in a section (Read only)\n * @private\n */\n get: function () {\n if (this.pagesCollection == null || typeof this.pagesCollection === 'undefined') {\n this.pagesCollection = new PdfSectionPageCollection(this);\n }\n return this.pagesCollection;\n },\n enumerable: true,\n configurable: true\n });\n //methods\n /**\n * `Return the page collection` of current section.\n * @private\n */\n PdfSection.prototype.getPages = function () {\n return this.pdfPages;\n };\n /**\n * `Translates` point into native coordinates of the page.\n * @private\n */\n PdfSection.prototype.pointToNativePdf = function (page, point) {\n var bounds = this.getActualBounds(page, true);\n point.x += bounds.x;\n point.y = this.pageSettings.height - (point.y);\n return point;\n };\n /**\n * Sets the page setting of the current section.\n * @public\n * @param settings Instance of `PdfPageSettings`\n */\n PdfSection.prototype.setPageSettings = function (settings) {\n this.settings = settings;\n this.state.orientation = settings.orientation;\n this.state.rotate = settings.rotate;\n this.state.size = settings.size;\n this.state.origin = settings.origin;\n };\n /**\n * `Initializes` the object.\n * @private\n */\n PdfSection.prototype.initialize = function () {\n this.pagesReferences = new PdfArray();\n this.section = new PdfDictionary();\n this.state = new PageSettingsState(this.pdfDocument);\n this.section.sectionBeginSave = new SaveSectionEventHandler(this, this.state);\n this.pageCount = new PdfNumber(0);\n this.section.items.setValue(this.dictionaryProperties.count, this.pageCount);\n this.section.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.pages));\n this.section.items.setValue(this.dictionaryProperties.kids, this.pagesReferences);\n };\n /**\n * Checks whether any template should be printed on this layer.\n * @private\n * @param document The parent document.\n * @param page The parent page.\n * @param foreground Layer z-order.\n * @returns True - if some content should be printed on the layer, False otherwise.\n */\n PdfSection.prototype.containsTemplates = function (document, page, foreground) {\n var documentHeaders = this.getDocumentTemplates(document, page, true, foreground);\n var documentTemplates = this.getDocumentTemplates(document, page, false, foreground);\n var contains = (documentHeaders.length > 0 || documentTemplates.length > 0);\n return contains;\n };\n /**\n * Returns array of the document templates.\n * @private\n * @param document The parent document.\n * @param page The parent page.\n * @param headers If true - return headers/footers, if false - return simple templates.\n * @param foreground If true - return foreground templates, if false - return background templates.\n * @returns Returns array of the document templates.\n */\n /* tslint:disable */\n PdfSection.prototype.getDocumentTemplates = function (document, page, headers, foreground) {\n var templates = [];\n if (headers) {\n if (this.template.applyDocumentTopTemplate && document.template.getTop(page) != null) {\n if ((!(document.template.getTop(page).foreground || foreground)) || (document.template.getTop(page).foreground && foreground)) {\n templates.push(document.template.getTop(page));\n }\n }\n if (this.template.applyDocumentBottomTemplate && document.template.getBottom(page) != null) {\n if ((!(document.template.getBottom(page).foreground || foreground)) || (document.template.getBottom(page).foreground && foreground)) {\n templates.push(document.template.getBottom(page));\n }\n }\n if (this.template.applyDocumentLeftTemplate && document.template.getLeft(page) != null) {\n if ((!(document.template.getLeft(page).foreground || foreground)) || (document.template.getLeft(page).foreground && foreground)) {\n templates.push(document.template.getLeft(page));\n }\n }\n if (this.template.applyDocumentRightTemplate && document.template.getRight(page) != null) {\n if ((!(document.template.getRight(page).foreground || foreground)) || (document.template.getRight(page).foreground && foreground)) {\n templates.push(document.template.getRight(page));\n }\n }\n }\n return templates;\n };\n /* tslint:enable */\n /**\n * `Adds` the specified page.\n * @private\n */\n PdfSection.prototype.add = function (page) {\n if (typeof page === 'undefined') {\n var page_1 = new PdfPage();\n this.add(page_1);\n return page_1;\n }\n else {\n var r = this.checkPresence(page);\n this.pdfPages.push(page);\n this.pagesReferences.add(r);\n page.setSection(this);\n page.resetProgress();\n this.pageAddedMethod(page);\n }\n };\n /**\n * `Checks the presence`.\n * @private\n */\n PdfSection.prototype.checkPresence = function (page) {\n var rh = new PdfReferenceHolder(page);\n var contains = false;\n var sc = this.parent;\n for (var index = 0; index < sc.section.length; index++) {\n var section = sc.section[index];\n contains = contains || section.contains(page);\n }\n return rh;\n };\n /**\n * `Determines` whether the page in within the section.\n * @private\n */\n PdfSection.prototype.contains = function (page) {\n var index = this.indexOf(page);\n return (0 <= index);\n };\n /**\n * Get the `index of` the page.\n * @private\n */\n PdfSection.prototype.indexOf = function (page) {\n for (var index = 0; index < this.pdfPages.length; index++) {\n if (this.pdfPages[index] === page) {\n return this.pdfPages.indexOf(page);\n }\n }\n var r = new PdfReferenceHolder(page);\n return this.pagesReferences.indexOf(r);\n };\n /**\n * Call two event's methods.\n * @hidden\n * @private\n */\n PdfSection.prototype.pageAddedMethod = function (page) {\n //Create event's arguments\n var args = new PageAddedEventArgs(page);\n this.onPageAdded(args);\n var parent = this.parent;\n parent.document.pages.onPageAdded(args);\n this.pageCount.intValue = this.count;\n };\n /**\n * Called when the page has been added.\n * @hidden\n * @private\n */\n PdfSection.prototype.onPageAdded = function (args) {\n //\n };\n PdfSection.prototype.getActualBounds = function (arg1, arg2, arg3) {\n if (arg1 instanceof PdfPage && typeof arg2 === 'boolean') {\n var result = void 0;\n var document_1 = this.parent.document;\n result = this.getActualBounds(document_1, arg1, arg2);\n return result;\n }\n else {\n arg1 = arg1;\n arg2 = arg2;\n arg3 = arg3;\n var bounds = new RectangleF(0, 0, 0, 0);\n bounds.height = (arg3) ? this.pageSettings.size.height : this.pageSettings.getActualSize().height;\n bounds.width = (arg3) ? this.pageSettings.size.width : this.pageSettings.getActualSize().width;\n var left = this.getLeftIndentWidth(arg1, arg2, arg3);\n var top_1 = this.getTopIndentHeight(arg1, arg2, arg3);\n var right = this.getRightIndentWidth(arg1, arg2, arg3);\n var bottom = this.getBottomIndentHeight(arg1, arg2, arg3);\n bounds.x += left;\n bounds.y += top_1;\n bounds.width -= (left + right);\n bounds.height -= (top_1 + bottom);\n return bounds;\n }\n };\n /**\n * Calculates width of the `left indent`.\n * @private\n */\n PdfSection.prototype.getLeftIndentWidth = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.left : 0;\n var templateWidth = (this.template.getLeft(page) != null) ? this.template.getLeft(page).width : 0;\n var docTemplateWidth = (document.template.getLeft(page) != null) ? document.template.getLeft(page).width : 0;\n value += (this.template.applyDocumentLeftTemplate) ? Math.max(templateWidth, docTemplateWidth) : templateWidth;\n return value;\n };\n /**\n * Calculates `Height` of the top indent.\n * @private\n */\n PdfSection.prototype.getTopIndentHeight = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.top : 0;\n var templateHeight = (this.template.getTop(page) != null) ? this.template.getTop(page).height : 0;\n var docTemplateHeight = (document.template.getTop(page) != null) ? document.template.getTop(page).height : 0;\n value += (this.template.applyDocumentTopTemplate) ? Math.max(templateHeight, docTemplateHeight) : templateHeight;\n return value;\n };\n /**\n * Calculates `width` of the right indent.\n * @private\n */\n PdfSection.prototype.getRightIndentWidth = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.right : 0;\n var templateWidth = (this.template.getRight(page) != null) ? this.template.getRight(page).width : 0;\n var docTemplateWidth = (document.template.getRight(page) != null) ? document.template.getRight(page).width : 0;\n value += (this.template.applyDocumentRightTemplate) ? Math.max(templateWidth, docTemplateWidth) : templateWidth;\n return value;\n };\n /**\n * Calculates `Height` of the bottom indent.\n * @private\n */\n PdfSection.prototype.getBottomIndentHeight = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.bottom : 0;\n var templateHeight = (this.template.getBottom(page) != null) ? this.template.getBottom(page).height : 0;\n var docTemplateHeight = (document.template.getBottom(page) != null) ? document.template.getBottom(page).height : 0;\n value += (this.template.applyDocumentBottomTemplate) ? Math.max(templateHeight, docTemplateHeight) : templateHeight;\n return value;\n };\n /**\n * `Removes` the page from the section.\n * @private\n */\n PdfSection.prototype.remove = function (page) {\n if (page == null) {\n throw Error('ArgumentNullException(\"page\")');\n }\n var index = this.pdfPages.indexOf(page);\n this.pagesReferences.removeAt(index);\n var temproaryPages = [];\n for (var j = 0; j < index; j++) {\n temproaryPages.push(this.pdfPages[j]);\n }\n for (var j = index + 1; j < this.pdfPages.length; j++) {\n temproaryPages.push(this.pdfPages[j]);\n }\n this.pdfPages = temproaryPages;\n };\n /**\n * In fills dictionary by the data from `Page settings`.\n * @private\n */\n PdfSection.prototype.applyPageSettings = function (container, parentSettings, state) {\n var bounds = new RectangleF(state.origin, state.size);\n container.items.setValue(this.dictionaryProperties.mediaBox, PdfArray.fromRectangle(bounds));\n var rotate = 0;\n rotate = PdfSectionCollection.rotateFactor * state.rotate;\n var angle = new PdfNumber(rotate);\n container.items.setValue(this.dictionaryProperties.rotate, angle);\n };\n /**\n * Catches the Save event of the dictionary.\n * @hidden\n * @private\n */\n PdfSection.prototype.beginSave = function (state, writer) {\n var doc = writer.document;\n this.applyPageSettings(this.section, doc.pageSettings, state);\n };\n /**\n * Draws page templates on the page.\n * @private\n */\n PdfSection.prototype.drawTemplates = function (page, layer, document, foreground) {\n var documentHeaders = this.getDocumentTemplates(document, page, true, foreground);\n var documentTemplates = this.getDocumentTemplates(document, page, false, foreground);\n if (foreground) {\n this.drawTemplatesHelper(layer, document, documentHeaders);\n this.drawTemplatesHelper(layer, document, documentTemplates);\n }\n else {\n this.drawTemplatesHelper(layer, document, documentHeaders);\n this.drawTemplatesHelper(layer, document, documentTemplates);\n }\n };\n /**\n * Draws page templates on the page.\n * @private\n */\n PdfSection.prototype.drawTemplatesHelper = function (layer, document, templates) {\n if (templates != null && templates.length > 0) {\n var len = templates.length;\n for (var i = 0; i < len; i++) {\n var template = templates[i];\n template.draw(layer, document);\n }\n }\n };\n return PdfSection;\n}());\nexport { PdfSection };\nvar PageSettingsState = /** @class */ (function () {\n //Public Constructor\n /**\n * New instance to store the `PageSettings`.\n * @private\n */\n function PageSettingsState(document) {\n this.pageOrientation = document.pageSettings.orientation;\n this.pageRotate = document.pageSettings.rotate;\n this.pageSize = document.pageSettings.size;\n this.pageOrigin = document.pageSettings.origin;\n }\n Object.defineProperty(PageSettingsState.prototype, \"orientation\", {\n //public Properties\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (value) {\n this.pageOrientation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"rotate\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageRotate;\n },\n set: function (value) {\n this.pageRotate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"size\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.pageSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"origin\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n return PageSettingsState;\n}());\nexport { PageSettingsState };\n","import { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfDictionary, SaveSectionCollectionEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfSection } from './pdf-section';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents the `collection of the sections`.\n * @private\n */\nvar PdfSectionCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfSectionCollection` class.\n * @private\n */\n function PdfSectionCollection(document) {\n /**\n * @hidden\n * @private\n */\n this.sections = [];\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (document === null) {\n // throw new Error('ArgumentNullException : document');\n // }\n this.pdfDocument = document.clone();\n this.initialize();\n }\n Object.defineProperty(PdfSectionCollection.prototype, \"section\", {\n //Properties\n /**\n * Gets the `Section` collection.\n */\n get: function () {\n return this.sections;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"document\", {\n /**\n * Gets a parent `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"count\", {\n /**\n * Gets the `number of sections` in a document.\n * @private\n */\n get: function () {\n return this.sections.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.pages;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Initializes the object`.\n * @private\n */\n PdfSectionCollection.prototype.initialize = function () {\n this.sectionCount = new PdfNumber(0);\n this.sectionCollection = new PdfArray();\n this.pages = new PdfDictionary();\n this.pages.beginSave = new SaveSectionCollectionEventHandler(this);\n this.pages.items.setValue(this.dictionaryProperties.type, new PdfName('Pages'));\n this.pages.items.setValue(this.dictionaryProperties.kids, this.sectionCollection);\n this.pages.items.setValue(this.dictionaryProperties.count, this.sectionCount);\n this.pages.items.setValue(this.dictionaryProperties.resources, new PdfDictionary());\n this.setPageSettings(this.pages, this.pdfDocument.pageSettings);\n };\n /**\n * Initializes a new instance of the `PdfSectionCollection` class.\n * @private\n */\n PdfSectionCollection.prototype.pdfSectionCollection = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException()');\n }\n return this.sections[index];\n };\n /**\n * In fills dictionary by the data from `Page settings`.\n * @private\n */\n PdfSectionCollection.prototype.setPageSettings = function (container, pageSettings) {\n // if (container === null) {\n // throw new Error('ArgumentNullException : container');\n // }\n // if (pageSettings === null) {\n // throw new Error('ArgumentNullException : pageSettings');\n // }\n var bounds = new RectangleF(new PointF(), pageSettings.size);\n container.items.setValue(this.dictionaryProperties.mediaBox, PdfArray.fromRectangle(bounds));\n };\n /**\n * `Adds` the specified section.\n * @private\n */\n PdfSectionCollection.prototype.add = function (section) {\n if (typeof section === 'undefined') {\n var section_1 = new PdfSection(this.pdfDocument);\n this.add(section_1);\n return section_1;\n }\n else {\n // if (section === null) {\n // throw new Error('ArgumentNullException : section');\n // }\n var r = this.checkSection(section);\n this.sections.push(section);\n section.parent = this;\n this.sectionCollection.add(r);\n return this.sections.indexOf(section);\n }\n };\n /**\n * `Checks` if the section is within the collection.\n * @private\n */\n PdfSectionCollection.prototype.checkSection = function (section) {\n var r = new PdfReferenceHolder(section);\n var contains = this.sectionCollection.contains(r);\n // if (contains) {\n // throw new Error('ArgumentException : The object can not be added twice to the collection,section');\n // }\n return r;\n };\n /**\n * Catches the Save event of the dictionary to `count the pages`.\n * @private\n */\n PdfSectionCollection.prototype.countPages = function () {\n var count = 0;\n this.sections.forEach(function (n) { return (count += n.count); });\n return count;\n };\n /**\n * Catches the Save event of the dictionary to `count the pages`.\n * @hidden\n * @private\n */\n PdfSectionCollection.prototype.beginSave = function () {\n this.sectionCount.intValue = this.countPages();\n };\n //Fields\n /**\n * Rotate factor for page `rotation`.\n * @default 90\n * @private\n */\n PdfSectionCollection.rotateFactor = 90;\n return PdfSectionCollection;\n}());\nexport { PdfSectionCollection };\n","import { PdfPage } from './pdf-page';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfPageOrientation } from './enum';\n/**\n * Represents a virtual collection of all the pages in the document.\n * @private\n */\nvar PdfDocumentPageCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfPageCollection` class.\n * @private\n */\n function PdfDocumentPageCollection(document) {\n /**\n * It holds the page collection with the `index`.\n * @private\n */\n this.pdfPageCollectionIndex = new Dictionary();\n /**\n * Stores the previous pages's `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.previousPageOrientation = PdfPageOrientation.Portrait;\n this.document = document;\n }\n Object.defineProperty(PdfDocumentPageCollection.prototype, \"count\", {\n //Property\n /**\n * Gets the total `number of the pages`.\n * @private\n */\n get: function () {\n return this.countPages();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentPageCollection.prototype, \"pageCollectionIndex\", {\n /**\n * Gets a `page index` from the document.\n * @private\n */\n get: function () {\n return this.pdfPageCollectionIndex;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocumentPageCollection.prototype.add = function (page) {\n if (typeof page === 'undefined') {\n var page_1 = new PdfPage();\n this.add(page_1);\n return page_1;\n }\n else {\n var section = this.getLastSection();\n if (section.pageSettings.orientation !== this.previousPageOrientation) {\n section = this.document.sections.add();\n section.pageSettings.orientation = this.document.pageSettings.orientation;\n }\n section.add(page);\n }\n };\n /**\n * Returns `last section` in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.getLastSection = function () {\n var sc = this.document.sections;\n if (sc.section.length === 0) {\n sc.add();\n }\n var section = sc.section[sc.section.length - 1];\n return section;\n };\n /**\n * Called when `new page has been added`.\n * @private\n */\n PdfDocumentPageCollection.prototype.onPageAdded = function (args) {\n // if (PageAdded !== null)\n // {\n // PageAdded(this, args);\n // }\n };\n /**\n * Gets the `total number of pages`.\n * @private\n */\n PdfDocumentPageCollection.prototype.countPages = function () {\n var sc = this.document.sections;\n var count = 0;\n for (var index = 0; index < sc.section.length; index++) {\n count += sc.section[index].count;\n }\n return count;\n };\n /**\n * Gets the `page object` from page index.\n * @private\n */\n PdfDocumentPageCollection.prototype.getPageByIndex = function (index) {\n return this.getPage(index);\n };\n /**\n * Gets a page by its `index` in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.getPage = function (index) {\n if ((index < 0) || (index >= this.count)) {\n throw Error('ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\")');\n }\n var page = null;\n var sectionStartIndex = 0;\n var sectionCount = 0;\n var pageIndex = 0;\n var length = this.document.sections.count;\n for (var i = 0; i < length; i++) {\n var section = this.document.sections.section[i];\n sectionCount = section.count;\n pageIndex = index - sectionStartIndex;\n // We found a section containing the page.\n if ((index >= sectionStartIndex && pageIndex < sectionCount)) {\n page = section.getPages()[pageIndex];\n break;\n }\n sectionStartIndex += sectionCount;\n }\n return page;\n };\n /**\n * Gets the `index of` the page in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.indexOf = function (page) {\n var index = -1;\n if (page == null) {\n throw new Error('ArgumentNullException: page');\n }\n else {\n var numPages = 0;\n for (var i = 0, len = this.document.sections.count; i < len; i++) {\n var section = this.document.sections.pdfSectionCollection(i);\n index = section.indexOf(page);\n if (index >= 0) {\n index += numPages;\n break;\n }\n else {\n index = -1;\n }\n numPages += section.count;\n }\n }\n return index;\n };\n /**\n * `Removes` the specified page.\n * @private\n */\n PdfDocumentPageCollection.prototype.remove = function (page) {\n if (page == null) {\n throw Error('ArgumentNullException(\"page\")');\n }\n var section = null;\n var len;\n for (var i = 0, len_1 = this.document.sections.count; i < len_1; i++) {\n section = this.document.sections.pdfSectionCollection(i);\n if (section.pages.contains(page)) {\n section.pages.remove(page);\n break;\n }\n }\n return section;\n };\n return PdfDocumentPageCollection;\n}());\nexport { PdfDocumentPageCollection };\n","/**\n * PdfCacheCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\n/**\n * `Collection of the cached objects`.\n * @private\n */\nvar PdfCacheCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfCacheCollection` class.\n * @private\n */\n function PdfCacheCollection() {\n this.referenceObjects = [];\n this.pdfFontCollection = new Dictionary();\n }\n // Public methods\n /**\n * `Searches` for the similar cached object. If is not found - adds the object to the cache.\n * @private\n */\n PdfCacheCollection.prototype.search = function (obj) {\n var result = null;\n var group = this.getGroup(obj);\n if (group == null) {\n group = this.createNewGroup();\n }\n else if (group.length > 0) {\n result = group[0];\n }\n group.push(obj);\n return result;\n };\n // Implementation\n /**\n * `Creates` a new group.\n * @private\n */\n PdfCacheCollection.prototype.createNewGroup = function () {\n var group = [];\n this.referenceObjects.push(group);\n return group;\n };\n /**\n * `Find and Return` a group.\n * @private\n */\n PdfCacheCollection.prototype.getGroup = function (result) {\n var group = null;\n if (result !== null) {\n var len = this.referenceObjects.length;\n for (var i = 0; i < len; i++) {\n if (this.referenceObjects.length > 0) {\n var tGroup = this.referenceObjects[i];\n if (tGroup.length > 0) {\n var representative = tGroup[0];\n if (result.equalsTo(representative)) {\n group = tGroup;\n break;\n }\n }\n else {\n this.removeGroup(tGroup);\n }\n }\n len = this.referenceObjects.length;\n }\n }\n return group;\n };\n /**\n * Remove a group from the storage.\n */\n PdfCacheCollection.prototype.removeGroup = function (group) {\n if (group !== null) {\n var index = this.referenceObjects.indexOf(group);\n this.referenceObjects.slice(index, index + 1);\n }\n };\n PdfCacheCollection.prototype.destroy = function () {\n this.pdfFontCollection = undefined;\n this.referenceObjects = undefined;\n };\n return PdfCacheCollection;\n}());\nexport { PdfCacheCollection };\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 { PdfWriter } from './../input-output/pdf-writer';\nimport { PdfMainObjectCollection } from './../input-output/pdf-main-object-collection';\nimport { PdfDocumentBase } from './pdf-document-base';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfCatalog } from './pdf-catalog';\nimport { PdfPageSettings } from './../pages/pdf-page-settings';\nimport { PdfSectionCollection } from './../pages/pdf-section-collection';\nimport { PdfDocumentPageCollection } from './../pages/pdf-document-page-collection';\nimport { PdfCacheCollection } from './../general/pdf-cache-collection';\nimport { PdfColorSpace } from './../graphics/enum';\nimport { PdfDocumentTemplate } from './pdf-document-template';\nimport { PdfFontFamily } from './../graphics/fonts/enum';\nimport { PdfStandardFont } from './../graphics/fonts/pdf-standard-font';\n/**\n * Represents a PDF document and can be used to create a new PDF document from the scratch.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfDocument = /** @class */ (function (_super) {\n __extends(PdfDocument, _super);\n function PdfDocument(isMerging) {\n var _this = _super.call(this) || this;\n /**\n * Default `margin` value.\n * @default 40.0\n * @private\n */\n _this.defaultMargin = 40.0;\n /**\n * Internal variable to store instance of `StreamWriter` classes..\n * @default null\n * @private\n */\n _this.streamWriter = null;\n _this = _super.call(this, _this) || this;\n if (isMerging === true || isMerging === false || typeof isMerging !== 'undefined') {\n var objects = new PdfMainObjectCollection();\n _this.setMainObjectCollection(objects);\n var crossTable = new PdfCrossTable();\n crossTable.isMerging = isMerging;\n crossTable.document = _this;\n _this.setCrossTable(crossTable);\n var catalog = new PdfCatalog();\n _this.setCatalog(catalog);\n objects.add(catalog);\n catalog.position = -1;\n _this.sectionCollection = new PdfSectionCollection(_this);\n _this.documentPageCollection = new PdfDocumentPageCollection(_this);\n catalog.pages = _this.sectionCollection;\n }\n else {\n PdfDocument.cacheCollection = new PdfCacheCollection();\n _this.constructor(false);\n }\n return _this;\n }\n Object.defineProperty(PdfDocument, \"defaultFont\", {\n //Properties\n /**\n * Gets the `default font`. It is used for complex objects when font is not explicitly defined.\n * @private\n */\n get: function () {\n if (this.defaultStandardFont == null) {\n this.defaultStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 8);\n }\n return this.defaultStandardFont;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"sections\", {\n /**\n * Gets the collection of the `sections` in the document.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pageSettings\", {\n /**\n * Gets the document's page setting.\n * @public\n */\n get: function () {\n if (this.settings == null) {\n this.settings = new PdfPageSettings(this.defaultMargin);\n }\n return this.settings;\n },\n /**\n * Sets the document's page setting.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n *\n * // sets the right margin of the page\n * document.pageSettings.margins.right = 0;\n * // set the page size.\n * document.pageSettings.size = new SizeF(500, 500);\n * // change the page orientation to landscape\n * document.pageSettings.orientation = PdfPageOrientation.Landscape;\n * // apply 90 degree rotation on the page\n * document.pageSettings.rotate = PdfPageRotateAngle.RotateAngle90;\n *\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set the specified Point\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this.settings = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pages\", {\n /**\n * Represents the collection of pages in the PDF document.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // get the collection of pages in the document\n * let pageCollection : PdfDocumentPageCollection = document.pages;\n * //\n * // add pages\n * let page1 : PdfPage = pageCollection.add();\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.documentPageCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"cache\", {\n /**\n * Gets collection of the `cached objects`.\n * @private\n */\n get: function () {\n if (typeof PdfDocument.cacheCollection === 'undefined' || PdfDocument.cacheCollection == null) {\n return new PdfCacheCollection();\n }\n return PdfDocument.cacheCollection;\n },\n /**\n * Sets collection of the `cached objects`.\n * @private\n */\n set: function (value) {\n this.cacheCollection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"enableCache\", {\n /**\n * Gets the value of enable cache.\n * @private\n */\n get: function () {\n return this.isCacheEnabled;\n },\n /**\n * Sets thie value of enable cache.\n * @private\n */\n set: function (value) {\n this.isCacheEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"colorSpace\", {\n /* tslint:disable */\n /**\n * Gets or sets the `color space` of the document. This property can be used to create PDF document in RGB, Gray scale or CMYK color spaces.\n * @private\n */\n get: function () {\n if ((this.pdfColorSpace === PdfColorSpace.Rgb) || ((this.pdfColorSpace === PdfColorSpace.Cmyk)\n || (this.pdfColorSpace === PdfColorSpace.GrayScale))) {\n return this.pdfColorSpace;\n }\n else {\n return PdfColorSpace.Rgb;\n }\n },\n set: function (value) {\n if ((value === PdfColorSpace.Rgb) || ((value === PdfColorSpace.Cmyk) ||\n (value === PdfColorSpace.GrayScale))) {\n this.pdfColorSpace = value;\n }\n else {\n this.pdfColorSpace = PdfColorSpace.Rgb;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"template\", {\n /* tslint:enable */\n /**\n * Gets or sets a `template` to all pages in the document.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfDocumentTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocument.prototype.docSave = function (stream, arg2, arg3) {\n this.checkPagesPresence();\n if (stream === null) {\n throw new Error('ArgumentNullException : stream');\n }\n this.streamWriter = stream;\n var writer = new PdfWriter(stream);\n writer.document = this;\n if (typeof arg2 === 'boolean' && typeof arg3 === 'undefined') {\n return this.crossTable.save(writer);\n }\n else {\n this.crossTable.save(writer, arg2);\n }\n };\n /**\n * Checks the pages `presence`.\n * @private\n */\n PdfDocument.prototype.checkPagesPresence = function () {\n if (this.pages.count === 0) {\n this.pages.add();\n }\n };\n /**\n * disposes the current instance of `PdfDocument` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfDocument.prototype.destroy = function () {\n this.catalog = undefined;\n this.colorSpace = undefined;\n this.currentSavingObj = undefined;\n this.documentPageCollection = undefined;\n this.isStreamCopied = undefined;\n this.pageSettings = undefined;\n this.pageTemplate = undefined;\n this.pdfColorSpace = undefined;\n this.sectionCollection = undefined;\n PdfDocument.cache.destroy();\n this.crossTable.pdfObjects.destroy();\n PdfDocument.cache = undefined;\n this.streamWriter.destroy();\n };\n /**\n * `Font` used in complex objects to draw strings and text when it is not defined explicitly.\n * @default null\n * @private\n */\n PdfDocument.defaultStandardFont = null;\n /**\n * Indicates whether enable cache or not\n * @default true\n * @private\n */\n PdfDocument.isCacheEnabled = true;\n return PdfDocument;\n}(PdfDocumentBase));\nexport { PdfDocument };\n","/**\n * PdfStandardFontMetricsFactory.ts class for EJ2-PDF\n */\nimport { PdfFontStyle, PdfFontFamily } from './enum';\nimport { PdfFontMetrics, StandardWidthTable } from './pdf-font-metrics';\n/**\n * @private\n * `Factory of the standard fonts metrics`.\n */\nvar PdfStandardFontMetricsFactory = /** @class */ (function () {\n function PdfStandardFontMetricsFactory() {\n }\n /**\n * Returns `metrics` of the font.\n * @private\n */\n PdfStandardFontMetricsFactory.getMetrics = function (fontFamily, fontStyle, size) {\n var metrics = null;\n switch (fontFamily) {\n case PdfFontFamily.Helvetica:\n metrics = this.getHelveticaMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Courier:\n metrics = this.getCourierMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.TimesRoman:\n metrics = this.getTimesMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Symbol:\n metrics = this.getSymbolMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.ZapfDingbats:\n metrics = this.getZapfDingbatsMetrics(fontFamily, fontStyle, size);\n break;\n default:\n metrics = this.getHelveticaMetrics(PdfFontFamily.Helvetica, fontStyle, size);\n break;\n }\n metrics.name = fontFamily.toString();\n metrics.subScriptSizeFactor = this.subSuperScriptFactor;\n metrics.superscriptSizeFactor = this.subSuperScriptFactor;\n return metrics;\n };\n // Implementation\n /**\n * Creates `Helvetica font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getHelveticaMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaBoldItalicAscent;\n metrics.descent = this.helveticaBoldItalicDescent;\n metrics.postScriptName = this.helveticaBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.helveticaBoldAscent;\n metrics.descent = this.helveticaBoldDescent;\n metrics.postScriptName = this.helveticaBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaItalicAscent;\n metrics.descent = this.helveticaItalicDescent;\n metrics.postScriptName = this.helveticaItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.helveticaAscent;\n metrics.descent = this.helveticaDescent;\n metrics.postScriptName = this.helveticaName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Courier font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getCourierMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierBoldItalicAscent;\n metrics.descent = this.courierBoldItalicDescent;\n metrics.postScriptName = this.courierBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.courierBoldAscent;\n metrics.descent = this.courierBoldDescent;\n metrics.postScriptName = this.courierBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierItalicAscent;\n metrics.descent = this.courierItalicDescent;\n metrics.postScriptName = this.courierItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.courierAscent;\n metrics.descent = this.courierDescent;\n metrics.postScriptName = this.courierName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Times font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getTimesMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesBoldItalicAscent;\n metrics.descent = this.timesBoldItalicDescent;\n metrics.postScriptName = this.timesBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldItalicWidths);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.timesBoldAscent;\n metrics.descent = this.timesBoldDescent;\n metrics.postScriptName = this.timesBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesItalicAscent;\n metrics.descent = this.timesItalicDescent;\n metrics.postScriptName = this.timesItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanItalicWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.timesAscent;\n metrics.descent = this.timesDescent;\n metrics.postScriptName = this.timesName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Symbol font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getSymbolMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.symbolAscent;\n metrics.descent = this.symbolDescent;\n metrics.postScriptName = this.symbolName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.symbolWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * Creates `ZapfDingbats font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getZapfDingbatsMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.zapfDingbatsAscent;\n metrics.descent = this.zapfDingbatsDescent;\n metrics.postScriptName = this.zapfDingbatsName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.zapfDingbatsWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * `Multiplier` os subscript superscript.\n * @private\n */\n PdfStandardFontMetricsFactory.subSuperScriptFactor = 1.52;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaName = 'Helvetica';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldName = 'Helvetica-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicName = 'Helvetica-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicName = 'Helvetica-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierName = 'Courier';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldName = 'Courier-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicName = 'Courier-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicName = 'Courier-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesAscent = 898;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesName = 'Times-Roman';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldAscent = 935;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldName = 'Times-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicAscent = 883;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicDescent = -217;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicName = 'Times-Italic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicAscent = 921;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicName = 'Times-BoldItalic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolAscent = 1010;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolDescent = -293;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolName = 'Symbol';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsAscent = 820;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsDescent = -143;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsName = 'ZapfDingbats';\n /**\n * `Arial` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialWidth = [\n 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584,\n 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278,\n 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833,\n 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334,\n 584, 0, 556, 0, 222, 556, 333, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 222, 222, 333, 333, 350, 556, 1000, 333, 1000, 500, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 556, 537, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 584, 611, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Arial bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialBoldWidth = [\n 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584,\n 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333,\n 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889,\n 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389,\n 584, 0, 556, 0, 278, 556, 500, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 278, 278, 500, 500, 350, 556, 1000, 333, 1000, 556, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 611, 556, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278,\n 278, 278, 611, 611, 611, 611, 611, 611, 611, 584, 611, 611, 611, 611, 611, 556,\n 611, 556\n ];\n /**\n * `Fixed` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.fixedWidth = [\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600\n ];\n /**\n * `Times` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanWidth = [\n 250, 333, 408, 500, 500, 833, 778, 180, 333, 333, 500, 564, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278, 564, 564,\n 564, 444, 921, 722, 667, 667, 722, 611, 556, 722, 722, 333, 389, 722, 611, 889,\n 722, 722, 556, 722, 667, 556, 611, 722, 722, 944, 722, 722, 611, 333, 278, 333,\n 469, 500, 333, 444, 500, 444, 500, 444, 333, 500, 500, 278, 278, 500, 278, 778,\n 500, 500, 500, 500, 333, 389, 278, 500, 500, 722, 500, 500, 444, 480, 200, 480,\n 541, 0, 500, 0, 333, 500, 444, 1000, 500, 500, 333, 1000, 556, 333, 889, 0,\n 611, 0, 0, 333, 333, 444, 444, 350, 500, 1000, 333, 980, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 200, 500, 333, 760, 276, 500, 564, 0,\n 760, 333, 400, 564, 300, 300, 333, 500, 453, 250, 333, 300, 310, 500, 750, 750,\n 750, 444, 722, 722, 722, 722, 722, 722, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 722, 722, 722, 722, 722, 722, 564, 722, 722, 722, 722, 722, 722,\n 556, 500, 444, 444, 444, 444, 444, 444, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 564, 500, 500, 500, 500, 500, 500,\n 500, 500\n ];\n /**\n * `Times bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldWidth = [\n 250, 333, 555, 500, 500, 1000, 833, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 930, 722, 667, 722, 722, 667, 611, 778, 778, 389, 500, 778, 667, 944,\n 722, 778, 611, 778, 722, 556, 667, 722, 722, 1000, 722, 722, 667, 333, 278, 333,\n 581, 500, 333, 500, 556, 444, 556, 444, 333, 500, 556, 278, 333, 556, 278, 833,\n 556, 500, 556, 556, 444, 389, 333, 556, 500, 722, 500, 500, 444, 394, 220, 394,\n 520, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 1000, 0,\n 667, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 220, 500, 333, 747, 300, 500, 570, 0,\n 747, 333, 400, 570, 300, 300, 333, 556, 540, 250, 333, 300, 330, 500, 750, 750,\n 750, 500, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 778, 778, 778, 778, 778, 570, 778, 722, 722, 722, 722, 722,\n 611, 556, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Times italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanItalicWidth = [\n 250, 333, 420, 500, 500, 833, 778, 214, 333, 333, 500, 675, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 675, 675,\n 675, 500, 920, 611, 611, 667, 722, 611, 611, 722, 722, 333, 444, 667, 556, 833,\n 667, 722, 611, 722, 611, 500, 556, 722, 611, 833, 611, 556, 556, 389, 278, 389,\n 422, 500, 333, 500, 500, 444, 500, 444, 278, 500, 500, 278, 278, 444, 278, 722,\n 500, 500, 500, 500, 389, 389, 278, 500, 444, 667, 444, 444, 389, 400, 275, 400,\n 541, 0, 500, 0, 333, 500, 556, 889, 500, 500, 333, 1000, 500, 333, 944, 0,\n 556, 0, 0, 333, 333, 556, 556, 350, 500, 889, 333, 980, 389, 333, 667, 0,\n 389, 556, 0, 389, 500, 500, 500, 500, 275, 500, 333, 760, 276, 500, 675, 0,\n 760, 333, 400, 675, 300, 300, 333, 500, 523, 250, 333, 300, 310, 500, 750, 750,\n 750, 500, 611, 611, 611, 611, 611, 611, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 667, 722, 722, 722, 722, 722, 675, 722, 722, 722, 722, 722, 556,\n 611, 500, 500, 500, 500, 500, 500, 500, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 675, 500, 500, 500, 500, 500, 444,\n 500, 444\n ];\n /**\n * `Times bold italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldItalicWidths = [\n 250, 389, 555, 500, 500, 833, 778, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 832, 667, 667, 667, 722, 667, 667, 722, 778, 389, 500, 667, 611, 889,\n 722, 722, 611, 722, 667, 556, 611, 722, 667, 889, 667, 611, 611, 333, 278, 333,\n 570, 500, 333, 500, 500, 444, 500, 444, 333, 500, 556, 278, 278, 500, 278, 778,\n 556, 500, 500, 500, 389, 389, 278, 556, 444, 667, 500, 444, 389, 348, 220, 348,\n 570, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 944, 0,\n 611, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 389, 611, 0, 389, 500, 500, 500, 500, 220, 500, 333, 747, 266, 500, 606, 0,\n 747, 333, 400, 570, 300, 300, 333, 576, 500, 250, 333, 300, 300, 500, 750, 750,\n 750, 500, 667, 667, 667, 667, 667, 667, 944, 667, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 722, 722, 722, 722, 722, 570, 722, 722, 722, 722, 722, 611,\n 611, 500, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 444,\n 500, 444\n ];\n /**\n * `Symbol` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolWidth = [\n 250, 333, 713, 500, 549, 833, 778, 439, 333, 333, 500, 549, 250, 549,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278,\n 549, 549, 549, 444, 549, 722, 667, 722, 612, 611, 763, 603, 722, 333,\n 631, 722, 686, 889, 722, 722, 768, 741, 556, 592, 611, 690, 439, 768,\n 645, 795, 611, 333, 863, 333, 658, 500, 500, 631, 549, 549, 494, 439,\n 521, 411, 603, 329, 603, 549, 549, 576, 521, 549, 549, 521, 549, 603,\n 439, 576, 713, 686, 493, 686, 494, 480, 200, 480, 549, 750, 620, 247,\n 549, 167, 713, 500, 753, 753, 753, 753, 1042, 987, 603, 987, 603, 400,\n 549, 411, 549, 549, 713, 494, 460, 549, 549, 549, 549, 1000, 603, 1000,\n 658, 823, 686, 795, 987, 768, 768, 823, 768, 768, 713, 713, 713, 713,\n 713, 713, 713, 768, 713, 790, 790, 890, 823, 549, 250, 713, 603, 603,\n 1042, 987, 603, 987, 603, 494, 329, 790, 790, 786, 713, 384, 384, 384,\n 384, 384, 384, 494, 494, 494, 494, 329, 274, 686, 686, 686, 384, 384,\n 384, 384, 384, 384, 494, 494, 494, -1\n ];\n /**\n * `Zip dingbats` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsWidth = [\n 278, 974, 961, 974, 980, 719, 789, 790, 791, 690, 960, 939, 549, 855,\n 911, 933, 911, 945, 974, 755, 846, 762, 761, 571, 677, 763, 760, 759,\n 754, 494, 552, 537, 577, 692, 786, 788, 788, 790, 793, 794, 816, 823,\n 789, 841, 823, 833, 816, 831, 923, 744, 723, 749, 790, 792, 695, 776,\n 768, 792, 759, 707, 708, 682, 701, 826, 815, 789, 789, 707, 687, 696,\n 689, 786, 787, 713, 791, 785, 791, 873, 761, 762, 762, 759, 759, 892,\n 892, 788, 784, 438, 138, 277, 415, 392, 392, 668, 668, 390, 390, 317,\n 317, 276, 276, 509, 509, 410, 410, 234, 234, 334, 334, 732, 544, 544,\n 910, 667, 760, 760, 776, 595, 694, 626, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 894, 838, 1016, 458, 748, 924, 748, 918,\n 927, 928, 928, 834, 873, 828, 924, 924, 917, 930, 931, 463, 883, 836,\n 836, 867, 867, 696, 696, 874, 874, 760, 946, 771, 865, 771, 888, 967,\n 888, 831, 873, 927, 970, 918\n ];\n return PdfStandardFontMetricsFactory;\n}());\nexport { PdfStandardFontMetricsFactory };\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 { PdfFontFamily, PdfFontStyle, FontEncoding } from './enum';\nimport { PdfFont } from './pdf-font';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStandardFontMetricsFactory } from './pdf-standard-font-metrics-factory';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\n/**\n * Represents one of the 14 standard fonts.\n * It's used to create a standard PDF font to draw the text in to the PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStandardFont = /** @class */ (function (_super) {\n __extends(PdfStandardFont, _super);\n function PdfStandardFont(fontFamilyPrototype, size, style) {\n var _this = _super.call(this, size, style) || this;\n /**\n * Gets `ascent` of the font.\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n /**\n * Gets `encodings` for internal class use.\n * @hidden\n * @private\n */\n _this.encodings = ['Unknown', 'StandardEncoding', 'MacRomanEncoding', 'MacExpertEncoding',\n 'WinAnsiEncoding', 'PDFDocEncoding', 'IdentityH'];\n if ((typeof fontFamilyPrototype === 'number') && (typeof style === 'undefined')) {\n _this.constructor(fontFamilyPrototype, size, PdfFontStyle.Regular);\n }\n else if ((typeof fontFamilyPrototype === 'number') && (typeof style !== 'undefined')) {\n _this = _super.call(this, size, style) || this;\n _this.pdfFontFamily = fontFamilyPrototype;\n _this.checkStyle();\n _this.initializeInternals();\n }\n else if ((fontFamilyPrototype instanceof PdfStandardFont) && (typeof style === 'undefined')) {\n _this.constructor(fontFamilyPrototype.fontFamily, size, fontFamilyPrototype.style);\n }\n else if ((fontFamilyPrototype instanceof PdfStandardFont) && (typeof style !== 'undefined')) {\n _this.constructor(fontFamilyPrototype.fontFamily, size, style);\n }\n return _this;\n }\n Object.defineProperty(PdfStandardFont.prototype, \"fontFamily\", {\n //Properties\n /**\n * Gets the `FontFamily`.\n * @private\n */\n get: function () {\n return this.pdfFontFamily;\n },\n enumerable: true,\n configurable: true\n });\n //methods\n /**\n * Checks font `style` of the font.\n * @private\n */\n PdfStandardFont.prototype.checkStyle = function () {\n if (this.fontFamily === PdfFontFamily.Symbol || this.fontFamily === PdfFontFamily.ZapfDingbats) {\n var style = this.style;\n style &= ~(PdfFontStyle.Bold | PdfFontStyle.Italic);\n this.setStyle(style);\n }\n };\n /**\n * Returns `width` of the line.\n * @public\n */\n PdfStandardFont.prototype.getLineWidth = function (line, format) {\n if (line == null) {\n throw new Error('ArgumentNullException:line');\n }\n var width = 0;\n var name = this.name;\n line = PdfStandardFont.convert(line);\n for (var i = 0, len = line.length; i < len; i++) {\n var ch = line[i];\n var charWidth = this.getCharWidthInternal(ch, format);\n width += charWidth;\n }\n var size = this.metrics.getSize(format);\n width *= (PdfFont.charSizeMultiplier * size);\n width = this.applyFormatSettings(line, format, width);\n return width;\n };\n /**\n * Checks whether fonts are `equals`.\n * @private\n */\n PdfStandardFont.prototype.equalsToFont = function (font) {\n var equal = false;\n var stFont = font;\n if (stFont != null) {\n var fontFamilyEqual = (this.fontFamily === stFont.fontFamily);\n var lineReducer = (~(PdfFontStyle.Underline | PdfFontStyle.Strikeout));\n var styleEqual = (this.style & lineReducer) === (stFont.style & lineReducer);\n equal = (fontFamilyEqual && styleEqual);\n }\n return equal;\n };\n /**\n * `Initializes` font internals..\n * @private\n */\n PdfStandardFont.prototype.initializeInternals = function () {\n var equalFont = null;\n // if (PdfDocument.EnableCache) {\n equalFont = PdfDocument.cache.search(this);\n // }\n var internals = null;\n // if (equalFont == null) {\n // Create font metrics.\n var metrics = PdfStandardFontMetricsFactory.getMetrics(this.pdfFontFamily, this.style, this.size);\n this.metrics = metrics;\n internals = this.createInternals();\n this.setInternals(internals);\n };\n /**\n * `Creates` font`s dictionary.\n * @private\n */\n PdfStandardFont.prototype.createInternals = function () {\n var dictionary = new PdfDictionary();\n dictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.type1));\n dictionary.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.metrics.postScriptName));\n if (this.fontFamily !== PdfFontFamily.Symbol && this.fontFamily !== PdfFontFamily.ZapfDingbats) {\n var encoding = this.encodings[FontEncoding.WinAnsiEncoding];\n dictionary.items.setValue(this.dictionaryProperties.encoding, new PdfName(encoding));\n }\n return dictionary;\n };\n /**\n * Returns `width` of the char. This methods doesn`t takes into consideration font`s size.\n * @private\n */\n PdfStandardFont.prototype.getCharWidthInternal = function (charCode, format) {\n var width = 0;\n var code = 0;\n code = charCode.charCodeAt(0);\n if (this.name === '0' || this.name === '1' || this.name === '2' ||\n this.name === '3' || this.name === '4') {\n code = code - PdfStandardFont.charOffset;\n }\n code = (code >= 0 && code !== 128) ? code : 0;\n var metrics = this.metrics;\n var widthTable = metrics.widthTable;\n width = widthTable.items(code);\n return width;\n };\n /**\n * `Converts` the specified text.\n * @private\n */\n PdfStandardFont.convert = function (text) {\n return text;\n };\n //Constants\n /**\n * First character `position`.\n * @private\n */\n PdfStandardFont.charOffset = 32;\n return PdfStandardFont;\n}(PdfFont));\nexport { PdfStandardFont };\n","import { PdfColor } from './../graphics/pdf-color';\nimport { RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfDictionary, SaveAnnotationEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfString } from './../primitives/pdf-string';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfSolidBrush } from './../graphics/brushes/pdf-solid-brush';\nimport { PdfStandardFont } from './../graphics/fonts/pdf-standard-font';\nimport { PdfFontFamily } from './../graphics/fonts/enum';\nimport { PdfStringFormat } from './../graphics/fonts/pdf-string-format';\nimport { PdfTextAlignment } from './../graphics/enum';\n/**\n * `PdfAnnotation` class represents the base class for annotation objects.\n * @private\n */\nvar PdfAnnotation = /** @class */ (function () {\n function PdfAnnotation(arg1) {\n // Fields\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * `Color` of the annotation\n * @private\n */\n this.pdfColor = new PdfColor(255, 255, 255);\n /**\n * `Bounds` of the annotation.\n * @private\n */\n this.rectangle = new RectangleF(0, 0, 0, 0);\n /**\n * Parent `page` of the annotation.\n * @private\n */\n this.pdfPage = null;\n /**\n * `Brush of the text` of the annotation.\n * @default new PdfSolidBrush(new PdfColor(0, 0, 0))\n * @private\n */\n this.textBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n /**\n * `Font of the text` of the annotation.\n * @default new PdfStandardFont(PdfFontFamily.TimesRoman, 10)\n * @private\n */\n this.textFont = new PdfStandardFont(PdfFontFamily.TimesRoman, 10);\n /**\n * `StringFormat of the text` of the annotation.\n * @default new PdfStringFormat(PdfTextAlignment.Left)\n * @private\n */\n this.format = new PdfStringFormat(PdfTextAlignment.Left);\n /**\n * `Text` of the annotation.\n * @private\n */\n this.content = '';\n /**\n * Internal variable to store `dictionary`.\n * @private\n */\n this.pdfDictionary = new PdfDictionary();\n /**\n * To specifying the `Inner color` with which to fill the annotation\n * @private\n */\n this.internalColor = new PdfColor();\n /**\n * `opacity or darkness` of the annotation.\n * @private\n * @default 1.0\n */\n this.darkness = 1.0;\n if (typeof arg1 === 'undefined') {\n this.initialize();\n }\n else {\n this.initialize();\n this.bounds = arg1;\n }\n }\n Object.defineProperty(PdfAnnotation.prototype, \"color\", {\n // Properties\n /**\n * `Color` of the annotation\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"innerColor\", {\n /**\n * To specifying the `Inner color` with which to fill the annotation\n * @private\n */\n get: function () {\n return this.internalColor;\n },\n set: function (value) {\n this.internalColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"bounds\", {\n /**\n * `bounds` of the annotation.\n * @private\n */\n get: function () {\n return this.rectangle;\n },\n set: function (value) {\n this.rectangle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"page\", {\n /**\n * Parent `page` of the annotation.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"font\", {\n /**\n * To specifying the `Font of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.textFont;\n },\n set: function (value) {\n this.textFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"stringFormat\", {\n /**\n * To specifying the `StringFormat of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"brush\", {\n /**\n * To specifying the `Brush of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.textBrush;\n },\n set: function (value) {\n this.textBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"text\", {\n /**\n * `Text` of the annotation.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n this.dictionary.items.setValue(this.dictionaryProperties.contents, new PdfString(this.content));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"dictionary\", {\n /**\n * Internal variable to store `dictionary`.\n * @hidden\n */\n get: function () {\n return this.pdfDictionary;\n },\n set: function (value) {\n this.pdfDictionary = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the annotation event handler and specifies the type of the annotation.\n * @private\n */\n PdfAnnotation.prototype.initialize = function () {\n this.pdfDictionary.annotationBeginSave = new SaveAnnotationEventHandler(this);\n this.pdfDictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.annot));\n };\n /**\n * Sets related `page` of the annotation.\n * @private\n */\n PdfAnnotation.prototype.setPage = function (page) {\n this.pdfPage = page;\n this.pdfDictionary.items.setValue(this.dictionaryProperties.p, new PdfReferenceHolder(this.pdfPage));\n };\n /**\n * Handles the `BeginSave` event of the Dictionary.\n * @private\n */\n PdfAnnotation.prototype.beginSave = function () {\n this.save();\n };\n /**\n * `Saves` an annotation.\n * @private\n */\n /* tslint:disable */\n PdfAnnotation.prototype.save = function () {\n var nativeRectangle = new RectangleF(this.rectangle.x, this.rectangle.y, this.rectangle.width, this.rectangle.height);\n var section = this.pdfPage.section;\n var initialHeight = nativeRectangle.height;\n var tempLoacation = section.pointToNativePdf(this.page, new PointF(nativeRectangle.x, nativeRectangle.y));\n nativeRectangle.x = tempLoacation.x;\n nativeRectangle.width = tempLoacation.x + nativeRectangle.width;\n nativeRectangle.y = (tempLoacation.y - this.page.document.pageSettings.margins.top);\n nativeRectangle.height = nativeRectangle.y - initialHeight;\n this.pdfDictionary.items.setValue(this.dictionaryProperties.rect, PdfArray.fromRectangle(nativeRectangle));\n this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(this.darkness));\n };\n Object.defineProperty(PdfAnnotation.prototype, \"element\", {\n /* tslint:enable */\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.pdfDictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAnnotation;\n}());\nexport { PdfAnnotation };\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 { PdfAnnotation } from './annotation';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * `PdfLinkAnnotation` class represents the ink annotation class.\n * @private\n */\nvar PdfLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfLinkAnnotation, _super);\n function PdfLinkAnnotation(rectangle) {\n var _this = this;\n if (typeof rectangle === 'undefined') {\n _this = _super.call(this) || this;\n }\n else {\n _this = _super.call(this, rectangle) || this;\n }\n return _this;\n }\n // Implementation\n /**\n * `Initializes` annotation object.\n * @private\n */\n PdfLinkAnnotation.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.link));\n };\n return PdfLinkAnnotation;\n}(PdfAnnotation));\nexport { PdfLinkAnnotation };\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 { PdfLinkAnnotation } from './link-annotation';\n/**\n * Represents base class for `link annotations` with associated action.\n * @private\n */\nvar PdfActionLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfActionLinkAnnotation, _super);\n // Constructors\n /**\n * Specifies the constructor for `ActionLinkAnnotation`.\n * @private\n */\n function PdfActionLinkAnnotation(rectangle) {\n var _this = _super.call(this, rectangle) || this;\n // Fields\n /**\n * Internal variable to store annotation's `action`.\n * @default null\n * @private\n */\n _this.pdfAction = null;\n return _this;\n }\n //Public method\n /**\n * get and set the `action`.\n * @hidden\n */\n PdfActionLinkAnnotation.prototype.getSetAction = function (value) {\n if (typeof value === 'undefined') {\n return this.pdfAction;\n }\n else {\n this.pdfAction = value;\n }\n };\n return PdfActionLinkAnnotation;\n}(PdfLinkAnnotation));\nexport { PdfActionLinkAnnotation };\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 { PdfLinkAnnotation } from './link-annotation';\n/**\n * `PdfDocumentLinkAnnotation` class represents an annotation object with holds link on another location within a document.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create new pages\n * let page1 : PdfPage = document.pages.add();\n * let page2 : PdfPage = document.pages.add();\n * // create a new rectangle\n * let bounds : RectangleF = new RectangleF({x : 10, y : 200}, {width : 300, height : 25});\n * //\n * // create a new document link annotation\n * let documentLinkAnnotation : PdfDocumentLinkAnnotation = new PdfDocumentLinkAnnotation(bounds);\n * // set the annotation text\n * documentLinkAnnotation.text = 'Document link annotation';\n * // set the destination\n * documentLinkAnnotation.destination = new PdfDestination(page2);\n * // set the documentlink annotation location\n * documentLinkAnnotation.destination.location = new PointF(10, 0);\n * // add this annotation to a new page\n * page1.annotations.add(documentLinkAnnotation);\n * //\n * // save the document to disk\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfDocumentLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfDocumentLinkAnnotation, _super);\n function PdfDocumentLinkAnnotation(rectangle, destination) {\n var _this = _super.call(this, rectangle) || this;\n // Fields\n /**\n * `Destination` of the annotation.\n * @default null\n * @private\n */\n _this.pdfDestination = null;\n if (typeof destination !== 'undefined') {\n _this.destination = destination;\n }\n return _this;\n }\n Object.defineProperty(PdfDocumentLinkAnnotation.prototype, \"destination\", {\n // Properties\n /**\n * Gets or sets the `destination` of the annotation.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create new pages\n * let page1 : PdfPage = document.pages.add();\n * let page2 : PdfPage = document.pages.add();\n * // create a new rectangle\n * let bounds : RectangleF = new RectangleF({x : 10, y : 200}, {width : 300, height : 25});\n * //\n * // create a new document link annotation\n * let documentLinkAnnotation : PdfDocumentLinkAnnotation = new PdfDocumentLinkAnnotation(bounds);\n * // set the annotation text\n * documentLinkAnnotation.text = 'Document link annotation';\n * // set the destination\n * documentLinkAnnotation.destination = new PdfDestination(page2);\n * // set the documentlink annotation location\n * documentLinkAnnotation.destination.location = new PointF(10, 0);\n * // add this annotation to a new page\n * page1.annotations.add(documentLinkAnnotation);\n * //\n * // save the document to disk\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @default null\n */\n get: function () {\n return this.pdfDestination;\n },\n set: function (value) {\n // if (this.pdfDestination !== value) {\n this.pdfDestination = value;\n // }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Saves` annotation object.\n * @private\n */\n PdfDocumentLinkAnnotation.prototype.save = function () {\n _super.prototype.save.call(this);\n if (this.pdfDestination != null) {\n this.dictionary.items.setValue(this.dictionaryProperties.dest, this.pdfDestination.element);\n }\n };\n /**\n * `Clone` the document link annotation.\n * @private\n */\n PdfDocumentLinkAnnotation.prototype.clone = function () {\n var annot = new PdfDocumentLinkAnnotation(this.bounds, this.destination);\n annot.color = this.color;\n annot.brush = this.brush;\n annot.destination = this.destination;\n annot.font = this.font;\n return annot;\n };\n return PdfDocumentLinkAnnotation;\n}(PdfLinkAnnotation));\nexport { PdfDocumentLinkAnnotation };\n","/**\n * ElementLayouter.ts class for EJ2-PDF\n */\nimport { RectangleF } from './../../../drawing/pdf-drawing';\n/**\n * Base class for `elements lay outing`.\n * @private\n */\nvar ElementLayouter = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `ElementLayouter` class.\n * @private\n */\n function ElementLayouter(element) {\n this.layoutElement = element;\n }\n Object.defineProperty(ElementLayouter.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.layoutElement;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `element`.\n * @private\n */\n ElementLayouter.prototype.getElement = function () {\n return this.layoutElement;\n };\n // Implementation\n /**\n * `Layouts` the element.\n * @private\n */\n ElementLayouter.prototype.layout = function (param) {\n return this.layoutInternal(param);\n };\n ElementLayouter.prototype.Layouter = function (param) {\n return this.layoutInternal(param);\n };\n /**\n * Returns the `next page`.\n * @private\n */\n ElementLayouter.prototype.getNextPage = function (currentPage) {\n var section = currentPage.section;\n var nextPage = section.add();\n return nextPage;\n };\n return ElementLayouter;\n}());\nexport { ElementLayouter };\nvar PdfLayoutFormat = /** @class */ (function () {\n function PdfLayoutFormat(baseFormat) {\n if (typeof baseFormat === 'undefined') {\n //\n }\n else {\n this.break = baseFormat.break;\n this.layout = baseFormat.layout;\n this.paginateBounds = baseFormat.paginateBounds;\n this.boundsSet = baseFormat.usePaginateBounds;\n }\n }\n Object.defineProperty(PdfLayoutFormat.prototype, \"layout\", {\n // Properties\n /**\n * Gets or sets `layout` type of the element.\n * @private\n */\n get: function () {\n // if (typeof this.layoutType === 'undefined' || this.layoutType == null) {\n // this.layoutType = PdfLayoutType.Paginate;\n // }\n return this.layoutType;\n },\n set: function (value) {\n this.layoutType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"break\", {\n /**\n * Gets or sets `break` type of the element.\n * @private\n */\n get: function () {\n // if (typeof this.breakType === 'undefined' || this.boundsSet == null) {\n // this.breakType = PdfLayoutBreakType.FitPage;\n // }\n return this.breakType;\n },\n set: function (value) {\n this.breakType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"paginateBounds\", {\n /**\n * Gets or sets the `bounds` on the next page.\n * @private\n */\n get: function () {\n if (typeof this.layoutPaginateBounds === 'undefined' && this.layoutPaginateBounds == null) {\n this.layoutPaginateBounds = new RectangleF(0, 0, 0, 0);\n }\n return this.layoutPaginateBounds;\n },\n set: function (value) {\n this.layoutPaginateBounds = value;\n this.boundsSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"usePaginateBounds\", {\n /**\n * Gets a value indicating whether [`use paginate bounds`].\n * @private\n */\n get: function () {\n // if (typeof this.boundsSet === 'undefined' || this.boundsSet == null) {\n // this.boundsSet = false;\n // }\n return this.boundsSet;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutFormat;\n}());\nexport { PdfLayoutFormat };\nvar PdfLayoutParams = /** @class */ (function () {\n function PdfLayoutParams() {\n }\n Object.defineProperty(PdfLayoutParams.prototype, \"page\", {\n // Properties\n /**\n * Gets or sets the layout `page` for the element.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"bounds\", {\n /**\n * Gets or sets layout `bounds` for the element.\n * @private\n */\n get: function () {\n return new RectangleF(this.layoutBounds.x, this.layoutBounds.y, this.layoutBounds.width, this.layoutBounds.height);\n },\n set: function (value) {\n this.layoutBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"format\", {\n /**\n * Gets or sets `layout settings` for the element.\n * @private\n */\n get: function () {\n return this.layoutFormat;\n },\n set: function (value) {\n this.layoutFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutParams;\n}());\nexport { PdfLayoutParams };\nvar PdfLayoutResult = /** @class */ (function () {\n // Constructors\n /**\n * Initializes the new instance of `PdfLayoutResult` class.\n * @private\n */\n function PdfLayoutResult(page, bounds) {\n this.pdfPage = page;\n this.layoutBounds = bounds;\n }\n Object.defineProperty(PdfLayoutResult.prototype, \"page\", {\n // Properties\n /**\n * Gets the last `page` where the element was drawn.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutResult.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of the element on the last page where it was drawn.\n * @private\n */\n get: function () {\n return this.layoutBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutResult;\n}());\nexport { PdfLayoutResult };\n","import { RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutParams, PdfLayoutFormat } from './base/element-layouter';\n/**\n * `PdfLayoutElement` class represents the base class for all elements that can be layout on the pages.\n * @private\n */\nvar PdfLayoutElement = /** @class */ (function () {\n function PdfLayoutElement() {\n }\n Object.defineProperty(PdfLayoutElement.prototype, \"raiseBeginPageLayout\", {\n // Property\n /**\n * Gets a value indicating whether the `start page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutElement.prototype, \"raiseEndPageLayout\", {\n /**\n * Gets a value indicating whether the `ending page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n //Event Handlers\n PdfLayoutElement.prototype.onBeginPageLayout = function (args) {\n if (this.beginPageLayout) {\n this.beginPageLayout(this, args);\n }\n };\n PdfLayoutElement.prototype.onEndPageLayout = function (args) {\n if (this.endPageLayout) {\n this.endPageLayout(this, args);\n }\n };\n PdfLayoutElement.prototype.drawHelper = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg2, arg3.x, arg3.y);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n return this.drawHelper(arg2, arg3, arg4, null);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg2, arg3, null);\n }\n else if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && arg4 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg2, arg3.x, arg3.y, arg4);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && (arg5 instanceof PdfLayoutFormat || arg5 == null)) {\n var width = (arg2.graphics.clientSize.width - arg3);\n var layoutRectangle = new RectangleF(arg3, arg4, width, 0);\n return this.drawHelper(arg2, layoutRectangle, arg5);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'boolean') {\n this.bEmbedFonts = arg4;\n return this.drawHelper(arg2, arg3, null);\n }\n else {\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n var result = this.layout(param);\n return result;\n }\n };\n return PdfLayoutElement;\n}());\nexport { PdfLayoutElement };\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})();\n/**\n * TextLayouter.ts class for EJ2-PDF\n */\nimport { ElementLayouter, PdfLayoutResult } from './element-layouter';\nimport { RectangleF, SizeF } from './../../../drawing/pdf-drawing';\nimport { PdfStringLayouter } from './../../fonts/string-layouter';\nimport { PdfLayoutBreakType } from './../../figures/enum';\nimport { PdfColor } from './../../pdf-color';\nimport { PdfTextWebLink } from './../../../annotations/pdf-text-web-link';\n/**\n * Class that `layouts the text`.\n * @private\n */\nvar TextLayouter = /** @class */ (function (_super) {\n __extends(TextLayouter, _super);\n // Constructors\n /**\n * Initializes a new instance of the `TextLayouter` class.\n * @private\n */\n function TextLayouter(element) {\n return _super.call(this, element) || this;\n }\n Object.defineProperty(TextLayouter.prototype, \"element\", {\n /**\n * Gets the layout `element`.\n * @private\n */\n get: function () {\n return _super.prototype.getElement.call(this);\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Layouts` the element.\n * @private\n */\n TextLayouter.prototype.layoutInternal = function (param) {\n /* tslint:disable */\n this.format = (this.element.stringFormat !== null && typeof this.element.stringFormat !== 'undefined') ? this.element.stringFormat : null;\n var currentPage = param.page;\n var currentBounds = param.bounds;\n var text = this.element.value;\n var result = null;\n var pageResult = new TextPageLayoutResult();\n pageResult.page = currentPage;\n pageResult.remainder = text;\n for (;;) {\n pageResult = this.layoutOnPage(text, currentPage, currentBounds, param);\n result = this.getLayoutResult(pageResult);\n break;\n }\n /* tslint:enable */\n return result;\n };\n /**\n * Raises `PageLayout` event if needed.\n * @private\n */\n TextLayouter.prototype.getLayoutResult = function (pageResult) {\n var result = new PdfTextLayoutResult(pageResult.page, pageResult.bounds, pageResult.remainder, pageResult.lastLineBounds);\n return result;\n };\n /* tslint:disable */\n /**\n * `Layouts` the text on the page.\n * @private\n */\n TextLayouter.prototype.layoutOnPage = function (text, currentPage, currentBounds, param) {\n var result = new TextPageLayoutResult();\n result.remainder = text;\n result.page = currentPage;\n currentBounds = this.checkCorrectBounds(currentPage, currentBounds);\n var layouter = new PdfStringLayouter();\n var stringResult = layouter.layout(text, this.element.font, this.format, currentBounds, currentPage.getClientSize().height, false, new SizeF(0, 0));\n var textFinished = (stringResult.remainder == null);\n var doesntFit = (param.format.break === PdfLayoutBreakType.FitElement);\n var canDraw = !(doesntFit || stringResult.empty);\n // Draw the text.\n var graphics = currentPage.graphics;\n var brush = this.element.getBrush();\n if (this.element instanceof PdfTextWebLink) {\n brush.color = new PdfColor(0, 0, 255);\n }\n graphics.drawStringLayoutResult(stringResult, this.element.font, this.element.pen, brush, currentBounds, this.format);\n var lineInfo = stringResult.lines[stringResult.lineCount - 1];\n result.lastLineBounds = graphics.getLineBounds(stringResult.lineCount - 1, stringResult, this.element.font, currentBounds, this.format);\n result.bounds = this.getTextPageBounds(currentPage, currentBounds, stringResult);\n result.remainder = stringResult.remainder;\n result.end = (textFinished);\n return result;\n };\n /* tslint:enable */\n /**\n * `Corrects current bounds` on the page.\n * @private\n */\n TextLayouter.prototype.checkCorrectBounds = function (currentPage, currentBounds) {\n var pageSize = currentPage.graphics.clientSize;\n currentBounds.height = (currentBounds.height > 0) ? currentBounds.height : pageSize.height - currentBounds.y;\n return currentBounds;\n };\n /**\n * Returns a `rectangle` where the text was printed on the page.\n * @private\n */\n /* tslint:disable */\n TextLayouter.prototype.getTextPageBounds = function (currentPage, currentBounds, stringResult) {\n var textSize = stringResult.actualSize;\n var x = currentBounds.x;\n var y = currentBounds.y;\n var width = (currentBounds.width > 0) ? currentBounds.width : textSize.width;\n var height = textSize.height;\n var shiftedRect = currentPage.graphics.checkCorrectLayoutRectangle(textSize, currentBounds.x, currentBounds.y, this.format);\n // if (currentBounds.width <= 0) {\n x = shiftedRect.x;\n // }\n var verticalShift = currentPage.graphics.getTextVerticalAlignShift(textSize.height, currentBounds.height, this.format);\n y += verticalShift;\n var bounds = new RectangleF(x, y, width, height);\n return bounds;\n };\n return TextLayouter;\n}(ElementLayouter));\nexport { TextLayouter };\nvar TextPageLayoutResult = /** @class */ (function () {\n function TextPageLayoutResult() {\n }\n return TextPageLayoutResult;\n}());\nexport { TextPageLayoutResult };\nvar PdfTextLayoutResult = /** @class */ (function (_super) {\n __extends(PdfTextLayoutResult, _super);\n // Constructors\n /**\n * Initializes the new instance of `PdfTextLayoutResult` class.\n * @private\n */\n function PdfTextLayoutResult(page, bounds, remainder, lastLineBounds) {\n var _this = _super.call(this, page, bounds) || this;\n _this.remainderText = remainder;\n _this.lastLineTextBounds = lastLineBounds;\n return _this;\n }\n Object.defineProperty(PdfTextLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets a value that contains the `text` that was not printed.\n * @private\n */\n get: function () {\n return this.remainderText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextLayoutResult.prototype, \"lastLineBounds\", {\n /**\n * Gets a value that indicates the `bounds` of the last line that was printed on the page.\n * @private\n */\n get: function () {\n return this.lastLineTextBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTextLayoutResult;\n}(PdfLayoutResult));\nexport { PdfTextLayoutResult };\n","/**\n * public Enum for `PdfDestinationMode`.\n * @private\n */\nexport var PdfDestinationMode;\n(function (PdfDestinationMode) {\n /**\n * Specifies the type of `Location`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"Location\"] = 0] = \"Location\";\n /**\n * Specifies the type of `FitToPage`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitToPage\"] = 1] = \"FitToPage\";\n /**\n * Specifies the type of `FitR`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitR\"] = 2] = \"FitR\";\n})(PdfDestinationMode || (PdfDestinationMode = {}));\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})();\n/**\n * PdfTextElement.ts class for EJ2-PDF\n */\nimport { PdfLayoutElement } from './../figures/layout-element';\nimport { PdfBrush } from './../brushes/pdf-brush';\nimport { PdfFont } from './../fonts/pdf-font';\nimport { PdfStandardFont } from './../fonts/pdf-standard-font';\nimport { PdfPen } from './../pdf-pen';\nimport { PdfLayoutParams } from './../figures/base/element-layouter';\nimport { TextLayouter } from './base/text-layouter';\nimport { PdfSolidBrush } from './../brushes/pdf-solid-brush';\nimport { PdfColor } from './../pdf-color';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutFormat } from './base/element-layouter';\nimport { PdfStringLayouter } from './../fonts/string-layouter';\nimport { PdfTextAlignment } from './../enum';\n/**\n * `PdfTextElement` class represents the text area with the ability to span several pages\n * and inherited from the 'PdfLayoutElement' class.\n * @private\n */\nvar PdfTextElement = /** @class */ (function (_super) {\n __extends(PdfTextElement, _super);\n function PdfTextElement(arg1, arg2, arg3, arg4, arg5) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * `Text` data.\n * @private\n */\n _this.content = '';\n /**\n * `Value` of text data.\n * @private\n */\n _this.elementValue = '';\n /**\n * indicate whether the drawText with PointF overload is called or not.\n * @default false\n * @private\n */\n _this.hasPointOverload = false;\n /**\n * indicate whether the PdfGridCell value is `PdfTextElement`\n * @default false\n * @private\n */\n _this.isPdfTextElement = false;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (typeof arg1 === 'string' && typeof arg2 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && typeof arg3 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && arg3 instanceof PdfPen && typeof arg4 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfPen = arg3;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && arg3 instanceof PdfBrush && typeof arg4 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfBrush = arg3;\n }\n else {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfPen = arg3;\n _this.pdfBrush = arg4;\n _this.format = arg5;\n }\n return _this;\n }\n Object.defineProperty(PdfTextElement.prototype, \"text\", {\n // Properties\n /**\n * Gets or sets a value indicating the `text` that should be printed.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * //\n * // set the link text\n * textLink.text = 'Google';\n * //\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.elementValue = value;\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"value\", {\n //get value\n /**\n * Gets or sets a `value` indicating the text that should be printed.\n * @private\n */\n get: function () {\n return this.elementValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"pen\", {\n //get pen\n /**\n * Gets or sets a `PdfPen` that determines the color, width, and style of the text\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n //Set pen value\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"brush\", {\n //get brush\n /**\n * Gets or sets the `PdfBrush` that will be used to draw the text with color and texture.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n //Set brush value\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"font\", {\n //get font\n /**\n * Gets or sets a `PdfFont` that defines the text format.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * // set the link text\n * textLink.text = 'Google';\n * //\n * // set the font\n * textLink.font = font;\n * //\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n if (this.pdfFont instanceof PdfStandardFont && this.content != null) {\n this.elementValue = PdfStandardFont.convert(this.content);\n }\n else {\n this.elementValue = this.content;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `PdfStringFormat` that will be used to set the string format\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Gets a `brush` for drawing.\n * @private\n */\n PdfTextElement.prototype.getBrush = function () {\n return (this.pdfBrush == null || typeof this.pdfBrush === 'undefined') ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.pdfBrush;\n };\n // /**\n // * `Draws` an element on the Graphics.\n // * @private\n // */\n // public drawInternal(graphics : PdfGraphics) : void {\n // graphics.drawString(this.elementValue, this.pdfFont, this.pdfPen, this.getBrush(), 0, 0, this.stringFormat);\n // }\n /**\n * `Layouts` the element.\n * @private\n */\n PdfTextElement.prototype.layout = function (param) {\n var layouter = new TextLayouter(this);\n var result = layouter.layout(param);\n return result;\n };\n PdfTextElement.prototype.drawText = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg4 === 'undefined') {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3.x, arg3.y);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3, arg4, null);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'undefined') {\n return this.drawText(arg2, arg3, null);\n }\n else if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && arg4 instanceof PdfLayoutFormat) {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3.x, arg3.y, arg4);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && (arg5 instanceof PdfLayoutFormat || arg5 == null)) {\n this.hasPointOverload = true;\n var width = (arg2.graphics.clientSize.width - arg3);\n var layoutRectangle = new RectangleF(arg3, arg4, width, 0);\n return this.drawText(arg2, layoutRectangle, arg5);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'boolean') {\n return this.drawText(arg2, arg3, null);\n }\n else {\n var layout = new PdfStringLayouter();\n if (this.hasPointOverload) {\n var stringLayoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF((arg2.graphics.clientSize.width - arg3.x), 0), true, arg2.graphics.clientSize);\n var layoutResult = void 0;\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n var previousPage = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n if (stringLayoutResult.lines.length > 1) {\n this.text = stringLayoutResult.layoutLines[0].text;\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n var previousPosition = new PointF(param.bounds.x, param.bounds.y);\n layoutResult = this.layout(param);\n var bounds = new RectangleF(0, layoutResult.bounds.y + stringLayoutResult.lineHeight, arg2.graphics.clientSize.width, stringLayoutResult.lineHeight);\n var isPaginate = false;\n for (var i = 1; i < stringLayoutResult.lines.length; i++) {\n param.page = layoutResult.page;\n param.bounds = new RectangleF(new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n this.text = stringLayoutResult.layoutLines[i].text;\n if (bounds.y + stringLayoutResult.lineHeight > layoutResult.page.graphics.clientSize.height) {\n isPaginate = true;\n param.page = param.page.graphics.getNextPage();\n if (previousPosition.y > (layoutResult.page.graphics.clientSize.height - layoutResult.bounds.height)) {\n bounds = new RectangleF(0, layoutResult.bounds.height, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n else {\n bounds = new RectangleF(0, 0, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n param.bounds = bounds;\n }\n layoutResult = this.layout(param);\n if (i !== (stringLayoutResult.lines.length - 1)) {\n bounds = new RectangleF(0, layoutResult.bounds.y + stringLayoutResult.lineHeight, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n else {\n var lineWidth = this.font.measureString(this.text, this.format).width;\n layoutResult = this.calculateResultBounds(layoutResult, lineWidth, layoutResult.page.graphics.clientSize.width, 0);\n }\n }\n }\n return layoutResult;\n }\n else {\n var lineSize = this.font.measureString(this.text, this.format);\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n layoutResult = this.layout(param);\n layoutResult = this.calculateResultBounds(layoutResult, lineSize.width, layoutResult.page.graphics.clientSize.width, 0);\n }\n return layoutResult;\n }\n }\n else {\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF(arg3.width, 0), false, arg2.graphics.clientSize);\n var result = void 0;\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n if (layoutResult.lines.length > 1) {\n this.text = layoutResult.layoutLines[0].text;\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n var previousPosition = new PointF(param.bounds.x, param.bounds.y);\n result = this.layout(param);\n var bounds = new RectangleF(temparg3.x, result.bounds.y + layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n var isPaginate = false;\n for (var i = 1; i < layoutResult.lines.length; i++) {\n param.page = result.page;\n param.bounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n this.text = layoutResult.layoutLines[i].text;\n if (bounds.y + layoutResult.lineHeight > result.page.graphics.clientSize.height) {\n isPaginate = true;\n param.page = param.page.graphics.getNextPage();\n if (previousPosition.y > (result.page.graphics.clientSize.height - result.bounds.height)) {\n bounds = new RectangleF(temparg3.x, layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n }\n else {\n bounds = new RectangleF(temparg3.x, 0, temparg3.width, layoutResult.lineHeight);\n }\n param.bounds = bounds;\n }\n result = this.layout(param);\n if (i !== (layoutResult.lines.length - 1)) {\n bounds = new RectangleF(temparg3.x, result.bounds.y + layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n }\n else {\n var lineWidth = this.font.measureString(this.text, this.format).width;\n result = this.calculateResultBounds(result, lineWidth, temparg3.width, temparg3.x);\n }\n }\n }\n return result;\n }\n else {\n var lineSize = this.font.measureString(this.text, this.format);\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n result = this.layout(param);\n result = this.calculateResultBounds(result, lineSize.width, temparg3.width, temparg3.x);\n }\n return result;\n }\n }\n }\n };\n PdfTextElement.prototype.calculateResultBounds = function (result, lineWidth, maximumWidth, startPosition) {\n var shift = 0;\n if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Center) {\n result.bounds.x = startPosition + (maximumWidth - lineWidth) / 2;\n result.bounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Right) {\n result.bounds.x = startPosition + (maximumWidth - lineWidth);\n result.bounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Justify) {\n result.bounds.x = startPosition;\n result.bounds.width = maximumWidth;\n }\n else {\n result.bounds.width = startPosition;\n result.bounds.width = lineWidth;\n }\n return result;\n };\n return PdfTextElement;\n}(PdfLayoutElement));\nexport { PdfTextElement };\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 { PdfActionLinkAnnotation } from './action-link-annotation';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfUriAction } from './../actions/uri-action';\n/**\n * `PdfUriAnnotation` class represents the Uri annotation.\n * @private\n */\nvar PdfUriAnnotation = /** @class */ (function (_super) {\n __extends(PdfUriAnnotation, _super);\n function PdfUriAnnotation(rectangle, uri) {\n var _this = _super.call(this, rectangle) || this;\n if (typeof uri !== 'undefined') {\n _this.uri = uri;\n }\n return _this;\n }\n Object.defineProperty(PdfUriAnnotation.prototype, \"uriAction\", {\n /**\n * Get `action` of the annotation.\n * @private\n */\n get: function () {\n if (typeof this.pdfUriAction === 'undefined') {\n this.pdfUriAction = new PdfUriAction();\n }\n return this.pdfUriAction;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfUriAnnotation.prototype, \"uri\", {\n // Properties\n /**\n * Gets or sets the `Uri` address.\n * @private\n */\n get: function () {\n return this.uriAction.uri;\n },\n set: function (value) {\n if (this.uriAction.uri !== value) {\n this.uriAction.uri = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfUriAnnotation.prototype, \"action\", {\n /**\n * Gets or sets the `action`.\n * @private\n */\n get: function () {\n return this.getSetAction();\n },\n set: function (value) {\n this.getSetAction(value);\n this.uriAction.next = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initializes` annotation object.\n * @private\n */\n PdfUriAnnotation.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.link));\n var tempPrimitive = this.uriAction.element;\n this.dictionary.items.setValue(this.dictionaryProperties.a, this.uriAction.element);\n };\n return PdfUriAnnotation;\n}(PdfActionLinkAnnotation));\nexport { PdfUriAnnotation };\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 { PdfPage } from './../pages/pdf-page';\nimport { PointF, RectangleF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTextElement } from './../graphics/figures/text-element';\nimport { PdfUriAnnotation } from './uri-annotation';\nimport { PdfStringLayouter } from './../graphics/fonts/string-layouter';\nimport { PdfFontStyle } from './../graphics/fonts/enum';\nimport { PdfTextAlignment } from './../graphics/enum';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * `PdfTextWebLink` class represents the class for text web link annotation.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * //\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * // set the link text\n * textLink.text = 'Google';\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * //\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfTextWebLink = /** @class */ (function (_super) {\n __extends(PdfTextWebLink, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfTextWebLink` class.\n * @private\n */\n function PdfTextWebLink() {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Internal variable to store `Url`.\n * @default ''\n * @private\n */\n _this.uniformResourceLocator = '';\n /**\n * Internal variable to store `Uri Annotation` object.\n * @default null\n * @private\n */\n _this.uriAnnotation = null;\n /**\n * Checks whether the drawTextWebLink method with `PointF` overload is called or not.\n * If it set as true, then the start position of each lines excluding firest line is changed as (0, Y).\n * @private\n * @hidden\n */\n _this.recalculateBounds = false;\n _this.defaultBorder = new PdfArray();\n for (var i = 0; i < 3; i++) {\n _this.defaultBorder.add(new PdfNumber(0));\n }\n return _this;\n }\n Object.defineProperty(PdfTextWebLink.prototype, \"url\", {\n // Properties\n /**\n * Gets or sets the `Uri address`.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * //\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * //\n * // set the link text\n * textLink.text = 'Google';\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.uniformResourceLocator;\n },\n set: function (value) {\n if (value.length === 0) {\n throw new Error('ArgumentException : Url - string can not be empty');\n }\n this.uniformResourceLocator = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfTextWebLink.prototype.draw = function (arg1, arg2) {\n if (arg1 instanceof PdfPage) {\n var layout = new PdfStringLayouter();\n var previousFontStyle = this.font.style;\n if (arg2 instanceof PointF) {\n this.recalculateBounds = true;\n this.font.style = PdfFontStyle.Underline;\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF((arg1.graphics.clientSize.width - arg2.x), 0), true, arg1.graphics.clientSize);\n if (layoutResult.lines.length === 1) {\n var textSize = this.font.measureString(this.value);\n var rect = new RectangleF(arg2, textSize);\n rect = this.calculateBounds(rect, textSize.width, arg1.graphics.clientSize.width, arg2.x);\n this.uriAnnotation = new PdfUriAnnotation(rect, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n arg1.annotations.add(this.uriAnnotation);\n var result = this.drawText(arg1, arg2);\n this.font.style = previousFontStyle;\n return result;\n }\n else {\n var result = this.drawMultipleLineWithPoint(layoutResult, arg1, arg2);\n this.font.style = previousFontStyle;\n return result;\n }\n }\n else {\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF(arg2.width, 0), false, new SizeF(0, 0));\n this.font.style = PdfFontStyle.Underline;\n if (layoutResult.lines.length === 1) {\n var textSize = this.font.measureString(this.value);\n var rect = new RectangleF(new PointF(arg2.x, arg2.y), textSize);\n rect = this.calculateBounds(rect, textSize.width, arg2.width, arg2.x);\n this.uriAnnotation = new PdfUriAnnotation(rect, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n arg1.annotations.add(this.uriAnnotation);\n var returnValue = this.drawText(arg1, arg2);\n this.font.style = previousFontStyle;\n return returnValue;\n }\n else {\n var returnValue = this.drawMultipleLineWithBounds(layoutResult, arg1, arg2);\n this.font.style = previousFontStyle;\n return returnValue;\n }\n }\n }\n else {\n var page = new PdfPage();\n page = arg1.page;\n return this.draw(page, arg2);\n }\n };\n /* tslint:enable */\n //Private methods\n /**\n * Helper method `Draw` a Multiple Line Text Web Link on the Graphics with the specified location.\n * @private\n */\n PdfTextWebLink.prototype.drawMultipleLineWithPoint = function (result, page, location) {\n var layoutResult;\n for (var i = 0; i < result.layoutLines.length; i++) {\n var size = this.font.measureString(result.lines[i].text);\n var bounds = new RectangleF(location, size);\n if (i !== 0) {\n bounds.x = 0;\n }\n this.text = result.lines[i].text;\n if (bounds.y + size.height > page.graphics.clientSize.height) {\n if (i !== 0) {\n page = page.graphics.getNextPage();\n bounds = new RectangleF(0, 0, page.graphics.clientSize.width, size.height);\n location.y = 0;\n }\n else {\n break;\n }\n }\n bounds = this.calculateBounds(bounds, size.width, page.graphics.clientSize.width, bounds.x);\n this.uriAnnotation = new PdfUriAnnotation(bounds, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n page.annotations.add(this.uriAnnotation);\n if (i !== 0) {\n layoutResult = this.drawText(page, new PointF(0, bounds.y));\n }\n else {\n layoutResult = this.drawText(page, bounds.x, bounds.y);\n }\n location.y += size.height;\n }\n return layoutResult;\n };\n /**\n * Helper method `Draw` a Multiple Line Text Web Link on the Graphics with the specified bounds.\n * @private\n */\n PdfTextWebLink.prototype.drawMultipleLineWithBounds = function (result, page, bounds) {\n var layoutResult;\n for (var i = 0; i < result.layoutLines.length; i++) {\n var size = this.font.measureString(result.lines[i].text);\n var internalBounds = new RectangleF(new PointF(bounds.x, bounds.y), size);\n internalBounds = this.calculateBounds(internalBounds, size.width, bounds.width, bounds.x);\n this.text = result.lines[i].text;\n if (bounds.y + size.height > page.graphics.clientSize.height) {\n if (i !== 0) {\n page = page.graphics.getNextPage();\n bounds = new RectangleF(bounds.x, 0, bounds.width, size.height);\n internalBounds.y = 0;\n }\n else {\n break;\n }\n }\n this.uriAnnotation = new PdfUriAnnotation(internalBounds, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n page.annotations.add(this.uriAnnotation);\n layoutResult = this.drawText(page, bounds);\n bounds.y += size.height;\n }\n return layoutResult;\n };\n /* tslint:disable */\n PdfTextWebLink.prototype.calculateBounds = function (currentBounds, lineWidth, maximumWidth, startPosition) {\n var shift = 0;\n if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Center) {\n currentBounds.x = startPosition + (maximumWidth - lineWidth) / 2;\n currentBounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Right) {\n currentBounds.x = startPosition + (maximumWidth - lineWidth);\n currentBounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Justify) {\n currentBounds.x = startPosition;\n currentBounds.width = maximumWidth;\n }\n else {\n currentBounds.width = startPosition;\n currentBounds.width = lineWidth;\n }\n return currentBounds;\n };\n return PdfTextWebLink;\n}(PdfTextElement));\nexport { PdfTextWebLink };\n","/**\n * PdfNumbersConvertor.ts class for EJ2-PDF\n * @private\n */\nimport { PdfNumberStyle } from './../../pages/enum';\n/**\n * `PdfNumbersConvertor` for convert page number into numbers, roman letters, etc.,\n * @private\n */\nvar PdfNumbersConvertor = /** @class */ (function () {\n function PdfNumbersConvertor() {\n }\n // Static methods\n /**\n * Convert string value from page number with correct format.\n * @private\n */\n PdfNumbersConvertor.convert = function (intArabic, numberStyle) {\n var result = '';\n switch (numberStyle) {\n case PdfNumberStyle.None:\n result = '';\n break;\n case PdfNumberStyle.Numeric:\n result = intArabic.toString();\n break;\n case PdfNumberStyle.LowerLatin:\n result = this.arabicToLetter(intArabic).toLowerCase();\n break;\n case PdfNumberStyle.LowerRoman:\n result = this.arabicToRoman(intArabic).toLowerCase();\n break;\n case PdfNumberStyle.UpperLatin:\n result = this.arabicToLetter(intArabic);\n break;\n case PdfNumberStyle.UpperRoman:\n result = this.arabicToRoman(intArabic);\n break;\n }\n return result;\n };\n /**\n * Converts `arabic to roman` letters.\n * @private\n */\n PdfNumbersConvertor.arabicToRoman = function (intArabic) {\n var retval = '';\n retval += this.generateNumber(intArabic, 1000, 'M');\n retval += this.generateNumber(intArabic, 900, 'CM');\n retval += this.generateNumber(intArabic, 500, 'D');\n retval += this.generateNumber(intArabic, 400, 'CD');\n retval += this.generateNumber(intArabic, 100, 'C');\n retval += this.generateNumber(intArabic, 90, 'XC');\n retval += this.generateNumber(intArabic, 50, 'L');\n retval += this.generateNumber(intArabic, 40, 'XL');\n retval += this.generateNumber(intArabic, 10, 'X');\n retval += this.generateNumber(intArabic, 9, 'IX');\n retval += this.generateNumber(intArabic, 5, 'V');\n retval += this.generateNumber(intArabic, 4, 'IV');\n retval += this.generateNumber(intArabic, 1, 'I');\n return retval.toString();\n };\n /**\n * Converts `arabic to normal letters`.\n * @private\n */\n PdfNumbersConvertor.arabicToLetter = function (arabic) {\n var stack = this.convertToLetter(arabic);\n var result = '';\n while (stack.length > 0) {\n var num = stack.pop();\n result = this.appendChar(result, num);\n }\n return result.toString();\n };\n /**\n * Generate a string value of an input number.\n * @private\n */\n PdfNumbersConvertor.generateNumber = function (value, magnitude, letter) {\n var numberstring = '';\n while (value >= magnitude) {\n value -= magnitude;\n numberstring += letter;\n }\n return numberstring.toString();\n };\n /**\n * Convert a input number into letters.\n * @private\n */\n PdfNumbersConvertor.convertToLetter = function (arabic) {\n if (arabic <= 0) {\n throw Error('ArgumentOutOfRangeException-arabic, Value can not be less 0');\n }\n var stack = [];\n while (arabic > this.letterLimit) {\n var remainder = arabic % this.letterLimit;\n if (remainder === 0.0) {\n arabic = arabic / this.letterLimit - 1;\n remainder = this.letterLimit;\n }\n else {\n arabic /= this.letterLimit;\n }\n stack.push(remainder);\n }\n stack.push(arabic);\n return stack;\n };\n /**\n * Convert number to actual string value.\n * @private\n */\n PdfNumbersConvertor.appendChar = function (builder, value) {\n var letter = String.fromCharCode(PdfNumbersConvertor.acsiiStartIndex + value);\n builder += letter;\n return builder;\n };\n // Fields\n /**\n * numbers of letters in english [readonly].\n * @default = 26.0\n * @private\n */\n PdfNumbersConvertor.letterLimit = 26.0;\n /**\n * Resturns `acsii start index` value.\n * @default 64\n * @private\n */\n PdfNumbersConvertor.acsiiStartIndex = (65 - 1);\n return PdfNumbersConvertor;\n}());\nexport { PdfNumbersConvertor };\n","/**\n * Represent class to store information about `template and value pairs`.\n * @private\n */\nvar PdfTemplateValuePair = /** @class */ (function () {\n function PdfTemplateValuePair(template, value) {\n // Fields\n /**\n * Internal variable to store template.\n * @default null\n * @private\n */\n this.pdfTemplate = null;\n /**\n * Intenal variable to store value.\n * @private\n */\n this.content = '';\n if (typeof template === 'undefined') {\n //\n }\n else {\n this.template = template;\n this.value = value;\n }\n }\n Object.defineProperty(PdfTemplateValuePair.prototype, \"template\", {\n // Properties\n /**\n * Gets or sets the template.\n * @private\n */\n get: function () {\n return this.pdfTemplate;\n },\n set: function (value) {\n this.pdfTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplateValuePair.prototype, \"value\", {\n /**\n * Gets or sets the value.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplateValuePair;\n}());\nexport { PdfTemplateValuePair };\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})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { PdfAutomaticField } from './automatic-field';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfTemplateValuePair } from './pdf-template-value-pair';\nimport { SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfTemplate } from './../../graphics/figures/pdf-template';\n/**\n * Represents automatic field which has the same value within the `PdfGraphics`.\n */\nvar PdfMultipleValueField = /** @class */ (function (_super) {\n __extends(PdfMultipleValueField, _super);\n function PdfMultipleValueField() {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the instance of dictionary values of `graphics and template value pair`.\n * @private\n */\n _this.list = new TemporaryDictionary();\n return _this;\n }\n // Implementation\n /* tslint:disable */\n PdfMultipleValueField.prototype.performDraw = function (graphics, location, scalingX, scalingY) {\n _super.prototype.performDrawHelper.call(this, graphics, location, scalingX, scalingY);\n var value = this.getValue(graphics);\n var template = new PdfTemplate(this.getSize());\n this.list.setValue(graphics, new PdfTemplateValuePair(template, value));\n var g = template.graphics;\n var size = this.getSize();\n template.graphics.drawString(value, this.getFont(), this.pen, this.getBrush(), 0, 0, size.width, size.height, this.stringFormat);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(template, drawLocation, new SizeF(template.width * scalingX, template.height * scalingY));\n };\n return PdfMultipleValueField;\n}(PdfAutomaticField));\nexport { PdfMultipleValueField };\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 { PdfBrush } from './../../graphics/brushes/pdf-brush';\nimport { PdfNumberStyle } from './../../pages/enum';\nimport { PdfNumbersConvertor } from './pdf-numbers-convertor';\nimport { PdfMultipleValueField } from './multiple-value-field';\n/**\n * Represents PDF document `page number field`.\n * @public\n */\nvar PdfPageNumberField = /** @class */ (function (_super) {\n __extends(PdfPageNumberField, _super);\n function PdfPageNumberField(font, arg2) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the number style of the page number field.\n * @private\n */\n _this.internalNumberStyle = PdfNumberStyle.Numeric;\n if (typeof arg2 === 'undefined') {\n _this.font = font;\n }\n else if (arg2 instanceof PdfBrush) {\n _this.font = font;\n _this.brush = arg2;\n }\n else {\n _this.font = font;\n _this.bounds = arg2;\n }\n return _this;\n }\n Object.defineProperty(PdfPageNumberField.prototype, \"numberStyle\", {\n // Properties\n /**\n * Gets and sets the number style of the page number field.\n * @private\n */\n get: function () {\n return this.internalNumberStyle;\n },\n set: function (value) {\n this.internalNumberStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return the `string` value of page number field.\n * @public\n */\n PdfPageNumberField.prototype.getValue = function (graphics) {\n var result = null;\n var page = this.getPageFromGraphics(graphics);\n result = this.internalGetValue(page);\n return result;\n };\n /**\n * Internal method to `get actual value of page number`.\n * @private\n */\n PdfPageNumberField.prototype.internalGetValue = function (page) {\n var document = page.document;\n var pageIndex = document.pages.indexOf(page) + 1;\n return PdfNumbersConvertor.convert(pageIndex, this.numberStyle);\n };\n return PdfPageNumberField;\n}(PdfMultipleValueField));\nexport { PdfPageNumberField };\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})();\n/**\n * PdfCompositeField.ts class for EJ2-PDF\n */\nimport { PdfMultipleValueField } from './multiple-value-field';\n/**\n * Represents class which can concatenate multiple automatic fields into single string.\n */\nvar PdfCompositeField = /** @class */ (function (_super) {\n __extends(PdfCompositeField, _super);\n // Constructor\n /**\n * Initialize a new instance of `PdfCompositeField` class.\n * @param font Font of the field.\n * @param brush Color of the field.\n * @param text Content of the field.\n * @param list List of the automatic fields in specific order based on the text content.\n */\n function PdfCompositeField(font, brush, text) {\n var list = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n list[_i - 3] = arguments[_i];\n }\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the array of automatic fields.\n * @private\n */\n _this.internalAutomaticFields = null;\n /**\n * Stores the text value of the field.\n * @private\n */\n _this.internalText = '';\n _this.font = font;\n _this.brush = brush;\n _this.text = text;\n _this.automaticFields = list;\n return _this;\n }\n Object.defineProperty(PdfCompositeField.prototype, \"text\", {\n // Properties\n /**\n * Gets and sets the content of the field.\n * @public\n */\n get: function () {\n return this.internalText;\n },\n set: function (value) {\n this.internalText = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCompositeField.prototype, \"automaticFields\", {\n /**\n * Gets and sets the list of the field to drawn.\n * @public\n */\n get: function () {\n return this.internalAutomaticFields;\n },\n set: function (value) {\n this.internalAutomaticFields = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Return the actual value generated from the list of automatic fields.\n * @public\n */\n PdfCompositeField.prototype.getValue = function (graphics) {\n var values = [];\n var text = this.text.toString();\n if (typeof this.automaticFields !== 'undefined' && this.automaticFields != null && this.automaticFields.length > 0) {\n for (var i = 0; i < this.automaticFields.length; i++) {\n var automaticField = this.automaticFields[i];\n text = text.replace('{' + i + '}', automaticField.getValue(graphics));\n }\n }\n return text;\n };\n return PdfCompositeField;\n}(PdfMultipleValueField));\nexport { PdfCompositeField };\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})();\n/**\n * PdfSingleValueField.ts class for EJ2-PDF\n */\nimport { PdfAutomaticField } from './automatic-field';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfTemplateValuePair } from './pdf-template-value-pair';\nimport { PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfTemplate } from './../../graphics/figures/pdf-template';\n/**\n * Represents automatic field which has the same value in the whole document.\n */\nvar PdfSingleValueField = /** @class */ (function (_super) {\n __extends(PdfSingleValueField, _super);\n // Constructors\n function PdfSingleValueField() {\n var _this = _super.call(this) || this;\n // Fields\n /* tslint:disable */\n _this.list = new TemporaryDictionary();\n /* tslint:enable */\n _this.painterGraphics = [];\n return _this;\n }\n PdfSingleValueField.prototype.performDraw = function (graphics, location, scalingX, scalingY) {\n _super.prototype.performDrawHelper.call(this, graphics, location, scalingX, scalingY);\n var page = this.getPageFromGraphics(graphics);\n var document = page.document;\n var textValue = this.getValue(graphics);\n /* tslint:disable */\n if (this.list.containsKey(document)) {\n var pair = this.list.getValue(document);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(pair.template, drawLocation, new SizeF(pair.template.width * scalingX, pair.template.height * scalingY));\n this.painterGraphics.push(graphics);\n }\n else {\n var size = this.getSize();\n var template = new PdfTemplate(size);\n this.list.setValue(document, new PdfTemplateValuePair(template, textValue));\n template.graphics.drawString(textValue, this.getFont(), this.pen, this.getBrush(), 0, 0, size.width, size.height, this.stringFormat);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(template, drawLocation, new SizeF(template.width * scalingX, template.height * scalingY));\n this.painterGraphics.push(graphics);\n }\n /* tslint:enable */\n };\n return PdfSingleValueField;\n}(PdfAutomaticField));\nexport { PdfSingleValueField };\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})();\n/**\n * PdfPageCountField.ts class for EJ2-PDF\n */\nimport { PdfSingleValueField } from './single-value-field';\nimport { PdfNumberStyle } from './../../pages/enum';\nimport { PdfBrush } from './../../graphics/brushes/pdf-brush';\nimport { PdfNumbersConvertor } from './pdf-numbers-convertor';\n/**\n * Represents total PDF document page count automatic field.\n */\nvar PdfPageCountField = /** @class */ (function (_super) {\n __extends(PdfPageCountField, _super);\n function PdfPageCountField(font, arg2) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the number style of the field.\n * @private\n */\n _this.internalNumberStyle = PdfNumberStyle.Numeric;\n if (typeof arg2 === 'undefined') {\n _this.font = font;\n }\n else if (arg2 instanceof PdfBrush) {\n _this.font = font;\n _this.brush = arg2;\n }\n else {\n _this.font = font;\n _this.bounds = arg2;\n }\n return _this;\n }\n Object.defineProperty(PdfPageCountField.prototype, \"numberStyle\", {\n // Properties\n /**\n * Gets and sets the number style of the field.\n * @public\n */\n get: function () {\n return this.internalNumberStyle;\n },\n set: function (value) {\n this.internalNumberStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Return the actual value of the content to drawn.\n * @public\n */\n PdfPageCountField.prototype.getValue = function (graphics) {\n var result = null;\n var page = this.getPageFromGraphics(graphics);\n var document = page.section.parent.document;\n var count = document.pages.count;\n result = PdfNumbersConvertor.convert(count, this.numberStyle);\n return result;\n };\n return PdfPageCountField;\n}(PdfSingleValueField));\nexport { PdfPageCountField };\n","import { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfPageRotateAngle } from './../pages/enum';\nimport { PdfDestinationMode } from './../general/enum';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDestination` class represents an anchor in the document\n * where bookmarks or annotations can direct when clicked.\n */\nvar PdfDestination = /** @class */ (function () {\n function PdfDestination(arg1, arg2) {\n // Fields\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Type of the `destination`.\n * @private\n */\n this.destinationMode = PdfDestinationMode.Location;\n /**\n * `Zoom` factor.\n * @private\n * @default 0\n */\n this.zoomFactor = 0;\n /**\n * `Location` of the destination.\n * @default new PointF() with 0 ,0 as co-ordinates\n * @private\n */\n this.destinationLocation = new PointF(0, 0);\n /**\n * `Bounds` of the destination as RectangleF.\n * @default RectangleF.Empty\n * @private\n */\n this.bounds = new RectangleF();\n /**\n * Pdf primitive representing `this` object.\n * @private\n */\n this.array = new PdfArray();\n if (typeof arg2 === 'undefined') {\n var angle = PdfPageRotateAngle.RotateAngle0;\n this.destinationLocation = new PointF(0, this.destinationLocation.y);\n this.pdfPage = arg1;\n }\n else if (arg2 instanceof PointF) {\n this.constructor(arg1);\n this.destinationLocation = arg2;\n }\n else {\n this.constructor(arg1);\n this.bounds = arg2;\n }\n }\n Object.defineProperty(PdfDestination.prototype, \"zoom\", {\n // Properties\n /**\n * Gets and Sets the `zoom` factor.\n * @private\n */\n get: function () {\n return this.zoomFactor;\n },\n set: function (value) {\n this.zoomFactor = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"page\", {\n /**\n * Gets and Sets the `page` object.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"mode\", {\n /**\n * Gets and Sets the destination `mode`.\n * @private\n */\n get: function () {\n return this.destinationMode;\n },\n set: function (value) {\n this.destinationMode = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"location\", {\n /**\n * Gets and Sets the `location`.\n * @private\n */\n get: function () {\n return this.destinationLocation;\n },\n set: function (value) {\n this.destinationLocation = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Translates` co-ordinates to PDF co-ordinate system (lower/left).\n * @private\n */\n PdfDestination.prototype.pointToNativePdf = function (page, point) {\n var section = page.section;\n return section.pointToNativePdf(page, point);\n };\n /**\n * `In fills` array by correct values.\n * @private\n */\n PdfDestination.prototype.initializePrimitive = function () {\n this.array.clear();\n this.array.add(new PdfReferenceHolder(this.pdfPage));\n switch (this.destinationMode) {\n case PdfDestinationMode.Location:\n var simplePage = this.pdfPage;\n var point = new PointF();\n point = this.pointToNativePdf(simplePage, this.destinationLocation);\n this.array.add(new PdfName(this.dictionaryProperties.xyz));\n this.array.add(new PdfNumber(point.x));\n this.array.add(new PdfNumber(point.y));\n this.array.add(new PdfNumber(this.zoomFactor));\n break;\n case PdfDestinationMode.FitToPage:\n this.array.add(new PdfName(this.dictionaryProperties.fit));\n break;\n }\n };\n Object.defineProperty(PdfDestination.prototype, \"element\", {\n /**\n * Gets the `element` representing this object.\n * @private\n */\n get: function () {\n this.initializePrimitive();\n return this.array;\n },\n enumerable: true,\n configurable: true\n });\n return PdfDestination;\n}());\nexport { PdfDestination };\n","/**\n * public Enum for `PdfBorderOverlapStyle`.\n * @private\n */\nexport var PdfBorderOverlapStyle;\n(function (PdfBorderOverlapStyle) {\n /**\n * Specifies the type of `Overlap`.\n * @private\n */\n PdfBorderOverlapStyle[PdfBorderOverlapStyle[\"Overlap\"] = 0] = \"Overlap\";\n /**\n * Specifies the type of `Inside`.\n * @private\n */\n PdfBorderOverlapStyle[PdfBorderOverlapStyle[\"Inside\"] = 1] = \"Inside\";\n})(PdfBorderOverlapStyle || (PdfBorderOverlapStyle = {}));\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})();\n/**\n * PdfTrueTypeFont.ts class for EJ2-PDF\n */\nimport { UnicodeTrueTypeFont } from './unicode-true-type-font';\nimport { PdfFont } from './pdf-font';\nimport { PdfFontStyle } from './enum';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfTextDirection } from './../enum';\nimport { RtlRenderer } from './rtl-renderer';\n//https://www.giftofspeed.com/base64-encoder/\nvar PdfTrueTypeFont = /** @class */ (function (_super) {\n __extends(PdfTrueTypeFont, _super);\n function PdfTrueTypeFont(base64String, size, style) {\n var _this = _super.call(this, size) || this;\n /**\n * Indicates whether the font is embedded or not.\n * @private\n */\n _this.isEmbedFont = false;\n /**\n * Indicates whether the font is unicoded or not.\n * @private\n */\n _this.isUnicode = true;\n if (style !== undefined) {\n _this.createFontInternal(base64String, style);\n }\n else {\n _this.createFontInternal(base64String, PdfFontStyle.Regular);\n }\n return _this;\n }\n PdfTrueTypeFont.prototype.equalsToFont = function (font) {\n var result = false;\n //let result : boolean = this.fontInternal.equalsToFont(font);\n return result;\n };\n PdfTrueTypeFont.prototype.getLineWidth = function (line, format) {\n var width = 0;\n if (format !== null && format.textDirection !== PdfTextDirection.None) {\n var returnValue = this.getUnicodeLineWidth(line, /*out*/ width, format);\n width = returnValue.width;\n }\n else {\n width = this.fontInternal.getLineWidth(line);\n }\n var size = this.metrics.getSize(format);\n width *= (PdfFont.charSizeMultiplier * size);\n width = this.applyFormatSettings(line, format, width);\n return width;\n };\n /**\n * Returns width of the char.\n */\n PdfTrueTypeFont.prototype.getCharWidth = function (charCode, format) {\n var codeWidth = this.fontInternal.getCharWidth(charCode);\n var size = this.metrics.getSize(format);\n codeWidth *= (0.001 * size);\n return codeWidth;\n };\n //Implementation\n PdfTrueTypeFont.prototype.createFontInternal = function (base64String, style) {\n this.fontInternal = new UnicodeTrueTypeFont(base64String, this.size);\n this.calculateStyle(style);\n this.initializeInternals();\n };\n PdfTrueTypeFont.prototype.calculateStyle = function (style) {\n var iStyle = this.fontInternal.ttfMetrics.macStyle;\n if ((style & PdfFontStyle.Underline) !== 0) {\n iStyle |= PdfFontStyle.Underline;\n }\n if ((style & PdfFontStyle.Strikeout) !== 0) {\n iStyle |= PdfFontStyle.Strikeout;\n }\n this.setStyle(iStyle);\n };\n PdfTrueTypeFont.prototype.initializeInternals = function () {\n var equalFont = null;\n if (PdfDocument.enableCache) {\n // Search for the similar fonts.\n equalFont = PdfDocument.cache.search(this);\n }\n var internals = null;\n // There is not equal font in the cache.\n if (equalFont !== null && equalFont !== undefined) {\n // Get the settings from the cached font.\n internals = equalFont.getInternals();\n var metrics = equalFont.metrics;\n metrics = metrics.clone();\n metrics.size = this.size;\n this.metrics = metrics;\n this.fontInternal = equalFont.fontInternal;\n }\n else {\n if (equalFont == null) {\n if (this.fontInternal instanceof UnicodeTrueTypeFont) {\n this.fontInternal.isEmbed = this.isEmbedFont;\n }\n this.fontInternal.createInternals();\n internals = this.fontInternal.getInternals();\n this.metrics = this.fontInternal.metrics;\n }\n }\n this.metrics.isUnicodeFont = true;\n this.setInternals(internals);\n //this.ttfReader = (this.fontInternal as UnicodeTrueTypeFont).ttfReader;\n };\n /**\n * Stores used symbols.\n */\n PdfTrueTypeFont.prototype.setSymbols = function (text) {\n var internalFont = this.fontInternal;\n if (internalFont != null) {\n internalFont.setSymbols(text);\n }\n };\n Object.defineProperty(PdfTrueTypeFont.prototype, \"Unicode\", {\n /**\n * Property\n *\n */\n get: function () {\n return this.isUnicode;\n },\n enumerable: true,\n configurable: true\n });\n // public get Font() : UnicodeTrueTypeFont {\n // return this.fontInternal as UnicodeTrueTypeFont;\n // }\n PdfTrueTypeFont.prototype.getUnicodeLineWidth = function (line, /*out*/ width, format) {\n // if (line == null) {\n // throw new Error('ArgumentNullException : line');\n // }\n width = 0;\n var glyphIndices = null;\n var rtlRender = new RtlRenderer();\n /* tslint:disable-next-line:max-line-length */\n var result = rtlRender.getGlyphIndex(line, this, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, /*out*/ glyphIndices, true);\n var resultGlyph = result.success;\n glyphIndices = result.glyphs;\n if (resultGlyph && glyphIndices !== null) {\n var ttfReader = this.fontInternal.ttfReader;\n for (var i = 0, len = glyphIndices.length; i < len; i++) {\n var glyphIndex = glyphIndices[i];\n var glyph = ttfReader.getGlyph(glyphIndex);\n if (glyph !== null && typeof glyph !== 'undefined') {\n width += glyph.width;\n }\n }\n }\n return { success: resultGlyph, width: width };\n };\n return PdfTrueTypeFont;\n}(PdfFont));\nexport { PdfTrueTypeFont };\n","/**\n * PdfPageTemplateElement.ts class for EJ2-Pdf\n */\nimport { PdfDockStyle, PdfAlignmentStyle, TemplateType } from './enum';\nimport { PointF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTemplate } from './../graphics/figures/pdf-template';\nimport { PdfPage } from './pdf-page';\nimport { RectangleF } from './../drawing/pdf-drawing';\n/**\n * Describes a `page template` object that can be used as header/footer, watermark or stamp.\n */\nvar PdfPageTemplateElement = /** @class */ (function () {\n /* tslint:disable */\n function PdfPageTemplateElement(arg1, arg2, arg3, arg4, arg5) {\n if (arg1 instanceof RectangleF && typeof arg2 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else if (arg1 instanceof RectangleF && arg2 instanceof PdfPage && typeof arg3 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg1.width, arg1.height, arg2);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg2.width, arg2.height);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg2.width, arg2.height, arg3);\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.constructor(arg1.width, arg1.height);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.constructor(0, 0, arg1, arg2);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.constructor(0, 0, arg1, arg2, arg3);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n }\n else {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n // this.graphics.colorSpace = this.page.document.colorSpace;\n }\n /* tslint:enable */\n }\n Object.defineProperty(PdfPageTemplateElement.prototype, \"dock\", {\n // Properties\n /**\n * Gets or sets the `dock style` of the page template element.\n * @private\n */\n get: function () {\n return this.dockStyle;\n },\n set: function (value) {\n // if (this.dockStyle !== value && this.Type === TemplateType.None) {\n this.dockStyle = value;\n // Reset alignment.\n this.resetAlignment();\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"alignment\", {\n /**\n * Gets or sets `alignment` of the page template element.\n * @private\n */\n get: function () {\n return this.alignmentStyle;\n },\n set: function (value) {\n // if (this.alignmentStyle !== value) {\n this.setAlignment(value);\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"foreground\", {\n /**\n * Indicates whether the page template is located `in front of the page layers or behind of it`.\n * @private\n */\n get: function () {\n return this.isForeground;\n },\n set: function (value) {\n // if (this.foreground !== value) {\n this.isForeground = value;\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"background\", {\n /**\n * Indicates whether the page template is located `behind of the page layers or in front of it`.\n * @private\n */\n get: function () {\n return !this.isForeground;\n },\n set: function (value) {\n this.isForeground = !value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"location\", {\n /**\n * Gets or sets `location` of the page template element.\n * @private\n */\n get: function () {\n return this.currentLocation;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"x\", {\n /**\n * Gets or sets `X` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.x : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.x = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"y\", {\n /**\n * Gets or sets `Y` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.y : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.y = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"size\", {\n /**\n * Gets or sets `size` of the page template element.\n * @private\n */\n get: function () {\n return this.template.size;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.template.reset(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"width\", {\n /**\n * Gets or sets `width` of the page template element.\n * @private\n */\n get: function () {\n return this.template.width;\n },\n set: function (value) {\n if (this.template.width !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.width = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"height\", {\n /**\n * Gets or sets `height` of the page template element.\n * @private\n */\n get: function () {\n return this.template.height;\n },\n set: function (value) {\n if (this.template.height !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.height = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"graphics\", {\n /**\n * Gets `graphics` context of the page template element.\n * @private\n */\n get: function () {\n return this.template.graphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"template\", {\n /**\n * Gets Pdf `template` object.\n * @private\n */\n get: function () {\n // if (typeof this.pdfTemplate === 'undefined' || this.pdfTemplate == null) {\n // this.pdfTemplate = new PdfTemplate(this.size);\n // }\n return this.pdfTemplate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"type\", {\n /**\n * Gets or sets `type` of the usage of this page template.\n * @private\n */\n get: function () {\n return this.templateType;\n },\n set: function (value) {\n this.updateDocking(value);\n this.templateType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"bounds\", {\n /**\n * Gets or sets `bounds` of the page template.\n * @public\n */\n get: function () {\n return new RectangleF(new PointF(this.x, this.y), this.size);\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.location = new PointF(value.x, value.y);\n this.size = new SizeF(value.width, value.height);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Updates Dock` property if template is used as header/footer.\n * @private\n */\n PdfPageTemplateElement.prototype.updateDocking = function (type) {\n if (type !== TemplateType.None) {\n switch (type) {\n case TemplateType.Top:\n this.dock = PdfDockStyle.Top;\n break;\n case TemplateType.Bottom:\n this.dock = PdfDockStyle.Bottom;\n break;\n case TemplateType.Left:\n this.dock = PdfDockStyle.Left;\n break;\n case TemplateType.Right:\n this.dock = PdfDockStyle.Right;\n break;\n }\n this.resetAlignment();\n }\n };\n /**\n * `Resets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.resetAlignment = function () {\n this.alignment = PdfAlignmentStyle.None;\n };\n /**\n * `Sets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.setAlignment = function (alignment) {\n if (this.dock === PdfDockStyle.None) {\n this.alignmentStyle = alignment;\n }\n else {\n // Template is docked and alignment has been changed.\n var canBeSet = false;\n switch (this.dock) {\n case PdfDockStyle.Left:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.MiddleLeft ||\n alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Top:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.TopCenter ||\n alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Right:\n canBeSet = (alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.MiddleRight ||\n alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Bottom:\n canBeSet = (alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.BottomCenter\n || alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Fill:\n canBeSet = (alignment === PdfAlignmentStyle.MiddleCenter || alignment === PdfAlignmentStyle.None);\n break;\n }\n if (canBeSet) {\n this.alignmentStyle = alignment;\n }\n }\n };\n /**\n * Draws the template.\n * @private\n */\n PdfPageTemplateElement.prototype.draw = function (layer, document) {\n var page = layer.page;\n var bounds = this.calculateBounds(page, document);\n if (bounds.x === -0) {\n bounds.x = 0;\n }\n layer.graphics.drawPdfTemplate(this.template, new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n };\n /**\n * Calculates bounds of the page template.\n * @private\n */\n PdfPageTemplateElement.prototype.calculateBounds = function (page, document) {\n var result = this.bounds;\n if (this.alignmentStyle !== PdfAlignmentStyle.None) {\n result = this.getAlignmentBounds(page, document);\n }\n else if (this.dockStyle !== PdfDockStyle.None) {\n result = this.getDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getAlignmentBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleAlignmentBounds(page, document);\n }\n else {\n result = this.getTemplateAlignmentBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleAlignmentBounds = function (page, document) {\n var bounds = this.bounds;\n var pdfSection = page.section;\n var actualBounds = pdfSection.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n x = 0;\n y = 0;\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = 0;\n break;\n case PdfAlignmentStyle.TopRight:\n x = actualBounds.width - this.width;\n y = 0;\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = 0;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n x = 0;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n x = actualBounds.width - this.width;\n y = actualBounds.height - this.height;\n break;\n }\n bounds.x = x;\n bounds.y = y;\n return bounds;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateAlignmentBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n if (this.type === TemplateType.Left) {\n x = -actualBounds.x;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = -actualBounds.x;\n y = -actualBounds.y;\n }\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = -actualBounds.y;\n break;\n case PdfAlignmentStyle.TopRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = -actualBounds.y;\n }\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = -actualBounds.x;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n if (this.type === TemplateType.Left) {\n x = -actualBounds.x;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = -actualBounds.x;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n }\n result.x = x;\n result.y = y;\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getDockBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleDockBounds(page, document);\n }\n else {\n result = this.getTemplateDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = 0;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = 0;\n y = 0;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = 0;\n y = actualBounds.height - this.height;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n /**\n * Calculates template bounds basing on docking if template is a page template.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var actualSize = section.pageSettings.getActualSize();\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = -actualBounds.x;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = -actualBounds.x;\n y = -actualBounds.y;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y = -actualBounds.y + actualSize.height;\n }\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = -actualBounds.x;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y -= actualSize.height;\n }\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n return PdfPageTemplateElement;\n}());\nexport { PdfPageTemplateElement };\n","/**\n * PdfBorders.ts class for EJ2-PDF\n */\nimport { PdfPen } from './../../../graphics/pdf-pen';\nimport { PdfDashStyle } from './../../../graphics/enum';\nimport { PdfColor } from './../../../graphics/pdf-color';\n/**\n * `PdfBorders` class used represents the cell border of the PDF grid.\n */\nvar PdfBorders = /** @class */ (function () {\n // Constructor\n /**\n * Create a new instance for `PdfBorders` class.\n * @private\n */\n function PdfBorders() {\n var defaultBorderPenLeft = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenLeft.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenRight = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenRight.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenTop = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenTop.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenBottom = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenBottom.dashStyle = PdfDashStyle.Solid;\n this.leftPen = defaultBorderPenLeft;\n this.rightPen = defaultBorderPenRight;\n this.topPen = defaultBorderPenTop;\n this.bottomPen = defaultBorderPenBottom;\n }\n Object.defineProperty(PdfBorders.prototype, \"left\", {\n // Properties\n /**\n * Gets or sets the `Left`.\n * @private\n */\n get: function () {\n return this.leftPen;\n },\n set: function (value) {\n this.leftPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"right\", {\n /**\n * Gets or sets the `Right`.\n * @private\n */\n get: function () {\n return this.rightPen;\n },\n set: function (value) {\n this.rightPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"top\", {\n /**\n * Gets or sets the `Top`.\n * @private\n */\n get: function () {\n return this.topPen;\n },\n set: function (value) {\n this.topPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"bottom\", {\n /**\n * Gets or sets the `Bottom`.\n * @private\n */\n get: function () {\n return this.bottomPen;\n },\n set: function (value) {\n this.bottomPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"all\", {\n /**\n * sets the `All`.\n * @private\n */\n set: function (value) {\n this.leftPen = this.rightPen = this.topPen = this.bottomPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"isAll\", {\n /**\n * Gets a value indicating whether this instance `is all`.\n * @private\n */\n get: function () {\n return ((this.leftPen === this.rightPen) && (this.leftPen === this.topPen) && (this.leftPen === this.bottomPen));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders, \"default\", {\n /**\n * Gets the `default`.\n * @private\n */\n get: function () {\n return new PdfBorders();\n },\n enumerable: true,\n configurable: true\n });\n return PdfBorders;\n}());\nexport { PdfBorders };\nvar PdfPaddings = /** @class */ (function () {\n function PdfPaddings(left, right, top, bottom) {\n /**\n * The 'left' border padding set.\n * @private\n */\n this.hasLeftPad = false;\n /**\n * The 'right' border padding set.\n * @private\n */\n this.hasRightPad = false;\n /**\n * The 'top' border padding set.\n * @private\n */\n this.hasTopPad = false;\n /**\n * The 'bottom' border padding set.\n * @private\n */\n this.hasBottomPad = false;\n if (typeof left === 'undefined') {\n //5.76 and 0 are taken from ms-word default table margins.\n this.leftPad = this.rightPad = 5.76;\n //0.5 is set for top and bottom by default.\n this.bottomPad = this.topPad = 0.5;\n }\n else {\n this.leftPad = left;\n this.rightPad = right;\n this.topPad = top;\n this.bottomPad = bottom;\n this.hasLeftPad = true;\n this.hasRightPad = true;\n this.hasTopPad = true;\n this.hasBottomPad = true;\n }\n }\n Object.defineProperty(PdfPaddings.prototype, \"left\", {\n // Properties\n /**\n * Gets or sets the `left` value of the edge\n * @private\n */\n get: function () {\n return this.leftPad;\n },\n set: function (value) {\n this.leftPad = value;\n this.hasLeftPad = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"right\", {\n /**\n * Gets or sets the `right` value of the edge.\n * @private\n */\n get: function () {\n return this.rightPad;\n },\n set: function (value) {\n this.rightPad = value;\n this.hasRightPad = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"top\", {\n /**\n * Gets or sets the `top` value of the edge\n * @private\n */\n get: function () {\n return this.topPad;\n },\n set: function (value) {\n this.topPad = value;\n this.hasTopPad = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom` value of the edge.\n * @private\n */\n get: function () {\n return this.bottomPad;\n },\n set: function (value) {\n this.bottomPad = value;\n this.hasBottomPad = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"all\", {\n /**\n * Sets value to all sides `left,right,top and bottom`.s\n * @private\n */\n set: function (value) {\n this.leftPad = this.rightPad = this.topPad = this.bottomPad = value;\n this.hasLeftPad = true;\n this.hasRightPad = true;\n this.hasTopPad = true;\n this.hasBottomPad = true;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPaddings;\n}());\nexport { PdfPaddings };\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 { PdfBorders, PdfPaddings } from './pdf-borders';\nimport { PdfBorderOverlapStyle } from './../../tables/light-tables/enum';\n/**\n * Base class for the `grid style`,\n */\nvar PdfGridStyleBase = /** @class */ (function () {\n function PdfGridStyleBase() {\n }\n Object.defineProperty(PdfGridStyleBase.prototype, \"backgroundBrush\", {\n // Properties\n /**\n * Gets or sets the `background brush`.\n * @private\n */\n get: function () {\n return this.gridBackgroundBrush;\n },\n set: function (value) {\n this.gridBackgroundBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"textBrush\", {\n /**\n * Gets or sets the `text brush`.\n * @private\n */\n get: function () {\n return this.gridTextBrush;\n },\n set: function (value) {\n this.gridTextBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"textPen\", {\n /**\n * Gets or sets the `text pen`.\n * @private\n */\n get: function () {\n return this.gridTextPen;\n },\n set: function (value) {\n this.gridTextPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"font\", {\n /**\n * Gets or sets the `font`.\n * @private\n */\n get: function () {\n return this.gridFont;\n },\n set: function (value) {\n this.gridFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"backgroundImage\", {\n /**\n * Gets or sets the `background Image`.\n * @private\n */\n get: function () {\n return this.gridBackgroundImage;\n },\n set: function (value) {\n this.gridBackgroundImage = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyleBase;\n}());\nexport { PdfGridStyleBase };\n/**\n * `PdfGridStyle` class provides customization of the appearance for the 'PdfGrid'.\n */\nvar PdfGridStyle = /** @class */ (function (_super) {\n __extends(PdfGridStyle, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGridStyle` class.\n * @private\n */\n function PdfGridStyle() {\n var _this = _super.call(this) || this;\n _this.gridBorderOverlapStyle = PdfBorderOverlapStyle.Overlap;\n _this.bAllowHorizontalOverflow = false;\n _this.gridHorizontalOverflowType = PdfHorizontalOverflowType.LastPage;\n return _this;\n }\n Object.defineProperty(PdfGridStyle.prototype, \"cellSpacing\", {\n //Properties\n /**\n * Gets or sets the `cell spacing` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n if (typeof this.gridCellSpacing === 'undefined') {\n this.gridCellSpacing = 0;\n }\n return this.gridCellSpacing;\n },\n set: function (value) {\n this.gridCellSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"horizontalOverflowType\", {\n /**\n * Gets or sets the type of the `horizontal overflow` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridHorizontalOverflowType;\n },\n set: function (value) {\n this.gridHorizontalOverflowType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"allowHorizontalOverflow\", {\n /**\n * Gets or sets a value indicating whether to `allow horizontal overflow`.\n * @private\n */\n get: function () {\n return this.bAllowHorizontalOverflow;\n },\n set: function (value) {\n this.bAllowHorizontalOverflow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n return this.gridCellPadding;\n },\n set: function (value) {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n this.gridCellPadding = value;\n }\n else {\n this.gridCellPadding = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"borderOverlapStyle\", {\n /**\n * Gets or sets the `border overlap style` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridBorderOverlapStyle;\n },\n set: function (value) {\n this.gridBorderOverlapStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyle;\n}(PdfGridStyleBase));\nexport { PdfGridStyle };\n/**\n * `PdfGridCellStyle` class provides customization of the appearance for the 'PdfGridCell'.\n */\nvar PdfGridCellStyle = /** @class */ (function (_super) {\n __extends(PdfGridCellStyle, _super);\n /**\n * Initializes a new instance of the `PdfGridCellStyle` class.\n * @private\n */\n function PdfGridCellStyle() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridCellBorders = PdfBorders.default;\n return _this;\n }\n Object.defineProperty(PdfGridCellStyle.prototype, \"stringFormat\", {\n //Properties\n /**\n * Gets the `string format` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"borders\", {\n /**\n * Gets or sets the `border` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.gridCellBorders;\n },\n set: function (value) {\n this.gridCellBorders = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n return this.gridCellPadding;\n },\n set: function (value) {\n if (this.gridCellPadding == null || typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n this.gridCellPadding = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridCellStyle;\n}(PdfGridStyleBase));\nexport { PdfGridCellStyle };\n/**\n * `PdfGridRowStyle` class provides customization of the appearance for the `PdfGridRow`.\n */\nvar PdfGridRowStyle = /** @class */ (function () {\n // public setBackgroundImage(value : PdfImage) : void {\n // this.gridRowBackgroundImage = value;\n // if (typeof this.parent !== 'undefined') {\n // for (let i : number = 0; i < this.parent.cells.count; i++) {\n // this.parent.cells.getCell(i).style.backgroundImage = value;\n // }\n // }\n // }\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowStyle` class.\n * @private\n */\n function PdfGridRowStyle() {\n //\n }\n Object.defineProperty(PdfGridRowStyle.prototype, \"backgroundBrush\", {\n // Properties\n /**\n * Gets or sets the `background brush`.\n * @private\n */\n get: function () {\n return this.gridRowBackgroundBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBackgroundBrush = function (value) {\n this.gridRowBackgroundBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.backgroundBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textBrush\", {\n /**\n * Gets or sets the `text brush`.\n * @private\n */\n get: function () {\n return this.gridRowTextBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextBrush = function (value) {\n this.gridRowTextBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textPen\", {\n /**\n * Gets or sets the `text pen`.\n * @private\n */\n get: function () {\n return this.gridRowTextPen;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextPen = function (value) {\n this.gridRowTextPen = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textPen = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"font\", {\n /**\n * Gets or sets the `font`.\n * @private\n */\n get: function () {\n return this.gridRowFont;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setFont = function (value) {\n this.gridRowFont = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.font = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"border\", {\n /**\n * Gets or sets the `border` of the current row.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBorder === 'undefined') {\n this.setBorder(new PdfBorders());\n }\n return this.gridRowBorder;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBorder = function (value) {\n this.gridRowBorder = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.borders = value;\n }\n }\n };\n /**\n * sets the `parent row` of the current object.\n * @private\n */\n PdfGridRowStyle.prototype.setParent = function (parent) {\n this.parent = parent;\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"backgroundImage\", {\n /**\n * Gets or sets the `backgroundImage` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.gridRowBackgroundImage;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridRowStyle;\n}());\nexport { PdfGridRowStyle };\n/**\n * public Enum for `PdfHorizontalOverflowType`.\n * @private\n */\nexport var PdfHorizontalOverflowType;\n(function (PdfHorizontalOverflowType) {\n /**\n * Specifies the type of `NextPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"NextPage\"] = 0] = \"NextPage\";\n /**\n * Specifies the type of `LastPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"LastPage\"] = 1] = \"LastPage\";\n})(PdfHorizontalOverflowType || (PdfHorizontalOverflowType = {}));\n","import { PdfGrid } from './pdf-grid';\nimport { PdfGridCellStyle } from './styles/style';\nimport { PdfStringLayouter } from './../../graphics/fonts/string-layouter';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\nimport { RectangleF, PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfDashStyle, PdfLineCap } from './../../graphics/enum';\nimport { PdfBorderOverlapStyle } from './../tables/light-tables/enum';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfImage } from './../../graphics/images/pdf-image';\nimport { PdfBitmap } from './../../graphics/images/pdf-bitmap';\nimport { PdfTextWebLink } from './../../annotations/pdf-text-web-link';\nimport { PdfLayoutType } from './../../graphics/figures/enum';\nimport { PdfGridLayouter, PdfGridLayoutFormat } from './../../structured-elements/grid/layout/grid-layouter';\nimport { PdfLayoutParams } from '../../../implementation/graphics/figures/base/element-layouter';\n/**\n * `PdfGridCell` class represents the schema of a cell in a 'PdfGrid'.\n */\nvar PdfGridCell = /** @class */ (function () {\n function PdfGridCell(row) {\n /**\n * `Width` of the cell.\n * @default 0\n * @private\n */\n this.cellWidth = 0;\n /**\n * `Height` of the cell.\n * @default 0\n * @private\n */\n this.cellHeight = 0;\n /**\n * `tempval`to stores current width .\n * @default 0\n * @private\n */\n this.tempval = 0;\n this.fontSpilt = false;\n /**\n * Specifies weather the `cell is drawn`.\n * @default true\n * @private\n */\n this.finsh = true;\n /**\n * The `remaining height` of row span.\n * @default 0\n * @private\n */\n this.rowSpanRemainingHeight = 0;\n this.hasRowSpan = false;\n this.hasColSpan = false;\n /**\n * the 'isFinish' is set to page finish\n */\n this.isFinish = true;\n /**\n * The `present' to store the current cell.\n * @default false\n * @private\n */\n this.present = false;\n if (typeof row === 'undefined') {\n this.gridRowSpan = 1;\n this.colSpan = 1;\n }\n else {\n this.constructor();\n this.gridRow = row;\n }\n }\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeContinue\", {\n //Properties\n get: function () {\n return this.internalIsCellMergeContinue;\n },\n set: function (value) {\n this.internalIsCellMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeContinue\", {\n get: function () {\n return this.internalIsRowMergeContinue;\n },\n set: function (value) {\n this.internalIsRowMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeStart\", {\n get: function () {\n return this.internalIsCellMergeStart;\n },\n set: function (value) {\n this.internalIsCellMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeStart\", {\n get: function () {\n return this.internalIsRowMergeStart;\n },\n set: function (value) {\n this.internalIsRowMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"remainingString\", {\n /**\n * Gets or sets the `remaining string` after the row split between pages.\n * @private\n */\n get: function () {\n return this.remaining;\n },\n set: function (value) {\n this.remaining = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"FinishedDrawingCell\", {\n /**\n * Gets or sets the `FinishedDrawingCell` .\n * @private\n */\n get: function () {\n return this.isFinish;\n },\n set: function (value) {\n this.isFinish = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `string format`.\n * @private\n */\n get: function () {\n if (this.format == null) {\n this.format = new PdfStringFormat();\n }\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"row\", {\n /**\n * Gets or sets the parent `row`.\n * @private\n */\n get: function () {\n return this.gridRow;\n },\n set: function (value) {\n this.gridRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the cell.\n * @private\n */\n get: function () {\n return this.objectValue;\n },\n set: function (value) {\n this.objectValue = value;\n if (this.objectValue instanceof PdfGrid) {\n this.row.grid.isSingleGrid = false;\n var grid = this.objectValue;\n grid.ParentCell = this;\n this.objectValue.isChildGrid = true;\n var rowCount = this.row.grid.rows.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.row.grid.rows.getRow(i);\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n cell.parent = this;\n }\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"rowSpan\", {\n /**\n * Gets or sets a value that indicates the total number of rows that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.gridRowSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw new Error('ArgumentException : Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.gridRowSpan = value;\n this.row.rowSpanExists = true;\n this.row.grid.hasRowSpanSpan = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"style\", {\n /**\n * Gets or sets the cell `style`.\n * @private\n */\n get: function () {\n if (this.cellStyle == null) {\n this.cellStyle = new PdfGridCellStyle();\n }\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"height\", {\n /**\n * Gets the `height` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellHeight === 0) {\n this.cellHeight = this.measureHeight();\n }\n return this.cellHeight;\n },\n set: function (value) {\n this.cellHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"columnSpan\", {\n /**\n * Gets or sets a value that indicates the total number of columns that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.colSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw Error('Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.colSpan = value;\n this.row.columnSpanExists = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"width\", {\n /**\n * Gets the `width` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellWidth === 0 || this.row.grid.isComplete) {\n this.cellWidth = this.measureWidth();\n }\n return Math.round(this.cellWidth);\n },\n set: function (value) {\n this.cellWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the width`.\n * @private\n */\n PdfGridCell.prototype.measureWidth = function () {\n // .. Calculate the cell text width.\n // .....Add border widths, cell spacings and paddings to the width.\n var width = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string') {\n /* tslint:disable */\n var slr = layouter.layout(this.objectValue, this.getTextFont(), this.stringFormat, new SizeF(Number.MAX_VALUE, Number.MAX_VALUE), false, new SizeF(0, 0));\n width += slr.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n else if (this.objectValue instanceof PdfGrid) {\n width = this.objectValue.size.width;\n //width += this.objectValue.style.cellSpacing;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n width += this.objectValue.width;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n var result = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(0, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n width += result.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n if (!(this.objectValue instanceof PdfGrid)) {\n if (this.style.cellPadding != null) {\n width += (this.style.cellPadding.left + this.style.cellPadding.right);\n }\n else {\n width += (this.row.grid.style.cellPadding.left + this.row.grid.style.cellPadding.right);\n }\n }\n else {\n if (this.style.cellPadding != null || typeof this.style.cellPadding !== 'undefined') {\n if (typeof this.style.cellPadding.left !== 'undefined' && this.style.cellPadding.hasLeftPad) {\n width += this.style.cellPadding.left;\n }\n if (typeof this.style.cellPadding.right !== 'undefined' && this.style.cellPadding.hasRightPad) {\n width += this.style.cellPadding.right;\n }\n }\n else {\n if (typeof this.row.grid.style.cellPadding.left !== 'undefined' && this.row.grid.style.cellPadding.hasLeftPad) {\n width += this.row.grid.style.cellPadding.left;\n }\n if (typeof this.row.grid.style.cellPadding.right !== 'undefined' && this.row.grid.style.cellPadding.hasRightPad) {\n width += this.row.grid.style.cellPadding.right;\n }\n }\n }\n width += this.row.grid.style.cellSpacing;\n return width;\n };\n /**\n * Draw the `cell background`.\n * @private\n */\n PdfGridCell.prototype.drawCellBackground = function (graphics, bounds) {\n var backgroundBrush = this.getBackgroundBrush();\n //graphics.isTemplateGraphics = true;\n if (backgroundBrush != null) {\n graphics.save();\n graphics.drawRectangle(backgroundBrush, bounds.x, bounds.y, bounds.width, bounds.height);\n graphics.restore();\n }\n if (this.style.backgroundImage != null) {\n var image = this.getBackgroundImage();\n graphics.drawImage(this.style.backgroundImage, bounds.x, bounds.y, bounds.width, bounds.height);\n }\n };\n /**\n * `Adjusts the text layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustContentLayoutArea = function (bounds) {\n //Add Padding value to its Cell Bounds\n var returnBounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n if (!(this.objectValue instanceof PdfGrid)) {\n if (typeof this.style.cellPadding === 'undefined' || this.style.cellPadding == null) {\n returnBounds.x += this.gridRow.grid.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.y += this.gridRow.grid.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n returnBounds.height -= (this.gridRow.grid.style.cellPadding.bottom + this.gridRow.grid.style.cellPadding.top);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n }\n else {\n returnBounds.x += this.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.y += this.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n returnBounds.height -= (this.style.cellPadding.bottom + this.style.cellPadding.top);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n if (this.rowSpan === 1) {\n returnBounds.width -= (this.style.borders.left.width);\n }\n }\n }\n else {\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n if (typeof this.gridRow.grid.style.cellPadding.left !== 'undefined' && this.gridRow.grid.style.cellPadding.hasLeftPad) {\n returnBounds.x += this.gridRow.grid.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.width -= this.gridRow.grid.style.cellPadding.left;\n }\n if (typeof this.gridRow.grid.style.cellPadding.top !== 'undefined' && this.gridRow.grid.style.cellPadding.hasTopPad) {\n returnBounds.y += this.gridRow.grid.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.height -= this.gridRow.grid.style.cellPadding.top;\n }\n if (typeof this.gridRow.grid.style.cellPadding.right !== 'undefined' && this.gridRow.grid.style.cellPadding.hasRightPad) {\n returnBounds.width -= this.gridRow.grid.style.cellPadding.right;\n }\n if (typeof this.gridRow.grid.style.cellPadding.bottom !== 'undefined' && this.gridRow.grid.style.cellPadding.hasBottomPad) {\n returnBounds.height -= this.gridRow.grid.style.cellPadding.bottom;\n }\n }\n else {\n if (typeof this.style.cellPadding.left !== 'undefined' && this.style.cellPadding.hasLeftPad) {\n returnBounds.x += this.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.width -= this.style.cellPadding.left;\n }\n if (typeof this.style.cellPadding.top !== 'undefined' && this.style.cellPadding.hasTopPad) {\n returnBounds.y += this.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.height -= this.style.cellPadding.top;\n }\n if (typeof this.style.cellPadding.right !== 'undefined' && this.style.cellPadding.hasRightPad) {\n returnBounds.width -= this.style.cellPadding.right;\n }\n if (typeof this.style.cellPadding.bottom !== 'undefined' && this.style.cellPadding.hasBottomPad) {\n returnBounds.height -= this.style.cellPadding.bottom;\n }\n }\n returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n }\n return returnBounds;\n };\n /**\n * `Draws` the specified graphics.\n * @private\n */\n PdfGridCell.prototype.draw = function (graphics, bounds, cancelSubsequentSpans) {\n var isrowbreak = false;\n /*if (!this.row.grid.isSingleGrid)\n {\n //Check whether the Grid Span to Nextpage\n if ((this.remainingString != null) || (PdfGridLayouter.repeatRowIndex != -1))\n {\n this.DrawParentCells(graphics, bounds, true);\n }\n else if (this.row.grid.rows.count > 1)\n {\n for (let i : number = 0; i < this.row.grid.rows.count; i++)\n {\n if (this.row == this.row.grid.rows.getRow(i))\n {\n if (this.row.grid.rows.getRow(i).rowBreakHeight > 0)\n isrowbreak = true;\n if ((i > 0) && (isrowbreak))\n this.DrawParentCells(graphics, bounds, false);\n }\n }\n }\n } */\n var result = null;\n /*if (cancelSubsequentSpans)\n {\n //..Cancel all subsequent cell spans, if no space exists.\n let currentCellIndex : number = this.row.cells.indexOf(this);\n for (let i : number = currentCellIndex + 1; i <= currentCellIndex + this.colSpan; i++)\n {\n this.row.cells.getCell(i).isCellMergeContinue = false;\n this.row.cells.getCell(i).isRowMergeContinue = false;\n }\n this.colSpan = 1;\n }*/\n //..Skip cells which were already covered by spanmap.\n if (this.internalIsCellMergeContinue || this.internalIsRowMergeContinue) {\n if (this.internalIsCellMergeContinue && this.row.grid.style.allowHorizontalOverflow) {\n if ((this.row.rowOverflowIndex > 0 && (this.row.cells.indexOf(this) != this.row.rowOverflowIndex + 1)) || (this.row.rowOverflowIndex == 0 && this.internalIsCellMergeContinue)) {\n return result;\n }\n }\n else {\n return result;\n }\n }\n //Adjust bounds with Row and Column Spacing\n bounds = this.adjustOuterLayoutArea(bounds, graphics);\n this.drawCellBackground(graphics, bounds);\n var textPen = this.getTextPen();\n var textBrush = this.getTextBrush();\n if (typeof textPen === 'undefined' && typeof textBrush === 'undefined') {\n textBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var font = this.getTextFont();\n var strFormat = this.getStringFormat();\n var innerLayoutArea = bounds;\n if (innerLayoutArea.height >= graphics.clientSize.height) {\n // If to break row to next page.\n if (this.row.grid.allowRowBreakAcrossPages) {\n innerLayoutArea.height -= innerLayoutArea.y;\n //bounds.height -= bounds.y;\n // if(this.row.grid.isChildGrid)\n // {\n // innerLayoutArea.height -= this.row.grid.ParentCell.row.grid.style.cellPadding.bottom;\n // }\n }\n // if user choose to cut the row whose height is more than page height.\n // else\n // {\n // innerLayoutArea.height = graphics.clientSize.height;\n // bounds.height = graphics.clientSize.height;\n // }\n }\n innerLayoutArea = this.adjustContentLayoutArea(innerLayoutArea);\n if (typeof this.objectValue === 'string' || typeof this.remaining === 'string') {\n var temp = void 0;\n var layoutRectangle = void 0;\n if (innerLayoutArea.height < font.height)\n layoutRectangle = new RectangleF(innerLayoutArea.x, innerLayoutArea.y, innerLayoutArea.width, font.height);\n else\n layoutRectangle = innerLayoutArea;\n if (innerLayoutArea.height < font.height && this.row.grid.isChildGrid && this.row.grid.ParentCell != null) {\n var height = layoutRectangle.height - this.row.grid.ParentCell.row.grid.style.cellPadding.bottom - this.row.grid.style.cellPadding.bottom;\n if (this.row.grid.splitChildRowIndex != -1) {\n this.fontSpilt = true;\n this.row.rowFontSplit = true;\n }\n if (height > 0 && height < font.height)\n layoutRectangle.height = height;\n // else if (height + this.row.grid.style.cellPadding.bottom > 0 && height + this.row.grid.style.cellPadding.bottom < font.height)\n // layoutRectangle.height = height + this.row.grid.style.cellPadding.bottom;\n // else if (bounds.height < font.height)\n // layoutRectangle.height = bounds.height;\n // else if (bounds.height - this.row.grid.ParentCell.row.grid.style.cellPadding.bottom < font.height)\n // layoutRectangle.height = bounds.height - this.row.grid.ParentCell.row.grid.style.cellPadding.bottom; \n }\n if (this.gridRow.grid.style.cellSpacing != 0) {\n layoutRectangle.width -= this.gridRow.grid.style.cellSpacing;\n bounds.width -= this.gridRow.grid.style.cellSpacing;\n }\n if (this.isFinish) {\n // if (this.row.grid.splitChildRowIndex != -1 && !this.row.grid.isChildGrid && typeof this.remaining === 'undefined'){\n // this.remaining = '';\n // graphics.drawString(this.remaining, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n // } else {\n temp = this.remaining === '' ? this.remaining : this.objectValue;\n graphics.drawString(temp, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n if (this.row.grid.splitChildRowIndex != -1 && !this.row.grid.isChildGrid && typeof this.remaining === 'undefined') {\n this.remaining = '';\n //graphics.drawString(this.remaining, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n }\n }\n else {\n if (typeof this.remaining == 'undefined' || this.remaining === null) {\n this.remaining = '';\n }\n if (this.row.repeatFlag) {\n graphics.drawString(this.remaining, font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n }\n // else {\n // if(this.row.grid.ParentCell.row.repeatFlag) {\n // graphics.drawString((this.remaining as string), font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat); \n // } else {\n // layoutRectangle.height = this.row.height;\n // graphics.drawString((this.objectValue as string), font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n // bounds.height = this.row.height;\n // }\n // }\n this.isFinish = true;\n //graphics.drawString((this.remaining as string), font, textPen, textBrush, layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height, strFormat);\n }\n result = graphics.stringLayoutResult;\n // if(this.row.grid.isChildGrid && this.row.rowBreakHeight > 0 && result !=null) {\n // bounds.height -= this.row.grid.ParentCell.row.grid.style.cellPadding.bottom;\n // }\n }\n else if (this.objectValue instanceof PdfGrid) {\n var childGrid = this.objectValue;\n childGrid.isChildGrid = true;\n childGrid.ParentCell = this;\n var layoutRect = void 0;\n layoutRect = innerLayoutArea;\n if (this.gridRow.grid.style.cellSpacing != 0) {\n bounds.width -= this.gridRow.grid.style.cellSpacing;\n }\n // layoutRect = bounds;\n // if (this.style.cellPadding != null){\n // layoutRect = bounds; \n // } else if((this.row.grid.style.cellPadding != null) && (childGrid.style.cellPadding.bottom === 0.5) && (childGrid.style.cellPadding.top === 0.5)\n // && (childGrid.style.cellPadding.left === 5.76) && (childGrid.style.cellPadding.right === 5.76)\n // && (this.gridRow.grid.style.cellSpacing === 0) && (childGrid.style.cellSpacing === 0)) {\n // layoutRect = innerLayoutArea;\n // }\n // if(this.objectValue.style.cellPadding != null && typeof this.objectValue.style.cellPadding !== 'undefined'){\n // layoutRect = bounds;\n // } \n var layouter = new PdfGridLayouter(childGrid);\n var format = new PdfGridLayoutFormat();\n if (this.row.grid.LayoutFormat != null)\n format = this.row.grid.LayoutFormat;\n else\n format.layout = PdfLayoutType.Paginate;\n var param = new PdfLayoutParams();\n if (graphics.layer != null) {\n // Define layout parameters.\n param.page = graphics.page;\n param.bounds = layoutRect;\n param.format = format;\n //Set the span \n childGrid.setSpan();\n childGrid.checkSpan();\n // Draw the child grid.\n var childGridResult = layouter.Layouter(param);\n //let childGridResult : PdfLayoutResult = layouter.innerLayout(param);\n this.value = childGrid;\n if (this.row.grid.splitChildRowIndex !== -1) {\n this.height = this.row.rowBreakHeightValue;\n }\n if (param.page != childGridResult.page) //&& (isWidthGreaterthanParent != true))\n {\n childGridResult.bounds.height = this.row.rowBreakHeightValue;\n if (this.row.rowBreakHeight == 0)\n this.row.NestedGridLayoutResult = childGridResult;\n else\n this.row.rowBreakHeight = this.row.rowBreakHeightValue;\n //bounds.height = this.row.rowBreakHeight;\n //After drawing paginated nested grid, the bounds of the parent grid in start page should be corrected for borders.\n //bounds.height = graphics.clientSize.height - bounds.y;\n }\n }\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n var imageBounds = void 0;\n if (this.objectValue.width <= innerLayoutArea.width) {\n imageBounds = new RectangleF(innerLayoutArea.x, innerLayoutArea.y, this.objectValue.width, innerLayoutArea.height);\n }\n else {\n imageBounds = innerLayoutArea;\n }\n graphics.drawImage(this.objectValue, imageBounds.x, imageBounds.y, imageBounds.width, imageBounds.height);\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n this.objectValue.draw(graphics.currentPage, innerLayoutArea);\n }\n else if (typeof this.objectValue === 'undefined') {\n this.objectValue = \"\";\n graphics.drawString(this.objectValue, font, textPen, textBrush, innerLayoutArea.x, innerLayoutArea.y, innerLayoutArea.width, innerLayoutArea.height, strFormat);\n if (this.style.cellPadding != null && this.style.cellPadding.bottom == 0 && this.style.cellPadding.left == 0 && this.style.cellPadding.right == 0 && this.style.cellPadding.top == 0) {\n bounds.width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n if (this.gridRow.grid.style.cellSpacing != 0) {\n bounds.width -= this.gridRow.grid.style.cellSpacing;\n }\n }\n if (this.style.borders != null) {\n if (!this.fontSpilt)\n this.drawCellBorders(graphics, bounds);\n else {\n if (this.row.grid.ParentCell.row.grid.splitChildRowIndex != -1) {\n this.row.rowFontSplit = false;\n this.drawCellBorders(graphics, bounds);\n }\n }\n }\n return result;\n };\n /* tslint:enable */\n /**\n * Draws the `cell border` constructed by drawing lines.\n * @private\n */\n PdfGridCell.prototype.drawCellBorders = function (graphics, bounds) {\n if (this.row.grid.style.borderOverlapStyle === PdfBorderOverlapStyle.Inside) {\n bounds.x += this.style.borders.left.width;\n bounds.y += this.style.borders.top.width;\n bounds.width -= this.style.borders.right.width;\n bounds.height -= this.style.borders.bottom.width;\n }\n var p1 = new PointF(bounds.x, bounds.y + bounds.height);\n var p2 = new PointF(bounds.x, bounds.y);\n var pen = this.cellStyle.borders.left;\n if (this.cellStyle.borders.left.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n // SetTransparency(ref graphics, pen);\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n pen = this.cellStyle.borders.right;\n if ((bounds.x + bounds.width) > (graphics.clientSize.width - (pen.width / 2))) {\n p1 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y);\n p2 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y + bounds.height);\n }\n if (this.cellStyle.borders.right.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y);\n pen = this.cellStyle.borders.top;\n if (this.cellStyle.borders.top.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n p2 = new PointF(bounds.x, bounds.y + bounds.height);\n pen = this.cellStyle.borders.bottom;\n // if ((bounds.y + bounds.height) > (graphics.clientSize.height - (pen.width / 2))) {\n // p1 = new PointF((bounds.x + bounds.width), (graphics.clientSize.height - (pen.width / 2)));\n // p2 = new PointF(bounds.x, (graphics.clientSize.height - (pen.width / 2)));\n // }\n if (this.cellStyle.borders.bottom.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n };\n // private setTransparency(graphics : PdfGraphics, pen : PdfPen) : void {\n // let alpha : number = (pen.color.a / 255)as number;\n // graphics.save();\n // graphics.setTransparency(alpha);\n // }\n /**\n * `Adjusts the outer layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustOuterLayoutArea = function (bounds, g) {\n var isHeader = false;\n var cellSpacing = this.row.grid.style.cellSpacing;\n if (cellSpacing > 0) {\n bounds = new RectangleF(bounds.x + cellSpacing, bounds.y + cellSpacing, bounds.width - cellSpacing, bounds.height - cellSpacing);\n }\n var currentColIndex = this.row.cells.indexOf(this);\n if (this.columnSpan > 1 || (this.row.rowOverflowIndex > 0 && (currentColIndex == this.row.rowOverflowIndex + 1) && this.isCellMergeContinue)) {\n var span = this.columnSpan;\n if (span == 1 && this.isCellMergeContinue) {\n for (var j = currentColIndex + 1; j < this.row.grid.columns.count; j++) {\n if (this.row.cells.getCell(j).isCellMergeContinue)\n span++;\n else\n break;\n }\n }\n var totalWidth = 0;\n for (var i = currentColIndex; i < currentColIndex + span; i++) {\n if (this.row.grid.style.allowHorizontalOverflow) {\n var width = void 0;\n var compWidth = this.row.grid.size.width < g.clientSize.width ? this.row.grid.size.width : g.clientSize.width;\n if (this.row.grid.size.width > g.clientSize.width) {\n width = bounds.x + totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n else {\n width = totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n if (width > compWidth) {\n break;\n }\n }\n totalWidth += this.row.grid.columns.getColumn(i).width;\n }\n totalWidth -= this.row.grid.style.cellSpacing;\n bounds.width = totalWidth;\n }\n if (this.rowSpan > 1 || this.row.rowSpanExists) {\n var span = this.rowSpan;\n var currentRowIndex = this.row.grid.rows.rowCollection.indexOf(this.row);\n if (currentRowIndex == -1) {\n currentRowIndex = this.row.grid.headers.indexOf(this.row);\n if (currentRowIndex != -1) {\n isHeader = true;\n }\n }\n // if (span == 1 && this.isCellMergeContinue) {\n // for (let j : number = currentRowIndex + 1; j < this.row.grid.rows.count; j++)\n // {\n // let flag : boolean = (isHeader ? this.row.grid.headers.getHeader(j).cells.getCell(currentColIndex).isCellMergeContinue : this.row.grid.rows.getRow(j).cells.getCell(currentColIndex).isCellMergeContinue);\n // if (flag)\n // span++;\n // else\n // break;\n // }\n // }\n var totalHeight = 0;\n var max = 0;\n for (var i = currentRowIndex; i < currentRowIndex + span; i++) {\n totalHeight += (isHeader ? this.row.grid.headers.getHeader(i).height : this.row.grid.rows.getRow(i).height);\n var row = this.row.grid.rows.getRow(i);\n var rowIndex = this.row.grid.rows.rowCollection.indexOf(row);\n /*if (this.rowSpan > 1)\n {\n for (let k : number = 0; k < this.row.cells.count; k++) {\n let cell : PdfGridCell = this.row.cells.getCell(k);\n if(cell.rowSpan>1)\n {\n let tempHeight : number =0;\n \n for (let j :number = i; j < i +cell.rowSpan; j++)\n {\n if (!this.row.grid.rows.getRow(j).isRowSpanRowHeightSet)\n this.row.grid.rows.getRow(j).isRowHeightSet = false;\n tempHeight += this.row.grid.rows.getRow(j).height;\n if (!this.row.grid.rows.getRow(j).isRowSpanRowHeightSet)\n this.row.grid.rows.getRow(j).isRowHeightSet = true;\n }\n //To check the Row spanned cell height is greater than the total spanned row height.\n if(cell.height>tempHeight)\n {\n if (max < (cell.height - tempHeight))\n {\n max = cell.height - tempHeight;\n if (this.rowSpanRemainingHeight != 0 && max > this.rowSpanRemainingHeight)\n {\n max += this.rowSpanRemainingHeight;\n }\n let index :number = row.cells.indexOf(cell);\n //set the m_rowspanRemainingHeight to last rowspanned row.\n this.row.grid.rows.getRow((rowIndex +cell.rowSpan) - 1).cells.getCell(index).rowSpanRemainingHeight = max;\n this.rowSpanRemainingHeight = this.row.grid.rows.getRow((rowIndex + cell.rowSpan) - 1).cells.getCell(index).rowSpanRemainingHeight;\n }\n }\n }\n }\n }\n if (!this.row.grid.rows.getRow(i).isRowSpanRowHeightSet)\n this.row.grid.rows.getRow(i).isRowHeightSet = true;*/\n }\n var cellIndex = this.row.cells.indexOf(this);\n totalHeight -= this.row.grid.style.cellSpacing;\n // if (this.row.cells.getCell(cellIndex).height > totalHeight && (!this.row.grid.rows.getRow((currentRowIndex + span) - 1).isRowHeightSet)) {\n // this.row.grid.rows.getRow((currentRowIndex + span) - 1).cells.getCell(cellIndex).rowSpanRemainingHeight = this.row.cells.getCell(cellIndex).height - totalHeight;\n // totalHeight = this.row.cells.getCell(cellIndex).height;\n // bounds.height = totalHeight;\n // } else {\n bounds.height = totalHeight;\n // }\n if (!this.row.rowMergeComplete) {\n bounds.height = totalHeight;\n }\n }\n return bounds;\n };\n /* tslint:enable */\n /**\n * Gets the `text font`.\n * @private\n */\n PdfGridCell.prototype.getTextFont = function () {\n if (typeof this.style.font !== 'undefined' && this.style.font != null) {\n return this.style.font;\n }\n else if (typeof this.row.style.font !== 'undefined' && this.row.style.font != null) {\n return this.row.style.font;\n }\n else if (typeof this.row.grid.style.font !== 'undefined' && this.row.grid.style.font != null) {\n return this.row.grid.style.font;\n }\n else {\n return PdfDocument.defaultFont;\n }\n };\n /**\n * Gets the `text brush`.\n * @private\n */\n PdfGridCell.prototype.getTextBrush = function () {\n if (typeof this.style.textBrush !== 'undefined' && this.style.textBrush != null) {\n return this.style.textBrush;\n }\n else if (typeof this.row.style.textBrush !== 'undefined' && this.row.style.textBrush != null) {\n return this.row.style.textBrush;\n }\n else {\n return this.row.grid.style.textBrush;\n }\n };\n /**\n * Gets the `text pen`.\n * @private\n */\n PdfGridCell.prototype.getTextPen = function () {\n if (typeof this.style.textPen !== 'undefined' && this.style.textPen != null) {\n return this.style.textPen;\n }\n else if (typeof this.row.style.textPen !== 'undefined' && this.row.style.textPen != null) {\n return this.row.style.textPen;\n }\n else {\n return this.row.grid.style.textPen;\n }\n };\n /**\n * Gets the `background brush`.\n * @private\n */\n PdfGridCell.prototype.getBackgroundBrush = function () {\n if (typeof this.style.backgroundBrush !== 'undefined' && this.style.backgroundBrush != null) {\n return this.style.backgroundBrush;\n }\n else if (typeof this.row.style.backgroundBrush !== 'undefined' && this.row.style.backgroundBrush != null) {\n return this.row.style.backgroundBrush;\n }\n else {\n return this.row.grid.style.backgroundBrush;\n }\n };\n /**\n * Gets the `background image`.\n * @private\n */\n PdfGridCell.prototype.getBackgroundImage = function () {\n if (typeof this.style.backgroundImage !== 'undefined' && this.style.backgroundImage != null) {\n return this.style.backgroundImage;\n }\n else if (typeof this.row.style.backgroundImage !== 'undefined' && this.row.style.backgroundImage != null) {\n return this.row.style.backgroundImage;\n }\n else {\n return this.row.grid.style.backgroundImage;\n }\n };\n /**\n * Gets the current `StringFormat`.\n * @private\n */\n PdfGridCell.prototype.getStringFormat = function () {\n if (typeof this.style.stringFormat !== 'undefined' && this.style.stringFormat != null) {\n return this.style.stringFormat;\n }\n else {\n return this.stringFormat;\n }\n };\n /**\n * Calculates the `height`.\n * @private\n */\n PdfGridCell.prototype.measureHeight = function () {\n // .. Calculate the cell text height.\n // .....Add border widths, cell spacings and paddings to the height.\n var width = this.calculateWidth();\n // //check whether the Current PdfGridCell has padding\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n //width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n else {\n width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n var height = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string' || typeof this.remaining === 'string') {\n var currentValue = this.objectValue;\n /* tslint:disable */\n if (!this.isFinish)\n currentValue = !(this.remaining === null || this.remaining === '' ||\n typeof this.remaining === 'undefined') ? this.remaining : this.objectValue;\n var slr = null;\n var cellIndex = this.row.cells.indexOf(this);\n if (this.gridRow.grid.style.cellSpacing != 0) {\n width -= this.gridRow.grid.style.cellSpacing * 2;\n }\n if (!this.row.cells.getCell(cellIndex).hasColSpan && !this.row.cells.getCell(cellIndex).hasRowSpan) {\n if (this.gridRow.grid.isChildGrid) {\n if (width < 0) {\n this.tempval = width;\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n this.tempval += (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n }\n else {\n this.tempval += (this.style.cellPadding.right + this.style.cellPadding.left);\n this.tempval += (this.style.borders.left.width + this.style.borders.right.width);\n }\n }\n else {\n this.tempval = width;\n }\n slr = layouter.layout(currentValue, this.getTextFont(), this.stringFormat, new SizeF(this.tempval, 0), false, new SizeF(0, 0));\n height += slr.actualSize.height;\n }\n else {\n slr = layouter.layout(currentValue, this.getTextFont(), this.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n height += slr.actualSize.height;\n }\n }\n /* tslint:enable */\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n else if (this.objectValue instanceof PdfGrid) {\n var cellIndex = this.row.cells.indexOf(this);\n var internalWidth = 0;\n if ((this.style.cellPadding != null || typeof this.style.cellPadding !== 'undefined')) {\n internalWidth = this.calculateWidth();\n if (typeof this.style.cellPadding.left !== 'undefined' && this.style.cellPadding.hasLeftPad) {\n internalWidth -= this.style.cellPadding.left;\n }\n if (typeof this.style.cellPadding.right !== 'undefined' && this.style.cellPadding.hasRightPad) {\n internalWidth -= this.style.cellPadding.right;\n }\n }\n else if ((this.row.grid.style.cellPadding != null || typeof this.row.grid.style.cellPadding !== 'undefined')) {\n internalWidth = this.calculateWidth();\n if (typeof this.row.grid.style.cellPadding.left !== 'undefined' && this.row.grid.style.cellPadding.hasLeftPad) {\n internalWidth -= this.row.grid.style.cellPadding.left;\n }\n if (typeof this.row.grid.style.cellPadding.right !== 'undefined' && this.row.grid.style.cellPadding.hasRightPad) {\n internalWidth -= this.row.grid.style.cellPadding.right;\n }\n }\n else {\n internalWidth = this.calculateWidth();\n }\n this.objectValue.tempWidth = internalWidth;\n if (!this.row.cells.getCell(cellIndex).hasColSpan && !this.row.cells.getCell(cellIndex).hasRowSpan) {\n height = this.objectValue.size.height;\n }\n else {\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n if (this.gridRow.grid.style.cellSpacing !== 0) {\n width -= this.gridRow.grid.style.cellSpacing * 2;\n //height += (this.row.grid.style.cellPadding.top + this.row.grid.style.cellPadding.bottom);\n }\n if (this.style.cellPadding != null || typeof this.style.cellPadding !== 'undefined') {\n if (typeof this.row.grid.style.cellPadding.top !== 'undefined' && this.row.grid.style.cellPadding.hasTopPad) {\n height += this.row.grid.style.cellPadding.top;\n }\n if (this.row.grid.style.cellPadding.hasBottomPad && typeof this.row.grid.style.cellPadding.bottom !== 'undefined') {\n height += this.row.grid.style.cellPadding.bottom;\n }\n }\n height += this.objectValue.style.cellSpacing;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n height += this.objectValue.height;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n /* tslint:disable */\n var slr = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n height += slr.actualSize.height;\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n else if (typeof this.objectValue === 'undefined') {\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n }\n else {\n width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n }\n //Add padding top and bottom value to height\n if (!(this.objectValue instanceof PdfGrid)) {\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n height += (this.row.grid.style.cellPadding.top + this.row.grid.style.cellPadding.bottom);\n }\n else {\n height += (this.style.cellPadding.top + this.style.cellPadding.bottom);\n }\n }\n else {\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n if (typeof this.row.grid.style.cellPadding.top !== 'undefined' && this.row.grid.style.cellPadding.hasTopPad) {\n height += this.row.grid.style.cellPadding.top;\n }\n if (typeof this.row.grid.style.cellPadding.bottom !== 'undefined' && this.row.grid.style.cellPadding.hasBottomPad) {\n height += this.row.grid.style.cellPadding.bottom;\n }\n }\n else {\n if (typeof this.style.cellPadding.top !== 'undefined' && this.style.cellPadding.hasTopPad) {\n height += this.style.cellPadding.top;\n }\n if (typeof this.style.cellPadding.bottom !== 'undefined' && this.style.cellPadding.hasBottomPad) {\n height += this.style.cellPadding.bottom;\n }\n }\n }\n height += this.row.grid.style.cellSpacing;\n return height;\n };\n /**\n * return the calculated `width` of the cell.\n * @private\n */\n PdfGridCell.prototype.calculateWidth = function () {\n var cellIndex = this.row.cells.indexOf(this);\n var rowindex = this.row.grid.rows.rowCollection.indexOf(this.row);\n var columnSpan = this.columnSpan;\n var width = 0;\n if (columnSpan === 1) {\n for (var i = 0; i < columnSpan; i++) {\n width += this.row.grid.columns.getColumn(cellIndex + i).width;\n }\n }\n else if (columnSpan > 1) {\n for (var i = 0; i < columnSpan; i++) {\n width += this.row.grid.columns.getColumn(cellIndex + i).width;\n if ((i + 1) < columnSpan) {\n this.row.cells.getCell(cellIndex + i + 1).hasColSpan = true;\n }\n }\n }\n if (this.parent != null && this.parent.row.width > 0) {\n if ((this.row.grid.isChildGrid) && this.parent != null && (this.row.width > this.parent.row.width)) {\n width = 0;\n for (var j = 0; j < this.parent.columnSpan; j++) {\n width += this.parent.row.grid.columns.getColumn(j).width;\n }\n width = width / this.row.cells.count;\n }\n }\n return width;\n };\n return PdfGridCell;\n}());\nexport { PdfGridCell };\n/**\n * `PdfGridCellCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridCell' objects.\n * @private\n */\nvar PdfGridCellCollection = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridCellCollection` class with the row.\n * @private\n */\n function PdfGridCellCollection(row) {\n /**\n * @hidden\n * @private\n */\n this.cells = [];\n this.gridRow = row;\n }\n //Properties\n /**\n * Gets the current `cell`.\n * @private\n */\n PdfGridCellCollection.prototype.getCell = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException');\n }\n return this.cells[index];\n };\n Object.defineProperty(PdfGridCellCollection.prototype, \"count\", {\n /**\n * Gets the cells `count`.[Read-Only].\n * @private\n */\n get: function () {\n return this.cells.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridCellCollection.prototype.add = function (cell) {\n if (typeof cell === 'undefined') {\n var tempcell = new PdfGridCell();\n this.add(tempcell);\n return cell;\n }\n else {\n cell.row = this.gridRow;\n this.cells.push(cell);\n }\n };\n /**\n * Returns the `index of` a particular cell in the collection.\n * @private\n */\n PdfGridCellCollection.prototype.indexOf = function (cell) {\n return this.cells.indexOf(cell);\n };\n return PdfGridCellCollection;\n}());\nexport { PdfGridCellCollection };\n","/**\n * Defines types of Render\n * @hidden\n */\nexport var RenderType;\n(function (RenderType) {\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 Content */\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 ImageToolbar */\n RenderType[RenderType[\"InlineToolbar\"] = 6] = \"InlineToolbar\";\n RenderType[RenderType[\"TableToolbar\"] = 7] = \"TableToolbar\";\n})(RenderType || (RenderType = {}));\nexport var ToolbarType;\n(function (ToolbarType) {\n /** Defines ToolbarType as Standard */\n ToolbarType[\"Expand\"] = \"Expand\";\n /** Defines ToolbarType as MultiRow */\n ToolbarType[\"MultiRow\"] = \"MultiRow\";\n})(ToolbarType || (ToolbarType = {}));\n","import { PdfGridCell } from './pdf-grid-cell';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\n/**\n * `PdfGridColumn` class represents the schema of a column in a 'PdfGrid'.\n */\nvar PdfGridColumn = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumn` class with the parent grid.\n * @private\n */\n function PdfGridColumn(grid) {\n /**\n * The `width` of the column.\n * @default 0\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n }\n Object.defineProperty(PdfGridColumn.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the 'PdfGridColumn'.\n * @private\n */\n get: function () {\n return this.columnWidth;\n },\n set: function (value) {\n this.isCustomWidth = true;\n this.columnWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumn.prototype, \"format\", {\n /**\n * Gets or sets the information about the text `formatting`.\n * @private\n */\n get: function () {\n if (this.stringFormat == null) {\n this.stringFormat = new PdfStringFormat(); //GetDefaultFormat();\n }\n return this.stringFormat;\n },\n set: function (value) {\n this.stringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridColumn;\n}());\nexport { PdfGridColumn };\n/**\n * `PdfGridColumnCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridColumn' objects.\n * @private\n */\nvar PdfGridColumnCollection = /** @class */ (function () {\n //properties\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumnCollection` class with the parent grid.\n * @private\n */\n function PdfGridColumnCollection(grid) {\n /**\n * @hidden\n * @private\n */\n this.internalColumns = [];\n /**\n * @hidden\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n this.internalColumns = [];\n }\n //Iplementation\n /**\n * `Add` a new column to the 'PdfGrid'.\n * @private\n */\n PdfGridColumnCollection.prototype.add = function (count) {\n // public add(column : PdfGridColumn) : void\n // public add(arg : number|PdfGridColumn) : void {\n // if (typeof arg === 'number') {\n for (var i = 0; i < count; i++) {\n this.internalColumns.push(new PdfGridColumn(this.grid));\n for (var index = 0; index < this.grid.rows.count; index++) {\n var row = this.grid.rows.getRow(index);\n var cell = new PdfGridCell();\n cell.value = '';\n row.cells.add(cell);\n }\n }\n // } else {\n // let column : PdfGridColumn = new PdfGridColumn(this.grid);\n // this.columns.push(column);\n // return column;\n // }\n };\n Object.defineProperty(PdfGridColumnCollection.prototype, \"count\", {\n /**\n * Gets the `number of columns` in the 'PdfGrid'.[Read-Only].\n * @private\n */\n get: function () {\n return this.internalColumns.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"width\", {\n /**\n * Gets the `widths`.\n * @private\n */\n get: function () {\n if (this.columnWidth === 0) {\n this.columnWidth = this.measureColumnsWidth();\n }\n if (this.grid.initialWidth !== 0 && this.columnWidth !== this.grid.initialWidth && !this.grid.style.allowHorizontalOverflow) {\n this.columnWidth = this.grid.initialWidth;\n this.grid.isPageWidth = true;\n }\n return this.columnWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"columns\", {\n /**\n * Gets the `array of PdfGridColumn`.[Read-Only]\n * @private\n */\n get: function () {\n return this.internalColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `PdfGridColumn` from the specified index.[Read-Only]\n * @private\n */\n PdfGridColumnCollection.prototype.getColumn = function (index) {\n if (index >= 0 && index <= this.columns.length) {\n return this.columns[index];\n }\n else {\n throw Error('can not get the column from the index: ' + index);\n }\n };\n //Implementation\n /**\n * `Calculates the column widths`.\n * @private\n */\n PdfGridColumnCollection.prototype.measureColumnsWidth = function () {\n var totalWidth = 0;\n this.grid.measureColumnsWidth();\n for (var i = 0, count = this.internalColumns.length; i < count; i++) {\n totalWidth += this.internalColumns[i].width;\n }\n return totalWidth;\n };\n /**\n * Gets the `widths of the columns`.\n * @private\n */\n PdfGridColumnCollection.prototype.getDefaultWidths = function (totalWidth) {\n var widths = [];\n var summ = 0.0;\n var subFactor = this.count;\n for (var i = 0; i < this.count; i++) {\n if (this.grid.isPageWidth && totalWidth >= 0 && !this.internalColumns[i].isCustomWidth) {\n this.internalColumns[i].width = 0;\n }\n else {\n widths[i] = this.internalColumns[i].width;\n if (this.internalColumns[i].width > 0 && this.internalColumns[i].isCustomWidth) {\n totalWidth -= this.internalColumns[i].width;\n subFactor--;\n }\n else {\n widths[i] = 0;\n }\n }\n }\n for (var i = 0; i < this.count; i++) {\n var width = totalWidth / subFactor;\n if (widths[i] <= 0) {\n widths[i] = width;\n }\n }\n return widths;\n };\n return PdfGridColumnCollection;\n}());\nexport { PdfGridColumnCollection };\n","import { PdfGridCell, PdfGridCellCollection } from './pdf-grid-cell';\nimport { PdfGridRowStyle } from './styles/style';\n/**\n * `PdfGridRow` class provides customization of the settings for the particular row.\n */\nvar PdfGridRow = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridRow` class with the parent grid.\n * @private\n */\n function PdfGridRow(grid) {\n /**\n * Stores the index of the overflowing row.\n * @private\n */\n this.gridRowOverflowIndex = 0;\n /**\n * The `height` of the row.\n * @private\n */\n this.rowHeight = 0;\n /**\n * The `width` of the row.\n * @private\n */\n this.rowWidth = 0;\n /**\n * The `isFinish` of the row.\n * @private\n */\n this.isrowFinish = false;\n /**\n * Check whether the Row span row height `is set explicitly`.\n * @default false\n * @public\n */\n this.isRowSpanRowHeightSet = false;\n /**\n * The `page count` of the row.\n * @public\n */\n this.noOfPageCount = 0;\n /**\n * Check whether the row height `is set explicitly`.\n * @default false\n * @private\n */\n this.isRowHeightSet = false;\n this.isPageBreakRowSpanApplied = false;\n /**\n * Check weather the row merge `is completed` or not.\n * @default true\n * @private\n */\n this.isRowMergeComplete = true;\n this.repeatFlag = false;\n this.rowFontSplit = false;\n this.pdfGrid = grid;\n }\n Object.defineProperty(PdfGridRow.prototype, \"rowSpanExists\", {\n //Properties\n /**\n * Gets or sets a value indicating [`row span exists`].\n * @private\n */\n get: function () {\n return this.bRowSpanExists;\n },\n set: function (value) {\n this.bRowSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"cells\", {\n /**\n * Gets the `cells` from the selected row.[Read-Only].\n * @private\n */\n get: function () {\n if (this.gridCells == null) {\n this.gridCells = new PdfGridCellCollection(this);\n }\n return this.gridCells;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"grid\", {\n /**\n * Gets or sets the parent `grid`.\n * @private\n */\n get: function () {\n return this.pdfGrid;\n },\n set: function (value) {\n this.pdfGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"style\", {\n /**\n * Gets or sets the row `style`.\n * @private\n */\n get: function () {\n if (typeof this.rowStyle === 'undefined') {\n this.rowStyle = new PdfGridRowStyle();\n this.rowStyle.setParent(this);\n }\n return this.rowStyle;\n },\n set: function (value) {\n this.rowStyle = value;\n for (var i = 0; i < this.cells.count; i++) {\n this.cells.getCell(i).style.borders = value.border;\n if (typeof value.font !== 'undefined') {\n this.cells.getCell(i).style.font = value.font;\n }\n if (typeof value.backgroundBrush !== 'undefined') {\n this.cells.getCell(i).style.backgroundBrush = value.backgroundBrush;\n }\n if (typeof value.backgroundImage !== 'undefined') {\n this.cells.getCell(i).style.backgroundImage = value.backgroundImage;\n }\n if (typeof value.textBrush !== 'undefined') {\n this.cells.getCell(i).style.textBrush = value.textBrush;\n }\n if (typeof value.textPen !== 'undefined') {\n this.cells.getCell(i).style.textPen = value.textPen;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowBreakHeight\", {\n /**\n * `Height` of the row yet to be drawn after split.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBreakHeight === 'undefined') {\n this.gridRowBreakHeight = 0;\n }\n return this.gridRowBreakHeight;\n },\n set: function (value) {\n this.gridRowBreakHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowOverflowIndex\", {\n /**\n * `over flow index` of the row.\n * @private\n */\n get: function () {\n return this.gridRowOverflowIndex;\n },\n set: function (value) {\n this.gridRowOverflowIndex = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the row.\n * @private\n */\n get: function () {\n if (!this.isRowHeightSet) {\n this.rowHeight = this.measureHeight();\n }\n return this.rowHeight;\n },\n set: function (value) {\n this.rowHeight = value;\n this.isRowHeightSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the row.\n * @private\n */\n get: function () {\n if (this.rowWidth === 0 || typeof this.rowWidth === 'undefined') {\n this.rowWidth = this.measureWidth();\n }\n return this.rowWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"NestedGridLayoutResult\", {\n /**\n * Gets or sets the row `Nested grid Layout Result`.\n * @private\n */\n get: function () {\n return this.gridResult;\n },\n set: function (value) {\n this.gridResult = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"columnSpanExists\", {\n /**\n * Gets or sets a value indicating [`column span exists`].\n * @private\n */\n get: function () {\n return this.bColumnSpanExists;\n },\n set: function (value) {\n this.bColumnSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowMergeComplete\", {\n /**\n * Check whether the Row `has row span or row merge continue`.\n * @private\n */\n get: function () {\n return this.isRowMergeComplete;\n },\n set: function (value) {\n this.isRowMergeComplete = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowIndex\", {\n /**\n * Returns `index` of the row.\n * @private\n */\n get: function () {\n return this.grid.rows.rowCollection.indexOf(this);\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the height`.\n * @private\n */\n PdfGridRow.prototype.measureHeight = function () {\n var rowSpanRemainingHeight = 0;\n var rowHeight;\n var maxHeight = 0;\n if (this.cells.getCell(0).rowSpan > 1) {\n rowHeight = 0;\n }\n else {\n rowHeight = this.cells.getCell(0).height;\n }\n for (var i = 0; i < this.cells.count; i++) {\n var cell = this.cells.getCell(i);\n //get the maximum rowspan remaining height.\n if (cell.rowSpanRemainingHeight > rowSpanRemainingHeight) {\n rowSpanRemainingHeight = cell.rowSpanRemainingHeight;\n }\n //skip the cell if row spanned.\n // if (cell.isRowMergeContinue) {\n // continue;\n // }\n // if (!cell.isRowMergeContinue) {\n // this.rowMergeComplete = false;\n // }\n this.rowMergeComplete = false;\n if (cell.rowSpan > 1) {\n var cellIn = i;\n var rowin = this.grid.rows.rowCollection.indexOf(this);\n for (var j = 0; j < cell.rowSpan; j++) {\n if ((j + 1) < cell.rowSpan) {\n this.grid.rows.getRow(rowin + j + 1).cells.getCell(cellIn).hasRowSpan = true;\n }\n }\n if (maxHeight < cell.height) {\n maxHeight = cell.height;\n }\n continue;\n }\n rowHeight = Math.max(rowHeight, cell.height);\n }\n if (maxHeight > rowHeight) {\n rowHeight = maxHeight;\n }\n if (rowHeight === 0) {\n rowHeight = maxHeight;\n }\n else if (rowSpanRemainingHeight > 0) {\n rowHeight += rowSpanRemainingHeight;\n }\n return rowHeight;\n };\n PdfGridRow.prototype.measureWidth = function () {\n var rowWid = 0;\n for (var i = 0; i < this.grid.columns.count; i++) {\n var column = this.grid.columns.getColumn(i);\n rowWid += column.width;\n }\n return rowWid;\n };\n return PdfGridRow;\n}());\nexport { PdfGridRow };\n/**\n * `PdfGridRowCollection` class provides access to an ordered, strongly typed collection of 'PdfGridRow' objects.\n * @private\n */\nvar PdfGridRowCollection = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowCollection` class with the parent grid.\n * @private\n */\n function PdfGridRowCollection(grid) {\n this.rows = [];\n this.grid = grid;\n }\n Object.defineProperty(PdfGridRowCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the number of header in the `PdfGrid`.[Read-Only].\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRowCollection.prototype, \"rowCollection\", {\n //Implementation\n /**\n * Return the row collection of the `grid`.\n * @private\n */\n get: function () {\n return this.rows;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowCollection.prototype.addRow = function (arg) {\n if (typeof arg === 'undefined') {\n var temprow = new PdfGridRow(this.grid);\n this.addRow(temprow);\n return temprow;\n }\n else {\n arg.style.setBackgroundBrush(this.grid.style.backgroundBrush);\n arg.style.setFont(this.grid.style.font);\n arg.style.setTextBrush(this.grid.style.textBrush);\n arg.style.setTextPen(this.grid.style.textPen);\n if (arg.cells.count === 0) {\n for (var i = 0; i < this.grid.columns.count; i++) {\n arg.cells.add(new PdfGridCell());\n }\n }\n this.rows.push(arg);\n }\n };\n /**\n * Return the row by index.\n * @private\n */\n PdfGridRowCollection.prototype.getRow = function (index) {\n return this.rows[index];\n };\n return PdfGridRowCollection;\n}());\nexport { PdfGridRowCollection };\n/**\n * `PdfGridHeaderCollection` class provides customization of the settings for the header.\n * @private\n */\nvar PdfGridHeaderCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfGridHeaderCollection` class with the parent grid.\n * @private\n */\n function PdfGridHeaderCollection(grid) {\n /**\n * The array to store the `rows` of the grid header.\n * @private\n */\n this.rows = [];\n this.grid = grid;\n this.rows = [];\n }\n //Properties\n /**\n * Gets a 'PdfGridRow' object that represents the `header` row in a 'PdfGridHeaderCollection' control.[Read-Only].\n * @private\n */\n PdfGridHeaderCollection.prototype.getHeader = function (index) {\n // if (index < 0 || index >= Count) {\n // throw new IndexOutOfRangeException();\n // }\n return (this.rows[index]);\n };\n Object.defineProperty(PdfGridHeaderCollection.prototype, \"count\", {\n /**\n * Gets the `number of header` in the 'PdfGrid'.[Read-Only]\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridHeaderCollection.prototype.add = function (arg) {\n if (typeof arg === 'number') {\n var row = void 0;\n for (var i = 0; i < arg; i++) {\n row = new PdfGridRow(this.grid);\n for (var j = 0; j < this.grid.columns.count; j++) {\n row.cells.add(new PdfGridCell());\n }\n this.rows.push(row);\n }\n return this.rows;\n }\n else {\n this.rows.push(arg);\n }\n };\n PdfGridHeaderCollection.prototype.indexOf = function (row) {\n return this.rows.indexOf(row);\n };\n return PdfGridHeaderCollection;\n}());\nexport { PdfGridHeaderCollection };\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})();\n/**\n * PdfGrid.ts class for EJ2-PDF\n */\nimport { PdfGridColumnCollection } from './pdf-grid-column';\nimport { PdfGridRowCollection, PdfGridHeaderCollection } from './pdf-grid-row';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutElement } from './../../graphics/figures/layout-element';\nimport { PdfLayoutFormat } from './../../graphics/figures/base/element-layouter';\nimport { PdfGridStyle } from './styles/style';\nimport { PdfGridLayouter } from './../../structured-elements/grid/layout/grid-layouter';\nvar PdfGrid = /** @class */ (function (_super) {\n __extends(PdfGrid, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGrid` class.\n * @private\n */\n function PdfGrid() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridSize = new SizeF(0, 0);\n /**\n * Check the child grid is ' split or not'\n */\n _this.isGridSplit = false;\n /**\n * @hidden\n * @private\n */\n _this.isRearranged = false;\n /**\n * @hidden\n * @private\n */\n _this.pageBounds = new RectangleF();\n /**\n * @hidden\n * @private\n */\n _this.listOfNavigatePages = [];\n /**\n * @hidden\n * @private\n */\n _this.parentCellIndex = 0;\n _this.tempWidth = 0;\n /**\n * @hidden\n * @private\n */\n _this.breakRow = true;\n _this.splitChildRowIndex = -1;\n /**\n * The event raised on `begin cell lay outing`.\n * @event\n * @private\n */\n //public beginPageLayout : Function;\n /**\n * The event raised on `end cell lay outing`.\n * @event\n * @private\n */\n //public endPageLayout : Function;\n _this.hasRowSpanSpan = false;\n _this.hasColumnSpan = false;\n _this.isSingleGrid = true;\n return _this;\n }\n Object.defineProperty(PdfGrid.prototype, \"raiseBeginCellDraw\", {\n //Properties\n /**\n * Gets a value indicating whether the `start cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginCellDraw !== 'undefined' && typeof this.beginCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseEndCellDraw\", {\n /**\n * Gets a value indicating whether the `end cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endCellDraw !== 'undefined' && typeof this.endCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"repeatHeader\", {\n /**\n * Gets or sets a value indicating whether to `repeat header`.\n * @private\n */\n get: function () {\n if (this.bRepeatHeader == null || typeof this.bRepeatHeader === 'undefined') {\n this.bRepeatHeader = false;\n }\n return this.bRepeatHeader;\n },\n set: function (value) {\n this.bRepeatHeader = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"allowRowBreakAcrossPages\", {\n /**\n * Gets or sets a value indicating whether to split or cut rows that `overflow a page`.\n * @private\n */\n get: function () {\n return this.breakRow;\n },\n set: function (value) {\n this.breakRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"columns\", {\n /**\n * Gets the `column` collection of the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridColumns == null || typeof this.gridColumns === 'undefined') {\n this.gridColumns = new PdfGridColumnCollection(this);\n }\n return this.gridColumns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"rows\", {\n /**\n * Gets the `row` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridRows == null) {\n this.gridRows = new PdfGridRowCollection(this);\n }\n return this.gridRows;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"headers\", {\n /**\n * Gets the `headers` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridHeaders == null || typeof this.gridHeaders === 'undefined') {\n this.gridHeaders = new PdfGridHeaderCollection(this);\n }\n return this.gridHeaders;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"initialWidth\", {\n /**\n * Indicating `initial width` of the page.\n * @private\n */\n get: function () {\n return this.gridInitialWidth;\n },\n set: function (value) {\n this.gridInitialWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"style\", {\n /**\n * Gets or sets the `grid style`.\n * @private\n */\n get: function () {\n if (this.gridStyle == null) {\n this.gridStyle = new PdfGridStyle();\n }\n return this.gridStyle;\n },\n set: function (value) {\n if (this.gridStyle == null) {\n this.gridStyle = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isPageWidth\", {\n /**\n * Gets a value indicating whether the grid column width is considered to be `page width`.\n * @private\n */\n get: function () {\n return this.ispageWidth;\n },\n set: function (value) {\n this.ispageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isChildGrid\", {\n /**\n * Gets or set if grid `is nested grid`.\n * @private\n */\n get: function () {\n return this.ischildGrid;\n },\n set: function (value) {\n this.ischildGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"size\", {\n /**\n * Gets or set if grid ' is split or not'\n * @public\n */\n // public get isGridSplit() : boolean {\n // return this.isgridSplit;\n // }\n // public set isGridSplit(value : boolean) {\n // this.isgridSplit = value;\n // }public get isGridSplit() : boolean {\n // return this.isgridSplit;\n // }\n // public set isGridSplit(value : boolean) {\n // this.isgridSplit = value;\n // }\n /**\n * Gets the `size`.\n * @private\n */\n get: function () {\n if ((this.gridSize.width === 0 || typeof this.gridSize.width === 'undefined') && this.gridSize.height === 0) {\n this.gridSize = this.measure();\n }\n return this.gridSize;\n // } else {\n // return this.gridSize;\n // }\n },\n set: function (value) {\n this.gridSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"ParentCell\", {\n get: function () {\n return this.parentCell;\n },\n set: function (value) {\n this.parentCell = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"LayoutFormat\", {\n get: function () {\n return this.layoutFormat;\n },\n enumerable: true,\n configurable: true\n });\n PdfGrid.prototype.draw = function (arg1, arg2, arg3, arg4) {\n if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2.x, arg2.y);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg1, arg2, arg3, null);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2, null);\n }\n else if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && arg3 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg1, arg2.x, arg2.y, arg3);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && (arg4 instanceof PdfLayoutFormat || arg4 == null)) {\n var width = (arg1.graphics.clientSize.width - arg2);\n var layoutRectangle = new RectangleF(arg2, arg3, width, 0);\n return this.drawHelper(arg1, layoutRectangle, arg4);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'boolean') {\n return this.drawHelper(arg1, arg2, null);\n }\n else {\n return this.drawHelper(arg1, arg2, arg3);\n }\n };\n /**\n * `measures` this instance.\n * @private\n */\n PdfGrid.prototype.measure = function () {\n var height = 0;\n var width = this.columns.width;\n for (var i = 0; i < this.headers.count; i++) {\n var row = this.headers.getHeader(i);\n height += row.height;\n }\n for (var i = 0; i < this.rows.count; i++) {\n var row = this.rows.getRow(i);\n height += row.height;\n }\n return new SizeF(width, height);\n };\n PdfGrid.prototype.onBeginCellDraw = function (args) {\n if (this.raiseBeginCellDraw) {\n this.beginCellDraw(this, args);\n }\n };\n PdfGrid.prototype.onEndCellDraw = function (args) {\n if (this.raiseEndCellDraw) {\n this.endCellDraw(this, args);\n }\n };\n /**\n * `Layouts` the specified graphics.\n * @private\n */\n PdfGrid.prototype.layout = function (param) {\n // if (this.rows.count !== 0) {\n // if (this.rows.getRow(0).cells.getCell(0).style.borders.left.width !== 1) {\n // let x : number = this.rows.getRow(0).cells.getCell(0).style.borders.left.width / 2;\n // let y : number = this.rows.getRow(0).cells.getCell(0).style.borders.top.width / 2;\n // if (param.bounds.x === PdfBorders.default.right.width / 2 && param.bounds.y === PdfBorders.default.right.width / 2) {\n // let newBound : RectangleF = new RectangleF(x, y, this.gridSize.width, this.gridSize.height);\n // param.bounds = newBound;\n // }\n // }\n // }\n this.setSpan();\n this.checkSpan();\n this.layoutFormat = param.format;\n this.gridLocation = param.bounds;\n var layouter = new PdfGridLayouter(this);\n var result = (layouter.Layouter(param));\n return result;\n };\n PdfGrid.prototype.setSpan = function () {\n var colSpan = 1;\n var rowSpan = 1;\n var currentCellIndex = 0;\n var currentRowIndex = 0;\n var maxSpan = 0;\n var rowCount = this.headers.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.headers.getHeader(i);\n maxSpan = 0;\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n maxSpan = Math.max(maxSpan, cell.rowSpan);\n //Skip setting span map for already coverted rows/columns.\n if (!cell.isCellMergeContinue && !cell.isRowMergeContinue && (cell.columnSpan > 1 || cell.rowSpan > 1)) {\n if (cell.columnSpan + j > row.cells.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.rowSpan + i > this.headers.count) {\n throw new Error('Invalid span specified at Header ' + j.toString() + ' column ' + i.toString());\n }\n // if (this.rows.count !== 0 && cell.rowSpan + i > this.rows.count) {\n // throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n // }\n if (cell.columnSpan > 1 && cell.rowSpan > 1) {\n colSpan = cell.columnSpan;\n rowSpan = cell.rowSpan;\n currentCellIndex = j;\n currentRowIndex = i;\n cell.isCellMergeStart = true;\n cell.isRowMergeStart = true;\n //Set Column merges for first row\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n row.cells.getCell(currentCellIndex).isRowMergeContinue = true;\n row.cells.getCell(currentCellIndex).rowSpan = rowSpan;\n colSpan--;\n }\n currentCellIndex = j;\n colSpan = cell.columnSpan;\n //Set Row Merges and column merges foreach subsequent rows.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n rowSpan--;\n while (colSpan > 1) {\n currentCellIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isCellMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n colSpan--;\n }\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n }\n }\n else if (cell.columnSpan > 1 && cell.rowSpan === 1) {\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n cell.isCellMergeStart = true;\n //Set Column merges.\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n colSpan--;\n }\n }\n else if (cell.columnSpan === 1 && cell.rowSpan > 1) {\n rowSpan = cell.rowSpan;\n currentRowIndex = i;\n //Set row Merges.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n rowSpan--;\n }\n }\n }\n }\n row.maximumRowSpan = maxSpan;\n }\n };\n PdfGrid.prototype.checkSpan = function () {\n var cellcolSpan;\n var cellrowSpan = 1;\n var cellmaxSpan = 0;\n var currentCellIndex;\n var currentRowIndex = 0;\n cellcolSpan = cellrowSpan = 1;\n currentCellIndex = currentRowIndex = 0;\n if (this.hasRowSpanSpan || this.hasColumnSpan) {\n var rowCount = this.rows.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.rows.getRow(i);\n cellmaxSpan = 0;\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n cellmaxSpan = Math.max(cellmaxSpan, cell.rowSpan);\n //Skip setting span map for already coverted rows/columns.\n if (!cell.isCellMergeContinue && !cell.isRowMergeContinue\n && (cell.columnSpan > 1 || cell.rowSpan > 1)) {\n if (cell.columnSpan + j > row.cells.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.rowSpan + i > this.rows.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.columnSpan > 1 && cell.rowSpan > 1) {\n cellcolSpan = cell.columnSpan;\n cellrowSpan = cell.rowSpan;\n currentCellIndex = j;\n currentRowIndex = i;\n cell.isCellMergeStart = true;\n cell.isRowMergeStart = true;\n //Set Column merges for first row\n while (cellcolSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n row.cells.getCell(currentCellIndex).isRowMergeContinue = true;\n cellcolSpan--;\n }\n currentCellIndex = j;\n cellcolSpan = cell.columnSpan;\n //Set Row Merges and column merges foreach subsequent rows.\n while (cellrowSpan > 1) {\n currentRowIndex++;\n this.rows.getRow(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n this.rows.getRow(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n cellrowSpan--;\n while (cellcolSpan > 1) {\n currentCellIndex++;\n this.rows.getRow(currentRowIndex).cells.getCell(currentCellIndex).isCellMergeContinue = true;\n this.rows.getRow(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n cellcolSpan--;\n }\n cellcolSpan = cell.columnSpan;\n currentCellIndex = j;\n }\n }\n else if (cell.columnSpan > 1 && cell.rowSpan === 1) {\n cellcolSpan = cell.columnSpan;\n currentCellIndex = j;\n cell.isCellMergeStart = true;\n //Set Column merges.\n while (cellcolSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n cellcolSpan--;\n }\n }\n else if (cell.columnSpan === 1 && cell.rowSpan > 1) {\n cellrowSpan = cell.rowSpan;\n currentRowIndex = i;\n //Set row Merges.\n while (cellrowSpan > 1) {\n currentRowIndex++;\n this.rows.getRow(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n cellrowSpan--;\n }\n }\n }\n }\n row.maximumRowSpan = cellmaxSpan;\n }\n }\n };\n PdfGrid.prototype.measureColumnsWidth = function (bounds) {\n if (typeof bounds !== 'undefined') {\n this.isPageWidth = false;\n var widths = this.columns.getDefaultWidths(bounds.width - bounds.x);\n //let tempWidth : number = this.columns.getColumn(0).width;\n for (var i = 0, count = this.columns.count; i < count; i++) {\n // if (this.columns.getColumn(i).width < 0)\n // this.columns.getColumn(i).columnWidth = widths[i];\n // else if (this.columns.getColumn(i).width > 0 && !this.columns.getColumn(i).isCustomWidth && widths[i]>0 && this.isComplete)\n this.columns.getColumn(i).columnWidth = widths[i];\n this.tempWidth = widths[i];\n }\n if (this.ParentCell != null && this.style.allowHorizontalOverflow == false && this.ParentCell.row.grid.style.allowHorizontalOverflow == false) {\n var padding = 0;\n var columnWidth = 0;\n var columnCount = this.columns.count;\n var childGridColumnWidth = 0;\n if (this.ParentCell.style.cellPadding != null || typeof this.ParentCell.style.cellPadding !== 'undefined') {\n if (typeof this.ParentCell.style.cellPadding.left != 'undefined' && this.ParentCell.style.cellPadding.hasLeftPad) {\n padding += this.ParentCell.style.cellPadding.left;\n }\n if (typeof this.ParentCell.style.cellPadding.right != 'undefined' && this.ParentCell.style.cellPadding.hasRightPad) {\n padding += this.ParentCell.style.cellPadding.right;\n }\n }\n for (var i = 0; i < this.ParentCell.columnSpan; i++) {\n columnWidth += this.ParentCell.row.grid.columns.getColumn(this.parentCellIndex + i).width;\n }\n for (var j = 0; j < this.columns.count; j++) {\n if (this.gridColumns.getColumn(j).width > 0 && this.gridColumns.getColumn(j).isCustomWidth) {\n columnWidth -= this.gridColumns.getColumn(j).width;\n columnCount--;\n }\n }\n if ((this.ParentCell.row.grid.style.cellPadding != null || typeof this.ParentCell.row.grid.style.cellPadding != 'undefined')) {\n if (typeof this.ParentCell.row.grid.style.cellPadding.top != 'undefined' && this.ParentCell.row.grid.style.cellPadding.hasTopPad) {\n padding += this.ParentCell.row.grid.style.cellPadding.top;\n }\n if (typeof this.ParentCell.row.grid.style.cellPadding.bottom != 'undefined' && this.ParentCell.row.grid.style.cellPadding.hasBottomPad) {\n padding += this.ParentCell.row.grid.style.cellPadding.bottom;\n }\n }\n if (this.ParentCell.row.grid.style.cellSpacing != 0) {\n columnWidth -= this.ParentCell.row.grid.style.cellSpacing * 2;\n }\n if (columnWidth > padding) {\n childGridColumnWidth = (columnWidth - padding) / columnCount;\n this.tempWidth = childGridColumnWidth;\n if (this.ParentCell != null) {\n for (var j = 0; j < this.columns.count; j++) {\n if (!this.columns.getColumn(j).isCustomWidth)\n this.columns.getColumn(j).columnWidth = childGridColumnWidth;\n }\n }\n }\n }\n // if (this.ParentCell != null && this.ParentCell.row.width > 0)\n // {\n // if (this.isChildGrid && this.gridSize.width > this.ParentCell.row.width)\n // {\n // widths = this.columns.getDefaultWidths(bounds.width);\n // for (let i : number = 0; i < this.columns.count; i++)\n // {\n // this.columns.getColumn(i).width = widths[i];\n // }\n // }\n // }\n }\n else {\n var widths = [this.columns.count];\n for (var n = 0; n < this.columns.count; n++) {\n widths[n] = 0;\n }\n var cellWidth = 0;\n var cellWidths = 0;\n if ((typeof this.isChildGrid === 'undefined' && typeof this.gridLocation !== 'undefined') || (this.isChildGrid === null && typeof this.gridLocation !== 'undefined')) {\n this.initialWidth = this.gridLocation.width;\n }\n if (this.headers.count > 0) {\n var colCount_1 = this.headers.getHeader(0).cells.count;\n var rowCount = this.headers.count;\n for (var i = 0; i < colCount_1; i++) {\n cellWidth = 0;\n for (var j = 0; j < rowCount; j++) {\n var rowWidth = Math.min(this.initialWidth, this.headers.getHeader(j).cells.getCell(i).width);\n cellWidth = Math.max(cellWidth, rowWidth);\n }\n widths[i] = cellWidth;\n }\n }\n // else {\n // let colCount : number = this.rows.getRow(0).cells.count;\n // let rowCount : number = this.rows.count;\n // for (let i : number = 0; i < colCount; i++) {\n // cellWidth = 0;\n // for (let j : number = 0; j < rowCount; j++) {\n // let rowWidth : number = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n // cellWidth = Math.max(cellWidth, rowWidth);\n // }\n // widths[i] = cellWidth;\n // }\n // }\n cellWidth = 0;\n for (var i = 0, colCount_2 = this.columns.count; i < colCount_2; i++) {\n for (var j = 0, rowCount = this.rows.count; j < rowCount; j++) {\n if ((this.rows.getRow(j).cells.getCell(i).columnSpan == 1 && !this.rows.getRow(j).cells.getCell(i).isCellMergeContinue) || this.rows.getRow(j).cells.getCell(i).value != null) {\n if (this.rows.getRow(j).cells.getCell(i).value != null && !this.rows.getRow(j).grid.style.allowHorizontalOverflow) {\n var value = this.rows.getRow(j).grid.style.cellPadding.right +\n this.rows.getRow(j).grid.style.cellPadding.left\n + this.rows.getRow(j).cells.getCell(i).style.borders.left.width / 2;\n // if (this.initialWidth != 0 )\n // (this.rows.getRow(j).cells.getCell(i).value as PdfGrid).initialWidth = this.initialWidth - value;\n }\n var rowWidth = 0;\n rowWidth = this.initialWidth > 0.0 ? Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width) : this.rows.getRow(j).cells.getCell(i).width;\n // let internalWidth : number = this.rows.getRow(j).cells.getCell(i).width;\n // internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.left.width;\n // internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.right.width;\n // let internalHeight : number = this.rows.getRow(j).cells.getCell(i).height;\n // internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.top.width);\n // internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.bottom.width);\n // let isCorrectWidth : boolean = (internalWidth + this.gridLocation.x) > this.currentGraphics.clientSize.width;\n // let isCorrectHeight : boolean = (internalHeight + this.gridLocation.y) > this.currentGraphics.clientSize.height;\n // if (isCorrectWidth || isCorrectHeight) {\n // throw Error('Image size exceeds client size of the page. Can not insert this image');\n // }\n // rowWidth = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n cellWidth = Math.max(widths[i], Math.max(cellWidth, rowWidth));\n cellWidth = Math.max(this.columns.getColumn(i).width, cellWidth);\n }\n }\n if (this.rows.count != 0)\n widths[i] = cellWidth;\n cellWidth = 0;\n }\n for (var i = 0, RowCount = this.rows.count; i < RowCount; i++) {\n for (var j = 0, ColCount = this.columns.count; j < ColCount; j++) {\n if (this.rows.getRow(i).cells.getCell(j).columnSpan > 1) {\n var total = widths[j];\n for (var k = 1; k < this.rows.getRow(i).cells.getCell(j).columnSpan; k++) {\n total += widths[j + k];\n }\n // if (this.rows.getRow(i).cells.getCell(j).width > total)\n // {\n // let extendedWidth : number = this.rows.getRow(i).cells.getCell(j).width - total;\n // extendedWidth = extendedWidth / this.rows.getRow(i).cells.getCell(j).columnSpan;\n // for (let k : number = j; k < j + this.rows.getRow(i).cells.getCell(j).columnSpan; k++)\n // widths[k] += extendedWidth;\n // }\n }\n }\n }\n // if (this.isChildGrid && this.initialWidth != 0)\n // {\n // widths = this.columns.getDefaultWidths(this.initialWidth);\n // }\n for (var i = 0, count = this.columns.count; i < count; i++) {\n if (this.columns.getColumn(i).width <= 0)\n this.columns.getColumn(i).columnWidth = widths[i];\n else if (this.columns.getColumn(i).width > 0 && !this.columns.getColumn(i).isCustomWidth)\n this.columns.getColumn(i).columnWidth = widths[i];\n }\n var padding = 0;\n var colWidth = 0;\n var colCount = this.columns.count;\n var childGridColWidth = 0;\n colWidth = this.tempWidth;\n for (var j = 0; j < this.columns.count; j++) {\n if (this.gridColumns.getColumn(j).width > 0 && this.gridColumns.getColumn(j).isCustomWidth) {\n colWidth -= this.gridColumns.getColumn(j).width;\n colCount--;\n }\n }\n // if (this.style.cellSpacing != 0){\n // colWidth -= this.style.cellSpacing * 2;\n // }\n if (colWidth > 0) {\n if (this.ParentCell.row.grid.style.cellSpacing != 0) {\n colWidth -= this.ParentCell.row.grid.style.cellSpacing * 2;\n }\n }\n if (colWidth > padding) {\n childGridColWidth = (colWidth) / colCount;\n if (this.ParentCell != null) {\n for (var j = 0; j < this.columns.count; j++) {\n if (!this.columns.getColumn(j).isCustomWidth)\n this.columns.getColumn(j).columnWidth = childGridColWidth;\n }\n }\n }\n }\n };\n return PdfGrid;\n}(PdfLayoutElement));\nexport { PdfGrid };\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 { PdfGrid } from '../pdf-grid';\nimport { PdfStringFormat } from './../../../graphics/fonts/pdf-string-format';\nimport { SizeF, RectangleF, PointF } from './../../../drawing/pdf-drawing';\nimport { PdfBorders } from '../styles/pdf-borders';\nimport { PdfLayoutType, PdfLayoutBreakType } from './../../../graphics/figures/enum';\nimport { PdfLayoutResult, PdfLayoutFormat, ElementLayouter } from './../../../graphics/figures/base/element-layouter';\nimport { PdfHorizontalOverflowType } from '../styles/style';\nimport { TemporaryDictionary } from './../../../collections/object-object-pair/dictionary';\n/**\n * Class `lay outing the text`.\n *\n */\nvar PdfGridLayouter = /** @class */ (function (_super) {\n __extends(PdfGridLayouter, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGrid` class.\n * @private\n */\n function PdfGridLayouter(baseFormat) {\n var _this = _super.call(this, baseFormat) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridInitialWidth = 0;\n /**\n * @hidden\n * @private\n */\n _this.gridSize = new SizeF(0, 0);\n _this.parentCellIndex = 0;\n _this.tempWidth = 0;\n _this.childheight = 0;\n /**\n * Check weather it is `child grid or not`.\n * @private\n */\n _this.isChildGrid = false;\n /**\n * @hidden\n * @private\n */\n _this.hasRowSpanSpan = false;\n /**\n * @hidden\n * @private\n */\n _this.isRearranged = false;\n /**\n * @hidden\n * @private\n */\n _this.pageBounds = new RectangleF();\n /**\n * @hidden\n * @private\n */\n _this.listOfNavigatePages = [];\n /**\n * @hidden\n * @private\n */\n _this.flag = true;\n /**\n * @hidden\n * @private\n */\n _this.columnRanges = [];\n /**\n * @hidden\n * @private\n */\n _this.currentLocation = new PointF(0, 0);\n /**\n * @hidden\n * @private\n */\n _this.breakRow = true;\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n _this.isOverloadWithPosition = false;\n return _this;\n }\n Object.defineProperty(PdfGridLayouter.prototype, \"Grid\", {\n //Properties\n get: function () {\n return this.elements;\n },\n enumerable: true,\n configurable: true\n });\n // Constructors\n /**\n * Initializes a new instance of the `StringLayouter` class.\n * @private\n */\n //Public methods\n /**\n * `Layouts` the text.\n * @private\n */\n /**\n * `Layouts` the specified graphics.\n * @private\n */\n /**\n * `Layouts` the specified graphics.\n * @private\n */\n /*public layout(graphics : PdfLayoutParams) : PdfLayoutResult\n public layout(graphics : PdfGraphics, bounds : RectangleF) : void\n public layout(graphics : PdfGraphics, bounds : PointF) : void\n public layout(graphics ?: PdfGraphics | PdfLayoutParams, bounds ?: PointF | RectangleF) : void | PdfLayoutResult {\n if (graphics instanceof PdfGraphics) {\n if (bounds instanceof PointF) {\n if (bounds.x === 0) {\n bounds.x = PdfBorders.default.right.width / 2;\n }\n if (bounds.y === 0) {\n bounds.y = PdfBorders.default.top.width / 2;\n }\n let boundaries : RectangleF = new RectangleF(bounds, new SizeF(0, 0));\n this.layout(graphics, boundaries);\n } else {\n let width : number = graphics.clientSize.width;\n let parameter : PdfLayoutParams = new PdfLayoutParams();\n parameter.bounds = bounds;\n this.currentGraphics = graphics;\n if (graphics.layer != null) {\n let index : number = 0;\n if (this.currentGraphics.page instanceof PdfPage) {\n index = (this.currentGraphics.page as PdfPage).section.indexOf(this.currentGraphics.page as PdfPage);\n } else {\n index = (this.currentGraphics.page as PdfPageBase).defaultLayerIndex;\n }\n } else {\n this.layoutInternal(parameter);\n }\n }\n }\n }*/\n /**\n * Gets the `format`.\n * @private\n */\n PdfGridLayouter.prototype.getFormat = function (format) {\n var f = format;\n return f;\n };\n /**\n * `Layouts` the element.\n * @private\n */\n PdfGridLayouter.prototype.layoutInternal = function (param) {\n var format = this.getFormat(param.format);\n this.gridLayoutFormat = this.getFormat(param.format);\n this.currentPage = param.page;\n if (this.currentPage !== null) {\n var pageHeight = this.currentPage.getClientSize().height;\n var pageWidth = this.currentPage.getClientSize().width;\n //if (pageHeight > pageWidth) {\n this.currentPageBounds = this.currentPage.getClientSize();\n //}\n }\n else {\n throw Error('Can not set page as null');\n //this.currentPageBounds = this.currentGraphics.clientSize;\n }\n this.currentGraphics = this.currentPage.graphics;\n //this.currentGraphics = (this.currentPage != null ) ? this.currentPage.graphics : this.currentGraphics;\n // if (this.currentGraphics.layer !== null) {\n // let index : number = 0;\n // if (this.currentGraphics.page instanceof PdfPage) {\n // index = (this.currentGraphics.page as PdfPage).section.indexOf(this.currentGraphics.page as PdfPage);\n // } else {\n // index = (this.currentGraphics.page as PdfPageBase).defaultLayerIndex;\n // }\n // this.listOfNavigatePages.push(index);\n // }\n var index = 0;\n index = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n this.listOfNavigatePages.push(index);\n if (format != null && format.break === PdfLayoutBreakType.FitColumnsToPage) {\n this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), new SizeF(this.Grid.columns.width, this.currentGraphics.clientSize.height));\n }\n else {\n this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), this.currentGraphics.clientSize);\n }\n //this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), this.currentGraphics.clientSize);\n if (this.Grid.rows.count !== 0) {\n this.currentBounds.width = (param.bounds.width > 0) ? param.bounds.width :\n (this.currentBounds.width - this.Grid.rows.getRow(0).cells.getCell(0).style.borders.left.width / 2);\n }\n else if (this.Grid.headers.count !== 0) {\n // this.currentBounds.width = (param.bounds.width > 0) ? param.bounds.width : (this.currentBounds.width -\n // this.Grid.headers.getHeader(0).cells.getCell(0).style.borders.left.width / 2);\n this.currentBounds.width = param.bounds.width;\n }\n else {\n throw Error('Please add row or header into grid');\n }\n this.startLocation = new PointF(param.bounds.x, param.bounds.y);\n // if (this.Grid.style.allowHorizontalOverflow && this.currentBounds.width > this.currentGraphics.clientSize.width) {\n // this.currentBounds.width = this.currentGraphics.clientSize.width;\n // this.currentBounds.width -= this.currentBounds.x;\n // }\n // if (this.Grid.isChildGrid) {\n // this.childheight = param.bounds.height;\n // }\n // if (param.format !== null && param.format.usePaginateBounds) {\n // if (param.format.paginateBounds.height > 0) {\n // this.currentBounds.height = param.format.paginateBounds.height;\n // }\n //} else \n if (param.bounds.height > 0 && !this.Grid.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n if (!this.Grid.isChildGrid) {\n this.hType = this.Grid.style.horizontalOverflowType;\n }\n if (!this.Grid.style.allowHorizontalOverflow) {\n this.columnRanges = [];\n this.Grid.measureColumnsWidth(this.currentBounds);\n this.columnRanges.push([0, this.Grid.columns.count - 1]);\n }\n else {\n this.Grid.measureColumnsWidth();\n this.determineColumnDrawRanges();\n }\n if (this.Grid.hasRowSpanSpan) {\n for (var i = 0; i < this.Grid.rows.count; i++) {\n var height = this.Grid.rows.getRow(i).height;\n if (!this.Grid.rows.getRow(i).isRowHeightSet) {\n this.Grid.rows.getRow(i).isRowHeightSet = true;\n }\n }\n }\n var result = this.layoutOnPage(param);\n return result;\n };\n // /* tslint:enable */\n /**\n * `Determines the column draw ranges`.\n * @private\n */\n PdfGridLayouter.prototype.determineColumnDrawRanges = function () {\n var startColumn = 0;\n var endColumn = 0;\n var cellWidths = 0;\n var availableWidth = this.currentGraphics.clientSize.width - this.currentBounds.x;\n for (var i = 0; i < this.Grid.columns.count; i++) {\n cellWidths += this.Grid.columns.getColumn(i).width;\n if (cellWidths >= availableWidth) {\n var subWidths = 0;\n for (var j = startColumn; j <= i; j++) {\n subWidths += this.Grid.columns.getColumn(j).width;\n if (subWidths > availableWidth) {\n break;\n }\n endColumn = j;\n }\n this.columnRanges.push([startColumn, endColumn]);\n startColumn = endColumn + 1;\n endColumn = startColumn;\n cellWidths = (endColumn <= i) ? this.Grid.columns.getColumn(i).width : 0;\n }\n }\n // if (startColumn !== this.columns.Count) {\n this.columnRanges.push([startColumn, this.Grid.columns.count - 1]);\n // }\n };\n /**\n * `Layouts the on page`.\n * @private\n */\n PdfGridLayouter.prototype.layoutOnPage = function (param) {\n /* tslint:disable */\n this.pageBounds.x = param.bounds.x;\n this.pageBounds.y = param.bounds.y;\n this.pageBounds.height = param.bounds.height;\n var format = this.getFormat(param.format);\n var endArgs = null;\n var result = null;\n var layoutedPages = new TemporaryDictionary();\n var startPage = param.page;\n var isParentCell = false;\n var cellBounds = [];\n for (var index = 0; index < this.columnRanges.length; index++) {\n var range = this.columnRanges[index];\n this.cellStartIndex = range[0];\n this.cellEndIndex = range[1];\n var returnObject = this.raiseBeforePageLayout(this.currentPage, this.currentBounds, this.currentRowIndex);\n this.currentBounds = returnObject.currentBounds;\n this.currentRowIndex = returnObject.currentRowIndex;\n // if (returnObject.returnValue) {\n // result = new PdfGridLayoutResult(this.currentPage, this.currentBounds);\n // break;\n // }\n //Draw Headers.\n var drawHeader = void 0;\n for (var i_1 = 0; i_1 < this.Grid.headers.count; i_1++) {\n var row = this.Grid.headers.getHeader(i_1);\n var headerHeight = this.currentBounds.y;\n // RowLayoutResult\n var headerResult = this.drawRow(row);\n // if (headerHeight === this.currentBounds.y) {\n // drawHeader = true;\n // if (PdfGrid.repeatRowIndex === -1) {\n // PdfGrid.repeatRowIndex = this.rows.getRow.indexOf(row);\n // }\n // } else {\n drawHeader = false;\n // }\n }\n var i = 0;\n var length_1 = this.Grid.rows.count;\n var repeatRow = void 0;\n var startingHeight = 0;\n var flag = true;\n //Here is to draw parent Grid and Cells\n cellBounds = [];\n //Draw row by row with the specified cell range.\n for (var j = 0; j < this.Grid.rows.count; j++) {\n var row = this.Grid.rows.getRow(j);\n i++;\n this.currentRowIndex = i - 1;\n var originalHeight = this.currentBounds.y;\n startPage = this.currentPage;\n PdfGridLayouter.repeatRowIndex = -1;\n if (flag && row.grid.isChildGrid) {\n startingHeight = originalHeight;\n flag = false;\n }\n var rowResult = null;\n ///rowResult = this.drawRow(row);\n /*if(!row.isrowFinish) {\n if(!row.grid.isgridSplit){\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n row.isrowDraw = true;\n } else {\n if(!row.isrowDraw){\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n row.isrowDraw = true;\n row.grid.isgridSplit = false;\n } else {\n rowResult = null;\n break;\n }\n }\n }\n else {\n //row.isrowFinish = false;\n //rowResult = this.drawRow(row);\n rowResult = null;\n break;\n \n } */\n if (this.Grid.splitChildRowIndex == -1) {\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n }\n else {\n if (row.grid.ParentCell.row.grid.isGridSplit && this.Grid.splitChildRowIndex <= row.rowIndex) {\n rowResult = this.drawRow(row);\n row.isrowFinish = true;\n }\n else if (row.isrowFinish) {\n continue;\n }\n else {\n break;\n }\n }\n //rowResult = this.drawRow(row);\n cellBounds.push(rowResult.bounds.width);\n /*if (row.isRowBreaksNextPage)\n {\n let x : number = 0;\n for (let l : number = 0; l < row.cells.count; l++)\n {\n let isNestedRowBreak : boolean = false;\n if (row.height == row.cells.getCell(l).height)\n {\n let n : number;\n let grid : PdfGrid = row.cells.getCell(l).value as PdfGrid;\n for (let m : number = grid.rows.count; 0 < m; m--)\n {\n if ((grid.rows.getRow(m - 1).rowBreakHeight > 0))\n {\n isNestedRowBreak = true;\n break;\n }\n if (grid.rows.getRow(m - 1).isRowBreaksNextPage)\n {\n row.rowBreakHeightValue = grid.rows.getRow(m - 1).rowBreakHeightValue;\n break;\n }\n row.rowBreakHeightValue += grid.rows.getRow(m - 1).height;\n }\n }\n if (isNestedRowBreak)\n break;\n }\n for (let j : number = 0; j < row.cells.count; j++)\n {\n\n if (row.height > row.cells.getCell(j).height)\n {\n row.cells.getCell(j).value = \" \";\n let rect : RectangleF ;\n let page : PdfPage = this.getNextPage(this.currentPage);\n let section : PdfSection = this.currentPage.section;\n let index : number = section.indexOf(page);\n for (let k : number = 0; k < (section.count - 1) - index; k++)\n {\n rect = new RectangleF(x, 0, row.grid.columns.getColumn(j).width, page.getClientSize().height);\n PdfGridLayouter.repeatRowIndex = -1;\n row.cells.getCell(j).draw(page.graphics, rect, false);\n page = this.getNextPage(page);\n }\n rect = new RectangleF(x, 0, row.grid.columns.getColumn(j).width, row.rowBreakHeightValue);\n\n row.cells.getCell(j).draw(page.graphics, rect, false);\n }\n x += row.grid.columns.getColumn(j).width;\n }\n }*/\n //if height remains same, it is understood that row is not drawn in the page\n if (originalHeight === this.currentBounds.y) {\n repeatRow = true;\n PdfGridLayouter.repeatRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n }\n else {\n repeatRow = false;\n PdfGridLayouter.repeatRowIndex = -1;\n }\n while (!rowResult.isFinish && startPage != null) {\n var tempResult = this.getLayoutResult();\n /*if (startPage != this.currentPage)\n {\n if (row.grid.isChildGrid && row.grid.ParentCell != null)\n {\n let bounds : RectangleF= new RectangleF(new PointF(format.paginateBounds.x,format.paginateBounds.y), new SizeF(param.bounds.width, tempResult.bounds.height));\n bounds.x += param.bounds.x;\n if (row.grid.ParentCell.row.grid.style.cellPadding != null)\n {\n bounds.y += row.grid.ParentCell.row.grid.style.cellPadding.top;\n if (bounds.height > this.currentPageBounds.height)\n {\n bounds.height = this.currentPageBounds.height - bounds.y;\n bounds.height -= (row.grid.ParentCell.row.grid.style.cellPadding.bottom);\n }\n }\n // Draw border for cells in the nested grid cell's row.\n for (let c : number = 0; c < row.cells.count; c++)\n {\n let cell : PdfGridCell = row.cells.getCell(c);\n let cellWidth : number= 0;\n if (cell.columnSpan > 1)\n {\n for (; c < cell.columnSpan; c++)\n cellWidth += row.grid.columns.getColumn(c).width;\n }\n else\n cellWidth = Math.max(cell.width, row.grid.columns.getColumn(c).width);\n cell.drawCellBorders(this.currentGraphics, new RectangleF(new PointF(bounds.x,bounds.y), new SizeF(cellWidth, bounds.height)));\n bounds.x += cellWidth;\n c += (cell.columnSpan - 1);\n }\n }\n }\n */\n endArgs = this.raisePageLayouted(tempResult);\n if (endArgs.cancel || repeatRow)\n break;\n else if (this.Grid.allowRowBreakAcrossPages) {\n //If there is no space in the current page, add new page and then draw the remaining row.\n this.currentPage = this.getNextPageformat(format);\n originalHeight = this.currentBounds.y;\n var location_1 = new PointF(PdfBorders.default.right.width / 2, PdfBorders.default.top.width / 2);\n // if (format.paginateBounds == new RectangleF(0,0,0,0) && this.startLocation == location)\n // {\n // this.currentBounds.x += this.startLocation.x;\n // this.currentBounds.y += this.startLocation.y;\n // }\n if (this.Grid.isChildGrid && row.grid.ParentCell != null) {\n if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n if (row.rowBreakHeight + this.Grid.ParentCell.row.grid.style.cellPadding.top < this.currentBounds.height) {\n this.currentBounds.y = this.Grid.ParentCell.row.grid.style.cellPadding.top;\n }\n }\n }\n if (row.grid.ParentCell != null) {\n row.grid.ParentCell.row.isRowBreaksNextPage = true;\n row.grid.ParentCell.row.rowBreakHeightValue = row.rowBreakHeight + this.Grid.ParentCell.row.grid.style.cellPadding.top + this.Grid.ParentCell.row.grid.style.cellPadding.bottom;\n for (var i_2 = row.rowIndex + 1; i_2 < row.grid.rows.count; i_2++) {\n row.grid.ParentCell.row.rowBreakHeightValue += row.grid.rows.getRow(i_2).height;\n }\n //row.rowBreakHeight = row.grid.ParentCell.row.rowBreakHeightValue;\n }\n /*if (row.noOfPageCount > 1)\n {\n let temp : number = row.rowBreakHeightValue;\n for (let j : number = 1; j < row.noOfPageCount; j++)\n {\n row.rowBreakHeightValue = 0;\n row.height = ((row.noOfPageCount - 1) * this.currentPage.getClientSize().height);\n this.drawRow(row);\n this.currentPage = this.getNextPageformat(format);\n startPage = this.currentPage;\n }\n row.rowBreakHeightValue = temp;\n row.noOfPageCount = 1;\n rowResult = this.drawRow(row);\n } else {\n rowResult = this.drawRow(row);\n }\n /*if(row.grid.isChildGrid){\n row.isrowFinish = false;\n row.isrowDraw = false;\n row.grid.isgridSplit = true;\n row.grid.ParentCell.row.grid.isgridSplit = true;\n //rowResult.isFinish = false;\n break;\n }*/\n if (row.grid.isChildGrid) {\n //row.grid.isgridSplit = true;\n row.isrowFinish = false;\n //row.grid.ParentCell.row.grid.isgridSplit = true;\n row.grid.splitChildRowIndex = row.rowIndex;\n row.grid.ParentCell.row.grid.splitChildRowIndex = row.grid.ParentCell.row.rowIndex;\n if (row.grid.ParentCell.row.grid.isGridSplit) {\n row.grid.ParentCell.row.noOfPageCount += 1;\n row.grid.ParentCell.row.grid.isGridSplit = false;\n }\n break;\n }\n if (row.noOfPageCount < 1) {\n if (row.grid.splitChildRowIndex != -1) {\n row.grid.isGridSplit = true;\n }\n this.currentBounds.y = 0.50;\n if (this.Grid.repeatHeader) {\n for (var j_1 = 0; j_1 < this.Grid.headers.count; j_1++) {\n var headerRepeat = this.Grid.headers.getHeader(j_1);\n this.drawRow(headerRepeat);\n }\n }\n rowResult = this.drawRow(row);\n if (row.noOfPageCount >= 1) {\n var temp = row.rowBreakHeightValue;\n for (var j_2 = 0; j_2 < row.noOfPageCount; j_2++) {\n //this.currentPage.section.add();\n var tempResult1 = this.getLayoutResult();\n endArgs = this.raisePageLayouted(tempResult1);\n this.currentPage = this.getNextPageformat(format);\n originalHeight = this.currentBounds.y;\n //row.rowBreakHeightValue = 0;\n if (row.grid.splitChildRowIndex != -1) {\n row.grid.isGridSplit = true;\n }\n this.currentBounds.y = 0.5;\n if (this.Grid.repeatHeader) {\n for (var i_3 = 0; i_3 < this.Grid.headers.count; i_3++) {\n var header = this.Grid.headers.getHeader(i_3);\n this.drawRow(header);\n }\n }\n //row.height = ((row.noOfPageCount - 1) * this.currentPage.getClientSize().height);\n this.drawRow(row);\n }\n // row.rowBreakHeight = temp;\n // row.noOfPageCount = 1;\n // rowResult = this.drawRow(row);\n }\n row.grid.splitChildRowIndex = -1;\n row.grid.isGridSplit = false;\n rowResult.isFinish = true;\n //row.NestedGridLayoutResult.bounds.height = row.rowBreakHeightValue;\n //this.currentBounds.y = rowResult.bounds.y;\n for (var i_4 = 0; i_4 < row.cells.count; i_4++) {\n if (row.cells.getCell(i_4).value instanceof PdfGrid) {\n row.cells.getCell(i_4).value.splitChildRowIndex = -1;\n }\n }\n }\n }\n // else if (!this.Grid.allowRowBreakAcrossPages && i < length)\n // {\n // this.currentPage = this.getNextPageformat(format);\n // break;\n // }\n // else if (i >= length)\n // break;\n }\n if (!rowResult.isFinish && startPage !== null && format.layout !== PdfLayoutType.OnePage && repeatRow) {\n // During pagination, cell position is maintained here.\n this.startLocation.x = this.currentBounds.x;\n var isAddNextPage = false;\n this.currentPage = this.getNextPageformat(format);\n /*if (!this.Grid.isSingleGrid)\n {\n for ( let j : number= 0; j < this.Grid.rows.count; j++)\n {\n let isWidthGreaterthanParent : boolean = false;\n for (let k : number = 0; k < this.Grid.rows.getRow(j).cells.count; k++)\n {\n if (this.Grid.rows.getRow(j).cells.getCell(k).width > this.currentPageBounds.width)\n isWidthGreaterthanParent = true;\n }\n if (isWidthGreaterthanParent && this.Grid.rows.getRow(j).cells.getCell(this.rowBreakPageHeightCellIndex).pageCount > 0)\n {\n isAddNextPage = true;\n }\n }\n }\n if (!this.Grid.isRearranged && isAddNextPage)\n {\n let section : PdfSection = this.currentPage.section;\n \n //this.currentPage = section.add();\n \n this.currentGraphics = this.currentPage.graphics;\n this.currentBounds = new RectangleF(new PointF(0,0), this.currentPage.getClientSize());\n \n let pageindex : number = (this.currentGraphics.page as PdfPage).section.indexOf(this.currentGraphics.page as PdfPage);\n }\n else\n {\n this.currentPage = this.getNextPageformat(format);\n }\n if (format.paginateBounds.y == 0)\n this.currentBounds.y = PdfBorders.default.top.width/2;\n else\n {\n this.currentBounds.y = format == null ? 0 : format.paginateBounds.y;\n \n }\n if (this.raiseBeforePageLayout(this.currentPage, this.currentBounds, this.currentRowIndex))\n break;*/\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.height > 0 && !this.Grid.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.y > 0 && !this.Grid.isChildGrid) {\n this.currentBounds.y = param.bounds.y;\n }\n this.startLocation.y = this.currentBounds.y;\n if ((format.paginateBounds.x === format.paginateBounds.y) &&\n (format.paginateBounds.y === format.paginateBounds.height) &&\n (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n }\n if (this.currentBounds.x === PdfBorders.default.left.width / 2) {\n this.currentBounds.y += this.startLocation.x;\n }\n if (this.Grid.repeatHeader) {\n for (var i_5 = 0; i_5 < this.Grid.headers.count; i_5++) {\n var header = this.Grid.headers.getHeader(i_5);\n this.drawRow(header);\n }\n }\n this.drawRow(row);\n if (this.currentPage !== null && !layoutedPages.containsKey(this.currentPage)) {\n layoutedPages.add(this.currentPage, range);\n }\n }\n if (row.NestedGridLayoutResult != null) {\n // Position for next row in the grid.\n this.currentPage = row.NestedGridLayoutResult.page;\n this.currentGraphics = this.currentPage.graphics; //If not, next row will not be drawn in the layouted page.\n this.startLocation = new PointF(row.NestedGridLayoutResult.bounds.x, row.NestedGridLayoutResult.bounds.y);\n var recalHeight = this.ReCalculateHeight(row, row.NestedGridLayoutResult.bounds.height);\n this.currentBounds.y = recalHeight;\n //this.currentBounds.y = row.NestedGridLayoutResult.bounds.height;\n if (startPage != this.currentPage) {\n var secion = this.currentPage.section;\n var startIndex = secion.indexOf(startPage) + 1;\n var endIndex = secion.indexOf(this.currentPage);\n for (var page = startIndex; page < endIndex + 1; page++) {\n var pageGraphics = this.currentPage.graphics;\n var location_2 = new PointF(format.paginateBounds.x, format.paginateBounds.y);\n var height = page == endIndex ? (row.NestedGridLayoutResult.bounds.height - param.bounds.y) :\n (this.currentBounds.height - location_2.y);\n if (height <= pageGraphics.clientSize.height)\n height += param.bounds.y;\n // if (row.grid.isChildGrid && row.grid.ParentCell != null)\n // location.x += param.bounds.x;\n location_2.y = format == null ? 0.5 : format.paginateBounds.y;\n // Draw border for last paginated row containing nested grid.\n for (var c = 0; c < row.cells.count; c++) {\n var cell = row.cells.getCell(c);\n var cellWidth = 0;\n var totalwidth = 0;\n if (cell.value instanceof PdfGrid) {\n for (var i_6 = 0; i_6 < cell.value.columns.count; i_6++) {\n totalwidth += cell.value.columns.getColumn(i_6).columnWidth;\n }\n }\n else {\n totalwidth = cell.width;\n }\n // if (cell.columnSpan > 1)\n // {\n // for (; c < cell.columnSpan; c++)\n // cellWidth += row.grid.columns.getColumn(c).width;\n // }\n // else\n cellWidth = Math.max(totalwidth, row.grid.columns.getColumn(c).width);\n cell.drawCellBorders(pageGraphics, new RectangleF(location_2, new SizeF(cellWidth, height)));\n location_2.x += cellWidth;\n c += (cell.columnSpan - 1);\n }\n }\n // So, nested grid drawing is completed for the current row. Update page.\n // Otherwise, the next nested grid of the parent will draw borders from start.\n startPage = this.currentPage;\n }\n }\n }\n var isPdfGrid = false;\n var maximumCellBoundsWidth = 0;\n if (cellBounds.length > 0) {\n maximumCellBoundsWidth = cellBounds[0];\n }\n var largeNavigatePage = [[1, 2]];\n for (var c = 0; c < this.Grid.rows.count; c++) {\n if (this.cellEndIndex != -1 && this.Grid.rows.getRow(c).cells.getCell(this.cellEndIndex).value instanceof PdfGrid) {\n var grid = this.Grid.rows.getRow(c).cells.getCell(this.cellEndIndex).value;\n this.rowLayoutBoundsWidth = grid.rowLayoutBoundsWidth;\n isPdfGrid = true;\n // if (largeNavigatePage[0][0] < grid.listOfNavigatePages.length)\n // {\n // largeNavigatePage[0][0] = grid.listOfNavigatePages.length;\n // largeNavigatePage[0][1] = cellBounds[c];\n // }\n // else if ((largeNavigatePage[0][0] == grid.listOfNavigatePages.length) && (largeNavigatePage[0][1] < cellBounds[c]))\n // {\n // largeNavigatePage[0][1] = cellBounds[c];\n // }\n }\n }\n if (!isPdfGrid && cellBounds.length > 0) {\n for (var c = 0; c < i - 1; c++) {\n if (maximumCellBoundsWidth < cellBounds[c]) {\n maximumCellBoundsWidth = cellBounds[c];\n }\n }\n this.rowLayoutBoundsWidth = maximumCellBoundsWidth;\n }\n else {\n this.rowLayoutBoundsWidth = largeNavigatePage[0][1];\n }\n if (this.columnRanges.indexOf(range) < this.columnRanges.length - 1\n && startPage != null && format.layout != PdfLayoutType.OnePage) {\n isParentCell = this.Grid.isChildGrid;\n if (largeNavigatePage[0][0] != 0) {\n var section = this.currentPage.section;\n var pageIndex = section.indexOf(this.currentPage);\n this.currentGraphics = this.currentPage.graphics;\n this.currentBounds = new RectangleF(new PointF(0, 0), this.currentPage.getClientSize());\n var pageindex = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n }\n else {\n this.currentPage = this.getNextPageformat(format);\n }\n // let locationGrid : PointF= new PointF(PdfBorders.default.right.width / 2, PdfBorders.default.top.width / 2);\n // if (format.paginateBounds == new RectangleF(0,0,0,0) && this.startLocation == locationGrid)\n // {\n // this.currentBounds.x += this.startLocation.x;\n // this.currentBounds.y += this.startLocation.y;\n // }\n }\n if (this.columnRanges.length - 1 !== index && this.columnRanges.length > 1 && format.layout !== PdfLayoutType.OnePage) {\n this.currentPage = this.getNextPageformat(format);\n if ((format.paginateBounds.x === format.paginateBounds.y) && (format.paginateBounds.y === format.paginateBounds.height)\n && (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n this.currentBounds.y += this.startLocation.y;\n //this.currentBounds.height = this.pageBounds.height;\n }\n }\n }\n result = this.getLayoutResult();\n if (this.Grid.style.allowHorizontalOverflow && this.Grid.style.horizontalOverflowType == PdfHorizontalOverflowType.NextPage) {\n this.reArrangePages(layoutedPages);\n }\n this.raisePageLayouted(result);\n return result;\n };\n /* tslint:enable */\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGridLayouter.prototype.getNextPageformat = function (format) {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n this.flag = false;\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n this.currentGraphics = nextPage.graphics;\n var pageindex = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n if (!(this.listOfNavigatePages.indexOf(pageindex) !== -1)) {\n this.listOfNavigatePages.push(pageindex);\n }\n this.currentBounds = new RectangleF(new PointF(0, 0), nextPage.getClientSize());\n // if ((format.paginateBounds.x !== format.paginateBounds.y) && (format.paginateBounds.y !== format.paginateBounds.height)\n // && (format.paginateBounds.height !== format.paginateBounds.width) && (format.paginateBounds.width !== 0)) {\n // this.currentBounds.x = format.paginateBounds.x;\n // this.currentBounds.y = format.paginateBounds.y;\n // this.currentBounds.height = format.paginateBounds.height;\n // }\n return nextPage;\n };\n PdfGridLayouter.prototype.CheckIfDefaultFormat = function (format) {\n var defaultFormat = new PdfStringFormat();\n return (format.alignment === defaultFormat.alignment && format.characterSpacing === defaultFormat.characterSpacing &&\n format.clipPath === defaultFormat.clipPath && format.firstLineIndent === defaultFormat.firstLineIndent &&\n format.horizontalScalingFactor === defaultFormat.horizontalScalingFactor &&\n format.lineAlignment === defaultFormat.lineAlignment\n && format.lineLimit === defaultFormat.lineLimit && format.lineSpacing === defaultFormat.lineSpacing &&\n format.measureTrailingSpaces === defaultFormat.measureTrailingSpaces && format.noClip === defaultFormat.noClip &&\n format.paragraphIndent === defaultFormat.paragraphIndent && format.rightToLeft === defaultFormat.rightToLeft &&\n format.subSuperScript === defaultFormat.subSuperScript && format.wordSpacing === defaultFormat.wordSpacing &&\n format.wordWrap === defaultFormat.wordWrap);\n };\n /**\n * `Raises BeforeCellDraw event`.\n * @private\n */\n PdfGridLayouter.prototype.RaiseBeforeCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, style) {\n var args = null;\n if (this.Grid.raiseBeginCellDraw) {\n args = new PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style);\n this.Grid.onBeginCellDraw(args);\n style = args.style;\n }\n return style;\n };\n /**\n * `Raises AfterCellDraw event`.\n * @private\n */\n PdfGridLayouter.prototype.raiseAfterCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, cellstyle) {\n var args = null;\n if (this.Grid.raiseEndCellDraw) {\n args = new PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, cellstyle);\n this.Grid.onEndCellDraw(args);\n }\n };\n PdfGridLayouter.prototype.reArrangePages = function (layoutedPages) {\n var document = this.currentPage.document;\n var pages = [];\n var keys = layoutedPages.keys();\n var values = layoutedPages.values();\n for (var i = 0; i < keys.length; i++) {\n var page = keys[i];\n page.section = null;\n pages.push(page);\n document.pages.remove(page);\n }\n /* tslint:disable */\n for (var i = 0; i < layoutedPages.size(); i++) {\n var count = 0;\n for (var j = i, count_1 = (layoutedPages.size() / this.columnRanges.length); j < layoutedPages.size(); j += count_1) {\n var page = pages[j];\n if (document.pages.indexOf(page) === -1) {\n document.pages.add(page);\n }\n }\n }\n /* tslint:enable */\n };\n /**\n * Gets the `layout result`.\n * @private\n */\n PdfGridLayouter.prototype.getLayoutResult = function () {\n if (this.Grid.isChildGrid && this.Grid.allowRowBreakAcrossPages) {\n for (var i = 0; i < this.Grid.rows.count; i++) {\n var row = this.Grid.rows.getRow(i);\n if (row.rowBreakHeight > 0 && row.repeatFlag) {\n this.startLocation.y = this.currentPage.origin.y;\n }\n }\n }\n var bounds;\n if (!this.isChanged) {\n bounds = new RectangleF(this.startLocation, new SizeF(this.currentBounds.width, this.currentBounds.y -\n this.startLocation.y));\n }\n // else {\n // bounds = new RectangleF(this.currentLocation, new SizeF(this.currentBounds.width, this.currentBounds.y -\n // this.currentLocation.y));\n // }\n /* tslint:enable */\n return new PdfGridLayoutResult(this.currentPage, bounds);\n };\n /**\n * `Recalculate row height` for the split cell to be drawn.\n * @private\n */\n PdfGridLayouter.prototype.ReCalculateHeight = function (row, height) {\n var newHeight = 0.0;\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n if (!(row.cells.getCell(i).remainingString === null || row.cells.getCell(i).remainingString === '' ||\n typeof row.cells.getCell(i).remainingString === 'undefined')) {\n newHeight = Math.max(newHeight, row.cells.getCell(i).measureHeight());\n }\n }\n return Math.max(height, newHeight);\n };\n /**\n * `Raises BeforePageLayout event`.\n * @private\n */\n PdfGridLayouter.prototype.raiseBeforePageLayout = function (currentPage, currentBounds, currentRow) {\n var cancel = false;\n if (this.Grid.raiseBeginPageLayout) {\n var args = new PdfGridBeginPageLayoutEventArgs(currentBounds, currentPage, currentRow);\n this.Grid.onBeginPageLayout(args);\n // if (currentBounds !== args.Bounds) {\n // this.isChanged = true;\n // this.currentLocation = new PointF(args.Bounds.x, args.Bounds.y);\n // this.measureColumnsWidth(new RectangleF(new PointF(args.Bounds.x, args.Bounds.y) ,\n // new SizeF(args.Bounds.width + args.Bounds.x ,\n // args.Bounds.height)));\n // }\n cancel = args.cancel;\n currentBounds = args.bounds;\n currentRow = args.startRowIndex;\n }\n return { returnValue: cancel, currentBounds: currentBounds, currentRowIndex: currentRow };\n };\n /**\n * `Raises PageLayout event` if needed.\n * @private\n */\n PdfGridLayouter.prototype.raisePageLayouted = function (result) {\n var args = new PdfGridEndPageLayoutEventArgs(result);\n if (this.Grid.raiseEndPageLayout) {\n this.Grid.onEndPageLayout(args);\n }\n return args;\n };\n PdfGridLayouter.prototype.drawRow = function (row, result, height) {\n if (typeof result === 'undefined') {\n //.. Check if required space available.\n //.....If the row conains spans which falls through more than one page, then draw the row to next page. \n var result_1 = new RowLayoutResult();\n var rowHeightWithSpan = 0;\n var location_3 = new PointF(0, 0);\n var size = new SizeF(0, 0);\n var isHeader = false;\n if (row.rowSpanExists) {\n var maxSpan = 0;\n var currRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n if (currRowIndex === -1) {\n currRowIndex = this.Grid.headers.indexOf(row);\n if (currRowIndex !== -1) {\n isHeader = true;\n }\n }\n for (var i = 0; i < row.cells.count; i++) {\n var cell = row.cells.getCell(i);\n maxSpan = Math.max(maxSpan, cell.rowSpan);\n }\n for (var i = currRowIndex; i < currRowIndex + maxSpan; i++) {\n rowHeightWithSpan += (isHeader ? this.Grid.headers.getHeader(i).height : this.Grid.rows.getRow(i).height);\n }\n // let rowMaxHeight : number = rowHeightWithSpan;\n // for (let i : number = 0; i < row.cells.count; i++ ) {\n // rowMaxHeight = rowMaxHeight > row.cells.getCell(i).height ? rowMaxHeight : row.cells.getCell(i).height;\n // }\n // let flag : boolean = true;\n // let nextRow : PdfGridRow = this.Grid.headers.getHeader(this.Grid.headers.indexOf(row) + 1);\n // for (let i : number = 0; i < nextRow.cells.count; i++ ) {\n // if (nextRow.cells.getCell(i).value !== '' && nextRow.cells.getCell(i).value !== undefined) {\n // flag = false;\n // break;\n // }\n // }\n // if ((rowMaxHeight > rowHeightWithSpan) && flag) {\n // row.height += (rowMaxHeight - rowHeightWithSpan);\n // } \n }\n var calculatedHeight = row.rowBreakHeight > 0.0 ? row.rowBreakHeight : row.height;\n if (this.Grid.isChildGrid && this.Grid.ParentCell != null) {\n //Split row only if row height exceeds page height and AllowRowBreakAcrossPages is true.\n // if (calculatedHeight + this.Grid.ParentCell.row.grid.style.cellPadding.bottom +\n // this.Grid.ParentCell.row.grid.style.cellPadding.top > this.currentPageBounds.height) {\n // if (this.Grid.allowRowBreakAcrossPages) {\n // result.isFinish = true;\n // if ( this.Grid.isChildGrid && row.rowBreakHeight > 0 ) {\n // if (this.Grid.ParentCell.row.grid.style.cellPadding !== null) {\n // this.currentBounds.y += this.Grid.ParentCell.row.grid.style.cellPadding.top;\n // }\n // this.currentBounds.x = this.startLocation.x;\n // }\n // result.bounds = this.currentBounds ;\n // this.drawRowWithBreak(result, row, calculatedHeight);\n // } else {\n // //If AllowRowBreakAcrossPages is not true, draw the row till it fits the page. \n // if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n // this.currentBounds.y += this.Grid.ParentCell.row.grid.style.cellPadding.top;\n // calculatedHeight = this.currentBounds.height - this.currentBounds.y -\n // this.Grid.ParentCell.row.grid.style.cellPadding.bottom;\n // }\n // result.isFinish = false;\n // this.drawRow( row, result, calculatedHeight);\n // }\n // } else\n if (this.currentBounds.y + this.Grid.ParentCell.row.grid.style.cellPadding.bottom + calculatedHeight >\n this.currentPageBounds.height || this.currentBounds.y + this.Grid.ParentCell.row.grid.style.cellPadding.bottom\n + calculatedHeight > this.currentBounds.height || this.currentBounds.y +\n this.Grid.ParentCell.row.grid.style.cellPadding.bottom + rowHeightWithSpan > this.currentPageBounds.height) {\n //If a row is repeated and still cannot fit in page, proceed draw.\n if (this.Grid.ParentCell.row.grid.LayoutFormat.break === PdfLayoutBreakType.FitPage) {\n PdfGridLayouter.repeatRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n this.Grid.splitChildRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n }\n if (PdfGridLayouter.repeatRowIndex > -1 && PdfGridLayouter.repeatRowIndex === row.rowIndex) {\n if (this.Grid.allowRowBreakAcrossPages) {\n result_1.isFinish = true;\n // if (this.Grid.isChildGrid && row.rowBreakHeightValue > 0) {\n // // if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n // // this.currentBounds.y += this.Grid.ParentCell.row.grid.style.cellPadding.top;\n // // }\n // this.currentBounds.x = this.startLocation.x;\n // }\n result_1.bounds = this.currentBounds;\n this.drawRowWithBreak(result_1, row, calculatedHeight);\n row.repeatFlag = true;\n row.repeatRowNumber = PdfGridLayouter.repeatRowIndex;\n }\n // else {\n // result.isFinish = false;\n // row.repeatFlag = false;\n // this.drawRow( row, result, calculatedHeight);\n // }\n }\n // else {\n // result.isFinish = false;\n // }\n }\n else {\n result_1.isFinish = true;\n if (row.grid.ParentCell.row.rowBreakHeightValue > 0) {\n row.repeatFlag = true;\n }\n else {\n row.repeatFlag = false;\n calculatedHeight = row.height;\n }\n if (this.Grid.isChildGrid && row.rowBreakHeight > 0) {\n if (this.Grid.ParentCell.row.grid.style.cellPadding != null) {\n calculatedHeight += this.Grid.ParentCell.row.grid.style.cellPadding.bottom;\n }\n }\n this.drawRow(row, result_1, calculatedHeight);\n }\n }\n else {\n //Split row only if row height exceeds page height and AllowRowBreakAcrossPages is true.\n if (calculatedHeight > this.currentPageBounds.height) {\n if (this.Grid.allowRowBreakAcrossPages) {\n result_1.isFinish = true;\n //result.bounds = this.currentBounds;\n this.drawRowWithBreak(result_1, row, calculatedHeight);\n row.isrowFinish = true;\n row.repeatFlag = true;\n if (row.grid.splitChildRowIndex !== -1) {\n result_1.isFinish = false;\n }\n }\n // else {\n // //If AllowRowBreakAcrossPages is not true, draw the row till it fits the page.\n // result.isFinish = false;\n // this.drawRow( row, result, calculatedHeight);\n // }\n }\n else if (this.currentBounds.y + calculatedHeight > this.currentPageBounds.height ||\n this.currentBounds.y + calculatedHeight > (this.currentBounds.height + this.startLocation.y) ||\n this.currentBounds.y + rowHeightWithSpan > this.currentPageBounds.height) {\n // If a row is repeated and still cannot fit in page, proceed draw.\n if (this.Grid.LayoutFormat.break === PdfLayoutBreakType.FitPage) {\n PdfGridLayouter.repeatRowIndex = this.Grid.rows.rowCollection.indexOf(row);\n }\n if (PdfGridLayouter.repeatRowIndex > -1 && PdfGridLayouter.repeatRowIndex === row.rowIndex) {\n if (this.Grid.allowRowBreakAcrossPages) {\n result_1.isFinish = true;\n this.drawRowWithBreak(result_1, row, calculatedHeight);\n row.repeatFlag = true;\n row.repeatRowNumber = PdfGridLayouter.repeatRowIndex;\n if (row.grid.splitChildRowIndex !== -1) {\n result_1.isFinish = false;\n }\n }\n // else {\n // result.isFinish = false;\n // this.drawRow(row, result, calculatedHeight);\n // }\n }\n else {\n result_1.isFinish = false;\n }\n }\n else {\n result_1.isFinish = true;\n this.drawRow(row, result_1, calculatedHeight);\n row.repeatFlag = false;\n }\n }\n return result_1;\n }\n else {\n var skipcell = false;\n var location_4 = new PointF(this.currentBounds.x, this.currentBounds.y);\n // if (row.grid.isChildGrid && row.grid.allowRowBreakAcrossPages && this.startLocation.x !== this.currentBounds.x && row.width <\n // this.currentPage.getClientSize().width) {\n // location.x = this.startLocation.x;\n // }\n result.bounds = new RectangleF(location_4, new SizeF(0, 0));\n height = this.ReCalculateHeight(row, height);\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n var cancelSpans = ((i > this.cellEndIndex + 1) && (row.cells.getCell(i).columnSpan > 1));\n // let cancelSpans : boolean = false;\n if (!cancelSpans) {\n for (var j = 1; j < row.cells.getCell(i).columnSpan; j++) {\n row.cells.getCell(i + j).isCellMergeContinue = true;\n }\n }\n var size = new SizeF(this.Grid.columns.getColumn(i).width, height);\n // if (size.width > this.currentGraphics.clientSize.width) {\n // size.width = this.currentGraphics.clientSize.width;\n // }\n // if (this.Grid.isChildGrid && this.Grid.style.allowHorizontalOverflow) {\n // if (size.width >= this.currentGraphics.clientSize.width) {\n // size.width -= 2 * this.currentBounds.x;\n // }\n // }\n /* tslint:disable */\n if (!this.CheckIfDefaultFormat(this.Grid.columns.getColumn(i).format) &&\n this.CheckIfDefaultFormat(row.cells.getCell(i).stringFormat)) {\n row.cells.getCell(i).stringFormat = this.Grid.columns.getColumn(i).format;\n }\n var cellstyle = row.cells.getCell(i).style;\n var tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n row.cells.getCell(i).style = this.RaiseBeforeCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_4, size), tempValue, cellstyle);\n //row.cells.getCell(i).style = cellstyle;\n if (!skipcell) {\n if (row.cells.getCell(i).value instanceof PdfGrid) {\n var grid = row.cells.getCell(i).value;\n grid.parentCellIndex = i;\n }\n var stringResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location_4, size), cancelSpans);\n if (row.grid.style.allowHorizontalOverflow && (row.cells.getCell(i).columnSpan > this.cellEndIndex ||\n i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1) && this.cellEndIndex < row.cells.count - 1) {\n row.rowOverflowIndex = this.cellEndIndex;\n }\n if (row.grid.style.allowHorizontalOverflow && (row.rowOverflowIndex > 0 && (row.cells.getCell(i).columnSpan >\n this.cellEndIndex || i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1)) &&\n row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1 > 0) {\n row.cells.getCell(row.rowOverflowIndex + 1).value = stringResult !== null ? (stringResult.remainder !== undefined) ?\n stringResult.remainder : '' : '';\n row.cells.getCell(row.rowOverflowIndex + 1).stringFormat = row.cells.getCell(i).stringFormat;\n row.cells.getCell(row.rowOverflowIndex + 1).style = row.cells.getCell(i).style;\n row.cells.getCell(row.rowOverflowIndex + 1).columnSpan = row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1;\n }\n }\n /* tslint:enable */\n tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n if (!cancelSpans) {\n this.raiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_4, size), tempValue, row.cells.getCell(i).style);\n }\n if (row.cells.getCell(i).value instanceof PdfGrid) {\n var grid = row.cells.getCell(i).value;\n if (this.Grid.columns.getColumn(i).width >= this.currentGraphics.clientSize.width) {\n location_4.x = grid.rowLayoutBoundsWidth;\n location_4.x += grid.style.cellSpacing;\n }\n else {\n location_4.x += this.Grid.columns.getColumn(i).width;\n }\n }\n else {\n location_4.x += this.Grid.columns.getColumn(i).width;\n }\n }\n if (!row.rowMergeComplete || row.isRowHeightSet) {\n this.currentBounds.y += height;\n }\n result.bounds = new RectangleF(new PointF(result.bounds.x, result.bounds.y), new SizeF(location_4.x, location_4.y));\n }\n };\n PdfGridLayouter.prototype.drawRowWithBreak = function (result, row, calculateHeight) {\n var location = new PointF(this.currentBounds.x, this.currentBounds.y);\n if (row.grid.isChildGrid && row.grid.allowRowBreakAcrossPages && this.startLocation.x !== this.currentBounds.x) {\n location.x = this.startLocation.x;\n }\n result.bounds = new RectangleF(location, new SizeF(0, 0));\n this.gridHeight = row.rowBreakHeight > 0 ? this.currentPageBounds.height : 0;\n // Calculate the remaining height.\n if (row.grid.style.cellPadding.top + this.currentBounds.y + row.grid.style.cellPadding.bottom < this.currentPageBounds.height) {\n row.rowBreakHeight = this.currentBounds.y + calculateHeight - this.currentPageBounds.height;\n }\n // else {\n // row.rowBreakHeight = calculateHeight;\n // result.isFinish = false;\n // return;\n // }\n // No need to explicit break if the row height is equal to grid height.\n for (var i = 0; i < row.cells.count; i++) {\n var cell = row.cells.getCell(i);\n var cellHeight = cell.measureHeight();\n if (cellHeight === calculateHeight && cell.value instanceof PdfGrid) {\n row.rowBreakHeight = 0;\n }\n // else if (cellHeight === calculateHeight && (cell.value as PdfGrid) === null) {\n // row.rowBreakHeight = this.currentBounds.y + calculateHeight - this.currentPageBounds.height;\n // }\n }\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n var cancelSpans = ((row.cells.getCell(i).columnSpan + i > this.cellEndIndex + 1) &&\n (row.cells.getCell(i).columnSpan > 1));\n // if (!cancelSpans) {\n // for (let k : number = 1; k < row.cells.getCell(i).columnSpan; k++) {\n // row.cells.getCell(i + k).isCellMergeContinue = true;\n // }\n //}\n var size = new SizeF(this.Grid.columns.getColumn(i).width, this.gridHeight > 0.0 ? this.gridHeight :\n this.currentPageBounds.height);\n // if (size.width === 0) {\n // size = new SizeF(row.cells.getCell(i).width, size.height);\n // }\n // if (!this.CheckIfDefaultFormat(this.Grid.columns.getColumn(i).format) &&\n // this.CheckIfDefaultFormat((row.cells.getCell(i).stringFormat))) {\n // row.cells.getCell(i).stringFormat = this.Grid.columns.getColumn(i).format;\n // }\n var cellstyle1 = row.cells.getCell(i).style;\n row.cells.getCell(i).style = cellstyle1;\n var skipcell = false;\n var stringResult = null;\n if (!skipcell) {\n stringResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location, size), cancelSpans);\n }\n //If still row is to be drawn, set cell finished drawing cell as false and update the text to be drawn.\n if (row.rowBreakHeight > 0.0) {\n if (stringResult != null) {\n row.cells.getCell(i).FinishedDrawingCell = false;\n row.cells.getCell(i).remainingString = stringResult.remainder == null ? ' ' : stringResult.remainder;\n if (row.grid.isChildGrid) {\n row.rowBreakHeight = calculateHeight - stringResult.actualSize.height;\n }\n }\n }\n result.isFinish = (!result.isFinish) ? result.isFinish : row.cells.getCell(i).FinishedDrawingCell;\n // let tempValue : string = ((typeof row.cells.getCell(i).value === 'string' &&\n //row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '') as string;\n // if (!cancelSpans) {\n // // this.raiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i,\n // // new RectangleF(location, size), tempValue, row.cells.getCell(i).style); \n // this.raiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location, size),\n // (row.cells.getCell(i).value as string) ? row.cells.getCell(i).value.toString() : ' ',\n // row.cells.getCell(i).style);\n // } \n if (row.cells.getCell(i).value instanceof PdfGrid) {\n var grid = row.cells.getCell(i).value;\n this.rowBreakPageHeightCellIndex = i;\n // row.cells.getCell(i).pageCount = grid.listOfNavigatePages.length;\n // for (let j : number = 0;j= this.currentGraphics.clientSize.width) {\n location.x = this.rowLayoutBoundsWidth;\n location.x += grid.style.cellSpacing;\n }\n else {\n location.x += this.Grid.columns.getColumn(i).width;\n }\n }\n else {\n location.x += this.Grid.columns.getColumn(i).width;\n }\n }\n this.currentBounds.y += this.gridHeight > 0.0 ? this.gridHeight : calculateHeight;\n result.bounds = new RectangleF(new PointF(result.bounds.x, result.bounds.y), new SizeF(location.x, location.y));\n };\n /**\n * @hidden\n * @private\n */\n PdfGridLayouter.repeatRowIndex = -1;\n return PdfGridLayouter;\n}(ElementLayouter));\nexport { PdfGridLayouter };\n// recalculateBounds : boolean, clientSize : SizeF\n//Implementation\n/**\n * `Initializes` internal data.\n * @private\n */\n//Internal declaration\nvar PdfGridLayoutResult = /** @class */ (function (_super) {\n __extends(PdfGridLayoutResult, _super);\n /**\n * Constructor\n * @private\n */\n function PdfGridLayoutResult(page, bounds) {\n return _super.call(this, page, bounds) || this;\n }\n return PdfGridLayoutResult;\n}(PdfLayoutResult));\nexport { PdfGridLayoutResult };\n/**\n * `PdfGridLayoutFormat` class represents a flexible grid that consists of columns and rows.\n */\nvar PdfGridLayoutFormat = /** @class */ (function (_super) {\n __extends(PdfGridLayoutFormat, _super);\n /**\n * Initializes a new instance of the `PdfGridLayoutFormat` class.\n * @private\n */\n function PdfGridLayoutFormat(baseFormat) {\n var _this = this;\n if (typeof baseFormat === 'undefined') {\n _this = _super.call(this) || this;\n }\n else {\n _this = _super.call(this, baseFormat) || this;\n }\n return _this;\n }\n return PdfGridLayoutFormat;\n}(PdfLayoutFormat));\nexport { PdfGridLayoutFormat };\nvar GridCellEventArgs = /** @class */ (function () {\n // Constructors\n /**\n * Initialize a new instance for `GridCellEventArgs` class.\n * @private\n */\n function GridCellEventArgs(graphics, rowIndex, cellIndex, bounds, value) {\n this.gridRowIndex = rowIndex;\n this.gridCellIndex = cellIndex;\n this.internalValue = value;\n this.gridBounds = bounds;\n this.pdfGraphics = graphics;\n }\n Object.defineProperty(GridCellEventArgs.prototype, \"rowIndex\", {\n // Properties\n /**\n * Gets the value of current `row index`.\n * @private\n */\n get: function () {\n return this.gridRowIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"cellIndex\", {\n /**\n * Gets the value of current `cell index`.\n * @private\n */\n get: function () {\n return this.gridCellIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"value\", {\n /**\n * Gets the actual `value` of current cell.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of current cell.\n * @private\n */\n get: function () {\n return this.gridBounds;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"graphics\", {\n /**\n * Gets the instance of `current graphics`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n return GridCellEventArgs;\n}());\nexport { GridCellEventArgs };\nvar PdfGridBeginCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StartCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.style = style;\n return _this;\n }\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"skip\", {\n // Properties\n /**\n * Gets or sets a value indicating whether the value of this cell should be `skipped`.\n * @private\n */\n get: function () {\n return this.bSkip;\n },\n set: function (value) {\n this.bSkip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"style\", {\n /**\n * Gets or sets a `style` value of the cell.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridBeginCellDrawEventArgs };\nvar PdfGridEndCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfGridEndCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.cellStyle = style;\n return _this;\n }\n Object.defineProperty(PdfGridEndCellDrawEventArgs.prototype, \"style\", {\n // Propertise\n /**\n * Get the `PdfGridCellStyle`.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridEndCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridEndCellDrawEventArgs };\nvar PdfCancelEventArgs = /** @class */ (function () {\n function PdfCancelEventArgs() {\n }\n Object.defineProperty(PdfCancelEventArgs.prototype, \"cancel\", {\n // Properties\n /**\n * Gets and Sets the value of `cancel`.\n * @private\n */\n get: function () {\n return this.isCancel;\n },\n set: function (value) {\n this.isCancel = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCancelEventArgs;\n}());\nexport { PdfCancelEventArgs };\nvar BeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(BeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `BeginPageLayoutEventArgs` class with the specified rectangle and page.\n * @private\n */\n function BeginPageLayoutEventArgs(bounds, page) {\n var _this = _super.call(this) || this;\n _this.bounds = bounds;\n _this.pdfPage = page;\n return _this;\n }\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"bounds\", {\n // Properties\n /**\n * Gets or sets value that indicates the lay outing `bounds` on the page.\n * @private\n */\n get: function () {\n return this.cellBounds;\n },\n set: function (value) {\n this.cellBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"page\", {\n /**\n * Gets the `page` where the lay outing should start.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return BeginPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { BeginPageLayoutEventArgs };\n/**\n * `EndPageLayoutEventArgs` class is alternate for end page layout events.\n */\nvar EndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(EndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `EndPageLayoutEventArgs` class. with the specified 'PdfLayoutResult'.\n * @private\n */\n function EndPageLayoutEventArgs(result) {\n var _this = _super.call(this) || this;\n _this.layoutResult = result;\n return _this;\n }\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"result\", {\n // Properties\n /**\n * Gets the lay outing `result` of the page.\n * @private\n */\n get: function () {\n return this.layoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"nextPage\", {\n /**\n * Gets or sets a value indicating the `next page` where the element should be layout.\n * @private\n */\n get: function () {\n return this.nextPdfPage;\n },\n set: function (value) {\n this.nextPdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n return EndPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { EndPageLayoutEventArgs };\n/**\n * `PdfGridBeginPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridBeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridBeginPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginPageLayoutEventArgs(bounds, page, startRow) {\n var _this = _super.call(this, bounds, page) || this;\n _this.startRow = startRow;\n return _this;\n }\n Object.defineProperty(PdfGridBeginPageLayoutEventArgs.prototype, \"startRowIndex\", {\n // Properties\n /**\n * Gets the `start row index`.\n * @private\n */\n get: function () {\n return this.startRow;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginPageLayoutEventArgs;\n}(BeginPageLayoutEventArgs));\nexport { PdfGridBeginPageLayoutEventArgs };\n/**\n * `PdfGridEndPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridEndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridEndPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndPageLayoutEventArgs(result) {\n return _super.call(this, result) || this;\n }\n return PdfGridEndPageLayoutEventArgs;\n}(EndPageLayoutEventArgs));\nexport { PdfGridEndPageLayoutEventArgs };\nvar RowLayoutResult = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `RowLayoutResult` class.\n * @private\n */\n function RowLayoutResult() {\n this.layoutedBounds = new RectangleF(0, 0, 0, 0);\n }\n Object.defineProperty(RowLayoutResult.prototype, \"isFinish\", {\n /**\n * Gets or sets a value indicating whether this instance `is finish`.\n * @private\n */\n get: function () {\n return this.bIsFinished;\n },\n set: function (value) {\n this.bIsFinished = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RowLayoutResult.prototype, \"bounds\", {\n /**\n * Gets or sets the `bounds`.\n * @private\n */\n get: function () {\n return this.layoutedBounds;\n },\n set: function (value) {\n this.layoutedBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n return RowLayoutResult;\n}());\nexport { RowLayoutResult };\n","import * as events from '../base/constant';\nimport { PdfDocument, PdfGrid, PdfBorders, PdfPen, PdfPaddings } from '@syncfusion/ej2-pdf-export';\nimport { PdfStandardFont, PdfFontFamily, PdfFontStyle, PdfBitmap } from '@syncfusion/ej2-pdf-export';\nimport { PdfStringFormat, PdfTextAlignment, PdfColor, PdfSolidBrush } from '@syncfusion/ej2-pdf-export';\nimport { PdfVerticalAlignment, RectangleF, PdfPageTemplateElement } from '@syncfusion/ej2-pdf-export';\nimport { PointF, PdfPageNumberField, PdfCompositeField } from '@syncfusion/ej2-pdf-export';\nimport { PdfPageCountField, SizeF, PdfPageSettings, PdfPageOrientation } from '@syncfusion/ej2-pdf-export';\nimport { ExportHelper, ExportValueFormatter } from './export-helper';\nimport { Data } from '../actions/data';\nimport { SummaryModelGenerator, GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { compile, getEnumValue, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { getValue } from '@syncfusion/ej2-base';\nimport { getUid, getPrintGridModel } from '../base/util';\n/**\n * `PDF Export` module is used to handle the exportToPDF action.\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for the Grid PDF Export module\n * @hidden\n */\n function PdfExport(parent) {\n this.hideColumnInclude = false;\n this.currentViewData = false;\n this.customDataSource = false;\n this.isGrouping = false;\n this.parent = parent;\n this.helper = new ExportHelper(parent);\n this.gridPool = {};\n }\n /**\n * For internal use only - Get the module name.\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n PdfExport.prototype.init = function (parent) {\n this.exportValueFormatter = new ExportValueFormatter(parent.locale);\n this.pdfDocument = undefined;\n this.hideColumnInclude = false;\n this.currentViewData = false;\n this.parent = parent;\n this.isGrouping = false;\n this.isExporting = true;\n parent.id = getUid('main-grid');\n this.gridPool[parent.id] = false;\n };\n PdfExport.prototype.exportWithData = function (parent, pdfDoc, resolve, returnType, pdfExportProperties, isMultipleExport) {\n var _this = this;\n this.init(parent);\n if (!isNullOrUndefined(pdfDoc)) {\n this.pdfDocument = pdfDoc;\n }\n else {\n this.pdfDocument = new PdfDocument();\n }\n this.processExport(parent, returnType, pdfExportProperties, isMultipleExport).then(function () {\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n resolve(_this.pdfDocument);\n });\n };\n /**\n * Used to map the input data\n * @return {void}\n */\n PdfExport.prototype.Map = function (parent, pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n this.data = new Data(this.parent);\n this.isBlob = isBlob;\n this.gridPool = {};\n if (parent.childGrid && !(!isNullOrUndefined(pdfExportProperties) && pdfExportProperties.hierarchyExportMode === 'None')) {\n parent.expandedRows = getPrintGridModel(parent).expandedRows;\n }\n var args = {\n requestType: 'beforePdfExport', gridObject: parent, cancel: false\n };\n var can = 'cancel';\n parent.trigger(events.beforePdfExport, args);\n if (args[can] === true) {\n return new Promise(function (resolve, reject) {\n return resolve();\n });\n }\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)\n && pdfExportProperties.dataSource instanceof DataManager) {\n return new Promise(function (resolve, reject) {\n pdfExportProperties.dataSource.executeQuery(new Query()).then(function (returnType) {\n _this.exportWithData(parent, pdfDoc, resolve, returnType, pdfExportProperties, isMultipleExport);\n });\n });\n }\n else {\n var allPromise_1 = [];\n allPromise_1.push(this.data.getData({}, ExportHelper.getQuery(parent, this.data)));\n allPromise_1.push(this.helper.getColumnData(parent));\n return new Promise(function (resolve, reject) {\n Promise.all(allPromise_1).then(function (e) {\n _this.init(parent);\n if (!isNullOrUndefined(pdfDoc)) {\n _this.pdfDocument = pdfDoc;\n }\n else {\n _this.pdfDocument = new PdfDocument();\n }\n _this.processExport(parent, e[0], pdfExportProperties, isMultipleExport).then(function () {\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n resolve(_this.pdfDocument);\n });\n });\n });\n }\n };\n PdfExport.prototype.processExport = function (gObj, returnType, pdfExportProperties, isMultipleExport) {\n var _this = this;\n var section = this.pdfDocument.sections.add();\n var pdfGrid;\n this.processSectionExportProperties(section, pdfExportProperties);\n var pdfPage = section.pages.add();\n return new Promise(function (resolve, reject) {\n pdfGrid = _this.processGridExport(gObj, returnType, pdfExportProperties);\n _this.globalResolve = resolve;\n _this.gridPool[gObj.id] = true;\n _this.helper.checkAndExport(_this.gridPool, _this.globalResolve);\n }).then(function () {\n // draw the grid\n pdfGrid.draw(pdfPage, 0, 0);\n if (!isMultipleExport) {\n // save the PDF\n if (!_this.isBlob) {\n if (!isNullOrUndefined(pdfExportProperties) && pdfExportProperties.fileName) {\n _this.pdfDocument.save(pdfExportProperties.fileName);\n }\n else {\n _this.pdfDocument.save('Export.pdf');\n }\n }\n else {\n _this.blobPromise = _this.pdfDocument.save();\n }\n _this.pdfDocument.destroy();\n delete gObj.expandedRows;\n }\n return _this.pdfDocument;\n });\n };\n PdfExport.prototype.processSectionExportProperties = function (section, pdfExportProperties) {\n if (!isNullOrUndefined(pdfExportProperties) && (!isNullOrUndefined(pdfExportProperties.pageOrientation)\n || !isNullOrUndefined(pdfExportProperties.pageSize))) {\n var pdfPageSettings = new PdfPageSettings();\n pdfPageSettings.orientation = (pdfExportProperties.pageOrientation === 'Landscape') ?\n PdfPageOrientation.Landscape : PdfPageOrientation.Portrait;\n pdfPageSettings.size = this.getPageSize(pdfExportProperties.pageSize);\n section.setPageSettings(pdfPageSettings);\n }\n return section;\n };\n PdfExport.prototype.processGridExport = function (gObj, returnType, pdfExportProperties) {\n if (!isNullOrUndefined(pdfExportProperties)) {\n this.gridTheme = pdfExportProperties.theme;\n }\n var helper = new ExportHelper(gObj);\n var dataSource = this.processExportProperties(pdfExportProperties, returnType.result);\n var columns = gObj.enableColumnVirtualization ? gObj.getColumns() : gObj.columns;\n var isGrouping = false;\n if (gObj.groupSettings.columns.length) {\n isGrouping = true;\n }\n if (gObj.childGrid && !isNullOrUndefined(pdfExportProperties)) {\n gObj.hierarchyPrintMode = pdfExportProperties.hierarchyExportMode || 'Expanded';\n }\n // create a grid\n var pdfGrid = new PdfGrid();\n // get header theme style\n var headerThemeStyle = this.getHeaderThemeStyle();\n var border = headerThemeStyle.border;\n var headerFont = headerThemeStyle.font;\n var headerBrush = headerThemeStyle.brush;\n var returnValue = helper.getHeaders(columns, this.hideColumnInclude);\n // Column collection with respect to the records in the grid\n var gridColumns = returnValue.columns;\n // process grid header content\n pdfGrid = this.processGridHeaders(gObj.groupSettings.columns.length, pdfGrid, returnValue.rows, gridColumns, border, headerFont, headerBrush, gObj);\n // set alignment, width and type of the values of the column\n this.setColumnProperties(gridColumns, pdfGrid, helper, gObj);\n var captionThemeStyle = this.getSummaryCaptionThemeStyle();\n if (!isNullOrUndefined(dataSource) && dataSource.length) {\n if (isGrouping) {\n if (!isNullOrUndefined(captionThemeStyle.border)) {\n border = captionThemeStyle.border;\n }\n this.processGroupedRecords(pdfGrid, dataSource, gridColumns, gObj, border, 0, captionThemeStyle.font, captionThemeStyle.\n brush, captionThemeStyle.backgroundBrush, returnType, pdfExportProperties, helper, 0);\n }\n else {\n this.processRecord(border, gridColumns, gObj, dataSource, pdfGrid, 0, pdfExportProperties, helper, 0);\n }\n if (!isNullOrUndefined(returnType.aggregates)) {\n var summaryModel = new SummaryModelGenerator(gObj);\n var sRows = void 0;\n if (this.customDataSource) {\n sRows = summaryModel.generateRows(dataSource, returnType.aggregates);\n }\n else if (this.currentViewData) {\n sRows = summaryModel.generateRows(this.parent.getCurrentViewRecords(), returnType.aggregates);\n }\n else if (isGrouping) {\n sRows = summaryModel.generateRows(dataSource.records, returnType.aggregates);\n }\n else {\n sRows = summaryModel.generateRows(returnType.result, returnType.aggregates);\n }\n this.processAggregates(sRows, pdfGrid, border, captionThemeStyle.font, captionThemeStyle.brush, captionThemeStyle.backgroundBrush, false);\n }\n }\n else {\n var row = pdfGrid.rows.addRow();\n row.style.setBorder(border);\n }\n return pdfGrid;\n };\n PdfExport.prototype.getSummaryCaptionThemeStyle = function () {\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.caption)) {\n var fontSize = !isNullOrUndefined(this.gridTheme.caption.fontSize) ? this.gridTheme.caption.fontSize : 9.75;\n var fontFamily = !isNullOrUndefined(this.gridTheme.caption.fontName) ?\n this.getFontFamily(this.gridTheme.caption.fontName) : PdfFontFamily.Helvetica;\n var fontStyle = this.getFontStyle(this.gridTheme.caption);\n var pdfColor = new PdfColor(0, 0, 0);\n if (!isNullOrUndefined(this.gridTheme.caption.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.caption.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n var borderCaption = this.gridTheme.caption.border ? this.getBorderStyle(this.gridTheme.caption.border) : null;\n var font = new PdfStandardFont(fontFamily, fontSize, fontStyle);\n if (!isNullOrUndefined(this.gridTheme.caption.font)) {\n font = this.gridTheme.caption.font;\n }\n return { font: font, brush: new PdfSolidBrush(pdfColor), backgroundBrush: new PdfSolidBrush(new PdfColor(246, 246, 246)),\n border: borderCaption };\n }\n else {\n //Material theme\n return { font: new PdfStandardFont(PdfFontFamily.Helvetica, 9.75), brush: new PdfSolidBrush(new PdfColor(0, 0, 0)),\n backgroundBrush: new PdfSolidBrush(new PdfColor(246, 246, 246)) };\n }\n };\n PdfExport.prototype.getHeaderThemeStyle = function () {\n var border = new PdfBorders();\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.header)) {\n var fontFamily = !isNullOrUndefined(this.gridTheme.header.fontName) ?\n this.getFontFamily(this.gridTheme.header.fontName) : PdfFontFamily.Helvetica;\n var fontStyle = this.getFontStyle(this.gridTheme.header);\n var fontSize = !isNullOrUndefined(this.gridTheme.header.fontSize) ? this.gridTheme.header.fontSize : 10.5;\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.header.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.header.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n var font = new PdfStandardFont(fontFamily, fontSize, fontStyle);\n if (!isNullOrUndefined(this.gridTheme.header.font)) {\n font = this.gridTheme.header.font;\n }\n return { border: this.getBorderStyle(this.gridTheme.header.border), font: font, brush: new PdfSolidBrush(pdfColor) };\n }\n else {\n //Material theme\n border.all = new PdfPen(new PdfColor(234, 234, 234));\n return { border: border, font: new PdfStandardFont(PdfFontFamily.Helvetica, 10.5),\n brush: new PdfSolidBrush(new PdfColor(102, 102, 102)) };\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processGroupedRecords = function (pdfGrid, dataSource, gridColumns, gObj, border, level, font, brush, backgroundBrush, returnType, pdfExportProperties, helper, index) {\n var groupIndex = level;\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var dataSourceItems = dataSource_1[_i];\n var row = pdfGrid.rows.addRow();\n var col = gObj.getColumnByField(dataSourceItems.field);\n /* tslint:disable-next-line:no-any */\n var args = {\n value: dataSourceItems.key,\n column: col,\n style: undefined,\n isForeignKey: col.isForeignColumn(),\n };\n /* tslint:disable-next-line:max-line-length */\n var value = this.parent.getColumnByField(dataSourceItems.field).headerText + ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ' + dataSourceItems.count + (dataSource.count > 1 ? ' items' : ' item');\n row.cells.getCell(groupIndex).value = value;\n row.cells.getCell(groupIndex + 1).style.stringFormat = new PdfStringFormat(PdfTextAlignment.Left);\n row.style.setBorder(border);\n row.style.setFont(font);\n row.style.setTextBrush(brush);\n row.style.setBackgroundBrush(backgroundBrush);\n var sRows = void 0;\n var captionSummaryModel = new CaptionSummaryModelGenerator(gObj);\n if (!isNullOrUndefined(dataSourceItems.items.records)) {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items.records, dataSourceItems);\n }\n else {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items, dataSourceItems);\n }\n if (!isNullOrUndefined(sRows) && sRows.length === 0) {\n row.cells.getCell(groupIndex + 1).columnSpan = pdfGrid.columns.count - (groupIndex + 1);\n }\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, true, row, groupIndex);\n this.processGroupedRecords(pdfGrid, dataSourceItems.items, gridColumns, gObj, border, (groupIndex + 1), font, brush, backgroundBrush, returnType, pdfExportProperties, helper, index);\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items.records, dataSourceItems);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n else {\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, true, row, groupIndex);\n index = this.processRecord(border, gridColumns, gObj, dataSourceItems.items, pdfGrid, (groupIndex + 1), pdfExportProperties, helper, index);\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items, dataSourceItems);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n }\n };\n PdfExport.prototype.processGridHeaders = function (childLevels, pdfGrid, rows, gridColumn, border, headerFont, headerBrush, grid) {\n var columnCount = gridColumn.length + childLevels;\n // add columns\n pdfGrid.columns.add(columnCount);\n // add header\n pdfGrid.headers.add(rows.length);\n // set cell values of each rows in the header\n for (var i = 0; i < rows.length; i++) {\n var gridHeader = pdfGrid.headers.getHeader(i);\n gridHeader.style.setBorder(border);\n gridHeader.style.setFont(headerFont);\n gridHeader.style.setTextBrush(headerBrush);\n var colSpan = 0;\n var cellLength = rows[i].cells.length;\n for (var j = 0; j < cellLength; j++) {\n var cell = rows[i].cells[j];\n var pdfCell = gridHeader.cells.getCell(j + colSpan);\n switch (cell.cellType) {\n case CellType.HeaderIndent:\n case CellType.DetailHeader:\n pdfCell.value = '';\n pdfCell.width = 20;\n break;\n case CellType.Header:\n case CellType.StackedHeader:\n if (pdfCell.value !== null) {\n if (!isNullOrUndefined(cell.column.headerTextAlign)) {\n pdfCell.style.stringFormat = this.getHorizontalAlignment(cell.column.headerTextAlign);\n }\n if (!isNullOrUndefined(cell.rowSpan)) {\n pdfCell.rowSpan = cell.rowSpan;\n pdfCell.style.stringFormat = this.getVerticalAlignment('Bottom', pdfCell.style.stringFormat, cell.column.textAlign);\n for (var k = 1; k < rows[i].cells[j].rowSpan; k++) {\n pdfGrid.headers.getHeader(i + k).cells.getCell(j).value = null;\n }\n }\n if (!isNullOrUndefined(cell.colSpan)) {\n pdfCell.columnSpan = cell.colSpan;\n colSpan += cell.colSpan - 1;\n }\n pdfCell.value = cell.column.headerText;\n var args = {\n cell: pdfCell,\n gridCell: cell,\n style: pdfCell.style\n };\n this.parent.trigger(events.pdfHeaderQueryCellInfo, args);\n }\n else {\n colSpan += pdfCell.columnSpan;\n j = j - 1;\n }\n break;\n }\n }\n }\n if (pdfGrid.columns.count >= 6) {\n pdfGrid.style.allowHorizontalOverflow = true;\n }\n return pdfGrid;\n };\n PdfExport.prototype.processExportProperties = function (pdfExportProperties, dataSource) {\n if (!isNullOrUndefined(pdfExportProperties)) {\n if (!isNullOrUndefined(pdfExportProperties.theme)) {\n this.gridTheme = pdfExportProperties.theme;\n }\n var clientSize = this.pdfDocument.pageSettings.size;\n if (!isNullOrUndefined(pdfExportProperties.header)) {\n /* tslint:disable-next-line:no-any */\n var header = pdfExportProperties.header;\n var position = new PointF(0, header.fromTop);\n var size = new SizeF((clientSize.width - 80), (header.height * 0.75));\n var bounds = new RectangleF(position, size);\n this.pdfDocument.template.top = this.drawPageTemplate(new PdfPageTemplateElement(bounds), header);\n }\n if (!isNullOrUndefined(pdfExportProperties.footer)) {\n /* tslint:disable-next-line:no-any */\n var footer = pdfExportProperties.footer;\n var position = new PointF(0, ((clientSize.width - 80) - (footer.fromBottom * 0.75)));\n var size = new SizeF((clientSize.width - 80), (footer.height * 0.75));\n var bounds = new RectangleF(position, size);\n this.pdfDocument.template.bottom = this.drawPageTemplate(new PdfPageTemplateElement(bounds), footer);\n }\n if (!isNullOrUndefined(pdfExportProperties.includeHiddenColumn) && !this.isGrouping) {\n this.hideColumnInclude = pdfExportProperties.includeHiddenColumn;\n }\n if (!isNullOrUndefined(pdfExportProperties.dataSource)) {\n if (!(pdfExportProperties.dataSource instanceof DataManager)) {\n dataSource = pdfExportProperties.dataSource;\n }\n this.customDataSource = true;\n this.currentViewData = false;\n }\n else if (!isNullOrUndefined(pdfExportProperties.exportType)) {\n if (pdfExportProperties.exportType === 'CurrentPage') {\n dataSource = this.parent.currentViewData;\n this.currentViewData = true;\n this.customDataSource = false;\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n return dataSource;\n };\n PdfExport.prototype.drawPageTemplate = function (template, element) {\n for (var _i = 0, _a = element.contents; _i < _a.length; _i++) {\n var content = _a[_i];\n this.processContentValidation(content);\n switch (content.type) {\n case 'Text':\n /* tslint:disable-next-line:max-line-length */\n if (content.value === '' || content.value === undefined || content.value === null || typeof content.value !== 'string') {\n throw new Error('please enter the valid input value in text content...');\n }\n this.drawText(template, content);\n break;\n case 'PageNumber':\n this.drawPageNumber(template, content);\n break;\n case 'Image':\n if (content.src === undefined || content.src === null || content.src === '') {\n throw new Error('please enter the valid base64 string in image content...');\n }\n this.drawImage(template, content);\n break;\n case 'Line':\n this.drawLine(template, content);\n break;\n default:\n throw new Error('Please set valid content type...');\n }\n }\n return template;\n };\n PdfExport.prototype.processContentValidation = function (content) {\n if (content.type === undefined || content.type === null) {\n throw new Error('please set valid content type...');\n }\n else {\n if (content.type === 'Line') {\n if (content.points === undefined || content.points === null) {\n throw new Error('please enter valid points in ' + content.type + ' content...');\n }\n else {\n if (content.points.x1 === undefined || content.points.x1 === null || typeof content.points.x1 !== 'number') {\n throw new Error('please enter valid x1 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.y1 === undefined || content.points.y1 === null || typeof content.points.y1 !== 'number') {\n throw new Error('please enter valid y1 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.x2 === undefined || content.points.x2 === null || typeof content.points.x2 !== 'number') {\n throw new Error('please enter valid x2 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.y2 === undefined || content.points.y2 === null || typeof content.points.y2 !== 'number') {\n throw new Error('please enter valid y2 co-ordinate in ' + content.type + ' points...');\n }\n }\n }\n else {\n if (content.position === undefined || content.position === null) {\n throw new Error('please enter valid position in ' + content.type + ' content...');\n }\n else {\n if (content.position.x === undefined || content.position.x === null || typeof content.position.x !== 'number') {\n throw new Error('please enter valid x co-ordinate in ' + content.type + ' position...');\n }\n if (content.position.y === undefined || content.position.y === null || typeof content.position.y !== 'number') {\n throw new Error('please enter valid y co-ordinate in ' + content.type + ' position...');\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawText = function (pageTemplate, content) {\n var font = this.getFont(content);\n var brush = this.getBrushFromContent(content);\n var pen = null;\n if (!isNullOrUndefined(content.style.textPenColor)) {\n var penColor = this.hexToRgb(content.style.textPenColor);\n pen = new PdfPen(new PdfColor(penColor.r, penColor.g, penColor.b));\n }\n if (brush == null && pen == null) {\n brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var value = content.value.toString();\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var format;\n var result = this.setContentFormat(content, format);\n if (result !== null && !isNullOrUndefined(result.format) && !isNullOrUndefined(result.size)) {\n pageTemplate.graphics.drawString(value, font, pen, brush, x, y, result.size.width, result.size.height, result.format);\n }\n else {\n pageTemplate.graphics.drawString(value, font, pen, brush, x, y, format);\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawPageNumber = function (documentHeader, content) {\n var font = this.getFont(content);\n var brush = null;\n if (!isNullOrUndefined(content.style.textBrushColor)) {\n /* tslint:disable-next-line:max-line-length */\n var brushColor = this.hexToRgb(content.style.textBrushColor);\n brush = new PdfSolidBrush(new PdfColor(brushColor.r, brushColor.g, brushColor.b));\n }\n else {\n brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var pageNumber = new PdfPageNumberField(font, brush);\n pageNumber.numberStyle = this.getPageNumberStyle(content.pageNumberType);\n var compositeField;\n var format;\n if (!isNullOrUndefined(content.format)) {\n if (content.format.indexOf('$total') !== -1 && content.format.indexOf('$current') !== -1) {\n var pageCount = new PdfPageCountField(font);\n if (content.format.indexOf('$total') > content.format.indexOf('$current')) {\n format = content.format.replace('$current', '0');\n format = format.replace('$total', '1');\n }\n else {\n format = content.format.replace('$current', '1');\n format = format.replace('$total', '0');\n }\n compositeField = new PdfCompositeField(font, brush, format, pageNumber, pageCount);\n }\n else if (content.format.indexOf('$current') !== -1 && content.format.indexOf('$total') === -1) {\n format = content.format.replace('$current', '0');\n compositeField = new PdfCompositeField(font, brush, format, pageNumber);\n }\n else {\n var pageCount = new PdfPageCountField(font);\n format = content.format.replace('$total', '0');\n compositeField = new PdfCompositeField(font, brush, format, pageCount);\n }\n }\n else {\n format = '{0}';\n compositeField = new PdfCompositeField(font, brush, format, pageNumber);\n }\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var result = this.setContentFormat(content, compositeField.stringFormat);\n if (result !== null && !isNullOrUndefined(result.format) && !isNullOrUndefined(result.size)) {\n compositeField.stringFormat = result.format;\n compositeField.bounds = new RectangleF(x, y, result.size.width, result.size.height);\n }\n compositeField.draw(documentHeader.graphics, x, y);\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawImage = function (documentHeader, content) {\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var width = (!isNullOrUndefined(content.size)) ? (content.size.width * 0.75) : undefined;\n var height = (!isNullOrUndefined(content.size)) ? (content.size.height * 0.75) : undefined;\n var image = new PdfBitmap(content.src);\n if (!isNullOrUndefined(width)) {\n documentHeader.graphics.drawImage(image, x, y, width, height);\n }\n else {\n documentHeader.graphics.drawImage(image, x, y);\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawLine = function (documentHeader, content) {\n var x1 = content.points.x1 * 0.75;\n var y1 = content.points.y1 * 0.75;\n var x2 = content.points.x2 * 0.75;\n var y2 = content.points.y2 * 0.75;\n var pen = this.getPenFromContent(content);\n if (!isNullOrUndefined(content.style) && content.style !== null) {\n if (!isNullOrUndefined(content.style.penSize) && content.style.penSize !== null && typeof content.style.penSize === 'number') {\n pen.width = content.style.penSize * 0.75;\n }\n pen.dashStyle = this.getDashStyle(content.style.dashStyle);\n }\n documentHeader.graphics.drawLine(pen, x1, y1, x2, y2);\n };\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processAggregates = function (sRows, pdfGrid, border, font, brush, backgroundBrush, isCaption, captionRow, groupIndex) {\n for (var _i = 0, sRows_1 = sRows; _i < sRows_1.length; _i++) {\n var row = sRows_1[_i];\n var startIndex = 0;\n var leastCaptionSummaryIndex = -1;\n var index = 0;\n var isEmpty = true;\n /* tslint:disable-next-line:no-any */\n var value = [];\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n var cell = row.cells[index];\n if (cell.cellType === CellType.DetailFooterIntent) {\n i--;\n index++;\n continue;\n }\n if (!this.hideColumnInclude) {\n while (cell.visible === undefined) {\n if (cell.cellType === CellType.DetailFooterIntent) {\n continue;\n }\n if (!isNullOrUndefined(captionRow)) {\n if (!isNullOrUndefined(captionRow.cells.getCell(i).value)) {\n value.push('');\n value.push(captionRow.cells.getCell(i).value);\n isEmpty = false;\n i += 1;\n }\n else {\n value.push('');\n }\n }\n else {\n value.push('');\n }\n i += 1;\n index = index + 1;\n cell = row.cells[index];\n }\n while (!isNullOrUndefined(cell.visible) && !cell.visible) {\n index = index + 1;\n cell = row.cells[index];\n }\n }\n if (cell.isDataCell) {\n var templateFn = {};\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(cell.column.footerTemplate) || !isNullOrUndefined(cell.column.groupCaptionTemplate) || !isNullOrUndefined(cell.column.groupFooterTemplate)) {\n /* tslint:disable-next-line:no-any */\n var result = this.getTemplateFunction(templateFn, i, leastCaptionSummaryIndex, cell.column);\n templateFn = result.templateFunction;\n leastCaptionSummaryIndex = result.leastCaptionSummaryIndex;\n /* tslint:disable-next-line:max-line-length */\n var txt = (templateFn[getEnumValue(CellType, cell.cellType)](row.data[cell.column.field ? cell.column.field : cell.column.columnName]));\n value.push(txt[0].textContent);\n isEmpty = false;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var result = this.getSummaryWithoutTemplate(row.data[cell.column.field]);\n if (!isNullOrUndefined(result)) {\n value.push(result);\n }\n }\n }\n else {\n value.push('');\n }\n if (isEmpty && value[i] !== '' && !isNullOrUndefined(value[i]) && value[i] !== null) {\n isEmpty = false;\n }\n index += 1;\n }\n if (!isEmpty) {\n if (!isCaption) {\n var gridRow = pdfGrid.rows.addRow();\n gridRow.style.setBorder(border);\n gridRow.style.setFont(font);\n gridRow.style.setTextBrush(brush);\n gridRow.style.setBackgroundBrush(backgroundBrush);\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n gridRow.cells.getCell(i).value = value[i].toString();\n }\n }\n else {\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n captionRow.cells.getCell(i).value = value[i].toString();\n if (i === (groupIndex + 1) && leastCaptionSummaryIndex !== -1) {\n captionRow.cells.getCell(i).columnSpan = leastCaptionSummaryIndex - (groupIndex + 1);\n }\n else if (i === (groupIndex + 1) && leastCaptionSummaryIndex === -1) {\n captionRow.cells.getCell(i).columnSpan = pdfGrid.columns.count - (groupIndex + 1);\n }\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getTemplateFunction = function (templateFn, index, leastCaptionSummaryIndex, column) {\n if (!isNullOrUndefined(column.footerTemplate)) {\n templateFn[getEnumValue(CellType, CellType.Summary)] = compile(column.footerTemplate);\n }\n else if (!isNullOrUndefined(column.groupCaptionTemplate)) {\n if (leastCaptionSummaryIndex === -1) {\n leastCaptionSummaryIndex = index;\n }\n templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = compile(column.groupCaptionTemplate);\n }\n else {\n templateFn[getEnumValue(CellType, CellType.GroupSummary)] = compile(column.groupFooterTemplate);\n }\n return { templateFunction: templateFn, leastCaptionSummaryIndex: leastCaptionSummaryIndex };\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getSummaryWithoutTemplate = function (data) {\n if (!isNullOrUndefined(data.Sum)) {\n return data.Sum;\n }\n else if (!isNullOrUndefined(data.Average)) {\n return data.Average;\n }\n else if (!isNullOrUndefined(data.Max)) {\n return data.Max;\n }\n else if (!isNullOrUndefined(data.Min)) {\n return data.Min;\n }\n else if (!isNullOrUndefined(data.Count)) {\n return data.Count;\n }\n else if (!isNullOrUndefined(data.TrueCount)) {\n return data.TrueCount;\n }\n else if (!isNullOrUndefined(data.FalseCount)) {\n return data.FalseCount;\n }\n else if (!isNullOrUndefined(data.Custom)) {\n return data.Custom;\n }\n };\n /**\n * Set alignment, width and type of the values of the column\n */\n PdfExport.prototype.setColumnProperties = function (gridColumns, pdfGrid, helper, gObj) {\n var startIndex = gObj.groupSettings.columns.length;\n for (var i = 0; i < startIndex; i++) {\n pdfGrid.columns.getColumn(i).width = 20;\n }\n for (var i = 0; i < gridColumns.length; i++) {\n if (!isNullOrUndefined(gridColumns[i].textAlign)) {\n pdfGrid.columns.getColumn(i + startIndex).format = this.getHorizontalAlignment(gridColumns[i].textAlign);\n }\n // Need to add width consideration with % value\n if (pdfGrid.style.allowHorizontalOverflow && !isNullOrUndefined(gridColumns[i].width)) {\n pdfGrid.columns.getColumn(i + startIndex).width = typeof gridColumns[i].width === 'number' ?\n gridColumns[i].width * 0.75 : helper.getConvertedWidth(gridColumns[i].width) * 0.75;\n }\n }\n };\n /**\n * set default style properties of each rows in exporting grid\n * @private\n */\n PdfExport.prototype.setRecordThemeStyle = function (row, border) {\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.record)) {\n var fontFamily = !isNullOrUndefined(this.gridTheme.record.fontName) ?\n this.getFontFamily(this.gridTheme.record.fontName) : PdfFontFamily.Helvetica;\n var fontSize = !isNullOrUndefined(this.gridTheme.record.fontSize) ? this.gridTheme.record.fontSize : 9.75;\n var fontStyle = this.getFontStyle(this.gridTheme.record);\n var font = new PdfStandardFont(fontFamily, fontSize, fontStyle);\n if (!isNullOrUndefined(this.gridTheme.record.font)) {\n font = this.gridTheme.record.font;\n }\n row.style.setFont(font);\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.record.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.record.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n row.style.setTextBrush(new PdfSolidBrush(pdfColor));\n }\n else {\n row.style.setTextBrush(new PdfSolidBrush(new PdfColor(0, 0, 0)));\n }\n var borderRecord = this.gridTheme && this.gridTheme.record &&\n this.gridTheme.record.border ? this.getBorderStyle(this.gridTheme.record.border) : border;\n row.style.setBorder(borderRecord);\n return row;\n };\n /**\n * generate the formatted cell values\n * @private\n */\n PdfExport.prototype.processRecord = function (border, columns, gObj, dataSource, pdfGrid, startIndex, pdfExportProperties, helper, rowIndex) {\n var rows = helper.getGridRowModel(columns, dataSource, gObj, rowIndex);\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n rowIndex++;\n // create a new row and set default style properties\n var gridRow = this.setRecordThemeStyle(pdfGrid.rows.addRow(), border);\n var cellLength = row.cells.length;\n for (var j = 0; j < cellLength; j++) {\n var gridCell = row.cells[j];\n if (gridCell.cellType !== CellType.Data) {\n continue;\n }\n var column = gridCell.column;\n var field = column.field;\n var value = (!isNullOrUndefined(field) && getValue(field, row.data)) || '';\n var foreignKeyData = void 0;\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n var data = row.data;\n var cell = gridRow.cells.getCell(j);\n var args = {\n data: data,\n value: value,\n column: column,\n style: undefined,\n colSpan: 1,\n cell: cell\n };\n args.value = this.exportValueFormatter.formatCellValue(args);\n this.parent.trigger(events.pdfQueryCellInfo, args);\n cell.value = args.value;\n if (!isNullOrUndefined(args.style)) {\n this.processCellStyle(cell, args);\n }\n if (args.colSpan > 1) {\n if ((j + 1 + args.colSpan) > gridRow.cells.count) {\n args.colSpan = gridRow.cells.count - (j + 1);\n }\n cell.columnSpan = args.colSpan;\n for (var i = 1; i < cell.columnSpan; i++) {\n var spanCell = gridRow.cells.getCell(j + i);\n spanCell.value = '';\n }\n j += (args.colSpan - 1);\n }\n }\n if (row.isExpand) {\n var gridRow_1 = this.setRecordThemeStyle(pdfGrid.rows.addRow(), border);\n var cell = gridRow_1.cells.getCell(startIndex);\n cell.columnSpan = gridRow_1.cells.count - (startIndex);\n cell.style.cellPadding = new PdfPaddings(10, 10, 10, 10);\n gObj.isPrinting = true;\n var exportType = (!isNullOrUndefined(pdfExportProperties) && pdfExportProperties.exportType) ?\n pdfExportProperties.exportType : 'AllPages';\n var returnValue = this.helper.createChildGrid(gObj, row, exportType, this.gridPool);\n var childGridObj = returnValue.childGrid;\n var element = returnValue.element;\n childGridObj.actionFailure =\n helper.failureHandler(this.gridPool, childGridObj, this.globalResolve);\n var args = { childGrid: childGridObj, row: row, cell: cell, exportProperties: pdfExportProperties };\n this.parent.trigger(events.exportDetailDataBound, args);\n childGridObj.beforeDataBound = this.childGridCell(cell, childGridObj, pdfExportProperties);\n childGridObj.appendTo(element);\n }\n this.parent.notify(events.exportRowDataBound, { type: 'pdf', rowObj: row });\n }\n return rowIndex;\n };\n PdfExport.prototype.childGridCell = function (cell, childGridObj, pdfExportProperties) {\n var _this = this;\n return function (result) {\n childGridObj.beforeDataBound = null;\n result.cancel = true;\n cell.value = _this.processGridExport(childGridObj, result, pdfExportProperties);\n childGridObj.destroy();\n detach(childGridObj.element);\n _this.gridPool[childGridObj.id] = true;\n _this.helper.checkAndExport(_this.gridPool, _this.globalResolve);\n return cell;\n };\n };\n PdfExport.prototype.processCellStyle = function (cell, args) {\n if (!isNullOrUndefined(args.style.backgroundColor)) {\n var backColor = this.hexToRgb(args.style.backgroundColor);\n cell.style.backgroundBrush = new PdfSolidBrush(new PdfColor(backColor.r, backColor.g, backColor.b));\n }\n if (!isNullOrUndefined(args.style.textAlignment)) {\n cell.style.stringFormat = this.getHorizontalAlignment(args.style.textAlignment);\n }\n if (!isNullOrUndefined(args.style.cellPadding)) {\n cell.style.cellPadding = args.style.cellPadding;\n }\n if (!isNullOrUndefined(args.style.verticalAlignment)) {\n cell.style.stringFormat = this.getVerticalAlignment(args.style.verticalAlignment, cell.style.stringFormat);\n }\n if (!isNullOrUndefined(args.style.textBrushColor)) {\n var textBrushColor = this.hexToRgb(args.style.textBrushColor);\n cell.style.textBrush = new PdfSolidBrush(new PdfColor(textBrushColor.r, textBrushColor.g, textBrushColor.b));\n }\n if (!isNullOrUndefined(args.style.textPenColor)) {\n var textPenColor = this.hexToRgb(args.style.textPenColor);\n cell.style.textPen = new PdfPen(new PdfColor(textPenColor.r, textPenColor.g, textPenColor.b));\n }\n if (!isNullOrUndefined(args.style.fontFamily) || !isNullOrUndefined(args.style.fontSize) || !isNullOrUndefined(args.style.bold) ||\n !isNullOrUndefined(args.style.italic) || !isNullOrUndefined(args.style.underline) || !isNullOrUndefined(args.style.strikeout)) {\n cell.style.font = this.getFont(args);\n }\n if (!isNullOrUndefined(args.style.border)) {\n var border = new PdfBorders();\n var borderWidth = args.style.border.width;\n // set border width\n var width = (!isNullOrUndefined(borderWidth) && typeof borderWidth === 'number') ? (borderWidth * 0.75) : (undefined);\n // set border color\n var color = new PdfColor(196, 196, 196);\n if (!isNullOrUndefined(args.style.border.color)) {\n var borderColor = this.hexToRgb(args.style.border.color);\n color = new PdfColor(borderColor.r, borderColor.g, borderColor.b);\n }\n var pen = new PdfPen(color, width);\n // set border dashStyle 'Solid , Dash, Dot, DashDot, DashDotDot'\n if (!isNullOrUndefined(args.style.border.dashStyle)) {\n pen.dashStyle = this.getDashStyle(args.style.border.dashStyle);\n }\n border.all = pen;\n cell.style.borders = border;\n }\n if (!isNullOrUndefined(args.style.paragraphIndent)) {\n cell.style.stringFormat = new PdfStringFormat();\n cell.style.stringFormat.paragraphIndent = args.style.paragraphIndent;\n }\n };\n /**\n * set text alignment of each columns in exporting grid\n * @private\n */\n PdfExport.prototype.getHorizontalAlignment = function (textAlign, format) {\n if (format === undefined) {\n format = new PdfStringFormat();\n }\n switch (textAlign) {\n case 'Right':\n format.alignment = PdfTextAlignment.Right;\n break;\n case 'Center':\n format.alignment = PdfTextAlignment.Center;\n break;\n case 'Justify':\n format.alignment = PdfTextAlignment.Justify;\n break;\n case 'Left':\n format.alignment = PdfTextAlignment.Left;\n break;\n }\n return format;\n };\n /**\n * set vertical alignment of each columns in exporting grid\n * @private\n */\n PdfExport.prototype.getVerticalAlignment = function (verticalAlign, format, textAlign) {\n if (format === undefined) {\n format = new PdfStringFormat();\n format = this.getHorizontalAlignment(textAlign, format);\n }\n switch (verticalAlign) {\n case 'Bottom':\n format.lineAlignment = PdfVerticalAlignment.Bottom;\n break;\n case 'Middle':\n format.lineAlignment = PdfVerticalAlignment.Middle;\n break;\n case 'Top':\n format.lineAlignment = PdfVerticalAlignment.Top;\n break;\n }\n return format;\n };\n PdfExport.prototype.getFontFamily = function (fontFamily) {\n switch (fontFamily) {\n case 'TimesRoman':\n return 2;\n case 'Courier':\n return 1;\n case 'Symbol':\n return 3;\n case 'ZapfDingbats':\n return 4;\n default:\n return 0;\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getFont = function (content) {\n if (content.style.font) {\n return content.style.font;\n }\n var fontSize = (!isNullOrUndefined(content.style.fontSize)) ? (content.style.fontSize * 0.75) : 9.75;\n var fontFamily = (!isNullOrUndefined(content.style.fontFamily)) ?\n (this.getFontFamily(content.style.fontFamily)) : PdfFontFamily.TimesRoman;\n var fontStyle = PdfFontStyle.Regular;\n if (!isNullOrUndefined(content.style.bold) && content.style.bold) {\n fontStyle |= PdfFontStyle.Bold;\n }\n if (!isNullOrUndefined(content.style.italic) && content.style.italic) {\n fontStyle |= PdfFontStyle.Italic;\n }\n if (!isNullOrUndefined(content.style.underline) && content.style.underline) {\n fontStyle |= PdfFontStyle.Underline;\n }\n if (!isNullOrUndefined(content.style.strikeout) && content.style.strikeout) {\n fontStyle |= PdfFontStyle.Strikeout;\n }\n return new PdfStandardFont(fontFamily, fontSize, fontStyle);\n };\n PdfExport.prototype.getPageNumberStyle = function (pageNumberType) {\n switch (pageNumberType) {\n case 'LowerLatin':\n return 2;\n case 'LowerRoman':\n return 3;\n case 'UpperLatin':\n return 4;\n case 'UpperRoman':\n return 5;\n default:\n return 1;\n }\n };\n PdfExport.prototype.setContentFormat = function (content, format) {\n if (!isNullOrUndefined(content.size)) {\n var width = content.size.width * 0.75;\n var height = content.size.height * 0.75;\n format = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle);\n if (!isNullOrUndefined(content.style.hAlign)) {\n switch (content.style.hAlign) {\n case 'Right':\n format.alignment = PdfTextAlignment.Right;\n break;\n case 'Center':\n format.alignment = PdfTextAlignment.Center;\n break;\n case 'Justify':\n format.alignment = PdfTextAlignment.Justify;\n break;\n default:\n format.alignment = PdfTextAlignment.Left;\n }\n }\n if (!isNullOrUndefined(content.style.vAlign)) {\n format = this.getVerticalAlignment(content.style.vAlign, format);\n }\n return { format: format, size: new SizeF(width, height) };\n }\n return null;\n };\n PdfExport.prototype.getPageSize = function (pageSize) {\n switch (pageSize) {\n case 'Letter':\n return new SizeF(612, 792);\n case 'Note':\n return new SizeF(540, 720);\n case 'Legal':\n return new SizeF(612, 1008);\n case 'A0':\n return new SizeF(2380, 3368);\n case 'A1':\n return new SizeF(1684, 2380);\n case 'A2':\n return new SizeF(1190, 1684);\n case 'A3':\n return new SizeF(842, 1190);\n case 'A5':\n return new SizeF(421, 595);\n case 'A6':\n return new SizeF(297, 421);\n case 'A7':\n return new SizeF(210, 297);\n case 'A8':\n return new SizeF(148, 210);\n case 'A9':\n return new SizeF(105, 148);\n // case 'A10':\n // return new SizeF(74, 105);\n case 'B0':\n return new SizeF(2836, 4008);\n case 'B1':\n return new SizeF(2004, 2836);\n case 'B2':\n return new SizeF(1418, 2004);\n case 'B3':\n return new SizeF(1002, 1418);\n case 'B4':\n return new SizeF(709, 1002);\n case 'B5':\n return new SizeF(501, 709);\n case 'Archa':\n return new SizeF(648, 864);\n case 'Archb':\n return new SizeF(864, 1296);\n case 'Archc':\n return new SizeF(1296, 1728);\n case 'Archd':\n return new SizeF(1728, 2592);\n case 'Arche':\n return new SizeF(2592, 3456);\n case 'Flsa':\n return new SizeF(612, 936);\n case 'HalfLetter':\n return new SizeF(396, 612);\n case 'Letter11x17':\n return new SizeF(792, 1224);\n case 'Ledger':\n return new SizeF(1224, 792);\n default:\n return new SizeF(595, 842);\n }\n };\n PdfExport.prototype.getDashStyle = function (dashStyle) {\n switch (dashStyle) {\n case 'Dash':\n return 1;\n case 'Dot':\n return 2;\n case 'DashDot':\n return 3;\n case 'DashDotDot':\n return 4;\n default:\n return 0;\n }\n };\n PdfExport.prototype.getPenFromContent = function (content) {\n var pen = new PdfPen(new PdfColor(0, 0, 0));\n if (!isNullOrUndefined(content.style) && content.style !== null && !isNullOrUndefined(content.style.penColor)) {\n var penColor = this.hexToRgb(content.style.penColor);\n pen = new PdfPen(new PdfColor(penColor.r, penColor.g, penColor.b));\n }\n return pen;\n };\n PdfExport.prototype.getBrushFromContent = function (content) {\n var brush = null;\n if (!isNullOrUndefined(content.style.textBrushColor)) {\n /* tslint:disable-next-line:max-line-length */\n var brushColor = this.hexToRgb(content.style.textBrushColor);\n brush = new PdfSolidBrush(new PdfColor(brushColor.r, brushColor.g, brushColor.b));\n }\n return brush;\n };\n PdfExport.prototype.hexToRgb = function (hex) {\n if (hex === null || hex === '' || hex.length !== 7) {\n throw new Error('please set valid hex value for color...');\n }\n hex = hex.substring(1);\n var bigint = parseInt(hex, 16);\n var r = (bigint >> 16) & 255;\n var g = (bigint >> 8) & 255;\n var b = bigint & 255;\n return { r: r, g: g, b: b };\n };\n PdfExport.prototype.getFontStyle = function (theme) {\n var fontStyle = PdfFontStyle.Regular;\n if (!isNullOrUndefined(theme) && theme.bold) {\n fontStyle |= PdfFontStyle.Bold;\n }\n if (!isNullOrUndefined(theme) && theme.italic) {\n fontStyle |= PdfFontStyle.Italic;\n }\n if (!isNullOrUndefined(theme) && theme.underline) {\n fontStyle |= PdfFontStyle.Underline;\n }\n if (!isNullOrUndefined(theme) && theme.strikeout) {\n fontStyle |= PdfFontStyle.Strikeout;\n }\n return fontStyle;\n };\n PdfExport.prototype.getBorderStyle = function (border) {\n var borders = new PdfBorders();\n if (!isNullOrUndefined(border)) {\n var borderWidth = border.width;\n // set border width\n var width = (!isNullOrUndefined(borderWidth) && typeof borderWidth === 'number') ? borderWidth * 0.75 : undefined;\n // set border color\n var color = new PdfColor(196, 196, 196);\n if (!isNullOrUndefined(border.color)) {\n var borderColor = this.hexToRgb(border.color);\n color = new PdfColor(borderColor.r, borderColor.g, borderColor.b);\n }\n var pen = new PdfPen(color, width);\n // set border dashStyle 'Solid , Dash, Dot, DashDot, DashDotDot'\n if (!isNullOrUndefined(border.dashStyle)) {\n pen.dashStyle = this.getDashStyle(border.dashStyle);\n }\n borders.all = pen;\n }\n else {\n borders.all = new PdfPen(new PdfColor(234, 234, 234));\n }\n return borders;\n };\n /**\n * To destroy the pdf export\n * @return {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n //destroy for exporting\n };\n return PdfExport;\n}());\nexport { PdfExport };\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 { addClass, removeClass, attributes, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren } from '../base/util';\n/**\n * `CommandColumn` used to render command column in grid\n * @hidden\n */\nvar CommandColumnRenderer = /** @class */ (function (_super) {\n __extends(CommandColumnRenderer, _super);\n function CommandColumnRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.buttonElement = _this.parent.createElement('button', {});\n _this.unbounDiv = _this.parent.createElement('div', { className: 'e-unboundcelldiv', styles: 'display: inline-block' });\n _this.element = _this.parent.createElement('TD', {\n className: 'e-rowcell e-unboundcell', attrs: {\n role: 'gridcell', tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CommandColumnRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n node.appendChild(this.unbounDiv.cloneNode());\n node.setAttribute('aria-label', 'is Command column column header ' + cell.column.headerText);\n if (cell.column.commandsTemplate) {\n appendChildren(node.firstElementChild, cell.column.getColumnTemplate()(data));\n }\n else {\n for (var _i = 0, _a = cell.commands; _i < _a.length; _i++) {\n var command = _a[_i];\n node = this.renderButton(node, command, attributes.index);\n }\n }\n this.setAttributes(node, cell, attributes);\n if (this.parent.isEdit) {\n addClass(node.querySelectorAll('.e-edit-delete'), 'e-hide');\n removeClass(node.querySelectorAll('.e-save-cancel'), 'e-hide');\n }\n else {\n addClass(node.querySelectorAll('.e-save-cancel'), 'e-hide');\n removeClass(node.querySelectorAll('.e-edit-delete'), 'e-hide');\n }\n return node;\n };\n CommandColumnRenderer.prototype.renderButton = function (node, buttonOption, index) {\n var button = this.buttonElement.cloneNode();\n attributes(button, {\n 'id': this.parent.element.id + (buttonOption.type || '') + '_' + index, 'type': 'button',\n title: !isNullOrUndefined(buttonOption.title) ? buttonOption.title :\n buttonOption.buttonOption.content || this.localizer.getConstant(buttonOption.type) || buttonOption.type\n });\n button.onclick = buttonOption.buttonOption.click;\n var buttonObj = new Button(buttonOption.buttonOption, button);\n buttonObj.commandType = buttonOption.type;\n node.firstElementChild.appendChild(buttonObj.element);\n switch (buttonOption.type) {\n case 'Edit':\n case 'Delete':\n addClass([button], ['e-edit-delete', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n break;\n case 'Cancel':\n case 'Save':\n addClass([button], ['e-save-cancel', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n break;\n }\n return node;\n };\n return CommandColumnRenderer;\n}(CellRenderer));\nexport { CommandColumnRenderer };\n","import { closest } from '@syncfusion/ej2-base';\nimport { initialEnd, click, keyPressed } from '../base/constant';\nimport { CellType } from '../base/enum';\nimport { CommandColumnRenderer } from '../renderer/command-column-renderer';\n/**\n * `CommandColumn` used to handle the command column actions.\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n CommandColumn.prototype.initiateRender = function () {\n var cellFac = this.locator.getService('cellRendererFactory');\n cellFac.addCellRenderer(CellType.CommandColumn, new CommandColumnRenderer(this.parent, this.locator));\n };\n CommandColumn.prototype.commandClickHandler = function (e) {\n var gObj = this.parent;\n var gID = gObj.element.id;\n var target = closest(e.target, 'button');\n if (!target || !gObj.editModule || !closest(e.target, '.e-unboundcell')) {\n return;\n }\n var buttonObj = target.ej2_instances[0];\n var type = buttonObj.commandType;\n if (buttonObj.disabled || !gObj.editModule) {\n return;\n }\n switch (type) {\n case 'Edit':\n gObj.editModule.endEdit();\n gObj.editModule.startEdit(closest(target, 'tr'));\n break;\n case 'Cancel':\n gObj.editModule.closeEdit();\n break;\n case 'Save':\n gObj.editModule.endEdit();\n break;\n case 'Delete':\n gObj.editModule.endEdit();\n gObj.clearSelection();\n //for toogle issue when dbl click\n gObj.selectRow(parseInt(closest(target, 'tr').getAttribute('aria-rowindex'), 10), false);\n gObj.editModule.deleteRecord();\n break;\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * To destroy CommandColumn.\n * @method destroy\n * @return {void}\n */\n CommandColumn.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n CommandColumn.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(click, this.commandClickHandler);\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(keyPressed, this.keyPressHandler);\n };\n CommandColumn.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(click, this.commandClickHandler, this);\n this.parent.on(initialEnd, this.initiateRender, this);\n this.parent.on(keyPressed, this.keyPressHandler, this);\n };\n CommandColumn.prototype.keyPressHandler = function (e) {\n if (e.action === 'enter' && closest(e.target, '.e-unboundcelldiv')) {\n this.commandClickHandler(e);\n e.preventDefault();\n }\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { closest, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { Resize } from '../actions/resize';\nimport { Page } from '../actions/page';\nimport { parentsUntil } from '../base/util';\nimport { Group } from '../actions/group';\nimport { Sort } from '../actions/sort';\nimport { PdfExport } from '../actions/pdf-export';\nimport { ExcelExport } from '../actions/excel-export';\nexport var menuClass = {\n header: '.e-gridheader',\n content: '.e-gridcontent',\n edit: '.e-inline-edit',\n batchEdit: '.e-editedbatchcell',\n editIcon: 'e-edit',\n pager: '.e-gridpager',\n delete: 'e-delete',\n save: 'e-save',\n cancel: 'e-cancel',\n copy: 'e-copy',\n pdf: 'e-pdfexport',\n group: 'e-icon-group',\n ungroup: 'e-icon-ungroup',\n csv: 'e-csvexport',\n excel: 'e-excelexport',\n fPage: 'e-icon-first',\n nPage: 'e-icon-next',\n lPage: 'e-icon-last',\n pPage: 'e-icon-prev',\n ascending: 'e-icon-ascending',\n descending: 'e-icon-descending',\n groupHeader: 'e-groupdroparea',\n touchPop: 'e-gridpopup'\n};\n/**\n * The `ContextMenu` module is used to handle context menu actions.\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent, serviceLocator) {\n this.defaultItems = {};\n this.disableItems = [];\n this.hiddenItems = [];\n this.localeText = this.setLocaleKey();\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n ContextMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRenderMenu, this);\n this.parent.on(events.initialLoad, this.render, this);\n };\n /**\n * @hidden\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRenderMenu);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler.bind(this));\n };\n ContextMenu.prototype.keyDownHandler = function (e) {\n if (e.code === 'Tab' || e.which === 9) {\n this.contextMenu.close();\n }\n };\n ContextMenu.prototype.render = function () {\n this.parent.element.classList.add('e-noselect');\n this.l10n = this.serviceLocator.getService('localization');\n this.element = this.parent.createElement('ul', { id: this.gridID + '_cmenu' });\n EventHandler.add(this.element, 'keydown', this.keyDownHandler.bind(this));\n this.parent.element.appendChild(this.element);\n var target = '#' + this.gridID;\n this.contextMenu = new Menu({\n items: this.getMenuItems(),\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n target: target,\n select: this.contextMenuItemClick.bind(this),\n beforeOpen: this.contextMenuBeforeOpen.bind(this),\n onOpen: this.contextMenuOpen.bind(this),\n onClose: this.contextMenuOnClose.bind(this),\n cssClass: 'e-grid-menu'\n });\n this.contextMenu.appendTo(this.element);\n };\n ContextMenu.prototype.enableAfterRenderMenu = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n if (this.contextMenu) {\n this.contextMenu.destroy();\n remove(this.element);\n this.parent.element.classList.remove('e-noselect');\n }\n this.render();\n }\n };\n ContextMenu.prototype.getMenuItems = function () {\n var menuItems = [];\n var exportItems = [];\n for (var _i = 0, _a = this.parent.contextMenuItems; _i < _a.length; _i++) {\n var item = _a[_i];\n if (typeof item === 'string' && this.getDefaultItems().indexOf(item) !== -1) {\n if (item.toLocaleLowerCase().indexOf('export') !== -1) {\n exportItems.push(this.buildDefaultItems(item));\n }\n else {\n menuItems.push(this.buildDefaultItems(item));\n }\n }\n else if (typeof item !== 'string') {\n menuItems.push(item);\n }\n }\n if (exportItems.length > 0) {\n var exportGroup = this.buildDefaultItems('export');\n exportGroup.items = exportItems;\n menuItems.push(exportGroup);\n }\n return menuItems;\n };\n ContextMenu.prototype.getLastPage = function () {\n var totalpage = Math.floor(this.parent.pageSettings.totalRecordsCount / this.parent.pageSettings.pageSize);\n if (this.parent.pageSettings.totalRecordsCount % this.parent.pageSettings.pageSize) {\n totalpage += 1;\n }\n return totalpage;\n };\n ContextMenu.prototype.contextMenuOpen = function () {\n this.isOpen = true;\n };\n ContextMenu.prototype.contextMenuItemClick = function (args) {\n var item = this.getKeyFromId(args.item.id);\n switch (item) {\n case 'AutoFitAll':\n this.parent.autoFitColumns([]);\n break;\n case 'AutoFit':\n this.parent.autoFitColumns(this.targetColumn.field);\n break;\n case 'Group':\n this.parent.groupColumn(this.targetColumn.field);\n break;\n case 'Ungroup':\n this.parent.ungroupColumn(this.targetColumn.field);\n break;\n case 'Edit':\n if (this.parent.editModule) {\n if (this.parent.editSettings.mode === 'Batch') {\n if (this.row && this.cell && !isNaN(parseInt(this.cell.getAttribute('aria-colindex'), 10))) {\n this.parent.editModule.editCell(parseInt(this.row.getAttribute('aria-rowindex'), 10), this.parent.getColumns()[parseInt(this.cell.getAttribute('aria-colindex'), 10)].field);\n }\n }\n else {\n this.parent.editModule.endEdit();\n this.parent.editModule.startEdit(this.row);\n }\n }\n break;\n case 'Delete':\n if (this.parent.editModule) {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.parent.editModule.endEdit();\n }\n if (this.parent.getSelectedRecords().length === 1) {\n this.parent.editModule.deleteRow(this.row);\n }\n else {\n this.parent.deleteRecord();\n }\n }\n break;\n case 'Save':\n if (this.parent.editModule) {\n this.parent.editModule.endEdit();\n }\n break;\n case 'Cancel':\n if (this.parent.editModule) {\n this.parent.editModule.closeEdit();\n }\n break;\n case 'Copy':\n this.parent.copy();\n break;\n case 'PdfExport':\n this.parent.pdfExport();\n break;\n case 'ExcelExport':\n this.parent.excelExport();\n break;\n case 'CsvExport':\n this.parent.csvExport();\n break;\n case 'SortAscending':\n this.isOpen = false;\n this.parent.sortColumn(this.targetColumn.field, 'Ascending');\n break;\n case 'SortDescending':\n this.isOpen = false;\n this.parent.sortColumn(this.targetColumn.field, 'Descending');\n break;\n case 'FirstPage':\n this.parent.goToPage(1);\n break;\n case 'PrevPage':\n this.parent.goToPage(this.parent.pageSettings.currentPage - 1);\n break;\n case 'LastPage':\n this.parent.goToPage(this.getLastPage());\n break;\n case 'NextPage':\n this.parent.goToPage(this.parent.pageSettings.currentPage + 1);\n break;\n }\n args.column = this.targetColumn;\n this.parent.trigger(events.contextMenuClick, args);\n };\n ContextMenu.prototype.contextMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.updateItemStatus();\n }\n };\n ContextMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n ContextMenu.prototype.updateItemStatus = function () {\n this.contextMenu.showItems(this.hiddenItems);\n this.contextMenu.enableItems(this.disableItems);\n this.hiddenItems = [];\n this.disableItems = [];\n this.isOpen = false;\n };\n ContextMenu.prototype.contextMenuBeforeOpen = function (args) {\n var changedRecords = 'changedRecords';\n var addedRecords = 'addedRecords';\n var deletedRecords = 'deletedRecords';\n var closestGrid = closest(args.event.target, '.e-grid');\n if (args.event && closestGrid && closestGrid !== this.parent.element) {\n args.cancel = true;\n }\n else if (args.event && (closest(args.event.target, '.' + menuClass.groupHeader)\n || closest(args.event.target, '.' + menuClass.touchPop) ||\n closest(args.event.target, '.e-summarycell') ||\n closest(args.event.target, '.e-groupcaption') ||\n closest(args.event.target, '.e-filterbarcell'))) {\n args.cancel = true;\n }\n else {\n this.targetColumn = this.getColumn(args.event);\n if ((isNullOrUndefined(args.parentItem))) {\n this.selectRow(args.event, (args.event.target.classList.contains('e-selectionbackground')\n && this.parent.selectionSettings.type === 'Multiple') ? false : true);\n }\n var hideSepItems = [];\n var showSepItems = [];\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (this.ensureDisabledStatus(key)) {\n this.disableItems.push(item.text);\n }\n if (args.event && (this.ensureTarget(args.event.target, menuClass.edit) ||\n this.ensureTarget(args.event.target, menuClass.batchEdit))) {\n if (key !== 'Save' && key !== 'Cancel') {\n this.hiddenItems.push(item.text);\n }\n }\n else if (this.parent.editModule && this.parent.editSettings.mode === 'Batch' &&\n ((closest(args.event.target, '.e-gridform')) ||\n this.parent.editModule.getBatchChanges()[changedRecords].length ||\n this.parent.editModule.getBatchChanges()[addedRecords].length ||\n this.parent.editModule.getBatchChanges()[deletedRecords].length) && (key === 'Save' || key === 'Cancel')) {\n continue;\n }\n else if (isNullOrUndefined(args.parentItem) && args.event\n && !this.ensureTarget(args.event.target, dItem.target)) {\n this.hiddenItems.push(item.text);\n }\n }\n else if (item.target && args.event &&\n !this.ensureTarget(args.event.target, item.target)) {\n if (item.separator) {\n hideSepItems.push(item.id);\n }\n else {\n this.hiddenItems.push(item.text);\n }\n }\n else if (this.ensureTarget(args.event.target, item.target) && item.separator) {\n showSepItems.push(item.id);\n }\n }\n if (showSepItems.length > 0) {\n this.contextMenu.showItems(showSepItems, true);\n }\n this.contextMenu.enableItems(this.disableItems, false);\n this.contextMenu.hideItems(this.hiddenItems);\n if (hideSepItems.length > 0) {\n this.contextMenu.hideItems(hideSepItems, true);\n }\n this.eventArgs = args.event;\n args.column = this.targetColumn;\n this.parent.trigger(events.contextMenuOpen, args);\n if (this.hiddenItems.length === args.items.length) {\n this.updateItemStatus();\n args.cancel = true;\n }\n }\n };\n ContextMenu.prototype.ensureTarget = function (targetElement, selector) {\n var target = targetElement;\n if (this.ensureFrozenHeader(targetElement) && (selector === menuClass.header || selector === menuClass.content)) {\n target = closest(targetElement, selector === menuClass.header ? 'thead' : 'tbody');\n }\n else if (selector === menuClass.content || selector === menuClass.header) {\n target = parentsUntil(closest(targetElement, '.e-table'), selector.substr(1, selector.length));\n }\n else {\n target = closest(targetElement, selector);\n }\n return target && parentsUntil(target, 'e-grid') === this.parent.element;\n };\n ContextMenu.prototype.ensureFrozenHeader = function (targetElement) {\n return (this.parent.getFrozenColumns() || this.parent.frozenRows)\n && closest(targetElement, menuClass.header) ? true : false;\n };\n ContextMenu.prototype.ensureDisabledStatus = function (item) {\n var _this = this;\n var status = false;\n switch (item) {\n case 'AutoFitAll':\n case 'AutoFit':\n status = !(this.parent.ensureModuleInjected(Resize) && !this.parent.isEdit);\n break;\n case 'Group':\n if (!this.parent.allowGrouping || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) >= 0)) {\n status = true;\n }\n break;\n case 'Ungroup':\n if (!this.parent.allowGrouping || !this.parent.ensureModuleInjected(Group)\n || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) < 0)) {\n status = true;\n }\n break;\n case 'Edit':\n case 'Delete':\n case 'Save':\n case 'Cancel':\n if (!this.parent.editModule || (this.parent.getDataRows().length === 0)) {\n status = true;\n }\n break;\n case 'Copy':\n if (this.parent.getSelectedRowIndexes().length === 0 ||\n this.parent.getCurrentViewRecords().length === 0) {\n status = true;\n }\n break;\n case 'export':\n if ((!this.parent.allowExcelExport || !this.parent.excelExport) ||\n !this.parent.ensureModuleInjected(PdfExport) && !this.parent.ensureModuleInjected(ExcelExport)) {\n status = true;\n }\n break;\n case 'PdfExport':\n if (!(this.parent.allowPdfExport) || !this.parent.ensureModuleInjected(PdfExport)) {\n status = true;\n }\n break;\n case 'ExcelExport':\n case 'CsvExport':\n if (!(this.parent.allowExcelExport) || !this.parent.ensureModuleInjected(ExcelExport)) {\n status = true;\n }\n break;\n case 'SortAscending':\n case 'SortDescending':\n if ((!this.parent.allowSorting) || !this.parent.ensureModuleInjected(Sort)) {\n status = true;\n }\n else if (this.parent.ensureModuleInjected(Sort) && this.parent.sortSettings.columns.length > 0 && this.targetColumn) {\n this.parent.sortSettings.columns.forEach(function (element) {\n if (element.field === _this.targetColumn.field\n && element.direction.toLowerCase() === item.toLowerCase().replace('sort', '').toLocaleLowerCase()) {\n status = true;\n }\n });\n }\n break;\n case 'FirstPage':\n case 'PrevPage':\n if (!this.parent.allowPaging || !this.parent.ensureModuleInjected(Page) ||\n this.parent.getCurrentViewRecords().length === 0 ||\n (this.parent.ensureModuleInjected(Page) && this.parent.pageSettings.currentPage === 1)) {\n status = true;\n }\n break;\n case 'LastPage':\n case 'NextPage':\n if (!this.parent.allowPaging || !this.parent.ensureModuleInjected(Page) ||\n this.parent.getCurrentViewRecords().length === 0 ||\n (this.parent.ensureModuleInjected(Page) && this.parent.pageSettings.currentPage === this.getLastPage())) {\n status = true;\n }\n break;\n }\n return status;\n };\n /**\n * Gets the context menu element from the Grid.\n * @return {Element}\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.element;\n };\n /**\n * Destroys the context menu component in the Grid.\n * @method destroy\n * @return {void}\n * @hidden\n */\n ContextMenu.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.contextMenu.destroy();\n remove(this.element);\n this.removeEventListener();\n this.parent.element.classList.remove('e-noselect');\n };\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n ContextMenu.prototype.generateID = function (item) {\n return this.gridID + '_cmenu_' + item;\n };\n ContextMenu.prototype.getKeyFromId = function (id) {\n return id.replace(this.gridID + '_cmenu_', '');\n };\n ContextMenu.prototype.buildDefaultItems = function (item) {\n var menuItem;\n switch (item) {\n case 'AutoFitAll':\n case 'AutoFit':\n menuItem = { target: menuClass.header };\n break;\n case 'Group':\n menuItem = { target: menuClass.header, iconCss: menuClass.group };\n break;\n case 'Ungroup':\n menuItem = { target: menuClass.header, iconCss: menuClass.ungroup };\n break;\n case 'Edit':\n menuItem = { target: menuClass.content, iconCss: menuClass.editIcon };\n break;\n case 'Delete':\n menuItem = { target: menuClass.content, iconCss: menuClass.delete };\n break;\n case 'Save':\n menuItem = { target: menuClass.edit, iconCss: menuClass.save };\n break;\n case 'Cancel':\n menuItem = { target: menuClass.edit, iconCss: menuClass.cancel };\n break;\n case 'Copy':\n menuItem = { target: menuClass.content, iconCss: menuClass.copy };\n break;\n case 'export':\n menuItem = { target: menuClass.content };\n break;\n case 'PdfExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.pdf };\n break;\n case 'ExcelExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.excel };\n break;\n case 'CsvExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.csv };\n break;\n case 'SortAscending':\n menuItem = { target: menuClass.header, iconCss: menuClass.ascending };\n break;\n case 'SortDescending':\n menuItem = { target: menuClass.header, iconCss: menuClass.descending };\n break;\n case 'FirstPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.fPage };\n break;\n case 'PrevPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.pPage };\n break;\n case 'LastPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.lPage };\n break;\n case 'NextPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.nPage };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n target: menuItem.target, iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : ''\n };\n return this.defaultItems[item];\n };\n ContextMenu.prototype.getDefaultItems = function () {\n return ['AutoFitAll', 'AutoFit',\n 'Group', 'Ungroup', 'Edit', 'Delete', 'Save', 'Cancel', 'Copy', 'export',\n 'PdfExport', 'ExcelExport', 'CsvExport', 'SortAscending', 'SortDescending',\n 'FirstPage', 'PrevPage', 'LastPage', 'NextPage'];\n };\n ContextMenu.prototype.setLocaleKey = function () {\n return {\n 'AutoFitAll': 'autoFitAll',\n 'AutoFit': 'autoFit',\n 'Copy': 'Copy',\n 'Group': 'Group',\n 'Ungroup': 'Ungroup',\n 'Edit': 'EditRecord',\n 'Delete': 'DeleteRecord',\n 'Save': 'Save',\n 'Cancel': 'CancelButton',\n 'PdfExport': 'Pdfexport',\n 'ExcelExport': 'Excelexport',\n 'CsvExport': 'Csvexport',\n 'export': 'Export',\n 'SortAscending': 'SortAscending',\n 'SortDescending': 'SortDescending',\n 'FirstPage': 'FirstPage',\n 'LastPage': 'LastPage',\n 'PrevPage': 'PreviousPage',\n 'NextPage': 'NextPage'\n };\n };\n ContextMenu.prototype.getColumn = function (e) {\n var cell = closest(e.target, 'th.e-headercell');\n if (cell) {\n var uid = cell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ContextMenu.prototype.selectRow = function (e, isSelectable) {\n this.cell = e.target;\n this.row = closest(e.target, 'tr.e-row') || this.row;\n if (this.row && isSelectable && !parentsUntil(e.target, 'e-gridpager')) {\n this.parent.selectRow(parseInt(this.row.getAttribute('aria-rowindex'), 10));\n }\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { RowModelGenerator } from '../services/row-model-generator';\n/**\n * FreezeRowModelGenerator is used to generate grid data rows with freeze row and column.\n * @hidden\n */\nvar FreezeRowModelGenerator = /** @class */ (function () {\n function FreezeRowModelGenerator(parent) {\n this.isFrzLoad = 1;\n this.parent = parent;\n this.rowModelGenerator = new RowModelGenerator(this.parent);\n }\n FreezeRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var frzCols = this.parent.getFrozenColumns();\n var row = this.rowModelGenerator.generateRows(data, notifyArgs);\n for (var i = 0, len = row.length; i < len; i++) {\n if (this.isFrzLoad % 2 === 0) {\n row[i].cells = row[i].cells.slice(frzCols, row[i].cells.length);\n }\n else {\n row[i].cells = row[i].cells.slice(0, frzCols);\n }\n }\n this.isFrzLoad++;\n return row;\n };\n return FreezeRowModelGenerator;\n}());\nexport { FreezeRowModelGenerator };\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, addClass } from '@syncfusion/ej2-base';\nimport { HeaderRender } from './header-renderer';\nimport { ContentRender } from './content-renderer';\nimport { FreezeRowModelGenerator } from '../services/freeze-row-model-generator';\nimport * as events from '../base/constant';\nimport { renderMovable, getScrollBarWidth } from '../base/util';\n/**\n * Freeze module is used to render grid content with frozen rows and columns\n * @hidden\n */\nvar FreezeContentRender = /** @class */ (function (_super) {\n __extends(FreezeContentRender, _super);\n function FreezeContentRender(parent, locator) {\n return _super.call(this, parent, locator) || this;\n }\n FreezeContentRender.prototype.renderPanel = function () {\n _super.prototype.renderPanel.call(this);\n var fDiv = this.parent.createElement('div', { className: 'e-frozencontent' });\n var mDiv = this.parent.createElement('div', { className: 'e-movablecontent' });\n this.getPanel().firstChild.appendChild(fDiv);\n this.getPanel().firstChild.appendChild(mDiv);\n this.setFrozenContent(fDiv);\n this.setMovableContent(mDiv);\n };\n FreezeContentRender.prototype.renderEmpty = function (tbody) {\n _super.prototype.renderEmpty.call(this, tbody);\n this.getMovableContent().querySelector('tbody').innerHTML = '';\n this.getFrozenContent().querySelector('.e-emptyrow').querySelector('td').colSpan = this.parent.getFrozenColumns();\n this.getFrozenContent().style.borderRightWidth = '0px';\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody').innerHTML = '';\n this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').innerHTML = '';\n }\n };\n FreezeContentRender.prototype.setFrozenContent = function (ele) {\n this.frozenContent = ele;\n };\n FreezeContentRender.prototype.setMovableContent = function (ele) {\n this.movableContent = ele;\n };\n FreezeContentRender.prototype.getFrozenContent = function () {\n return this.frozenContent;\n };\n FreezeContentRender.prototype.getMovableContent = function () {\n return this.movableContent;\n };\n FreezeContentRender.prototype.getModelGenerator = function () {\n return new FreezeRowModelGenerator(this.parent);\n };\n FreezeContentRender.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n this.getFrozenContent().appendChild(this.getTable());\n var mTbl = this.getTable().cloneNode(true);\n this.getMovableContent().appendChild(mTbl);\n remove(this.getMovableContent().querySelector('colgroup'));\n var colGroup = ((this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup')).cloneNode(true));\n mTbl.insertBefore(colGroup, mTbl.querySelector('tbody'));\n };\n return FreezeContentRender;\n}(ContentRender));\nexport { FreezeContentRender };\nvar FreezeRender = /** @class */ (function (_super) {\n __extends(FreezeRender, _super);\n function FreezeRender(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.addEventListener();\n return _this;\n }\n FreezeRender.prototype.addEventListener = function () {\n this.parent.on(events.freezeRender, this.refreshFreeze, this);\n this.parent.on(events.frozenHeight, this.setFrozenHeight, this);\n };\n FreezeRender.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.frozenHeight, this.setFrozenHeight);\n };\n FreezeRender.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n this.rfshMovable();\n this.updateColgroup();\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });\n };\n FreezeRender.prototype.renderPanel = function () {\n _super.prototype.renderPanel.call(this);\n var fDiv = this.parent.createElement('div', { className: 'e-frozenheader' });\n var mDiv = this.parent.createElement('div', { className: 'e-movableheader' });\n this.getPanel().firstChild.appendChild(fDiv);\n this.getPanel().firstChild.appendChild(mDiv);\n this.setFrozenHeader(fDiv);\n this.setMovableHeader(mDiv);\n };\n FreezeRender.prototype.refreshUI = function () {\n var tbody = this.getMovableHeader().querySelector('tbody');\n remove(this.getMovableHeader().querySelector('table'));\n _super.prototype.refreshUI.call(this);\n this.rfshMovable();\n this.getMovableHeader().querySelector('tbody').innerHTML = tbody.innerHTML;\n this.updateColgroup();\n this.parent.updateDefaultCursor();\n renderMovable(this.parent.getContentTable().querySelector('colgroup'), this.parent.getFrozenColumns());\n this.initializeHeaderDrag();\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });\n };\n FreezeRender.prototype.rfshMovable = function () {\n this.getFrozenHeader().appendChild(this.getTable());\n this.getMovableHeader().appendChild(this.createTable());\n this.refreshStackedHdrHgt();\n this.addMovableFirstCls();\n };\n FreezeRender.prototype.addMovableFirstCls = function () {\n if (this.parent.getVisibleFrozenColumns()) {\n var movablefirstcell = this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('.e-columnheader');\n var len = this.parent.element.querySelector('.e-movableheader').querySelector('thead').querySelectorAll('.e-columnheader').length;\n for (var i = 0; i < len; i++) {\n var cells = 'cells';\n var element = movablefirstcell[i][cells][0];\n if (element) {\n addClass([element], ['e-movablefirst']);\n if (movablefirstcell[i][cells][0].rowSpan > 1) {\n i = i + (movablefirstcell[i][cells][0].rowSpan - 1);\n }\n }\n }\n }\n };\n FreezeRender.prototype.refreshFreeze = function (obj) {\n if (obj.case === 'filter') {\n var filterRow = this.getTable().querySelector('.e-filterbar');\n if (this.parent.allowFiltering && filterRow && this.getMovableHeader().querySelector('thead')) {\n this.getMovableHeader().querySelector('thead')\n .appendChild(renderMovable(filterRow, this.parent.getFrozenColumns()));\n }\n }\n else if (obj.case === 'textwrap') {\n var fRows = void 0;\n var mRows = void 0;\n var fHdr = this.getFrozenHeader();\n var mHdr = this.getMovableHeader();\n var cont = this.parent.getContent();\n var wrapMode = this.parent.textWrapSettings.wrapMode;\n var hdrClassList = this.parent.getHeaderContent().firstChild.classList;\n if (wrapMode !== 'Header' || obj.isModeChg) {\n fRows = cont.querySelector('.e-frozencontent').querySelectorAll('tr');\n mRows = cont.querySelector('.e-movablecontent').querySelectorAll('tr');\n this.setWrapHeight(fRows, mRows, obj.isModeChg, true);\n }\n if (wrapMode === 'Content' && this.parent.allowTextWrap) {\n hdrClassList.add('e-wrap');\n }\n else {\n hdrClassList.remove('e-wrap');\n }\n if (wrapMode === 'Both' || obj.isModeChg) {\n fRows = fHdr.querySelectorAll('tr');\n mRows = mHdr.querySelectorAll('tr');\n }\n else {\n fRows = fHdr.querySelector(wrapMode === 'Content' ? 'tbody' : 'thead').querySelectorAll('tr');\n mRows = mHdr.querySelector(wrapMode === 'Content' ? 'tbody' : 'thead').querySelectorAll('tr');\n }\n if (!this.parent.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.setWrapHeight(fRows, mRows, obj.isModeChg, false, this.colDepth > 1);\n }\n this.refreshStackedHdrHgt();\n }\n };\n FreezeRender.prototype.updateResizeHandler = function () {\n [].slice.call(this.parent.getHeaderContent().querySelectorAll('.e-rhandler')).forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n FreezeRender.prototype.setWrapHeight = function (fRows, mRows, isModeChg, isContReset, isStackedHdr) {\n var fRowHgt;\n var mRowHgt;\n var isWrap = this.parent.allowTextWrap;\n var wrapMode = this.parent.textWrapSettings.wrapMode;\n var tHead = this.parent.getHeaderContent().querySelector('thead');\n var tBody = this.parent.getHeaderContent().querySelector('tbody');\n var height = [];\n var width = [];\n for (var i = 0, len = fRows.length; i < len; i++) { //separate loop for performance issue \n height[i] = fRows[i].offsetHeight; //https://pagebuildersandwich.com/increased-plugins-performance-200/\n width[i] = mRows[i].offsetHeight;\n }\n for (var i = 0, len = fRows.length; i < len; i++) {\n if (isModeChg && ((wrapMode === 'Header' && isContReset) || ((wrapMode === 'Content' && tHead.contains(fRows[i]))\n || (wrapMode === 'Header' && tBody.contains(fRows[i])))) || isStackedHdr) {\n fRows[i].style.height = null;\n mRows[i].style.height = null;\n }\n fRowHgt = height[i];\n mRowHgt = width[i];\n if (fRows[i].childElementCount && ((isWrap && fRowHgt < mRowHgt) || (!isWrap && fRowHgt > mRowHgt) ||\n (this.parent.allowResizing && this.parent.resizeModule && !this.parent.resizeModule.isFrozenColResized))) {\n fRows[i].style.height = mRowHgt + 'px';\n }\n if (mRows[i].childElementCount && ((isWrap && fRowHgt > mRowHgt) || (!isWrap && fRowHgt < mRowHgt) ||\n (this.parent.allowResizing && this.parent.resizeModule && this.parent.resizeModule.isFrozenColResized))) {\n mRows[i].style.height = fRowHgt + 'px';\n }\n }\n if (isWrap) {\n this.setFrozenHeight();\n }\n };\n FreezeRender.prototype.setFrozenHeight = function () {\n var movableContentHeight = this.parent.element.querySelector('.e-movablecontent').getBoundingClientRect().height;\n var frozenContentHeight = this.parent.element.querySelector('.e-frozencontent').getBoundingClientRect().height;\n if (movableContentHeight > frozenContentHeight) {\n this.parent.element.querySelector('.e-frozencontent').style.height = movableContentHeight -\n getScrollBarWidth() + 'px';\n }\n };\n FreezeRender.prototype.refreshStackedHdrHgt = function () {\n var fRowSpan;\n var mRowSpan;\n var fTr = this.getFrozenHeader().querySelectorAll('.e-columnheader');\n var mTr = this.getMovableHeader().querySelectorAll('.e-columnheader');\n for (var i = 0, len = fTr.length; i < len; i++) {\n fRowSpan = this.getRowSpan(fTr[i]);\n mRowSpan = this.getRowSpan(mTr[i]);\n if (fRowSpan.min > 1) {\n this.updateStackedHdrRowHgt(i, fRowSpan.max, fTr[i], mTr);\n }\n else if (mRowSpan.min > 1) {\n this.updateStackedHdrRowHgt(i, mRowSpan.max, mTr[i], fTr);\n }\n }\n if (this.parent.allowResizing) {\n this.updateResizeHandler();\n }\n };\n FreezeRender.prototype.getRowSpan = function (row) {\n var rSpan;\n var minRowSpan;\n var maxRowSpan;\n for (var i = 0, len = row.childElementCount; i < len; i++) {\n if (i === 0) {\n minRowSpan = row.children[0].rowSpan;\n }\n rSpan = row.children[i].rowSpan;\n minRowSpan = Math.min(rSpan, minRowSpan);\n maxRowSpan = Math.max(rSpan, minRowSpan);\n }\n return { min: minRowSpan, max: maxRowSpan };\n };\n FreezeRender.prototype.updateStackedHdrRowHgt = function (idx, maxRowSpan, row, rows) {\n var height = 0;\n for (var i = 0; i < maxRowSpan; i++) {\n height += rows[idx + i].style.height ?\n parseInt(rows[idx + i].style.height, 10) : rows[idx + i].offsetHeight;\n }\n row.style.height = height + 'px';\n };\n FreezeRender.prototype.setFrozenHeader = function (ele) {\n this.frozenHeader = ele;\n };\n FreezeRender.prototype.setMovableHeader = function (ele) {\n this.movableHeader = ele;\n };\n FreezeRender.prototype.getFrozenHeader = function () {\n return this.frozenHeader;\n };\n FreezeRender.prototype.getMovableHeader = function () {\n return this.movableHeader;\n };\n FreezeRender.prototype.updateColgroup = function () {\n var mTable = this.getMovableHeader().querySelector('table');\n remove(this.getMovableHeader().querySelector('colgroup'));\n mTable.insertBefore(renderMovable(this.getFrozenHeader().querySelector('colgroup'), this.parent.getFrozenColumns()), mTable.querySelector('thead'));\n };\n return FreezeRender;\n}(HeaderRender));\nexport { FreezeRender };\n","import * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { parentsUntil } from '../base/util';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { FreezeRender, FreezeContentRender } from '../renderer/freeze-renderer';\n/**\n * `Freeze` module is used to handle Frozen rows and columns.\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n function Freeze(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n Freeze.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n Freeze.prototype.wireEvents = function () {\n if (this.parent.frozenRows) {\n EventHandler.add(this.parent.getHeaderContent(), 'dblclick', this.dblClickHandler, this);\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-grid').id !== this.parent.element.id) {\n return;\n }\n this.parent.notify(events.dblclick, e);\n };\n Freeze.prototype.instantiateRenderer = function () {\n var renderer = this.locator.getService('rendererFactory');\n if (this.parent.getFrozenColumns()) {\n renderer.addRenderer(RenderType.Header, new FreezeRender(this.parent, this.locator));\n renderer.addRenderer(RenderType.Content, new FreezeContentRender(this.parent, this.locator));\n }\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { EventHandler, closest, Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { parentsUntil } from '../base/util';\nimport * as events from '../base/constant';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Group } from '../actions/group';\nimport { Sort } from '../actions/sort';\nimport { Filter } from '../actions/filter';\nimport { Resize } from '../actions/resize';\n/**\n * 'column menu module used to handle column menu actions'\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n function ColumnMenu(parent, serviceLocator) {\n this.defaultItems = {};\n this.localeText = this.setLocaleKey();\n this.disableItems = [];\n this.hiddenItems = [];\n this.isOpen = false;\n // default class names\n this.GROUP = 'e-icon-group';\n this.UNGROUP = 'e-icon-ungroup';\n this.ASCENDING = 'e-icon-ascending';\n this.DESCENDING = 'e-icon-descending';\n this.ROOT = 'e-columnmenu';\n this.FILTER = 'e-icon-filter';\n this.POP = 'e-filter-popup';\n this.WRAP = 'e-col-menu';\n this.CHOOSER = '_chooser_';\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n ColumnMenu.prototype.wireEvents = function () {\n var _this = this;\n this.getColumnMenuHandlers().forEach(function (ele) {\n EventHandler.add(ele, 'mousedown', _this.columnMenuHandlerDown, _this);\n });\n };\n ColumnMenu.prototype.unwireEvents = function () {\n var _this = this;\n this.getColumnMenuHandlers().forEach(function (ele) {\n EventHandler.remove(ele, 'mousedown', _this.columnMenuHandlerDown);\n });\n };\n /**\n * To destroy the resize\n * @return {void}\n * @hidden\n */\n ColumnMenu.prototype.destroy = function () {\n var gridElement = this.parent.element;\n if (!gridElement || (!gridElement.querySelector('.e-gridheader') && !gridElement.querySelector('.e-gridcontent'))) {\n return;\n }\n this.columnMenu.destroy();\n this.removeEventListener();\n this.unwireFilterEvents();\n this.unwireEvents();\n remove(this.element);\n };\n ColumnMenu.prototype.columnMenuHandlerClick = function (e) {\n if (e.target.classList.contains('e-columnmenu')) {\n if ((this.isOpen && this.headerCell !== this.getHeaderCell(e)) || document.querySelector('.e-grid-menu .e-menu-parent.e-ul')) {\n this.columnMenu.close();\n this.openColumnMenu(e);\n }\n else if (!this.isOpen) {\n this.openColumnMenu(e);\n }\n else {\n this.columnMenu.close();\n }\n }\n };\n ColumnMenu.prototype.openColumnMenu = function (e) {\n var pos = { top: 0, left: 0 };\n this.element.style.cssText = 'display:block;visibility:hidden';\n var elePos = this.element.getBoundingClientRect();\n this.element.style.cssText = 'display:none;visibility:visible';\n this.headerCell = this.getHeaderCell(e);\n if (Browser.isDevice) {\n pos.top = ((window.innerHeight / 2) - (elePos.height / 2));\n pos.left = ((window.innerWidth / 2) - (elePos.width / 2));\n }\n else {\n if (this.parent.enableRtl) {\n pos = calculatePosition(this.headerCell, 'left', 'bottom');\n }\n else {\n pos = calculatePosition(this.headerCell, 'right', 'bottom');\n pos.left -= elePos.width;\n }\n }\n this.columnMenu.open(pos.top, pos.left);\n e.preventDefault();\n };\n ColumnMenu.prototype.columnMenuHandlerDown = function (e) {\n this.isOpen = !(this.element.style.display === 'none' || this.element.style.display === '');\n };\n ColumnMenu.prototype.getColumnMenuHandlers = function () {\n return [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + this.ROOT));\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerRefreshed, this.wireEvents, this);\n this.parent.on(events.uiUpdate, this.enableAfterRenderMenu, this);\n this.parent.on(events.initialEnd, this.render, this);\n if (this.isFilterItemAdded()) {\n this.parent.on(events.filterDialogCreated, this.filterPosition, this);\n }\n this.parent.on(events.click, this.columnMenuHandlerClick, this);\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.headerRefreshed, this.unwireEvents);\n this.parent.off(events.uiUpdate, this.enableAfterRenderMenu);\n this.parent.off(events.initialEnd, this.render);\n if (this.isFilterItemAdded()) {\n this.parent.off(events.filterDialogCreated, this.filterPosition);\n }\n this.parent.off(events.click, this.columnMenuHandlerClick);\n };\n ColumnMenu.prototype.enableAfterRenderMenu = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n if (this.columnMenu) {\n this.columnMenu.destroy();\n remove(this.element);\n }\n this.render();\n }\n };\n ColumnMenu.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.element = this.parent.createElement('ul', { id: this.gridID + '_columnmenu', className: 'e-colmenu' });\n this.parent.element.appendChild(this.element);\n this.columnMenu = new Menu({\n cssClass: 'e-grid-menu',\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n items: this.getItems(),\n select: this.columnMenuItemClick.bind(this),\n beforeOpen: this.columnMenuBeforeOpen.bind(this),\n onClose: this.columnMenuOnClose.bind(this),\n beforeItemRender: this.beforeMenuItemRender.bind(this),\n beforeClose: this.columnMenuBeforeClose.bind(this)\n });\n this.columnMenu.appendTo(this.element);\n this.wireFilterEvents();\n };\n ColumnMenu.prototype.wireFilterEvents = function () {\n if (!Browser.isDevice && this.isFilterItemAdded()) {\n EventHandler.add(this.element, 'mouseover', this.appendFilter, this);\n }\n };\n ColumnMenu.prototype.unwireFilterEvents = function () {\n if (!Browser.isDevice && this.isFilterItemAdded()) {\n EventHandler.remove(this.element, 'mouseover', this.appendFilter);\n }\n };\n ColumnMenu.prototype.beforeMenuItemRender = function (args) {\n if (this.isChooserItem(args.item)) {\n var field = this.getKeyFromId(args.item.id, this.CHOOSER);\n var column = this.parent.getColumnByField(field);\n var check = createCheckBox(this.parent.createElement, false, {\n label: args.item.text,\n checked: column.visible\n });\n if (this.parent.enableRtl) {\n check.classList.add('e-rtl');\n }\n args.element.innerHTML = '';\n args.element.appendChild(check);\n }\n else if (args.item.id && this.getKeyFromId(args.item.id) === 'Filter') {\n args.element.appendChild(this.parent.createElement('span', { className: 'e-icons e-caret' }));\n args.element.className += 'e-filter-item e-menu-caret-icon';\n }\n };\n ColumnMenu.prototype.columnMenuBeforeClose = function (args) {\n var colChooser = args.event ? closest(args.event.target, '.e-menu-item') : null;\n if (!isNullOrUndefined(args.parentItem) &&\n this.getKeyFromId(args.parentItem.id) === 'ColumnChooser' &&\n colChooser && this.isChooserItem(colChooser)) {\n args.cancel = true;\n }\n else if (args.event && (closest(args.event.target, '.' + this.POP)\n || (args.event.currentTarget && args.event.currentTarget.activeElement &&\n parentsUntil(args.event.currentTarget.activeElement, 'e-filter-popup'))\n || parentsUntil(args.event.target, 'e-popup') ||\n (parentsUntil(args.event.target, 'e-popup-wrapper'))) && !Browser.isDevice) {\n args.cancel = true;\n }\n };\n ColumnMenu.prototype.isChooserItem = function (item) {\n return item.id && item.id.indexOf('_colmenu_') >= 0 &&\n this.getKeyFromId(item.id, this.CHOOSER).indexOf('_colmenu_') === -1;\n };\n ColumnMenu.prototype.columnMenuBeforeOpen = function (args) {\n args.column = this.targetColumn = this.getColumn();\n this.parent.trigger(events.columnMenuOpen, args);\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (this.ensureDisabledStatus(key) && !dItem.hide) {\n this.disableItems.push(item.text);\n }\n else if (item.hide) {\n this.hiddenItems.push(item.text);\n }\n }\n }\n this.columnMenu.enableItems(this.disableItems, false);\n this.columnMenu.hideItems(this.hiddenItems);\n };\n ColumnMenu.prototype.ensureDisabledStatus = function (item) {\n var _this = this;\n var status = false;\n switch (item) {\n case 'Group':\n if (!this.parent.allowGrouping || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) >= 0 ||\n this.targetColumn && !this.targetColumn.allowGrouping)) {\n status = true;\n }\n break;\n case 'AutoFitAll':\n case 'AutoFit':\n status = !this.parent.ensureModuleInjected(Resize);\n break;\n case 'Ungroup':\n if (!this.parent.ensureModuleInjected(Group) || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) < 0)) {\n status = true;\n }\n break;\n case 'SortDescending':\n case 'SortAscending':\n if (this.parent.allowSorting && this.parent.ensureModuleInjected(Sort)\n && this.parent.sortSettings.columns.length > 0 && this.targetColumn && this.targetColumn.allowSorting) {\n this.parent.sortSettings.columns.forEach(function (ele) {\n if (ele.field === _this.targetColumn.field\n && ele.direction.toLocaleLowerCase() === item.toLocaleLowerCase().replace('sort', '')) {\n status = true;\n }\n });\n }\n else if (!this.parent.allowSorting || !this.parent.ensureModuleInjected(Sort) ||\n this.parent.allowSorting && this.targetColumn && !this.targetColumn.allowSorting) {\n status = true;\n }\n break;\n case 'Filter':\n if (this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar')\n && this.parent.ensureModuleInjected(Filter) && this.targetColumn && this.targetColumn.allowFiltering) {\n status = false;\n }\n else if (this.parent.ensureModuleInjected(Filter) && this.parent.allowFiltering\n && this.targetColumn && (!this.targetColumn.allowFiltering || this.parent.filterSettings.type === 'FilterBar')) {\n status = true;\n }\n }\n return status;\n };\n ColumnMenu.prototype.columnMenuItemClick = function (args) {\n var item = this.isChooserItem(args.item) ? 'ColumnChooser' : this.getKeyFromId(args.item.id);\n switch (item) {\n case 'AutoFit':\n this.parent.autoFitColumns(this.targetColumn.field);\n break;\n case 'AutoFitAll':\n this.parent.autoFitColumns([]);\n break;\n case 'Ungroup':\n this.parent.ungroupColumn(this.targetColumn.field);\n break;\n case 'Group':\n this.parent.groupColumn(this.targetColumn.field);\n break;\n case 'SortAscending':\n this.parent.sortColumn(this.targetColumn.field, 'Ascending');\n break;\n case 'SortDescending':\n this.parent.sortColumn(this.targetColumn.field, 'Descending');\n break;\n case 'ColumnChooser':\n var key = this.getKeyFromId(args.item.id, this.CHOOSER);\n var checkbox = args.element.querySelector('.e-checkbox-wrapper .e-frame');\n if (checkbox && checkbox.classList.contains('e-check')) {\n checkbox.classList.remove('e-check');\n this.parent.hideColumns(key, 'field');\n }\n else if (checkbox) {\n this.parent.showColumns(key, 'field');\n checkbox.classList.add('e-check');\n }\n break;\n case 'Filter':\n this.getFilter(args.element, args.item.id);\n break;\n }\n args.column = this.targetColumn;\n this.parent.trigger(events.columnMenuClick, args);\n };\n ColumnMenu.prototype.columnMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.columnMenu.enableItems(this.disableItems);\n this.disableItems = [];\n this.columnMenu.showItems(this.hiddenItems);\n this.hiddenItems = [];\n if (this.isFilterPopupOpen()) {\n this.getFilter(args.element, args.element.id, true);\n }\n }\n };\n ColumnMenu.prototype.getDefaultItems = function () {\n return ['AutoFitAll', 'AutoFit', 'SortAscending', 'SortDescending', 'Group', 'Ungroup', 'ColumnChooser', 'Filter'];\n };\n ColumnMenu.prototype.getItems = function () {\n var items = [];\n var defultItems = this.parent.columnMenuItems ? this.parent.columnMenuItems : this.getDefault();\n for (var _i = 0, defultItems_1 = defultItems; _i < defultItems_1.length; _i++) {\n var item = defultItems_1[_i];\n if (typeof item === 'string') {\n if (item === 'ColumnChooser') {\n var col = this.getDefaultItem(item);\n col.items = this.createChooserItems();\n items.push(col);\n }\n else {\n items.push(this.getDefaultItem(item));\n }\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n ColumnMenu.prototype.getDefaultItem = function (item) {\n var menuItem = {};\n switch (item) {\n case 'SortAscending':\n menuItem = { iconCss: this.ASCENDING };\n break;\n case 'SortDescending':\n menuItem = { iconCss: this.DESCENDING };\n break;\n case 'Group':\n menuItem = { iconCss: this.GROUP };\n break;\n case 'Ungroup':\n menuItem = { iconCss: this.UNGROUP };\n break;\n case 'Filter':\n menuItem = { iconCss: this.FILTER };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : null\n };\n return this.defaultItems[item];\n };\n ColumnMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n ColumnMenu.prototype.generateID = function (item, append) {\n return this.gridID + '_colmenu_' + (append ? append + item : item);\n };\n ColumnMenu.prototype.getKeyFromId = function (id, append) {\n return id.indexOf('_colmenu_') > 0 &&\n id.replace(this.gridID + '_colmenu_' + (append ? append : ''), '');\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.element;\n };\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n ColumnMenu.prototype.setLocaleKey = function () {\n return {\n 'AutoFitAll': 'autoFitAll',\n 'AutoFit': 'autoFit',\n 'Group': 'Group',\n 'Ungroup': 'Ungroup',\n 'SortAscending': 'SortAscending',\n 'SortDescending': 'SortDescending',\n 'ColumnChooser': 'Columnchooser',\n 'Filter': 'FilterMenu'\n };\n };\n ColumnMenu.prototype.getHeaderCell = function (e) {\n return closest(e.target, 'th.e-headercell');\n };\n ColumnMenu.prototype.getColumn = function () {\n if (this.headerCell) {\n var uid = this.headerCell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ColumnMenu.prototype.createChooserItems = function () {\n var items = [];\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.showInColumnChooser && col.field) {\n items.push({ id: this.generateID(col.field, this.CHOOSER), text: col.headerText ? col.headerText : col.field });\n }\n }\n return items;\n };\n ColumnMenu.prototype.appendFilter = function (e) {\n var filter = 'Filter';\n if (!this.defaultItems[filter]) {\n return;\n }\n else {\n var key = this.defaultItems[filter].id;\n if (closest(e.target, '#' + key) && !this.isFilterPopupOpen()) {\n this.getFilter(e.target, key);\n }\n else if (!closest(e.target, '#' + key) && this.isFilterPopupOpen()) {\n this.getFilter(e.target, key, true);\n }\n }\n };\n ColumnMenu.prototype.getFilter = function (target, id, isClose) {\n var filterPopup = this.getFilterPop();\n if (filterPopup) {\n filterPopup.style.display = !Browser.isDevice && isClose ? 'none' : 'block';\n }\n else {\n this.parent.notify(events.filterOpen, {\n col: this.targetColumn, target: target, isClose: isClose, id: id\n });\n }\n };\n ColumnMenu.prototype.setPosition = function (li, ul) {\n var gridPos = this.parent.element.getBoundingClientRect();\n var liPos = li.getBoundingClientRect();\n var left = liPos.left - gridPos.left;\n var top = liPos.top - gridPos.top;\n if (gridPos.height < top) {\n top = top - ul.offsetHeight + liPos.height;\n }\n else if (gridPos.height < top + ul.offsetHeight) {\n top = gridPos.height - ul.offsetHeight;\n }\n if (window.innerHeight < ul.offsetHeight + top + gridPos.top) {\n top = window.innerHeight - ul.offsetHeight - gridPos.top;\n }\n left += (this.parent.enableRtl ? -ul.offsetWidth : liPos.width);\n if (gridPos.width <= left + ul.offsetWidth) {\n left -= liPos.width + ul.offsetWidth;\n }\n else if (left < 0) {\n left += ul.offsetWidth + liPos.width;\n }\n ul.style.top = top + 'px';\n ul.style.left = left + 'px';\n };\n ColumnMenu.prototype.filterPosition = function (e) {\n var filterPopup = this.getFilterPop();\n filterPopup.classList.add(this.WRAP);\n if (!Browser.isDevice) {\n var disp = filterPopup.style.display;\n filterPopup.style.cssText += 'display:block;visibility:hidden';\n var li = this.element.querySelector('.' + this.FILTER);\n if (li) {\n this.setPosition(li.parentElement, filterPopup);\n filterPopup.style.cssText += 'display:' + disp + ';visibility:visible';\n }\n }\n };\n ColumnMenu.prototype.getDefault = function () {\n var items = [];\n if (this.parent.ensureModuleInjected(Resize)) {\n items.push('AutoFitAll');\n items.push('AutoFit');\n }\n if (this.parent.allowGrouping && this.parent.ensureModuleInjected(Group)) {\n items.push('Group');\n items.push('Ungroup');\n }\n if (this.parent.allowSorting && this.parent.ensureModuleInjected(Sort)) {\n items.push('SortAscending');\n items.push('SortDescending');\n }\n items.push('ColumnChooser');\n if (this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar') &&\n this.parent.ensureModuleInjected(Filter)) {\n items.push('Filter');\n }\n return items;\n };\n ColumnMenu.prototype.isFilterPopupOpen = function () {\n var filterPopup = this.getFilterPop();\n return filterPopup && filterPopup.style.display !== 'none';\n };\n ColumnMenu.prototype.getFilterPop = function () {\n return this.parent.element.querySelector('.' + this.POP);\n };\n ColumnMenu.prototype.isFilterItemAdded = function () {\n return (this.parent.columnMenuItems &&\n this.parent.columnMenuItems.indexOf('Filter') >= 0) || !this.parent.columnMenuItems;\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\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 { DataManager, Query, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { initForeignKeyColumn, getForeignKeyData, generateQuery } from '../base/constant';\nimport { getDatePredicate } from '../base/util';\nimport { Data } from './data';\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 columns.forEach(function (column) {\n column.dataSource = (column.dataSource instanceof DataManager ? column.dataSource :\n (isNullOrUndefined(column.dataSource) ? new DataManager() : new DataManager(column.dataSource)));\n });\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 foreignColumns.forEach(function (col) {\n var promise;\n var query = args.isComplex ? _this.genarateColumnQuery(col) :\n _this.genarateQuery(col, args.result.result, false, true);\n var dataSource = col.dataSource;\n 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 Promise.all(allPromise).then(function (responses) {\n responses.forEach(function (data, index) {\n foreignColumns[index].columnData = data.result;\n });\n args.promise.resolve(args.result);\n }).catch(function (e) {\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 predicate;\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 filteredValue.forEach(function (obj) {\n if (obj && obj.getDay) {\n predicates.push(getDatePredicate({ field: field, operator: 'equal', value: obj, matchCase: false }));\n }\n else {\n predicates.push(new Predicate(field, 'equal', obj, false));\n }\n });\n }\n if (needQuery) {\n return predicates.length ? query.where(Predicate.or(predicates)) : query;\n }\n predicate = (predicates.length ? Predicate.or(predicates) : { predicates: [] });\n return predicate;\n };\n ForeignKey.prototype.genarateColumnQuery = function (column) {\n var gObj = this.parent;\n var query = new Query();\n var predicate = [];\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 query.search(sSettings.key, column.foreignKeyValue, sSettings.operator, sSettings.ignoreCase);\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);\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","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/**\n * Specifies RichTextEditor internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var iframeMouseDown = 'iframe-click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var refreshBegin = 'refresh-begin';\n/** @hidden */\nexport var toolbarUpdated = 'toolbar-updated';\n/** @hidden */\nexport var bindOnEnd = 'bind-on-end';\n/** @hidden */\nexport var renderColorPicker = 'render-color-picker';\n/** @hidden */\nexport var htmlToolbarClick = 'html-toolbar-click';\n/** @hidden */\nexport var markdownToolbarClick = 'markdown-toolbar-click';\n/** @hidden */\nexport var destroyColorPicker = 'destroy-color-picker';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var keyUp = 'keyUp';\n/** @hidden */\nexport var keyDown = 'keyDown';\n/** @hidden */\nexport var mouseUp = 'mouseUp';\n/** @hidden */\nexport var toolbarCreated = 'toolbarCreated';\n/** @hidden */\nexport var toolbarRenderComplete = 'toolbarRenderComplete';\n/** @hidden */\nexport var enableFullScreen = 'enableFullScreen';\n/** @hidden */\nexport var disableFullScreen = 'disableFullScreen';\n/** @hidden */\nexport var dropDownSelect = 'dropDownSelect';\n/** @hidden */\nexport var beforeDropDownItemRender = 'beforeDropDownItemRender';\n/** @hidden */\nexport var execCommandCallBack = 'execCommandCallBack';\n/** @hidden */\nexport var imageToolbarAction = 'image-toolbar-action';\n/** @hidden */\nexport var linkToolbarAction = 'link-toolbar-action';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var onResize = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var undo = 'undo';\n/** @hidden */\nexport var redo = 'redo';\n/** @hidden */\nexport var insertLink = 'insertLink';\n/** @hidden */\nexport var unLink = 'unLink';\n/** @hidden */\nexport var editLink = 'editLink';\n/** @hidden */\nexport var openLink = 'openLink';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionSuccess = 'actionSuccess';\n/** @hidden */\nexport var popupOpen = 'popupOpen';\n/** @hidden */\nexport var updateToolbarItem = 'updateToolbarItem';\n/** @hidden */\nexport var insertImage = 'insertImage';\n/** @hidden */\nexport var insertCompleted = 'insertCompleted';\n/** @hidden */\nexport var imageLeft = 'justifyLeft';\n/** @hidden */\nexport var imageRight = 'justifyRight';\n/** @hidden */\nexport var imageCenter = 'justifyCenter';\n/** @hidden */\nexport var imageBreak = 'break';\n/** @hidden */\nexport var imageInline = 'inline';\n/** @hidden */\nexport var imageLink = 'insertImgLink';\n/** @hidden */\nexport var imageAlt = 'imgAltText';\n/** @hidden */\nexport var imageDelete = 'delete';\n/** @hidden */\nexport var imageCaption = 'caption';\n/** @hidden */\nexport var imageSize = 'imageSize';\n/** @hidden */\nexport var sourceCode = 'sourceCode';\n/** @hidden */\nexport var updateSource = 'updateSource';\n/** @hidden */\nexport var toolbarOpen = 'toolbarOpen';\n/** @hidden */\nexport var beforeDropDownOpen = 'beforeDropDownOpen';\n/** @hidden */\nexport var selectionSave = 'selection-save';\n/** @hidden */\nexport var selectionRestore = 'selection-restore';\n/** @hidden */\nexport var expandPopupClick = 'expandPopupClick';\n/** @hidden */\nexport var count = 'count';\n/** @hidden */\nexport var contentFocus = 'contentFocus';\n/** @hidden */\nexport var contentBlur = 'contentBlur';\n/** @hidden */\nexport var mouseDown = 'mouseDown';\n/** @hidden */\nexport var sourceCodeMouseDown = 'sourceCodeMouseDown';\n/** @hidden */\nexport var editAreaClick = 'editAreaClick';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var colorPickerChanged = 'colorPickerChanged';\n/** @hidden */\nexport var tableColorPickerChanged = 'tableColorPickerChanged';\n/** @hidden */\nexport var focusChange = 'focusChange';\n/** @hidden */\nexport var selectAll = 'selectAll';\n/** @hidden */\nexport var selectRange = 'selectRange';\n/** @hidden */\nexport var getSelectedHtml = 'getSelectedHtml';\n/** @hidden */\nexport var renderInlineToolbar = 'renderInlineToolbar';\n/** @hidden */\nexport var paste = 'pasteImage';\n/** @hidden */\nexport var imgModule = 'imageModule';\n/** @hidden */\nexport var rtlMode = 'rtl-mode';\n/** @hidden */\nexport var createTable = 'createTable';\n/** @hidden */\nexport var docClick = 'docClick';\n/** @hidden */\nexport var tableToolbarAction = 'table-toolbar-action';\n/** @hidden */\nexport var checkUndo = 'checkUndoStack';\n/** @hidden */\nexport var readOnlyMode = 'readOnlyMode';\n","/**\n * RichTextEditor classes defined here.\n */\n/** @hidden */\nexport var CLS_RTE = 'e-richtexteditor';\n/** @hidden */\nexport var CLS_RTL = 'e-rtl';\n/** @hidden */\nexport var CLS_CONTENT = 'e-content';\n/** @hidden */\nexport var CLS_DISABLED = 'e-disabled';\n/** @hidden */\nexport var CLS_SCRIPT_SHEET = 'rte-iframe-script-sheet';\n/** @hidden */\nexport var CLS_STYLE_SHEET = 'rte-iframe-style-sheet';\n/** @hidden */\nexport var CLS_TOOLBAR = 'e-rte-toolbar';\n/** @hidden */\nexport var CLS_TB_FIXED = 'e-rte-tb-fixed';\n/** @hidden */\nexport var CLS_TB_FLOAT = 'e-rte-tb-float';\n/** @hidden */\nexport var CLS_TB_ABS_FLOAT = 'e-rte-tb-abs-float';\n/** @hidden */\nexport var CLS_INLINE = 'e-rte-inline';\n/** @hidden */\nexport var CLS_TB_INLINE = 'e-rte-tb-inline';\n/** @hidden */\nexport var CLS_RTE_EXPAND_TB = 'e-rte-tb-expand';\n/** @hidden */\nexport var CLS_FULL_SCREEN = 'e-rte-full-screen';\n/** @hidden */\nexport var CLS_QUICK_TB = 'e-rte-quick-toolbar';\n/** @hidden */\nexport var CLS_POP = 'e-rte-pop';\n/** @hidden */\nexport var CLS_QUICK_POP = 'e-rte-quick-popup';\n/** @hidden */\nexport var CLS_QUICK_DROPDOWN = 'e-quick-dropdown';\n/** @hidden */\nexport var CLS_IMAGE_POP = 'e-rte-image-popup';\n/** @hidden */\nexport var CLS_INLINE_POP = 'e-rte-inline-popup';\n/** @hidden */\nexport var CLS_INLINE_DROPDOWN = 'e-rte-inline-dropdown';\n/** @hidden */\nexport var CLS_DROPDOWN_POPUP = 'e-rte-dropdown-popup';\n/** @hidden */\nexport var CLS_DROPDOWN_ICONS = 'e-rte-dropdown-icons';\n/** @hidden */\nexport var CLS_DROPDOWN_ITEMS = 'e-rte-dropdown-items';\n/** @hidden */\nexport var CLS_DROPDOWN_BTN = 'e-rte-dropdown-btn';\n/** @hidden */\nexport var CLS_RTE_CONTENT = 'e-rte-content';\n/** @hidden */\nexport var CLS_TB_ITEM = 'e-toolbar-item';\n/** @hidden */\nexport var CLS_TB_EXTENDED = 'e-toolbar-extended';\n/** @hidden */\nexport var CLS_TB_WRAP = 'e-toolbar-wrapper';\n/** @hidden */\nexport var CLS_POPUP = 'e-popup';\n/** @hidden */\nexport var CLS_SEPARATOR = 'e-separator';\n/** @hidden */\nexport var CLS_MINIMIZE = 'e-minimize';\n/** @hidden */\nexport var CLS_MAXIMIZE = 'e-maximize';\n/** @hidden */\nexport var CLS_BACK = 'e-back';\n/** @hidden */\nexport var CLS_SHOW = 'e-show';\n/** @hidden */\nexport var CLS_HIDE = 'e-hide';\n/** @hidden */\nexport var CLS_VISIBLE = 'e-visible';\n/** @hidden */\nexport var CLS_FOCUS = 'e-focused';\n/** @hidden */\nexport var CLS_RM_WHITE_SPACE = 'e-remove-white-space';\n/** @hidden */\nexport var CLS_IMGRIGHT = 'e-imgright';\n/** @hidden */\nexport var CLS_IMGLEFT = 'e-imgleft';\n/** @hidden */\nexport var CLS_IMGCENTER = 'e-imgcenter';\n/** @hidden */\nexport var CLS_IMGBREAK = 'e-imgbreak';\n/** @hidden */\nexport var CLS_CAPTION = 'e-img-caption';\n/** @hidden */\nexport var CLS_CAPINLINE = 'e-caption-inline';\n/** @hidden */\nexport var CLS_IMGINLINE = 'e-imginline';\n/** @hidden */\nexport var CLS_COUNT = 'e-rte-character-count';\n/** @hidden */\nexport var CLS_WARNING = 'e-warning';\n/** @hidden */\nexport var CLS_ERROR = 'e-error';\n/** @hidden */\nexport var CLS_ICONS = 'e-icons';\n/** @hidden */\nexport var CLS_ACTIVE = 'e-active';\n/** @hidden */\nexport var CLS_EXPAND_OPEN = 'e-expand-open';\n/** @hidden */\nexport var CLS_RTE_ELEMENTS = 'e-rte-elements';\n/** @hidden */\nexport var CLS_TB_BTN = 'e-tbar-btn';\n/** @hidden */\nexport var CLS_HR_SEPARATOR = 'e-rte-horizontal-separator';\n/** @hidden */\nexport var CLS_TB_IOS_FIX = 'e-tbar-ios-fixed';\n/** @hidden */\nexport var CLS_TB_STATIC = 'e-tb-static';\n/** @hidden */\nexport var CLS_FORMATS_TB_BTN = 'e-formats-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_NAME_TB_BTN = 'e-font-name-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_SIZE_TB_BTN = 'e-font-size-tbar-btn';\n/** @hidden */\nexport var CLS_FONT_COLOR_TARGET = 'e-rte-fontcolor-element';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_TARGET = 'e-rte-backgroundcolor-element';\n/** @hidden */\nexport var CLS_COLOR_CONTENT = 'e-rte-color-content';\n/** @hidden */\nexport var CLS_FONT_COLOR_DROPDOWN = 'e-rte-fontcolor-dropdown';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_DROPDOWN = 'e-rte-backgroundcolor-dropdown';\n/** @hidden */\nexport var CLS_COLOR_PALETTE = 'e-rte-square-palette';\n/** @hidden */\nexport var CLS_FONT_COLOR_PICKER = 'e-rte-fontcolor-colorpicker';\n/** @hidden */\nexport var CLS_BACKGROUND_COLOR_PICKER = 'e-rte-backgroundcolor-colorpicker';\n/** @hidden */\nexport var CLS_RTE_READONLY = 'e-rte-readonly';\n/** @hidden */\nexport var CLS_TABLE_SEL = 'e-cell-select';\n/** @hidden */\nexport var CLS_TB_DASH_BOR = 'e-dashed-border';\n/** @hidden */\nexport var CLS_TB_ALT_BOR = 'e-alternate-border';\n/** @hidden */\nexport var CLS_TB_COL_RES = 'e-column-resize';\n/** @hidden */\nexport var CLS_TB_ROW_RES = 'e-row-resize';\n/** @hidden */\nexport var CLS_TB_BOX_RES = 'e-table-box';\n","// tslint:disable\n/**\n * Export items model\n */\nexport var templateItems = ['alignments', 'formats', 'fontname', 'fontsize', 'fontcolor', 'backgroundcolor', 'align', 'display', 'tablerows', 'tablecolumns', 'tablecellhorizontalalign', 'tablecellverticalalign', 'styles'];\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-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 '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 '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 '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': 'EditIamgeLink',\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-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': 'InsertCode',\n 'subCommand': 'InsertCode'\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 '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};\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 imageDisplayItems = [\n { text: 'Inline', cssClass: 'e-inline', command: 'Images', subCommand: 'Inline' },\n { text: 'Break', cssClass: 'e-break', command: 'Images', subCommand: 'Break' },\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];\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];\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];\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];\n","// tslint: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 Hyperlink',\n 'openLink': 'Open Link',\n 'editLink': 'Edit Link',\n 'removeLink': 'Remove Link',\n 'image': 'Insert Image',\n 'replace': 'Replace',\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 'imageLinkHeader': 'You can also provide a link from the web',\n 'mdimageLink': 'Please provide a URL for your image',\n 'imageUploadMessage': 'Drop image here or browse to upload',\n 'imageDeviceUploadMessage': 'Click here to upload',\n 'imageAlternateText': 'Alternate Text',\n 'alternateHeader': 'Alternative Text',\n 'browse': 'Browse',\n 'imageUrl': 'http://example.com/image.png',\n 'imageCaption': 'Caption',\n 'imageSizeHeader': 'Image Size',\n 'imageHeight': 'Height',\n 'imageWidth': 'Width',\n 'textPlaceholder': 'Enter Text',\n 'tblhead': '1X1',\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};\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 '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 'replace': 'replace',\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};\n","import { addClass, Browser, removeClass, EventHandler, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getInstance, closest, selectAll } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Popup } 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 } from '../base/classes';\nimport { isIDevice } from '../base/util';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * `Toolbar renderer` module is used to render toolbar in RichTextEditor.\n * @hidden\n */\nvar ToolbarRenderer = /** @class */ (function () {\n /**\n * Constructor for toolbar renderer module\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 };\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 };\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.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.toolbarClick, args);\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 (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.parent.notify(events.selectionRestore, args);\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 });\n args.rteToolbarObj.toolbarObj.createElement = this.parent.createElement;\n args.rteToolbarObj.toolbarObj.appendTo(args.target);\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 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 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.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n return dropDown;\n };\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 var popupContainer = this.parent.createElement('div', {\n className: 'e-rte-modal-popup e-popup-container e-center'\n });\n element.parentNode.insertBefore(popupContainer, element);\n popupContainer.appendChild(element);\n popupContainer.style.zIndex = element.style.zIndex;\n 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 this.popupOverlay.style.zIndex = (parseInt(element.style.zIndex, null) - 1).toString();\n this.popupOverlay.style.display = 'block';\n 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 ToolbarRenderer.prototype.renderColorPickerDropDown = function (args, item, colorPicker) {\n var _this = this;\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 var content = proxy.parent.createElement('span', { className: CLS_COLOR_CONTENT });\n var inlineEle = proxy.parent.createElement('span', { className: args.cssClass });\n var range;\n inlineEle.style.borderBottomColor = (item === 'backgroundcolor') ?\n proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n content.appendChild(inlineEle);\n var dropDown = new DropDownButton({\n target: colorPicker.element.parentElement,\n cssClass: css,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n beforeOpen: function (dropDownArgs) {\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 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: { 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 ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var focusEle;\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 },\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 /* tslint:enable */\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: { 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 },\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 }\n });\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n dropDown.element.insertBefore(content, dropDown.element.querySelector('.e-caret'));\n args.element.tabIndex = -1;\n dropDown.element.onmousedown = function () { proxy.parent.notify(events.selectionSave, {}); };\n return dropDown;\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 ToolbarRenderer.prototype.renderColorPicker = function (args, item) {\n var _this = this;\n var proxy = this;\n this.colorPicker = new ColorPicker({\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n inline: true,\n created: function () {\n var value = (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n _this.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 },\n change: function (colorPickerArgs) {\n /* tslint:disable */\n var colorpickerValue = Browser.info.name === 'msie' || Browser.info.name === 'edge' || isIDevice() ? colorPickerArgs.currentValue.rgba : colorPickerArgs.currentValue.hex;\n /* tslint:enable */\n colorPickerArgs.item = {\n command: args.command,\n subCommand: args.subCommand,\n value: colorpickerValue\n };\n proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;\n var 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, colorPickerArgs);\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, colorPickerArgs);\n }\n proxy.currentDropdown.toggle();\n },\n beforeModeSwitch: function (args) {\n _this.colorPicker.showButtons = args.mode === 'Palette' ? false : true;\n }\n });\n this.colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;\n this.colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :\n this.parent.fontColor.colorCode;\n this.colorPicker.cssClass = (item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER;\n this.colorPicker.createElement = this.parent.createElement;\n this.colorPicker.appendTo(document.body.querySelector(args.target));\n return this.colorPicker;\n };\n /**\n * The function is used to render RichTextEditor toolbar\n */\n ToolbarRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_TOOLBAR);\n };\n /**\n * Get the toolbar element of RichTextEditor\n * @return {Element}\n */\n ToolbarRenderer.prototype.getPanel = function () {\n return this.toolbarPanel;\n };\n /**\n * Set the toolbar element of RichTextEditor\n * @param {Element} panel\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, toObjectLowerCase } from '../base/util';\nimport { tools, templateItems } from '../models/items';\nimport { isNullOrUndefined, extend } 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.destroy, this.removeEventListener, this);\n };\n BaseToolbar.prototype.removeEventListener = function () {\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n BaseToolbar.prototype.setRtl = function (args) {\n if (!isNullOrUndefined(this.toolbarObj)) {\n this.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n BaseToolbar.prototype.getTemplateObject = function (itemStr, container) {\n var tagName;\n switch (itemStr) {\n case 'fontcolor':\n case 'backgroundcolor':\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 tooltipText: getTooltipText(itemStr, this.locator)\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 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 }\n };\n /**\n * @hidden\n */\n BaseToolbar.prototype.getItems = function (tbItems, container) {\n if (this.parent.toolbarSettings.items.length < 1) {\n return [];\n }\n var items = [];\n for (var _i = 0, tbItems_1 = tbItems; _i < tbItems_1.length; _i++) {\n var item = tbItems_1[_i];\n switch (typeof item) {\n case 'string':\n items.push(this.getObject(item, container));\n break;\n default:\n items.push(item);\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 };\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 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 'formats':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Formats', tbElement);\n if (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 _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, _this.parent.format.default, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FORMATS_TB_BTN,\n itemName: 'Formats',\n items: formatItem,\n element: targetElement\n });\n break;\n case 'fontname':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontName', tbElement);\n if (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 _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, _this.parent.fontFamily.default, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_NAME_TB_BTN,\n itemName: 'FontName',\n items: fontItem,\n element: targetElement\n });\n break;\n case 'fontsize':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontSize', tbElement);\n if (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 _this.fontSizeDropDown = _this.toolbarRenderer.renderDropDownButton({\n content: _this.dropdownContent(_this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, _this.parent.fontSize.default, 'text', 'value'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_SIZE_TB_BTN,\n itemName: 'FontSize',\n items: fontsize,\n element: targetElement\n });\n break;\n case 'alignments':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Alignments', tbElement);\n if (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,\n itemName: 'Alignments',\n items: model.alignmentItems,\n element: targetElement\n });\n break;\n case 'align':\n _this.imageAlignmentDropDown(type, tbElement, targetElement);\n break;\n case 'display':\n _this.imageDisplayDropDown(type, tbElement, targetElement);\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 'tablecellverticalalign':\n _this.verticalAlignDropDown(type, tbElement, targetElement);\n break;\n case 'styles':\n _this.tableStylesDropDown(type, tbElement, targetElement);\n break;\n }\n }\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 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 var type = !isNullOrUndefined(closest(this.fontNameDropDown.element, '.' + classes.CLS_QUICK_TB)) ?\n 'quick' : 'toolbar';\n var content = this.dropdownContent(this.parent.fontFamily.width, type, ((type === 'quick') ? '' :\n getDropDownValue(fontItems, this.parent.fontFamily.default, 'text', 'text')));\n this.fontNameDropDown.setProperties({ content: content });\n break;\n case 'items':\n this.fontNameDropDown.setProperties({\n items: this.getUpdateItems(newProp.fontFamily.items, 'FontSize')\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 var type = !isNullOrUndefined(closest(this.fontSizeDropDown.element, '.' + classes.CLS_QUICK_TB)) ? 'quick' : 'toolbar';\n var content = this.dropdownContent(this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, this.parent.fontSize.default, 'text', 'value')));\n this.fontSizeDropDown.setProperties({ content: content });\n break;\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 var type = !isNullOrUndefined(closest(this.formatDropDown.element, '.' + classes.CLS_QUICK_TB)) ? 'quick' : 'toolbar';\n var content = this.dropdownContent(this.parent.format.width, type, ((type === 'quick') ? '' :\n getDropDownValue(formatItems, this.parent.format.default, 'text', 'text')));\n this.formatDropDown.setProperties({ content: content });\n break;\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.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.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.imageDisplayDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Display', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.displayDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-display e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Display',\n items: model.imageDisplayItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageAlignmentDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Align', 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: 'Align',\n items: model.imageAlignItems,\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 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 };\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 };\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 };\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 };\n return DropDownButtons;\n}());\nexport { DropDownButtons };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\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 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 * @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 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 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 var activeEle = args.item.controlParent\n .activeEle;\n if (activeEle) {\n activeEle.tabIndex = -1;\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 === 'Display' || e.item.command === 'Table'))) {\n this.parent.formatter.process(this.parent, e, e.originalEvent, null);\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 } 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 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 this.keyBoardModule = new KeyboardEvents(this.getToolbarElement(), {\n keyAction: this.toolBarKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\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) {\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 default:\n tbMode = 'MultiRow';\n }\n return tbMode;\n };\n Toolbar.prototype.checkToolbarResponsive = function (ele) {\n if (!Browser.isDevice) {\n return false;\n }\n this.baseToolbar.render({\n container: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items,\n mode: 'MultiRow',\n target: ele\n });\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 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: '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 if (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 && 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)) + 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) {\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 });\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.checkIsTransformChild();\n this.toggleFloatClass();\n }\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) {\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 };\n Toolbar.prototype.addFixedTBarClass = function () {\n addClass([this.tbElement], [classes.CLS_TB_FIXED]);\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 (!this.isToolbar) ? removeClass([this.tbElement], [classes.CLS_SHOW, classes.CLS_TB_IOS_FIX]) : this.isToolbar = false;\n };\n Toolbar.prototype.updateItem = function (args) {\n var item = this.tools[args.updateItem.toLocaleLowerCase()];\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 }\n else {\n this.addTBarItem(args, 0);\n }\n };\n Toolbar.prototype.updateToolbarStatus = function (args) {\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 if (this.parent.inlineMode.enable) {\n setToolbarStatus(options, true);\n }\n else {\n setToolbarStatus(options, false);\n }\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 Toolbar.prototype.getBaseToolbar = function () {\n return this.baseToolbar;\n };\n Toolbar.prototype.addTBarItem = function (args, index) {\n args.baseToolbar.toolbarObj.addItems([args.baseToolbar.getObject(args.updateItem, 'toolbar')], index);\n };\n Toolbar.prototype.enableTBarItems = function (baseToolbar, items, isEnable) {\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)) {\n updateUndoRedoStatus(baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\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 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 Toolbar.prototype.getToolbarHeight = function () {\n return this.tbElement.offsetHeight;\n };\n Toolbar.prototype.getToolbarElement = function () {\n return select('.' + classes.CLS_TOOLBAR, this.parent.element);\n };\n Toolbar.prototype.refreshToolbarOverflow = function () {\n this.baseToolbar.toolbarObj.refreshOverflow();\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_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 * @method destroy\n * @return {void}\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.scrollHandler = function (e) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.toggleFloatClass(e.args);\n }\n };\n Toolbar.prototype.mouseDownHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.showFixedTBar();\n }\n };\n Toolbar.prototype.focusChangeHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.isToolbar = false;\n this.hideFixedTBar();\n }\n };\n Toolbar.prototype.dropDownBeforeOpenHandler = function () {\n this.isToolbar = true;\n };\n Toolbar.prototype.toolbarMouseDownHandler = function (e) {\n var trg = closest(e.target, '.e-hor-nav');\n if (trg && this.parent.toolbarSettings.type === ToolbarType.Expand && !isNOU(trg)) {\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 EventHandler.add(this.tbElement, 'click mousedown', this.toolbarMouseDownHandler, this);\n };\n Toolbar.prototype.unWireEvents = function () {\n EventHandler.remove(this.tbElement, 'click mousedown', this.toolbarMouseDownHandler);\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 if (!this.parent.inlineMode.enable) {\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 }\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 };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderToolbar);\n if (!this.parent.inlineMode.enable) {\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 }\n this.parent.off(events.modelChanged, this.onPropertyChanged);\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 };\n Toolbar.prototype.onRefresh = function () {\n this.refreshToolbarOverflow();\n this.parent.setContentHeight();\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\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 }\n };\n /**\n * For internal use only - Get 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})();\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 */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} 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 _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\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 &&\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 * @return {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 * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\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 { select, detach, extend } 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 ColorPickerInput.prototype.renderColorPickerInput = function (args) {\n var _this = this;\n this.initializeInstance();\n var suffixID = args.containerType;\n var tbElement = args.container;\n templateItems.forEach(function (item) {\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'fontcolor':\n var 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 document.body.appendChild(fontNode);\n var args_1 = {\n cssClass: _this.tools[item.toLocaleLowerCase()].icon\n + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\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(args_1, 'fontcolor');\n _this.fontColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(args_1, 'fontcolor', _this.fontColorPicker);\n break;\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 document.body.appendChild(backNode);\n args_1 = {\n cssClass: _this.tools[item.toLocaleLowerCase()].icon\n + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\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(args_1, 'backgroundcolor');\n _this.backgroundColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(args_1, 'backgroundcolor', _this.backgroundColorPicker);\n break;\n }\n }\n });\n };\n ColorPickerInput.prototype.destroy = function () {\n this.removeEventListener();\n this.destroyColorPicker();\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 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.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 };\n ColorPickerInput.prototype.onPropertyChanged = function (model) {\n var newProp = model.newProp;\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 var element = this.fontColorDropDown.element;\n var fontBorder = element.querySelector('.' + this.tools['fontcolor'].icon);\n fontBorder.style.borderBottomColor = newProp.fontColor.default;\n break;\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 var element = this.backgroundColorDropDown.element;\n var backgroundBorder = element.querySelector('.' + this.tools['backgroundcolor'].icon);\n backgroundBorder.style.borderBottomColor = newProp.backgroundColor.default;\n break;\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 };\n return ColorPickerInput;\n}());\nexport { ColorPickerInput };\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 } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus } 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 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.appendPopupContent();\n this.createToolbar(args.toolbarItems, args.mode);\n this.popupRenderer.renderPopup(this);\n this.addEventListener();\n };\n BaseQuickToolbar.prototype.createToolbar = function (items, mode) {\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 });\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 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 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;\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 case 'right':\n if (type === 'inline') {\n x = e.windowWidth - (e.popWidth + e.bodyRightSpace + 10);\n }\n else {\n x = e.x - (e.popWidth + e.parentData.left);\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 BaseQuickToolbar.prototype.showPopup = function (x, y, target) {\n var editPanelTop;\n var editPanelHeight;\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 = 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) {\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 this.popupObj.position.X = x + 20;\n this.popupObj.position.Y = y + ((this.parent.iframeSettings.enable) ? 35 : 20);\n this.popupObj.dataBind();\n this.popupObj.show();\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,\n bodyRightSpace: bodyRight,\n windowY: window.pageYOffset,\n windowHeight: windowHeight,\n windowWidth: windowWidth,\n parentData: parent.getBoundingClientRect(),\n tBarElementHeight: tBarHeight\n };\n if (target.tagName === 'IMG') {\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.hide();\n removeClass([this.element], [classes.CLS_HIDE]);\n this.popupObj.show({ name: 'ZoomIn', duration: 400 });\n setStyleAttribute(this.element, {\n maxWidth: this.parent.element.offsetWidth + 'px'\n });\n addClass([this.element], [classes.CLS_POP]);\n this.isDOMElement = true;\n };\n BaseQuickToolbar.prototype.hidePopup = function () {\n var viewSourcePanel = this.parent.sourceCodeModule.getViewPanel();\n if (Browser.isDevice) {\n removeClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\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 * @hidden\n */\n BaseQuickToolbar.prototype.addQTBarItem = function (item, index) {\n this.quickTBarObj.toolbarObj.addItems(this.quickTBarObj.getItems(item, 'toolbar'), index);\n };\n /**\n * @hidden\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 }\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);\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 * @method destroy\n * @return {void}\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 BaseQuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.destroy, this.destroy, this);\n if (this.parent.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n };\n BaseQuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.destroy, this.destroy);\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 { popupOpen } from '../base/constant';\n/**\n * `Popup renderer` module is used to render popup in RichTextEditor.\n * @hidden\n */\nvar PopupRenderer = /** @class */ (function () {\n /**\n * Constructor for popup renderer module\n */\n function PopupRenderer(parent) {\n this.parent = parent;\n }\n PopupRenderer.prototype.popupOpen = function () {\n this.parent.notify(popupOpen, this);\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.popupOpen.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 PopupRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_QUICK_POP);\n };\n /**\n * Get the popup element of RichTextEditor\n * @return {Element}\n */\n PopupRenderer.prototype.getPanel = function () {\n return this.popupPanel;\n };\n /**\n * Set the popup element of RichTextEditor\n * @param {Element} panel\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 } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport { pageYOffset, hasClass } 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 };\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 };\n QuickToolbar.prototype.onMouseDown = function (e) {\n this.parent.isBlur = false;\n this.parent.isRTE = true;\n };\n QuickToolbar.prototype.renderQuickToolbars = function () {\n if (this.linkQTBar || this.imageQTBar || 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.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 }\n if (this.imageQTBar) {\n EventHandler.add(this.imageQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.textQTBar) {\n EventHandler.add(this.textQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.tableQTBar) {\n EventHandler.add(this.tableQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n };\n QuickToolbar.prototype.renderInlineQuickToolbar = function () {\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 };\n QuickToolbar.prototype.showInlineQTBar = function (x, y, target) {\n this.inlineQTBar.showPopup(x, y, target);\n };\n QuickToolbar.prototype.hideInlineQTBar = function () {\n if (this.inlineQTBar && !hasClass(this.inlineQTBar.element, 'e-popup-close')) {\n this.inlineQTBar.hidePopup();\n }\n };\n QuickToolbar.prototype.hideQuickToolbars = function () {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close')) {\n this.textQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close')) {\n this.tableQTBar.hidePopup();\n }\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\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 () { _this.showInlineQTBar(x, y, target); }, 1000);\n };\n QuickToolbar.prototype.mouseUpHandler = function (e) {\n var args = e.args;\n var range = this.parent.getRange();\n var target = args.target;\n if (isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n this.hideInlineQTBar();\n this.offsetX = 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 if (target.tagName !== 'IMG' && target.tagName !== 'A' && (!closest(target, 'td,th') || !range.collapsed)) {\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 QuickToolbar.prototype.keyDownHandler = function () {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.inlineQTBarMouseDownHandler = function () {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.keyUpHandler = function (e) {\n if (this.parent.inlineMode.onSelection) {\n return;\n }\n var args = e.args;\n this.deBounce(this.offsetX, this.offsetY, args.target);\n };\n QuickToolbar.prototype.getInlineBaseToolbar = function () {\n return this.inlineQTBar && this.inlineQTBar.quickTBarObj;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n QuickToolbar.prototype.destroy = function () {\n if (this.linkQTBar) {\n EventHandler.remove(this.linkQTBar.element, 'mousedown', this.onMouseDown);\n this.linkQTBar.destroy();\n }\n if (this.textQTBar) {\n EventHandler.remove(this.textQTBar.element, 'mousedown', this.onMouseDown);\n this.textQTBar.destroy();\n }\n if (this.imageQTBar) {\n EventHandler.remove(this.imageQTBar.element, 'mousedown', this.onMouseDown);\n this.imageQTBar.destroy();\n }\n if (this.tableQTBar) {\n EventHandler.remove(this.tableQTBar.element, 'mousedown', this.onMouseDown);\n this.tableQTBar.destroy();\n }\n if (this.inlineQTBar) {\n EventHandler.remove(this.inlineQTBar.element, 'mousedown', this.onMouseDown);\n this.inlineQTBar.destroy();\n }\n this.removeEventListener();\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 };\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 };\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.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close')) {\n this.tableQTBar.hidePopup();\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 if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.wireInlineQTBarEvents();\n }\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 }\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 };\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 }\n };\n QuickToolbar.prototype.onIframeMouseDown = function () {\n this.hideQuickToolbars();\n this.hideInlineQTBar();\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.linkQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\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 if (this.parent.inlineMode.enable && !Browser.isDevice) {\n this.unWireInlineQTBarEvents();\n }\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.off(events.scroll, 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 };\n /**\n * Called internally if any of the property value changed.\n * @hidden\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 }\n else {\n this.parent.on(events.scroll, 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 if (this.parent.inlineMode.enable && !Browser.isDevice) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.wireInlineQTBarEvents();\n }\n }\n };\n /**\n * For internal use only - Get the module name.\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 };\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.trim() :\n this.editPanel.textContent.trim();\n this.htmlLength = htmlText.length;\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 * @hidden\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 Count.prototype.restrict = function (e) {\n if (this.parent.showCharCount) {\n var element = e.args.currentTarget.textContent.trim();\n var array = [8, 16, 17, 37, 38, 39, 40, 65];\n var arrayKey = void 0;\n for (var i = 0; i <= array.length - 1; i++) {\n if (e.args.which === array[i]) {\n if (e.args.ctrlKey && e.args.which === 65) {\n return;\n }\n else if (e.args.which !== 65) {\n arrayKey = array[i];\n return;\n }\n }\n }\n if ((element.length >= this.parent.maxLength && this.parent.maxLength !== -1) && e.args.which !== arrayKey) {\n e.args.preventDefault();\n }\n }\n };\n /**\n * Destroys the Count.\n * @method destroy\n * @return {void}\n */\n Count.prototype.destroy = function () {\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 if (this.parent.showCharCount) {\n this.parent.on(events.initialEnd, this.renderCount, this);\n this.parent.on(events.keyUp, this.refresh, this);\n this.parent.on(events.keyDown, this.restrict, 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 };\n Count.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n detach(this.element);\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.keyDown, this.restrict);\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 Count.prototype.getModuleName = function () {\n return 'count';\n };\n return Count;\n}());\nexport { Count };\n","/**\n * MarkdownSelection internal module\n * @hidden\n */\nvar MarkdownSelection = /** @class */ (function () {\n function MarkdownSelection() {\n }\n MarkdownSelection.prototype.getLineNumber = function (textarea, point) {\n return textarea.value.substr(0, point).split('\\n').length;\n };\n MarkdownSelection.prototype.getSelectedText = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n return textarea.value.substring(start, end);\n };\n MarkdownSelection.prototype.getAllParents = function (value) {\n return value.split('\\n');\n };\n MarkdownSelection.prototype.getSelectedLine = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var index = this.getLineNumber(textarea, textarea.selectionStart);\n return lines[index - 1];\n };\n MarkdownSelection.prototype.getLine = function (textarea, index) {\n var lines = this.getAllParents(textarea.value);\n return lines[index];\n };\n MarkdownSelection.prototype.getSelectedParentPoints = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var start = this.getLineNumber(textarea, textarea.selectionStart);\n var end = this.getLineNumber(textarea, textarea.selectionEnd);\n var parents = this.getSelectedText(textarea).split('\\n');\n var selectedPoints = [];\n var selectedLine = lines[start - 1];\n var startLength = lines.slice(0, start - 1).join('').length;\n var firstPoint = {};\n firstPoint.line = start - 1;\n firstPoint.start = startLength + firstPoint.line;\n firstPoint.end = selectedLine !== '' ? firstPoint.start +\n selectedLine.length + 1 : firstPoint.start + selectedLine.length;\n firstPoint.text = selectedLine;\n selectedPoints.push(firstPoint);\n if (parents.length > 1) {\n for (var i = 1; i < parents.length - 1; i++) {\n var points = {};\n points.line = selectedPoints[i - 1].line + 1;\n points.start = parents[i] !== '' ? selectedPoints[i - 1].end : selectedPoints[i - 1].end;\n points.end = points.start + parents[i].length + 1;\n points.text = parents[i];\n selectedPoints.push(points);\n }\n var lastPoint = {};\n lastPoint.line = selectedPoints[selectedPoints.length - 1].line + 1;\n lastPoint.start = selectedPoints[selectedPoints.length - 1].end;\n lastPoint.end = lastPoint.start + lines[end - 1].length + 1;\n lastPoint.text = lines[end - 1];\n selectedPoints.push(lastPoint);\n }\n return selectedPoints;\n };\n MarkdownSelection.prototype.setSelection = function (textarea, start, end) {\n textarea.setSelectionRange(start, end);\n textarea.focus();\n };\n MarkdownSelection.prototype.save = function (start, end) {\n this.selectionStart = start;\n this.selectionEnd = end;\n };\n MarkdownSelection.prototype.restore = function (textArea) {\n this.setSelection(textArea, this.selectionStart, this.selectionEnd);\n };\n MarkdownSelection.prototype.isStartWith = function (line, command) {\n var isStart = false;\n if (line) {\n var reg = line.trim() === command.trim() ?\n new RegExp('^(' + this.replaceSpecialChar(command.trim()) + ')', 'gim') :\n new RegExp('^(' + this.replaceSpecialChar(command) + ')', 'gim');\n isStart = reg.test(line.trim());\n }\n return isStart;\n };\n MarkdownSelection.prototype.replaceSpecialChar = function (value) {\n return value.replace(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/g, '\\\\$&');\n };\n MarkdownSelection.prototype.isClear = function (parents, regex) {\n var isClear = false;\n for (var i = 0; i < parents.length; i++) {\n if (new RegExp(regex, 'gim').test(parents[i].text)) {\n return true;\n }\n }\n return isClear;\n };\n MarkdownSelection.prototype.getRegex = function (syntax) {\n syntax = this.replaceSpecialChar(syntax);\n var regex = '^(' + syntax + ')|^(' + syntax.trim() + ')';\n return new RegExp(regex);\n };\n MarkdownSelection.prototype.getSelectedInlinePoints = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n var selection = this.getSelectedText(textarea);\n return { start: start, end: end, text: selection };\n };\n return MarkdownSelection;\n}());\nexport { MarkdownSelection };\n","import { MarkdownSelection } from '../../markdown-parser/plugin/markdown-selection';\nimport * as events from '../base/constant';\n/**\n * MarkdownToolbarStatus module for refresh the toolbar status\n */\nvar MarkdownToolbarStatus = /** @class */ (function () {\n function MarkdownToolbarStatus(parent) {\n this.toolbarStatus = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n uppercase: false,\n inlinecode: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null\n };\n this.selection = new MarkdownSelection();\n this.parent = parent;\n this.element = this.parent.contentModule.getEditPanel();\n this.addEventListener();\n }\n MarkdownToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n MarkdownToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n this.parent.off(events.destroy, this.onRefreshHandler);\n };\n MarkdownToolbarStatus.prototype.onRefreshHandler = function (args) {\n var parentsLines = this.selection.getSelectedParentPoints(this.element);\n this.toolbarStatus = {\n orderedlist: args.documentNode ? false : this.isListsApplied(parentsLines, 'OL'),\n unorderedlist: args.documentNode ? false : this.isListsApplied(parentsLines, 'UL'),\n formats: this.currentFormat(parentsLines, args.documentNode),\n bold: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Bold'),\n italic: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Italic'),\n inlinecode: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('InlineCode'),\n strikethrough: args.documentNode ? false :\n this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('StrikeThrough'),\n subscript: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SubScript'),\n superscript: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SuperScript'),\n uppercase: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('UpperCase')\n };\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n MarkdownToolbarStatus.prototype.isListsApplied = function (lines, type) {\n var isApply = true;\n for (var i = 0; i < lines.length; i++) {\n if (!this.selection.isStartWith(lines[i].text, this.parent.formatter.listTags[type])) {\n isApply = false;\n break;\n }\n }\n return isApply;\n };\n MarkdownToolbarStatus.prototype.currentFormat = function (lines, documentNode) {\n var format = 'p';\n var keys = Object.keys(this.parent.formatter.formatTags);\n var direction = this.element.selectionDirection;\n var checkLine = direction === 'backward' ? lines[0].text : lines[lines.length - 1].text;\n for (var i = 0; !documentNode && i < keys.length; i++) {\n if (keys[i] !== 'pre' && this.selection.isStartWith(checkLine, this.parent.formatter.formatTags[keys[i]])) {\n format = keys[i];\n break;\n }\n else if (keys[i] === 'pre') {\n var parentLines = this.selection.getAllParents(this.element.value);\n var firstPrevText = parentLines[lines[0].line - 1];\n var lastNextText = parentLines[lines.length + 1];\n if (this.selection.isStartWith(firstPrevText, this.parent.formatter.formatTags[keys[i]].split('\\n')[0]) &&\n this.selection.isStartWith(lastNextText, this.parent.formatter.formatTags[keys[i]].split('\\n')[0])) {\n format = keys[i];\n break;\n }\n }\n }\n return format;\n };\n return MarkdownToolbarStatus;\n}());\nexport { MarkdownToolbarStatus };\n","import * as events from '../base/constant';\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 if (args.requestType !== 'Undo' && args.requestType !== 'Redo') {\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","/**\n * Constant values for Common\n */\n/* Keydown event trigger\n * @hidden\n */\nexport var KEY_DOWN = 'keydown';\n/* Undo and Redo action HTML plugin events\n * @hidden\n */\nexport var ACTION = 'action';\n/* Formats plugin events\n * @hidden\n */\nexport var FORMAT_TYPE = 'format-type';\n/* Keydown handler event trigger\n * @hidden\n */\nexport var KEY_DOWN_HANDLER = 'keydown-handler';\n/* List plugin events\n * @hidden\n */\nexport var LIST_TYPE = 'list-type';\n/* Keyup handler event trigger\n * @hidden\n */\nexport var KEY_UP_HANDLER = 'keyup-handler';\n/* Keyup event trigger\n * @hidden\n */\nexport var KEY_UP = 'keyup';\n/* Model changed plugin event trigger\n * @hidden\n */\nexport var MODEL_CHANGED_PLUGIN = 'model_changed_plugin';\n/* Model changed event trigger\n * @hidden\n */\nexport var MODEL_CHANGED = 'model_changed';\n","import { extend, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport * as CONSTANT from '../base/constant';\nimport { updateUndoRedoStatus } from '../base/util';\nimport { KEY_DOWN, KEY_UP } from './../../common/constant';\n/**\n * Formatter\n * @hidden\n */\nvar Formatter = /** @class */ (function () {\n function Formatter() {\n }\n /**\n * To execute the command\n * @param {IRichTextEditor} self\n * @param {ActionBeginEventArgs} args\n * @param {MouseEvent|KeyboardEvent} event\n * @param {NotifyArgs} value\n */\n Formatter.prototype.process = function (self, args, event, value) {\n var selection = self.contentModule.getDocument().getSelection();\n var range = (selection.rangeCount > 0) ? selection.getRangeAt(selection.rangeCount - 1) : null;\n if (!isNullOrUndefined(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 && 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 (isNullOrUndefined(args)) {\n var action = event.action;\n if (action !== 'tab' && action !== 'enter' && action !== 'space' && action !== 'escape') {\n args = {};\n var items = {\n originalEvent: event, cancel: false,\n requestType: action || (event.key + 'Key'),\n itemCollection: value\n };\n extend(args, args, items, true);\n self.trigger(CONSTANT.actionBegin, args);\n if (args.cancel) {\n if (action === 'paste' || action === 'cut' || action === 'copy') {\n event.preventDefault();\n }\n return;\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 });\n }\n else if (!isNullOrUndefined(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'))) {\n extend(args, args, { requestType: args.item.subCommand, cancel: false, itemCollection: value }, true);\n self.trigger(CONSTANT.actionBegin, args);\n if (args.cancel) {\n return;\n }\n if (this.getUndoRedoStack().length === 0 && args.item.command !== 'Links' && args.item.command !== 'Images') {\n this.saveData();\n }\n self.isBlur = false;\n self.contentModule.getEditPanel().focus();\n var command = args.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: args.item.subCommand });\n this.editorManager.execCommand(args.item.command, args.item.subCommand, event, this.onSuccess.bind(this, self), args.item.value, value);\n }\n }\n this.enableUndo(self);\n };\n Formatter.prototype.getAncestorNode = function (node) {\n node = node.nodeType === 3 ? node.parentNode : node;\n return node;\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 _this.enableUndo(self);\n }\n });\n };\n Formatter.prototype.onSuccess = function (self, events) {\n this.enableUndo(self);\n self.notify(CONSTANT.execCommandCallBack, events);\n self.trigger(CONSTANT.actionComplete, events);\n if (events.requestType === 'Images' || events.requestType === 'Links' && self.editorMode === 'HTML') {\n var args = events;\n if (events.requestType === 'Links' && events.event &&\n events.event.type === 'keydown' &&\n events.event.keyCode === 32) {\n return;\n }\n self.notify(CONSTANT.insertCompleted, {\n args: args.event, type: events.requestType, isNotify: true,\n elements: args.elements\n });\n }\n self.autoResize();\n };\n /**\n * Save the data for undo and redo action.\n */\n Formatter.prototype.saveData = function (e) {\n this.editorManager.undoRedoManager.saveData(e);\n };\n Formatter.prototype.getUndoStatus = function () {\n return this.editorManager.undoRedoManager.getUndoStatus();\n };\n Formatter.prototype.getUndoRedoStack = function () {\n return this.editorManager.undoRedoManager.undoRedoStack;\n };\n Formatter.prototype.enableUndo = function (self) {\n var status = this.getUndoStatus();\n if (self.inlineMode.enable && !Browser.isDevice) {\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 Markdown Parser\n */\n/* List plugin events\n * @hidden\n */\nexport var LISTS_COMMAND = 'lists-commands';\n/* selectioncommand plugin events\n * @hidden\n */\nexport var selectionCommand = 'command-type';\n/* Link plugin events\n * @hidden\n */\nexport var LINK_COMMAND = 'link-commands';\n/* Clear plugin events\n * @hidden\n */\nexport var CLEAR_COMMAND = 'clear-commands';\n/* Table plugin events\n * @hidden\n */\nexport var MD_TABLE = 'insert-table';\n","import * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * Lists internal component\n * @hidden\n */\nvar MDLists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n */\n function MDLists(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLists.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LISTS_COMMAND, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, this.keyUpHandler, this);\n };\n MDLists.prototype.keyDownHandler = function (event) {\n switch (event.event.which) {\n case 9:\n this.tabKey(event);\n break;\n }\n switch (event.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n }\n };\n MDLists.prototype.keyUpHandler = function (event) {\n switch (event.event.which) {\n case 13:\n this.enterKey(event);\n break;\n }\n };\n MDLists.prototype.tabKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var addedLength = 0;\n var isNotFirst = this.isNotFirstLine(textArea, parents[0]);\n if (!isNotFirst && !event.event.shiftKey) {\n this.restore(textArea, start, end + addedLength, event);\n return;\n }\n var regex = this.getListRegex();\n this.currentAction = this.getAction(parents[0].text);\n for (var i = 0; i < parents.length; i++) {\n var prevIndex = event.event.shiftKey ? parents[i].line : parents[i].line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n if (prevLine && (!event.event.shiftKey && isNotFirst || (event.event.shiftKey && /^(\\t)/.test(prevLine)))) {\n prevLine = prevLine.trim();\n if (regex.test(prevLine)) {\n event.event.preventDefault();\n var tabSpace = '\\t';\n var tabSpaceLength = event.event.shiftKey ? -tabSpace.length : tabSpace.length;\n var splitTab = parents[i].text.split('\\t');\n parents[i].text = event.event.shiftKey ? splitTab.splice(1, splitTab.length).join('\\t') : tabSpace + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? start + tabSpaceLength : start;\n addedLength += tabSpaceLength;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? parents[j].start + tabSpaceLength : parents[j].start;\n parents[j].end = parents[j].end + tabSpaceLength;\n }\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, event);\n };\n MDLists.prototype.getTabSpace = function (line) {\n var split = line.split('\\t');\n var tabs = '';\n for (var i = 0; i < split.length; i++) {\n if (split[i] === '') {\n tabs += '\\t';\n }\n else {\n break;\n }\n }\n return tabs;\n };\n MDLists.prototype.isNotFirstLine = function (textArea, points) {\n var currentLine = points.text;\n var prevIndex = points.line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n var regex = this.getListRegex();\n var isNotFirst = false;\n if (prevLine && regex.test(prevLine.trim())) {\n var curTabSpace = this.getTabSpace(currentLine);\n var prevTabSpace = this.getTabSpace(prevLine);\n isNotFirst = curTabSpace === prevTabSpace ? true : isNotFirst;\n for (; prevTabSpace.length > curTabSpace.length; null) {\n prevIndex = prevIndex - 1;\n prevLine = this.selection.getLine(textArea, prevIndex);\n if (regex.test(prevLine.trim())) {\n prevTabSpace = this.getTabSpace(prevLine);\n if (prevTabSpace.length <= curTabSpace.length) {\n isNotFirst = true;\n break;\n }\n }\n }\n }\n return isNotFirst;\n };\n MDLists.prototype.getAction = function (line) {\n var ol = line.trim().split(new RegExp('^(' + this.selection.replaceSpecialChar(this.syntax.OL) + ')'))[1];\n var ul = line.trim().split(new RegExp('^(' + this.selection.replaceSpecialChar(this.syntax.UL) + ')'))[1];\n return (ol ? 'OL' : 'UL');\n };\n MDLists.prototype.enterKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prevLine = this.selection.getLine(textArea, parents[0].line - 1);\n var regex = this.getListRegex();\n if (regex.test(prevLine.trim()) && prevLine.trim().replace(regex, '') !== '') {\n var addedLength = 0;\n var tabSpace = this.getTabSpace(prevLine);\n this.currentAction = this.getAction(prevLine);\n var prefix = this.syntax[this.currentAction];\n parents[0].text = tabSpace + prefix + parents[0].text;\n textArea.value = textArea.value.substr(0, parents[0].start) + parents[0].text +\n textArea.value.substr(parents[0].end, textArea.value.length);\n start = start + prefix.length + tabSpace.length;\n addedLength += prefix.length + tabSpace.length;\n this.restore(textArea, start, end + addedLength, event);\n }\n };\n MDLists.prototype.applyListsHandler = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n this.currentAction = e.subCommand;\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var startLength = 0;\n var endLength = 0;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prefix = '';\n var regex = this.syntax[this.currentAction];\n for (var i = 0; i < parents.length; i++) {\n if (!this.selection.isStartWith(parents[i].text, regex)) {\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n var replace = this.appliedLine(parents[i].text);\n prefix = replace.line ? prefix : this.syntax[this.currentAction];\n parents[i].text = replace.line ? replace.line : prefix + parents[i].text;\n replace.space = replace.space ? replace.space : 0;\n textArea.value = textArea.value.substr(0, parents[i].start + endLength) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start + prefix.length + replace.space) > 0 ?\n start + prefix.length + replace.space : 0 : start;\n addedLength += prefix.length + replace.space;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? prefix.length +\n parents[j].start + replace.space : parents[j].start;\n parents[j].end = prefix.length + parents[j].end + replace.space;\n }\n }\n this.restore(textArea, start, end + addedLength, e);\n }\n else {\n parents[i].text = parents[i].text.replace(regex, '');\n textArea.value = textArea.value.substr(0, parents[i].start + endLength) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end + endLength, textArea.value.length);\n endLength -= this.syntax[this.currentAction].length;\n startLength = this.syntax[this.currentAction].length;\n this.restore(textArea, start - startLength, end + endLength, e);\n }\n }\n };\n MDLists.prototype.appliedLine = function (line) {\n var points = {};\n var regex = this.getListRegex();\n var isExist = regex.test(line.trim()) || line.trim() === this.syntax.OL.trim()\n || line.trim() === this.syntax.UL.trim();\n if (isExist) {\n var replace = void 0;\n var pattern = void 0;\n var space = 0;\n if (this.selection.getRegex(this.syntax.OL).test(line.trim())) {\n pattern = this.selection.getRegex(this.syntax.OL);\n replace = this.syntax.UL;\n points.space = this.syntax.UL.length - this.syntax.OL.length;\n }\n else {\n pattern = this.selection.getRegex(this.syntax.UL);\n replace = this.syntax.OL;\n points.space = this.syntax.OL.length - this.syntax.UL.length;\n }\n points.line = this.getTabSpace(line) + line.trim().replace(pattern, replace);\n }\n return points;\n };\n MDLists.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDLists.prototype.getListRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length; j++) {\n var syntax = this.selection.replaceSpecialChar(this.syntax[configKey[j]]);\n regex += regex === '' ? '^(' + syntax + ')|^(' + syntax.trim() + ')' :\n '|^(' + syntax + ')|^(' + syntax.trim() + ')';\n }\n return new RegExp(regex);\n };\n return MDLists;\n}());\nexport { MDLists };\n","import { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport * as CONSTANT from './../../markdown-parser/base/constant';\n/**\n * MDFormats internal plugin\n * @hidden\n */\nvar MDFormats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function MDFormats(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDFormats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n };\n MDFormats.prototype.applyFormats = function (e) {\n e.subCommand = e.subCommand.toLowerCase();\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var parents = this.selection.getSelectedParentPoints(textArea);\n if (this.isAppliedFormat(parents) === e.subCommand) {\n if (e.subCommand === 'pre') {\n if (parents.length > 1) {\n this.applyCodeBlock(textArea, e, parents);\n }\n else {\n return;\n }\n }\n this.cleanFormat(textArea);\n this.restore(textArea, textArea.selectionStart, textArea.selectionEnd, e);\n return;\n }\n if (e.subCommand === 'p') {\n this.cleanFormat(textArea);\n this.restore(textArea, textArea.selectionStart, textArea.selectionEnd, e);\n return;\n }\n else {\n this.cleanFormat(textArea, e.subCommand);\n }\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n parents = this.selection.getSelectedParentPoints(textArea);\n if (e.subCommand === 'pre') {\n if (parents.length > 1) {\n this.applyCodeBlock(textArea, e, parents);\n }\n else {\n extend(e, e, { subCommand: 'InlineCode' }, true);\n this.parent.observer.notify(CONSTANT.selectionCommand, e);\n }\n return;\n }\n for (var i = 0; i < parents.length; i++) {\n if (parents[i].text !== '' && !this.selection.isStartWith(parents[i].text, '\\\\' + this.syntax[e.subCommand])) {\n parents[i].text = this.syntax[e.subCommand] + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? start + this.syntax[e.subCommand].length : start;\n addedLength += this.syntax[e.subCommand].length;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ?\n this.syntax[e.subCommand].length + parents[j].start : parents[j].start;\n parents[j].end = this.syntax[e.subCommand].length + parents[j].end;\n }\n }\n }\n else if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, e);\n };\n MDFormats.prototype.clearRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length && configKey[j] !== 'pre' && configKey[j] !== 'p'; j++) {\n regex += regex === '' ? '^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')' :\n '|^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')';\n }\n return regex;\n };\n MDFormats.prototype.cleanFormat = function (textArea, command) {\n var parents = this.selection.getSelectedParentPoints(textArea);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var removeLength = 0;\n if (this.selection.isClear(parents, this.clearRegex())) {\n for (var i = 0; i < parents.length; i++) {\n var configKey = Object.keys(this.syntax);\n for (var j = 0; parents[i].text !== '' && j < configKey.length; j++) {\n var removeText = this.syntax[configKey[j]];\n if (configKey[j] === command) {\n continue;\n }\n var regex = new RegExp('^(' + this.selection.replaceSpecialChar(removeText) + ')', 'gim');\n if (regex.test(parents[i].text)) {\n parents[i].text = parents[i].text.replace(regex, '');\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start - (removeText.length)) > 0 ? start - (removeText.length) : 0 : start;\n removeLength += removeText.length;\n if (parents.length !== 1) {\n for (var k = 0; k < parents.length; k++) {\n parents[k].start = k !== 0 ?\n parents[k].start - removeText.length : parents[k].start;\n parents[k].end = parents[k].end - removeText.length;\n }\n }\n break;\n }\n }\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end - removeLength);\n }\n };\n MDFormats.prototype.applyCodeBlock = function (textArea, event, parents) {\n var command = event.subCommand;\n var start = parents[0].start;\n var end = parents[parents.length - 1].end;\n var parentLines = this.selection.getAllParents(textArea.value);\n var firstPrevText = parentLines[parents[0].line - 1];\n var lastNextText = parentLines[(parents.length + 1) + 1];\n var addedLength = 0;\n if (!this.selection.isStartWith(firstPrevText, this.syntax.pre.split('\\n')[0]) &&\n !this.selection.isStartWith(lastNextText, this.syntax.pre.split('\\n')[0])) {\n var lines = textArea.value.substring(start, end).split('\\n');\n var lastLine = lines[lines.length - 1] === '' ? '' : '\\n';\n textArea.value = textArea.value.substr(0, start) + this.syntax[command] + textArea.value.substring(start, end) +\n lastLine + this.syntax[command] +\n textArea.value.substr(end, textArea.value.length);\n start = this.selection.selectionStart + this.syntax[command].length;\n end = this.selection.selectionEnd + this.syntax[command].length - 1;\n }\n else {\n var cmd = this.syntax[command];\n var selection = this.parent.markdownSelection.getSelectedInlinePoints(textArea);\n var startNo = textArea.value.substr(0, textArea.selectionStart).lastIndexOf(cmd);\n var endNo = textArea.value.substr(textArea.selectionEnd, textArea.selectionEnd).indexOf(cmd);\n endNo = endNo + selection.end;\n var repStartText = this.replaceAt(textArea.value.substr(0, selection.start), cmd, '', startNo, selection.start);\n var repEndText = this.replaceAt(textArea.value.substr(selection.end, textArea.value.length), cmd, '', 0, endNo);\n textArea.value = repStartText + selection.text + repEndText;\n start = this.selection.selectionStart - cmd.length;\n end = this.selection.selectionEnd - cmd.length;\n }\n this.restore(textArea, start, end, event);\n };\n MDFormats.prototype.replaceAt = function (input, search, replace, start, end) {\n return input.slice(0, start)\n + input.slice(start, end).replace(search, replace)\n + input.slice(end);\n };\n MDFormats.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDFormats.prototype.isAppliedFormat = function (lines, documentNode) {\n var format = 'p';\n var configKey = Object.keys(this.syntax);\n var keys = Object.keys(this.syntax);\n var direction = this.parent.element.selectionDirection;\n var checkLine = direction === 'backward' ? lines[0].text : lines[lines.length - 1].text;\n for (var i = 0; !documentNode && i < keys.length; i++) {\n if (keys[i] !== 'pre' && this.selection.isStartWith(checkLine, this.syntax[keys[i]])) {\n format = keys[i];\n break;\n }\n else if (keys[i] === 'pre') {\n var parentLines = this.selection.getAllParents(this.parent.element.value);\n var firstPrevText = parentLines[lines[0].line - 1];\n var lastNextText = parentLines[lines.length + 1];\n if (this.selection.isStartWith(firstPrevText, this.syntax[keys[i]].split('\\n')[0]) &&\n this.selection.isStartWith(lastNextText, this.syntax[keys[i]].split('\\n')[0])) {\n format = keys[i];\n break;\n }\n }\n }\n return format;\n };\n return MDFormats;\n}());\nexport { MDFormats };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * SelectionCommands internal component\n * @hidden\n */\nvar MDSelectionFormats = /** @class */ (function () {\n function MDSelectionFormats(parent) {\n extend(this, this, parent, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDSelectionFormats.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.selectionCommand, this.applyCommands, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n MDSelectionFormats.prototype.keyDownHandler = function (e) {\n switch (e.event.action) {\n case 'bold':\n this.applyCommands({ subCommand: 'Bold', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'italic':\n this.applyCommands({ subCommand: 'Italic', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'strikethrough':\n this.applyCommands({ subCommand: 'StrikeThrough', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'uppercase':\n this.applyCommands({ subCommand: 'UpperCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'lowercase':\n this.applyCommands({ subCommand: 'LowerCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'superscript':\n this.applyCommands({ subCommand: 'SuperScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'subscript':\n this.applyCommands({ subCommand: 'SubScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n MDSelectionFormats.prototype.isBold = function (text, cmd) {\n return text.search('\\\\' + cmd + '\\\\' + cmd + '') !== -1;\n };\n MDSelectionFormats.prototype.isItalic = function (text, cmd) {\n return text.search('\\\\' + cmd) !== -1;\n };\n MDSelectionFormats.prototype.isMatch = function (text, cmd) {\n var matchText = [''];\n switch (cmd) {\n case this.syntax.Italic:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.InlineCode:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.StrikeThrough:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n }\n return matchText;\n };\n MDSelectionFormats.prototype.multiCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + '\\\\' + cmd + ')', 'g');\n };\n MDSelectionFormats.prototype.singleCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + ')', 'g');\n };\n MDSelectionFormats.prototype.isAppliedCommand = function (cmd) {\n var selectCmd = '';\n var isFormat = false;\n var textArea = this.parent.element;\n var start = textArea.selectionStart;\n var splitAt = function (index) { return function (x) { return [x.slice(0, index), x.slice(index)]; }; };\n var splitText = splitAt(start)(textArea.value);\n var cmdB = this.syntax.Bold.substr(0, 1);\n var cmdI = this.syntax.Italic;\n var beforeText = textArea.value.substr(splitText[0].length - 1, 1);\n var afterText = splitText[1].substr(0, 1);\n if ((beforeText !== '' && afterText !== '' && beforeText.match(/[a-z]/i)) &&\n beforeText === beforeText.toUpperCase() && afterText === afterText.toUpperCase() && cmd === 'UpperCase') {\n return true;\n }\n if (!(this.isBold(splitText[0], cmdB)) && !(this.isItalic(splitText[0], cmdI)) && !(this.isBold(splitText[1], cmdB)) &&\n !(this.isItalic(splitText[1], cmdI))) {\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 &&\n splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) &&\n cmd === 'SuperScript') {\n isFormat = true;\n }\n }\n if ((this.isBold(splitText[0], cmdB) && this.isBold(splitText[1], cmdB)) &&\n (splitText[0].match(this.multiCharRegx(cmdB)).length % 2 === 1 &&\n splitText[1].match(this.multiCharRegx(cmdB)).length % 2 === 1) && cmd === 'Bold') {\n isFormat = true;\n }\n splitText[0] = this.isBold(splitText[0], cmdB) ? splitText[0].replace(this.multiCharRegx(cmdB), '$%@') : splitText[0];\n splitText[1] = this.isBold(splitText[1], cmdB) ? splitText[1].replace(this.multiCharRegx(cmdB), '$%@') : splitText[1];\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.Italic)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.Italic))) &&\n (this.isMatch(splitText[0], this.syntax.Italic).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.Italic).length % 2 === 1) && cmd === 'Italic') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) && cmd === 'SuperScript') {\n isFormat = true;\n }\n return isFormat;\n };\n MDSelectionFormats.prototype.applyCommands = function (e) {\n this.currentAction = e.subCommand;\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var selection = this.parent.markdownSelection.getSelectedInlinePoints(textArea);\n if (this.isAppliedCommand(e.subCommand) && selection.text !== '') {\n var startCmd = this.syntax[e.subCommand];\n var endCmd = e.subCommand === 'SubScript' ? '' :\n e.subCommand === 'SuperScript' ? '' : this.syntax[e.subCommand];\n var startLength = (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') ? 0 : startCmd.length;\n var startNo = textArea.value.substr(0, selection.start).lastIndexOf(startCmd);\n var endNo = textArea.value.substr(selection.end, selection.end).indexOf(endCmd);\n endNo = endNo + selection.end;\n var repStartText = this.replaceAt(textArea.value.substr(0, selection.start), startCmd, '', startNo, selection.start);\n var repEndText = this.replaceAt(textArea.value.substr(selection.end, textArea.value.length), endCmd, '', 0, endNo);\n textArea.value = repStartText + selection.text + repEndText;\n this.restore(textArea, start - startLength, end - startLength, e);\n return;\n }\n if (selection.text !== '' && !this.isApplied(selection, e.subCommand)) {\n addedLength = (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') ? 0 :\n this.syntax[e.subCommand].length;\n var repStart = textArea.value.substr(selection.start - this.syntax[e.subCommand].length, this.syntax[e.subCommand].length);\n var repEnd = void 0;\n if ((repStart === e.subCommand) || ((selection.start - this.syntax[e.subCommand].length ===\n textArea.value.indexOf(this.syntax[e.subCommand])) && (selection.end === textArea.value.lastIndexOf(this.syntax[e.subCommand]) || selection.end === textArea.value.lastIndexOf('/g, '').replace(/<\\/sub>/g, '');\n break;\n case 'SuperScript':\n text = text.replace(//g, '').replace(/<\\/sup>/g, '');\n break;\n }\n return text;\n };\n MDSelectionFormats.prototype.isApplied = function (line, command) {\n var regx = this.singleCharRegx(this.syntax[command]);\n switch (command) {\n case 'SubScript':\n case 'SuperScript':\n regx = this.singleCharRegx(this.syntax[command]);\n return regx.test(line.text);\n case 'Bold':\n case 'StrikeThrough':\n regx = this.multiCharRegx(this.syntax[command].substr(0, 1));\n return regx.test(line.text);\n case 'UpperCase':\n case 'LowerCase':\n regx = new RegExp('^[' + this.syntax[command] + ']*$', 'g');\n return regx.test(line.text);\n case 'Italic':\n var regTest = void 0;\n var regxB = this.multiCharRegx(this.syntax[command].substr(0, 1));\n if (regxB.test(line.text)) {\n var repText = line.text;\n repText = repText.replace(regxB, '$%#');\n regTest = regx.test(repText);\n }\n else {\n regTest = regx.test(line.text);\n }\n return regTest;\n case 'InlineCode':\n return regx.test(line.text);\n }\n };\n return MDSelectionFormats;\n}());\nexport { MDSelectionFormats };\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 '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': '9'\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 '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","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoCommands = /** @class */ (function () {\n function UndoRedoCommands(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.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n UndoRedoCommands.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 UndoRedoCommands.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 UndoRedoCommands.prototype.removeEventListener = function () {\n var debounceListener = debounce(this.keyUp, 300);\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, debounceListener);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n this.parent.observer.off(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged);\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n UndoRedoCommands.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoCommands.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n UndoRedoCommands.prototype.keyDown = function (e) {\n var event = e.event;\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 UndoRedoCommands.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * MD collection stored string format.\n * @method saveData\n * @return {void}\n */\n UndoRedoCommands.prototype.saveData = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var textValue = this.parent.element.value;\n var changEle = { text: textValue, start: start, end: end };\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].start === start) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].end === end)) {\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 * @method undo\n * @return {void}\n */\n UndoRedoCommands.prototype.undo = function (e) {\n if (this.steps > 0) {\n this.currentAction = 'Undo';\n var start = this.undoRedoStack[this.steps - 1].start;\n var end = this.undoRedoStack[this.steps - 1].end;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.element.value = removedContent;\n this.parent.element.focus();\n this.steps--;\n this.restore(this.parent.element, start, end, e);\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n */\n UndoRedoCommands.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n this.currentAction = 'Redo';\n var start = this.undoRedoStack[this.steps + 1].start;\n var end = this.undoRedoStack[this.steps + 1].end;\n this.parent.element.value = this.undoRedoStack[this.steps + 1].text;\n this.parent.element.focus();\n this.steps++;\n this.restore(this.parent.element, start, end, e);\n }\n };\n UndoRedoCommands.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n UndoRedoCommands.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 UndoRedoCommands;\n}());\nexport { UndoRedoCommands };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n */\nvar MDLink = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function MDLink(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLink.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK_COMMAND, this.createLink, this);\n };\n MDLink.prototype.createLink = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = (e.subCommand === 'Image') ? this.selection.getSelectedText(textArea) : e.item.text;\n var startOffset = (e.subCommand === 'Image') ? (start + 2) : (start + 1);\n var endOffset = (e.subCommand === 'Image') ? (end + 2) : (end + 1);\n text = (e.subCommand === 'Image') ? '![' + text + '](' + e.item.url + ')' : '[' + text + '](' + e.item.url + ')';\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, startOffset, endOffset);\n this.restore(textArea, startOffset, endOffset, e);\n };\n MDLink.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDLink;\n}());\nexport { MDLink };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n */\nvar MDTable = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n */\n function MDTable(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDTable.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.MD_TABLE, this.createTable, this);\n };\n MDTable.prototype.removeEventListener = function () {\n this.parent.observer.off(CONSTANT.MD_TABLE, this.createTable);\n };\n MDTable.prototype.destroy = function () {\n this.removeEventListener();\n };\n MDTable.prototype.createTable = function (e) {\n var dummy = document;\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var end3;\n var text = this.selection.getSelectedText(textArea);\n var end1;\n var textEmpty;\n var textAreaInitial;\n if (start !== end) { // It will check start !== end and will clear the text selected.\n textEmpty = text.replace(text, '');\n end1 = end;\n end3 = start;\n text = textEmpty;\n }\n else {\n end3 = end;\n }\n text += this.textUnEmpty(start, end3, dummy, text, end1, textArea);\n for (var i = 1; i <= 2; i++) {\n text += '|';\n for (var j = 1; j <= 2; j++) {\n if (i === 1) {\n text += e.item.headingText + ' ' + j + '|';\n }\n else {\n text += '---------|';\n }\n }\n var dummyElement = dummy.createElement('div');\n dummyElement.innerHTML = '\\n';\n var text1 = dummyElement.textContent;\n text += text1;\n }\n for (var i = 1; i <= 2; i++) {\n text += '|';\n for (var j = 1; j <= 2; j++) {\n text += e.item.colText + ' ' + this.convertToLetters(i) + j + '|';\n }\n var dummyElement = dummy.createElement('div');\n dummyElement.innerHTML = '\\n';\n var text1 = dummyElement.textContent;\n text += text1;\n }\n text = this.textUnEmpty(start, end3, dummy, text, end1, textArea);\n textAreaInitial = textArea.value;\n if (start !== end) {\n this.startNotEqualEnd(start, end, text, textArea, textAreaInitial, e);\n }\n else if (start === 0 && end === 0) {\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n if (textAreaInitial.length) {\n this.restore(textArea, start + 3, end + 12, e);\n }\n else {\n this.restore(textArea, start + 1, end + 10, e);\n }\n }\n else {\n this.startEqualEnd(start, end, text, textArea, textAreaInitial, e);\n }\n };\n MDTable.prototype.startEqualEnd = function (start, end, text, textArea, textAreaInitial, e) {\n var parentText = this.selection.getSelectedParentPoints(textArea);\n var selectedLine = parentText.length - 1;\n var formatSplit;\n formatSplit = parentText[selectedLine].text.split(' ', 2);\n var textApplyFormat;\n var parentTextLength;\n if (formatSplit.length > 1) {\n parentTextLength = formatSplit[0].length + formatSplit[1].length + 1;\n }\n textApplyFormat = textArea.value.substring(end, textArea.value.length);\n if (start === parentTextLength) {\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.callRestore(textArea, start, end, e, textAreaInitial);\n }\n else if (textArea.value[start] === '2' && textArea.value[start + 1] === '.') {\n text = '';\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n }\n else if (!(textArea.value[start] === '#' || textArea.value[start - 1] === '#' ||\n textArea.value[start - 2] === '#' || textArea.value[start] === '2.' ||\n textArea.value[start - 1] === '2.' || textArea.value[start - 2] === '2.' || (textArea.value[start - 1] === '2' &&\n textArea.value[start] === '.') || (textArea.value[start - 1] === '.' && textArea.value[start] === ' ') ||\n (textArea.value[start - 1] === ' ' &&\n textArea.value[start - 2] === '.' && textArea.value[start - 3] === '2') ||\n textArea.value[start] === '>' || textArea.value[start - 1] === '>' || textArea.value[start - 2] === '>' ||\n textArea.value[start] === '+' || textArea.value[start - 1] === '+' || textArea.value[start - 2] === '+')) {\n if (!(parentText[0].text.match('#') || parentText[0].text.match('>') ||\n parentText[0].text.match('2.'))) {\n formatSplit[0] = '';\n }\n text += textApplyFormat.replace(textApplyFormat, (formatSplit[0] + ' ' + textApplyFormat));\n textArea.value = textArea.value.substr(0, start)\n + text;\n this.callRestore(textArea, start, end, e, textAreaInitial);\n }\n else {\n text = '';\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n }\n };\n MDTable.prototype.startNotEqualEnd = function (start, end, text, textArea, textAreaInitial, e) {\n var parentText = this.selection.getSelectedParentPoints(textArea);\n var textApplyFormat;\n textApplyFormat = textArea.value.substring(end, textArea.value.length);\n if (parentText.length < 2) {\n this.singleLine(start, end, text, textArea, parentText, textApplyFormat, textAreaInitial, e);\n }\n else {\n this.multipleLines(start, end, text, textArea, parentText, textApplyFormat, textAreaInitial, e);\n }\n };\n MDTable.prototype.singleLine = function (start, end, text, textArea, parentText, textApplyFormat, textAreaInitial, e) {\n var formatSplit;\n formatSplit = parentText[0].text.split(' ', 2);\n var selectedText;\n selectedText = this.selection.getSelectedText(textArea);\n var selectedTextSplit;\n selectedTextSplit = selectedText.split(' ', 2);\n if (selectedTextSplit.length === 2) {\n this.selectedSplitText(start, end, text, textArea, selectedText, parentText, formatSplit, textApplyFormat, e, textAreaInitial, selectedTextSplit);\n }\n else {\n if (textArea.value[start - 1] === ' ' && (textArea.value[start - 2] === '.' || textArea.value[start - 2] === '#' ||\n textArea.value[start - 2] === '>' || textArea.value[start - 2] === '+')) {\n text = '';\n start += selectedText.length;\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n }\n else if (textArea.value[start] === '>' || textArea.value[start] === '+' || (textArea.value[start] === '2' &&\n textArea.value[start + 1] === '.') || (textArea.value[start] === '#' && textArea.value[start - 1] !== '#')) {\n if (textArea.value[end - 2] === '>' || textArea.value[end - 1] === '+' || textArea.value[end - 1] === '2' ||\n textArea.value[end - 1] === '#' || (textArea.value[end - 1] === '.' && textArea.value[end - 2] === '2') ||\n (textArea.value[end - 1] === ' ' && (textArea.value[end - 2] === '.' || textArea.value[end - 2] === '#' ||\n textArea.value[end - 2] === '>' || textArea.value[end - 2] === '+'))) {\n text = '';\n start += selectedText.length;\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n }\n else {\n if (!(parentText[0].text.match('#') || parentText[0].text.match('>') ||\n parentText[0].text.match('2.'))) {\n formatSplit[0] = '';\n }\n text += textApplyFormat.replace(textApplyFormat, (formatSplit[0] + ' ' + textApplyFormat));\n textArea.value = textArea.value.substr(0, start)\n + text;\n this.callRestore(textArea, start, end, e, textAreaInitial);\n }\n }\n else {\n if (end === formatSplit[0].length + formatSplit[1].length + 1) {\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.callRestore(textArea, start, end, e, textAreaInitial);\n }\n else {\n if (!(parentText[0].text.match('#') || parentText[0].text.match('>') ||\n parentText[0].text.match('2.'))) {\n formatSplit[0] = '';\n }\n text += textApplyFormat.replace(textApplyFormat, (formatSplit[0] + ' ' + textApplyFormat));\n textArea.value = textArea.value.substr(0, start)\n + text;\n this.callRestore(textArea, start, end, e, textAreaInitial);\n }\n }\n }\n };\n MDTable.prototype.selectedSplitText = function (start, end, text, textArea, selectedText, parentText, formatSplit, textApplyFormat, e, textAreaInitial, selectedTextSplit) {\n if (selectedTextSplit[0] === '') {\n if (textArea.value[start - 1] === '#' || textArea.value[start - 1] === '.' ||\n textArea.value[start - 1] === '>' || textArea.value[start - 1] === '+') {\n text = '';\n start += selectedText.length;\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n }\n else {\n if (!(parentText[0].text.match('#') || parentText[0].text.match('>') ||\n parentText[0].text.match('2.'))) {\n formatSplit[0] = '';\n }\n text += textApplyFormat.replace(textApplyFormat, (formatSplit[0] + ' ' + textApplyFormat));\n textArea.value = textArea.value.substr(0, start)\n + text;\n this.callRestore(textArea, start, end, e, textAreaInitial);\n }\n }\n else {\n if (textArea.value[start] === '>' || textArea.value[start] === '+' || textArea.value[start] === '#' ||\n textArea.value[start] === '2' || (textArea.value[start] === '.' && textArea.value[start - 1] === '2')) {\n if (selectedText.length === (formatSplit[0].length + formatSplit[1].length + 1)) {\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n }\n else if (textArea.value[start] === '>' || textArea.value[start] === '+' || (textArea.value[start] === '2' &&\n textArea.value[start + 1] === '.') || (textArea.value[start] === '#' && textArea.value[start - 1] !== '#')) {\n if (!(textArea.value[end - 2] === '>' || textArea.value[end - 1] === '+' || textArea.value[end - 1] === '#' ||\n (textArea.value[end - 1] === '.' && textArea.value[end - 2] === '2') || (textArea.value[end - 1] === ' ' &&\n (textArea.value[end - 2] === '.' || textArea.value[end - 2] === '#' || textArea.value[end - 2] === '>' ||\n textArea.value[end - 2] === '+')))) {\n if (!(parentText[0].text.match('#') || parentText[0].text.match('>') ||\n parentText[0].text.match('2.'))) {\n formatSplit[0] = '';\n }\n text += textApplyFormat.replace(textApplyFormat, (formatSplit[0] + ' ' + textApplyFormat));\n textArea.value = textArea.value.substr(0, start)\n + text;\n this.callRestore(textArea, start, end, e, textAreaInitial);\n }\n else {\n text = '';\n start += selectedText.length;\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n }\n }\n else {\n text = '';\n start += selectedText.length;\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n }\n }\n }\n };\n MDTable.prototype.multipleLines = function (start, end, text, textArea, parentText, textApplyFormat, textAreaInitial, e) {\n var lastSelectedLineIndex = parentText.length - 1;\n var formatLastLine;\n formatLastLine = parentText[lastSelectedLineIndex].text.split(' ', 2);\n var formatFirstLine;\n formatFirstLine = parentText[0].text.split(' ', 2);\n var selectedText;\n selectedText = this.selection.getSelectedText(textArea);\n if (textArea.value[start - 1] === '#' || (textArea.value[start - 1] === '.' && textArea.value[start - 2] === '2') ||\n textArea.value[start - 1] === '>' || textArea.value[start - 1] === '+' ||\n textArea.value[start - 1] === '2' || (textArea.value[start - 1] === ' ' &&\n (textArea.value[start - 2] === '#' || textArea.value[start - 2] === '>' ||\n textArea.value[start - 2] === '+' || textArea.value[start - 2] === '.'))) {\n text = '';\n start += selectedText.length;\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n }\n else if (textArea.value[end] === '#' || textArea.value[end] === '>' || textArea.value[end] === '+' ||\n textArea.value[end] === '2' || (textArea.value[end] === '.' && textArea.value[end - 1] === '2') ||\n (textArea.value[end - 1] === ' ' && (textArea.value[end - 2] === '.' || textArea.value[end - 2] === '#' ||\n textArea.value[end - 2] === '>' || textArea.value[end - 2] === '+')) || (textArea.value[end] === ' ' &&\n (textArea.value[end - 1] === '#' || textArea.value[end - 1] === '>' || textArea.value[end - 1] === '+' ||\n textArea.value[end - 1] === '.'))) {\n text = '';\n start += selectedText.length;\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n }\n else {\n if (!(parentText[lastSelectedLineIndex].text.match('#') ||\n parentText[lastSelectedLineIndex].text.match('>') ||\n parentText[lastSelectedLineIndex].text.match('2.'))) {\n formatLastLine[0] = '';\n }\n text += textApplyFormat.replace(textApplyFormat, (formatLastLine[0] + ' ' + textApplyFormat));\n textArea.value = textArea.value.substr(0, start)\n + text;\n this.callRestore(textArea, start, end, e, textAreaInitial);\n }\n };\n MDTable.prototype.convertToLetters = function (rowNumber) {\n var baseChar = ('A').charCodeAt(0);\n var letters = '';\n do {\n rowNumber -= 1;\n letters = String.fromCharCode(baseChar + (rowNumber % 26)) + letters;\n rowNumber = (rowNumber / 26) >> 0;\n } while (rowNumber > 0);\n return letters;\n };\n MDTable.prototype.textUnEmpty = function (start, end, dummy, text, end1, textArea) {\n if (start === end && ((start !== 0 && end !== 0) || end1 !== 0)) {\n var dummyElement = dummy.createElement('div');\n if (!(text.length > 0)) {\n if (textArea.value.length > 0) {\n dummyElement.innerHTML = '\\n\\n';\n }\n else {\n dummyElement.innerHTML = '';\n }\n }\n else {\n dummyElement.innerHTML = '\\n';\n }\n var text1 = dummyElement.textContent;\n return text += text1;\n }\n else {\n return text;\n }\n };\n MDTable.prototype.callRestore = function (textArea, start, end, e, textAreaInitial) {\n if (textAreaInitial.length) {\n this.restore(textArea, start + 3, start + 12, e);\n }\n else {\n this.restore(textArea, start + 1, end + 10, e);\n }\n };\n MDTable.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDTable;\n}());\nexport { MDTable };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n */\nvar ClearFormat = /** @class */ (function () {\n /**\n * Constructor for creating the clear format plugin\n * @hidden\n */\n function ClearFormat(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n ClearFormat.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_COMMAND, this.clear, this);\n };\n ClearFormat.prototype.replaceRegex = function (data) {\n return data.replace(/\\*/ig, '\\\\*').replace(/\\&/ig, '\\\\&')\n .replace(/\\-/ig, '\\\\-').replace(/\\^/ig, '\\\\^')\n .replace(/\\$/ig, '\\\\$').replace(/\\./ig, '\\\\.')\n .replace(/\\|/ig, '\\\\|').replace(/\\?/ig, '\\\\?')\n .replace(/\\+/ig, '\\\\+').replace(/\\-/ig, '\\\\-')\n .replace(/\\&/ig, '\\\\&');\n };\n ClearFormat.prototype.clearSelectionTags = function (text) {\n var data = this.parent.selectionTags;\n var keys = Object.keys(data);\n for (var num = 0; num < keys.length; num++) {\n var key = keys[num];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n var expString = this.replaceRegex(data[key]);\n var regExp = void 0;\n var startExp = void 0;\n var endExp = void 0;\n if (data[key] === '') {\n regExp = new RegExp('(.*?)<\\/sup>', 'ig');\n }\n else if (data[key] === '') {\n regExp = new RegExp('(.*?)<\\/sub>', 'ig');\n }\n else {\n regExp = new RegExp(expString + '(.*?)' + expString, 'ig');\n }\n startExp = data[key].length;\n endExp = (data[key] === '' || data[key] === '') ? data[key].length + 1 : data[key].length;\n var val = text.match(regExp);\n for (var index = 0; val && index < val.length && val[index] !== ''; index++) {\n text = text.replace(val[index], val[index].substr(startExp, val[index].length - endExp - startExp));\n }\n }\n }\n return text;\n };\n ClearFormat.prototype.clearFormatTags = function (text) {\n var lines = text.split('\\n');\n var tags = [this.parent.formatTags, this.parent.listTags];\n var str = '';\n for (var len = 0; len < lines.length; len++) {\n for (var num = 0; num < tags.length; num++) {\n var data = tags[num];\n var keys = Object.keys(data);\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n if (lines[len].indexOf(data[key]) === 0) {\n lines[len] = lines[len].replace(data[key], '');\n }\n }\n }\n }\n str = str + lines[len] + ((len !== lines.length - 1) ? '\\n' : '');\n }\n return str;\n };\n ClearFormat.prototype.clear = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = this.selection.getSelectedText(textArea);\n text = this.clearSelectionTags(text);\n text = this.clearFormatTags(text);\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, start, start + text.length);\n this.restore(textArea, start, start + text.length, e);\n };\n ClearFormat.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { MDLists } from './../plugin/lists';\nimport { MDFormats } from './../plugin/formats';\nimport { MDSelectionFormats } from './../plugin/md-selection-formats';\nimport { MarkdownSelection } from './../plugin/markdown-selection';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownFormatTags, markdownListsTags, markdownSelectionTags } from './../../common/config';\nimport { UndoRedoCommands } from './../plugin/undo';\nimport { MDLink } from './../plugin/link';\nimport { MDTable } from './../plugin/table';\nimport * as EVENTS from './../../common/constant';\nimport { ClearFormat } from './../plugin/clearformat';\n/**\n * MarkdownParser internal component\n * @hidden\n */\nvar MarkdownParser = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n */\n function MarkdownParser(options) {\n this.initialize();\n extend(this, this, options, true);\n this.observer = new Observer(this);\n this.markdownSelection = new MarkdownSelection();\n this.listObj = new MDLists({ parent: this, syntax: this.listTags });\n this.formatObj = new MDFormats({ parent: this, syntax: this.formatTags });\n this.undoRedoManager = new UndoRedoCommands(this, options.options);\n this.mdSelectionFormats = new MDSelectionFormats({ parent: this, syntax: this.selectionTags });\n this.linkObj = new MDLink(this);\n this.tableObj = new MDTable(this);\n this.clearObj = new ClearFormat(this);\n this.wireEvents();\n }\n MarkdownParser.prototype.initialize = function () {\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n MarkdownParser.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.MODEL_CHANGED, this.onPropertyChanged, this);\n };\n MarkdownParser.prototype.onPropertyChanged = function (props) {\n this.observer.notify(EVENTS.MODEL_CHANGED_PLUGIN, props);\n };\n MarkdownParser.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n MarkdownParser.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n MarkdownParser.prototype.execCommand = function (command, value, event, callBack, text, exeValue) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(CONSTANT.LISTS_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.selectionCommand, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'links':\n case 'images':\n this.observer.notify(CONSTANT.LINK_COMMAND, { subCommand: value, event: event, callBack: callBack, item: exeValue });\n break;\n case 'table':\n switch (value.toString().toLocaleLowerCase()) {\n case 'createtable':\n this.observer.notify(CONSTANT.MD_TABLE, { subCommand: value, item: exeValue, event: event, callBack: callBack });\n break;\n }\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n }\n };\n return MarkdownParser;\n}());\nexport { MarkdownParser };\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 { MarkdownParser } from './../../markdown-parser/base/markdown-parser';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownKeyConfig, markdownListsTags, markdownFormatTags, markdownSelectionTags } from './../../common/config';\n/**\n * Markdown adapter\n * @hidden\n */\nvar MarkdownFormatter = /** @class */ (function (_super) {\n __extends(MarkdownFormatter, _super);\n function MarkdownFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (options && _this.element) {\n _this.updateFormatter(_this.element, document, options.options);\n }\n return _this;\n }\n MarkdownFormatter.prototype.initialize = function () {\n this.keyConfig = markdownKeyConfig;\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n */\n MarkdownFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement) {\n this.editorManager = new MarkdownParser({\n element: editElement,\n formatTags: this.formatTags,\n listTags: this.listTags,\n selectionTags: this.selectionTags,\n options: options\n });\n }\n };\n return MarkdownFormatter;\n}(Formatter));\nexport { MarkdownFormatter };\n","/**\n * Markdown module is used to render RichTextEditor as Markdown editor content\n * @hidden\n */\nvar MarkdownRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function MarkdownRender(parent) {\n this.parent = parent;\n this.rteID = this.parent.element.id;\n }\n /**\n * The function is used to render RichTextEditor content div\n */\n MarkdownRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { id: this.rteID + '_view', className: 'e-rte-content' });\n this.editableElement = this.parent.createElement('textarea', {\n className: 'e-content',\n id: this.rteID + '_editable-content'\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 * @return {Element}\n */\n MarkdownRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n MarkdownRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n MarkdownRender.prototype.getText = function () {\n return this.getEditPanel().value;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n */\n MarkdownRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n */\n MarkdownRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return MarkdownRender;\n}());\nexport { MarkdownRender };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { MarkdownFormatter } from '../formatter/markdown-formatter';\nimport { RenderType } from '../base/enum';\nimport * as classes from '../base/classes';\nimport { MarkdownToolbarStatus } from './markdown-toolbar-status';\nimport { MarkdownRender } from '../renderer/markdown-renderer';\nimport { MarkdownSelection } from './../../markdown-parser/plugin/markdown-selection';\n/**\n * `MarkdownEditor` module is used to markdown editor\n */\nvar MarkdownEditor = /** @class */ (function () {\n function MarkdownEditor(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n */\n MarkdownEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n MarkdownEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.saveSelection = new MarkdownSelection();\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.markdownToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, 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 };\n MarkdownEditor.prototype.updateReadOnly = function () {\n if (this.parent.readonly) {\n this.parent.contentModule.getEditPanel().setAttribute('readonly', 'readonly');\n addClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n else {\n this.parent.contentModule.getEditPanel().removeAttribute('readonly');\n removeClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n };\n MarkdownEditor.prototype.onSelectionSave = function () {\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.save(textArea.selectionStart, textArea.selectionEnd);\n };\n MarkdownEditor.prototype.onSelectionRestore = function (e) {\n this.contentRenderer.getEditPanel().focus();\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.restore(textArea);\n };\n MarkdownEditor.prototype.onToolbarClick = function (args) {\n var text;\n var startOffset;\n var endOffset;\n var item = args.item;\n if (this.parent.editorMode === 'Markdown') {\n var textArea = this.parent.contentModule.getEditPanel();\n textArea.focus();\n startOffset = textArea.selectionStart;\n endOffset = textArea.selectionEnd;\n text = textArea.value.substring(startOffset, endOffset);\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, { member: 'link', args: args, text: text, module: 'Markdown' });\n break;\n case 'Image':\n this.parent.notify(events.insertImage, { member: 'image', args: args, text: text, module: 'Markdown' });\n break;\n case 'CreateTable':\n var tableConstant = {\n 'headingText': this.parent.localeObj.getConstant('TableHeadingText'),\n 'colText': this.parent.localeObj.getConstant('TableColText')\n };\n this.parent.formatter.process(this.parent, args, args.originalEvent, tableConstant);\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n };\n MarkdownEditor.prototype.instantiateRenderer = function () {\n this.renderFactory.addRenderer(RenderType.Content, new MarkdownRender(this.parent));\n };\n MarkdownEditor.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.destroy, this.destroy);\n this.parent.off(events.markdownToolbarClick, this.onToolbarClick);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\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 };\n MarkdownEditor.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 this.parent.formatter = new MarkdownFormatter({\n element: editElement,\n options: option\n });\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new MarkdownToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n MarkdownEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n };\n /**\n * For internal use only - Get the module name.\n */\n MarkdownEditor.prototype.getModuleName = function () {\n return 'markdownEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n MarkdownEditor.prototype.selectAll = function () {\n this.parent.formatter.editorManager.markdownSelection.setSelection(this.parent.contentModule.getEditPanel(), 0, this.parent.contentModule.getEditPanel().value.length);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n MarkdownEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()));\n };\n return MarkdownEditor;\n}());\nexport { MarkdownEditor };\n","/**\n * Constant values for EditorManager\n */\n/* Image plugin events\n * @hidden\n */\nexport var IMAGE = 'INSERT-IMAGE';\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';\n/* Alignments plugin events\n * @hidden\n */\nexport var ALIGNMENT_TYPE = 'alignment-type';\n/* Indents plugin events\n * @hidden\n */\nexport var INDENT_TYPE = 'indent-type';\n/* Constant tag names\n */\n/** @hidden */\nexport var DEFAULT_TAG = 'p';\n/** @hidden */\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'];\n/** @hidden */\nexport var IGNORE_BLOCK_TAGS = ['td', 'th'];\n/** @hidden */\nexport var TABLE_BLOCK_TAGS = ['table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr'];\n/* Selection plugin events\n * @hidden\n */\nexport var SELECTION_TYPE = 'selection-type';\n/* Insert HTML plugin events\n * @hidden\n */\nexport var INSERTHTML_TYPE = 'inserthtml-type';\n/* Clear Format HTML plugin events\n * @hidden\n */\nexport var CLEAR_TYPE = 'clear-type';\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 NodeSelection.prototype.get = function (docElement) {\n return docElement.defaultView.getSelection();\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 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 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 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.childNodes.length === 0) {\n return [startNode];\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 NodeSelection.prototype.getParentNodeCollection = function (range) {\n return this.getParentNodes(this.getNodeCollection(range), range);\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 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 NodeSelection.prototype.getSelectionNodeCollection = function (range) {\n return this.getSelectionNodes(this.getNodeCollection(range));\n };\n NodeSelection.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 nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n NodeSelection.prototype.getInsertNodeCollection = function (range) {\n return this.getInsertNodes(this.getNodeCollection(range));\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 NodeSelection.prototype.getNodeArray = function (node, isStart, root) {\n var array = [];\n ((isStart) ? (this.startNodeName = []) : (this.endNodeName = []));\n for (; node !== (root ? root : this.rootNode); null) {\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.childNodes[num[index]];\n }\n if (node && constant >= 0) {\n range[isvalid ? 'setStart' : 'setEnd'](node, constant);\n }\n return range;\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 NodeSelection.prototype.setRange = function (docElement, range) {\n var selection = this.get(docElement);\n selection.removeAllRanges();\n selection.addRange(range);\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 NodeSelection.prototype.setSelectionContents = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNode(element);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.setSelectionNode = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNodeContents(element);\n this.setRange(docElement, range);\n };\n NodeSelection.prototype.getSelectedNodes = function (docElement) {\n return this.getNodeCollection(this.getRange(docElement));\n };\n NodeSelection.prototype.Clear = function (docElement) {\n this.get(docElement).removeAllRanges();\n };\n NodeSelection.prototype.insertParentNode = function (docElement, newNode, range) {\n range.surroundContents(newNode);\n this.selectRange(docElement, range);\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","import * as CONSTANT from './../base/constant';\nimport { append, detach, createElement } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nexport var markerClassName = {\n startSelection: 'e-editor-select-start',\n endSelection: 'e-editor-select-end'\n};\n/**\n * DOMNode internal plugin\n * @hidden\n */\nvar DOMNode = /** @class */ (function () {\n /**\n * Constructor for creating the DOMNode plugin\n * @hidden\n */\n function DOMNode(parent, currentDocument) {\n this.parent = parent;\n this.nodeSelection = new NodeSelection();\n this.currentDocument = currentDocument;\n }\n DOMNode.prototype.contents = function (element) {\n return (element && 'IFRAME' !== element.tagName ? Array.prototype.slice.call(element.childNodes || []) : []);\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 DOMNode.prototype.isLink = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && 'a' === element.tagName.toLowerCase()));\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 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 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 /* tslint:disable */\n if (attrValue.indexOf(\"'\") < 0 && attrValue.indexOf('\"') >= 0) {\n attr += ' ' + attrKey + \"='\" + attrValue + \"'\";\n }\n else if (attrValue.indexOf('\"') >= 0 && attrValue.indexOf(\"'\") >= 0) {\n /* tslint:enable */\n attrValue = attrValue.replace(/\"/g, '"');\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n else {\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n }\n return attr;\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 DOMNode.prototype.openTagString = function (element) {\n return '<' + element.tagName.toLowerCase() + this.attributes(element) + '>';\n };\n DOMNode.prototype.closeTagString = function (element) {\n return '';\n };\n DOMNode.prototype.createTagString = function (tagName, relativeElement, innerHTML) {\n return '<' + tagName.toLowerCase() + this.attributes(relativeElement) + '>' + innerHTML + '';\n };\n DOMNode.prototype.isList = function (element) {\n return !!element && ['UL', 'OL'].indexOf(element.tagName) >= 0;\n };\n DOMNode.prototype.isElement = function (element) {\n return element === this.parent;\n };\n DOMNode.prototype.isEditable = function (element) {\n return ((!element.getAttribute || element.getAttribute('contenteditable') === 'true')\n && ['STYLE', 'SCRIPT'].indexOf(element.tagName) < 0);\n };\n DOMNode.prototype.hasClass = function (element, className) {\n return element && element.classList && element.classList.contains(className);\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 DOMNode.prototype.parseHTMLFragment = function (value) {\n /* tslint: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 /* tslint:enable */\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 DOMNode.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\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 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 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 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 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 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 DOMNode.prototype.getPreviousNode = function (element) {\n element = element.previousSibling;\n for (; element && element.textContent === '\\n'; null) {\n element = element.previousSibling;\n }\n return element;\n };\n DOMNode.prototype.encode = function (value) {\n var divNode = document.createElement('div');\n divNode.innerText = value;\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n DOMNode.prototype.saveMarker = function (save) {\n var start = this.parent.querySelector('.' + markerClassName.startSelection);\n var startTextNode;\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 var endTextNode;\n var end = this.parent.querySelector('.' + markerClassName.endSelection);\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 DOMNode.prototype.setMarker = function (save) {\n var range = save.range;\n var start = (range.startContainer.childNodes[range.startOffset]\n || 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'))) {\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 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 this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\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.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\n }\n }\n else {\n if (start.nodeType === 3) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n }\n else {\n start = start.tagName === 'BR' ? start.parentNode : start;\n var marker = this.marker(markerClassName.startSelection, '');\n append([this.parseHTMLFragment(marker)], start);\n }\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 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 collectionNodes.push(this.createTempNode(tempNode));\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.tagName === 'BR' || 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.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 }\n parentNode = this.blockParentNode(endNode);\n if (parentNode && this.ignoreTableTag(parentNode) && collectionNodes.indexOf(parentNode) < 0) {\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 } from '@syncfusion/ej2-base';\nimport { markerClassName } from './dom-node';\nimport * as EVENTS from './../../common/constant';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\n/**\n * Lists internal component\n * @hidden\n */\nvar Lists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\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_DOWN_HANDLER, this.keyDownHandler, this);\n };\n Lists.prototype.keyDownHandler = function (e) {\n if (e.event.which === 9) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\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);\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 }\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.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 }\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 this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.currentAction = e.subCommand;\n this.domNode.setMarker(this.saveSelection);\n var listsNodes = this.domNode.blockNodes();\n for (var i = 0; i < listsNodes.length; i++) {\n if (listsNodes[i].tagName !== 'LI' && 'LI' === listsNodes[i].parentNode.tagName) {\n listsNodes[i] = listsNodes[i].parentNode;\n }\n }\n this.applyLists(listsNodes, this.currentAction);\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.applyLists = function (elements, type) {\n var isReverse = true;\n if (this.isRevert(elements, type)) {\n this.revertList(elements);\n }\n else {\n this.checkLists(elements, type);\n for (var i = 0; i < elements.length; i++) {\n if ('LI' !== elements[i].tagName) {\n isReverse = false;\n var openTag = '<' + type + this.domNode.attributes(elements[i]) + '>';\n var closeTag = '';\n var newTag = 'li class=\"e-rte-replace-tag\"';\n var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ? elements[i].innerHTML :\n 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 var element = this.parent.editableElement.querySelector('.e-rte-replace-tag');\n element.removeAttribute('class');\n }\n }\n }\n this.cleanNode();\n this.parent.editableElement.focus();\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n };\n Lists.prototype.isRevert = function (nodes, tagName) {\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 isRevert = false;\n }\n }\n return isRevert;\n };\n Lists.prototype.checkLists = function (nodes, tagName) {\n var nodesTemp = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i].parentNode;\n if (nodes[i].tagName === 'LI' && node.tagName !== tagName && nodesTemp.indexOf(node) < 0) {\n nodesTemp.push(node);\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.previousSibling) &&\n this.domNode.openTagString(node) === this.domNode.openTagString(node.previousSibling)) {\n var contentNodes = this.domNode.contents(node);\n for (var f = 0; f < contentNodes.length; f++) {\n node.previousSibling.appendChild(contentNodes[f]);\n }\n node.parentNode.removeChild(node);\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) {\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 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) {\n element.parentNode.insertBefore(this.closeTag('LI'), element);\n }\n else {\n var classAttr = '';\n if (className) {\n classAttr += ' class=\"' + className + '\"';\n }\n if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + classAttr + ' class=\"e-rte-wrap-inner\"' +\n this.domNode.attributes(parentNode) + '>';\n this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));\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","import * as EVENTS from './../../common/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Formats internal component\n * @hidden\n */\nvar Formats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\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 };\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.applyFormats = function (e) {\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 formatsNodes = this.parent.domNode.blockNodes();\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 isNullOrUndefined(parentNode.parentNode) || parentNode.tagName === 'LI') {\n continue;\n }\n this.cleanFormats(parentNode, e.subCommand);\n var replaceTag = this.parent.domNode.createTagString(e.subCommand, parentNode, replaceHTML.replace(/>\\s+<'));\n this.parent.domNode.replaceWith(parentNode, replaceTag);\n }\n this.parent.editableElement.focus();\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 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","/**\n * Node appending methods.\n * @hidden\n */\nvar InsertMethods = /** @class */ (function () {\n function InsertMethods() {\n }\n InsertMethods.WrapBefore = function (textNode, parentNode, isAfter) {\n parentNode.innerText = textNode.textContent;\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 InsertMethods.Wrap = function (childNode, parentNode) {\n this.AppendBefore(parentNode, childNode);\n parentNode.appendChild(childNode);\n return childNode;\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 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 { InsertMethods } from './insert-methods';\n/**\n * Split the Node based on selection\n * @hidden\n */\nvar NodeCutter = /** @class */ (function () {\n function NodeCutter() {\n this.position = -1;\n this.nodeSelection = new NodeSelection();\n }\n // Split Selection Node\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 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 (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.textContent !== '') {\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 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.textContent !== '') {\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 return node;\n }\n else {\n return null;\n }\n };\n NodeCutter.prototype.spliceEmptyNode = function (fragment, isStart) {\n var len = fragment.childNodes.length - 1;\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) {\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 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 NodeCutter.prototype.GetCursorNode = function (docElement, range, node) {\n return this.GetSpliceNode(this.GetCursorRange(docElement, range, node), node);\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 { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport * as CONSTANT from './../base/constant';\nimport { InsertMethods } from './insert-methods';\n/**\n * Insert a HTML Node or Text\n * @hidden\n */\nvar InsertHtml = /** @class */ (function () {\n function InsertHtml() {\n }\n InsertHtml.Insert = function (docElement, insertNode, editNode) {\n var node;\n if (typeof insertNode === 'string') {\n var divNode = document.createElement('div');\n divNode.innerHTML = insertNode;\n node = divNode.firstChild;\n }\n else {\n node = insertNode;\n }\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var closestParentNode = (node.nodeName.toLowerCase() === 'table') ? this.closestEle(nodes[0].parentNode, editNode) : nodes[0];\n if ((!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) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1]);\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 for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3 && nodes[index].parentNode != null) {\n nodes[index].parentNode.removeChild(nodes[index]);\n }\n }\n if (sibNode) {\n InsertMethods.AppendBefore(node, sibNode, true);\n }\n else {\n if (parentNode.firstChild) {\n InsertMethods.AppendBefore(node, parentNode.firstChild, false);\n }\n else {\n parentNode.appendChild(node);\n }\n }\n 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 range.insertNode(node);\n if (node.nodeType !== 3 && node.childNodes.length > 0) {\n nodeSelection.setSelectionText(docElement, node, node, 1, 1);\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.closestEle = function (element, editNode) {\n var el = element;\n while (el && el.nodeType === 1) {\n if (el.parentNode === editNode ||\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 return InsertHtml;\n}());\nexport { InsertHtml };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n */\nvar LinkCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\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 if (!isNullOrUndefined(e.item.selectParent) && e.item.selectParent.length > 0 &&\n e.item.selectParent[0].tagName === 'A') {\n var anchorEle = e.item.selectParent[0];\n anchorEle.setAttribute('href', e.item.url);\n anchorEle.setAttribute('title', e.item.title);\n anchorEle.innerHTML = e.item.text;\n anchorEle.setAttribute('target', e.item.target);\n e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle, anchorEle, 1, 1);\n }\n else {\n var anchor = createElement('a', {\n className: 'e-rte-anchor', attrs: {\n href: e.item.url,\n title: e.item.title === '' ? e.item.url : e.item.title\n }\n });\n if (!isNullOrUndefined(e.item.target)) {\n anchor.setAttribute('target', e.item.target);\n }\n anchor.innerText = e.item.text === '' ? e.item.url : e.item.text;\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, anchor);\n if (e.event && e.event.type === 'keydown' && e.event.keyCode === 32) {\n var startContainer = e.item.selection.range.startContainer;\n startContainer.textContent = this.removeText(startContainer.textContent, e.item.url);\n }\n else {\n e.item.selection.setSelectionText(this.parent.currentDocument, anchor.childNodes[0], anchor.childNodes[0], 0, anchor.childNodes[0].textContent.length);\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.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 parent = e.item.selectParent[0].parentNode;\n var child = [];\n for (; e.item.selectParent[0].firstChild; null) {\n child.push(parent.insertBefore(e.item.selectParent[0].firstChild, e.item.selectParent[0]));\n }\n parent.removeChild(e.item.selectParent[0]);\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.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 } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * Formats internal component\n * @hidden\n */\nvar Alignments = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\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.applyAlignment = function (e) {\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 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 this.parent.editableElement.focus();\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 Alignments;\n}());\nexport { Alignments };\n","import * as CONSTANT from './../base/constant';\nimport * as EVENTS from './../../common/constant';\n/**\n * Indents internal component\n * @hidden\n */\nvar Indents = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\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 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 () { return; },\n stopPropagation: function () { return; },\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 marginLeft = parentNode.style.marginLeft;\n var indentsValue = void 0;\n if (e.subCommand === 'Indent') {\n indentsValue = marginLeft === '' ? this.indentValue + 'px' : parseInt(marginLeft, null) + this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n else {\n indentsValue = (marginLeft === '' || marginLeft === '0px') ? '' : parseInt(marginLeft, null) - this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n }\n this.parent.editableElement.focus();\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 * RichTextEditor classes defined here.\n */\n/** @hidden */\nexport var CLASS_IMAGE_RIGHT = 'e-imgright';\nexport var CLASS_IMAGE_LEFT = 'e-imgleft';\nexport var CLASS_IMAGE_CENTER = 'e-imgcenter';\nexport var CLASS_IMAGE_BREAK = 'e-imgbreak';\nexport var CLASS_CAPTION = 'e-img-caption';\nexport var CLASS_CAPTION_INLINE = 'e-caption-inline';\nexport var CLASS_IMAGE_INLINE = 'e-imginline';\n","import { createElement, isNullOrUndefined, detach, closest, addClass, removeClass } 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 * @hidden\n */\nvar ImageCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\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 ImageCommand.prototype.imageCommand = function (e) {\n switch (e.value.toString().toLocaleLowerCase()) {\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 if (!isNullOrUndefined(e.item.selectParent) && e.item.selectParent[0].tagName === 'IMG') {\n var imgEle = e.item.selectParent[0];\n imgEle.setAttribute('src', e.item.url);\n imgEle.setAttribute('alt', e.item.altText);\n }\n else {\n var imgElement = createElement('img', {\n className: 'e-rte-image ' + e.item.cssClass, attrs: {\n width: (isNullOrUndefined(e.item.width) || isNullOrUndefined(e.item.width.width)) ? 'auto' :\n e.item.width.width,\n height: (isNullOrUndefined(e.item.height) || isNullOrUndefined(e.item.height.height)) ? 'auto' :\n e.item.height.height,\n alt: (e.item.altText !== '') ? e.item.altText : ''\n }\n });\n imgElement.setAttribute('src', isNullOrUndefined(e.item.url) ? '' : e.item.url);\n imgElement.style.minWidth = (isNullOrUndefined(e.item.width) || isNullOrUndefined(e.item.width.minWidth)) ? 0 + 'px' :\n e.item.width.minWidth + 'px';\n imgElement.style.maxWidth = (isNullOrUndefined(e.item.width) || isNullOrUndefined(e.item.width.maxWidth)) ? null :\n e.item.width.maxWidth + 'px';\n imgElement.style.minHeight = (isNullOrUndefined(e.item.height) || isNullOrUndefined(e.item.height.minHeight)) ? 0 + 'px' :\n e.item.height.minHeight + 'px';\n imgElement.style.maxHeight = (isNullOrUndefined(e.item.height) || isNullOrUndefined(e.item.height.maxHeight)) ? null :\n e.item.height.maxHeight + 'px';\n if (!isNullOrUndefined(e.item.selection)) {\n e.item.selection.restore();\n }\n InsertHtml.Insert(this.parent.currentDocument, imgElement);\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Image',\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 ImageCommand.prototype.insertImageLink = function (e) {\n var anchor = createElement('a', {\n attrs: {\n href: e.item.url,\n target: e.item.target\n }\n });\n anchor.appendChild(e.item.selectNode[0]);\n InsertHtml.Insert(this.parent.currentDocument, anchor);\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 detach(closest(e.item.selectParent[0], 'a'));\n InsertHtml.Insert(this.parent.currentDocument, e.item.insertElement);\n this.callBack(e);\n };\n ImageCommand.prototype.editImageLink = function (e) {\n e.item.selectNode[0].parentElement.href = e.item.url;\n e.item.selectNode[0].parentElement.target = e.item.target;\n this.callBack(e);\n };\n ImageCommand.prototype.removeImage = function (e) {\n if (closest(e.item.selectNode[0], 'a')) {\n detach(closest(e.item.selectNode[0], 'a'));\n }\n else if (!isNullOrUndefined(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 selectNode.width = e.item.width;\n selectNode.height = e.item.height;\n this.callBack(e);\n };\n ImageCommand.prototype.imageCaption = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.item.insertElement);\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyLeft = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(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 }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_LEFT);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyCenter = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(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 }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_CENTER);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyRight = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNullOrUndefined(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 }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_RIGHT);\n }\n this.callBack(e);\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 (!isNullOrUndefined(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 (!isNullOrUndefined(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, closest, detach } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n */\nvar TableCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\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 };\n TableCommand.prototype.createTable = function (e) {\n var table = createElement('table', { className: 'e-rte-table' });\n var tblBody = createElement('tbody');\n table.style.width = e.item.width.width;\n var tdWid = parseInt(e.item.width.width, 10) / e.item.columns;\n for (var i = 0; i < e.item.row; 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 e.item.selection.setSelectionText(this.parent.currentDocument, table.querySelector('td'), table.querySelector('td'), 0, 0);\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: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n return table;\n };\n TableCommand.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n TableCommand.prototype.insertRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n if (selectedCell.nodeName.toLowerCase() === 'th' && e.item.subCommand === 'InsertRowBefore') {\n return;\n }\n var curRow = closest(selectedCell, 'tr');\n var newRow;\n if (selectedCell.nodeName.toLowerCase() !== 'th') {\n newRow = closest(selectedCell, 'tr').cloneNode(true);\n var tabCell = Array.prototype.slice.call(newRow.querySelectorAll('td'));\n Array.prototype.forEach.call(tabCell, function (cell) {\n cell.innerHTML = '';\n cell.appendChild(createElement('br'));\n cell.removeAttribute('class');\n });\n }\n else {\n var childNodes = curRow.childNodes;\n newRow = createElement('tr');\n for (var i = 0; i < childNodes.length; i++) {\n var tdElement = createElement('td');\n tdElement.appendChild(createElement('br'));\n newRow.appendChild(tdElement);\n }\n }\n (e.item.subCommand === 'InsertRowBefore') ?\n curRow.parentElement.insertBefore(newRow, curRow) : this.insertAfter(newRow, curRow);\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 selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n selectedCell = (selectedCell.nodeName !== 'TD') ? closest(selectedCell, 'td,th') : selectedCell;\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('th,td')).indexOf(selectedCell);\n var width = parseInt(e.item.width, 10) / (curRow.querySelectorAll('td,th').length + 1);\n for (var j = 0; j < closest(curRow, 'table').querySelectorAll('th,td').length; j++) {\n closest(curRow, 'table').querySelectorAll('th,td')[j].style.width = width + '%';\n }\n for (var i = 0; i < allRows.length; i++) {\n curCell = allRows[i].querySelectorAll('th,td')[colIndex];\n var colTemplate = curCell.cloneNode(true);\n colTemplate.innerHTML = '';\n colTemplate.appendChild(createElement('br'));\n colTemplate.removeAttribute('class');\n (e.item.subCommand === 'InsertColumnLeft') ? curCell.parentElement.insertBefore(colTemplate, curCell) :\n this.insertAfter(colTemplate, curCell);\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 selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var curRow = closest(selectedCell, 'tr');\n var allRows = closest(curRow, 'table').rows;\n if (curRow.querySelectorAll('th,td').length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n for (var i = 0; i < allRows.length; i++) {\n allRows[i].deleteCell(selectedCell.cellIndex);\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.deleteRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var parentTable = closest(selectedCell, 'table');\n if (parentTable.rows.length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n parentTable.deleteRow(selectedCell.parentNode.rowIndex);\n e.item.selection.setSelectionText(this.parent.currentDocument, parentTable.querySelector('td'), parentTable.querySelector('td'), 0, 0);\n parentTable.querySelector('td, th').classList.add('e-cell-select');\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.removeTable = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var seletedTable = closest(selectedCell.parentElement, 'table');\n if (seletedTable) {\n e.item.selection.restore();\n detach(seletedTable);\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 selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var table = closest(selectedCell.parentElement, 'table');\n if (table && 0 === table.querySelectorAll('thead').length) {\n var cellCount = table.querySelectorAll('tr:first-child td').length;\n var header = table.createTHead();\n var row = header.insertRow(0);\n for (var i = 0; i < cellCount; i++) {\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 return TableCommand;\n}());\nexport { TableCommand };\n","/**\n * Is formatted or not.\n * @hidden\n */\nvar IsFormatted = /** @class */ (function () {\n function IsFormatted() {\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 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 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 IsFormatted.isUnderline = function (node) {\n var validTags = ['u'];\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.textDecoration === 'underline') {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.isStrikethrough = function (node) {\n var validTags = ['del', 'strike'];\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.textDecoration === 'line-through') {\n return true;\n }\n else {\n return false;\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 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 '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 ];\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';\nvar SelectionCommands = /** @class */ (function () {\n function SelectionCommands() {\n }\n SelectionCommands.applyFormat = function (docElement, format, endNode, value) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase', 'fontcolor', 'fontname', 'fontsize', 'backgroundcolor'];\n if (validFormats.indexOf(format) > -1) {\n var domSelection = new NodeSelection();\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 = domSelection.getSelectionNodeCollection(range);\n var isCollapsed = false;\n var isFormat = false;\n var isCursor = false;\n var isFontStyle = (['fontcolor', 'fontname', 'fontsize', 'backgroundcolor'].indexOf(format) > -1);\n if (range.collapsed) {\n if (nodes.length > 0) {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, nodes[0]);\n }\n else if (range.startContainer.nodeName.toLowerCase() !== 'td') {\n var cursorNode = this.insertCursorNode(domSelection, range, isFormatted, nodeCutter, format, value, endNode);\n domSelection.endContainer = domSelection.startContainer = domSelection.getNodeArray(cursorNode, true);\n domSelection.endOffset = domSelection.startOffset = 1;\n }\n }\n isCursor = range.collapsed;\n for (var index = 0; index < nodes.length; index++) {\n var formatNode = isFormatted.getFormattedNode(nodes[index], format, endNode);\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);\n }\n else {\n nodes[index] = this.insertFormat(nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value);\n }\n domSelection = this.applySelection(nodes, domSelection, nodeCutter, index, isCollapsed);\n }\n save.restore();\n }\n };\n SelectionCommands.insertCursorNode = function (domSelection, range, isFormatted, nodeCutter, format, value, endNode) {\n var cursorNodes = domSelection.getNodeCollection(range);\n var cursorFormat = (cursorNodes.length > 0) ? isFormatted.getFormattedNode(cursorNodes[0], format, endNode) : null;\n var cursorNode = null;\n if (cursorFormat) {\n cursorNode = cursorNodes[0];\n InsertMethods.unwrap(cursorFormat);\n }\n else {\n cursorNode = this.getInsertNode(range, format, value).firstChild;\n }\n return cursorNode;\n };\n SelectionCommands.removeFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection) {\n var splitNode = null;\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 cloneNode = splitNode = nodeCutter.GetSpliceNode(range, formatNode);\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 (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 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 var child = InsertMethods.unwrap(formatNode);\n if (child.length > 0 && isFontStyle) {\n for (var num = 0; num < child.length; num++) {\n child[num] = InsertMethods.Wrap(child[num], this.GetFormatNode(format, value));\n }\n }\n return nodes[index];\n };\n SelectionCommands.insertFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value) {\n if (!isCursor) {\n if ((formatNode === null && isFormat) || isFontStyle) {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n nodes[index].textContent = nodeCutter.TrimLineBreak(nodes[index].textContent);\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 nodes[index] = (index === (nodes.length - 1)) ? InsertMethods.Wrap(nodes[index], element)\n : InsertMethods.WrapBefore(nodes[index], element, true);\n nodes[index] = this.getChildNode(nodes[index], element);\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(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.getInsertNode = function (range, format, value) {\n var element = this.GetFormatNode(format, value);\n element.innerHTML = '';\n range.insertNode(element);\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) {\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 node.style.textDecoration = 'underline';\n return node;\n case 'strikethrough':\n node = document.createElement('span');\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 node.style.color = value;\n return node;\n case 'fontname':\n node = document.createElement('span');\n node.style.fontFamily = value;\n return node;\n case 'fontsize':\n node = document.createElement('span');\n node.style.fontSize = value;\n return node;\n default:\n node = document.createElement('span');\n node.style.backgroundColor = value;\n return node;\n }\n };\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 * @hidden\n */\nvar SelectionBasedExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\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);\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.value);\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 * @hidden\n */\nvar InsertHtmlExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\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);\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 InsertHtmlExec;\n}());\nexport { InsertHtmlExec };\n","/**\n * `Clear Format` module is used to handle Clear Format.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nvar ClearFormat = /** @class */ (function () {\n function ClearFormat() {\n }\n ClearFormat.clear = function (docElement, endNode) {\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var save = nodeSelection.save(range, docElement);\n if (!isCollapsed) {\n var preNode = nodeCutter.GetSpliceNode(range, nodes[0]);\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1]);\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 this.reSelection(docElement, save, exactNodes);\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].childNodes.length === 1\n && parentNodes[index1].childNodes[0].nodeName.toLocaleLowerCase() === 'p')) {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\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('p'));\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 }\n }\n else {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n }\n };\n ClearFormat.clearInlines = function (textNodes, nodes, range, nodeCutter, endNode) {\n for (var index = 0; index < textNodes.length; index++) {\n if (textNodes[index].parentNode &&\n IsFormatted.inlineTags.indexOf(textNodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n nodeCutter.GetSpliceNode(range, textNodes[index].parentNode);\n this.removeInlineParent(textNodes[index].parentNode);\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\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', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul'];\n ClearFormat.NONVALID_PARENT_TAGS = ['thead', 'tbody', 'ul', 'ol', 'table', 'tfoot'];\n ClearFormat.NONVALID_TAGS = ['thead', 'tbody', 'figcaption', 'td', 'tr',\n 'th', 'tfoot', 'figcaption', 'li'];\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 * @hidden\n */\nvar ClearFormatExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\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 });\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);\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 } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/selection';\nimport * as EVENTS from './../../common/constant';\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 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 * @method destroy\n * @return {void}\n */\n UndoRedoManager.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoManager.prototype.keyDown = function (e) {\n var event = e.event;\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 /**\n * RTE collection stored html format.\n * @method saveData\n * @return {void}\n */\n UndoRedoManager.prototype.saveData = function (e) {\n var range = new NodeSelection().getRange(this.parent.currentDocument);\n var save = new NodeSelection().save(range, this.parent.currentDocument);\n var htmlText = this.parent.editableElement.innerHTML;\n var changEle = { text: htmlText, 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.undoRedoStack[this.undoRedoStack.length - 1].text.trim() === 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 * @method undo\n * @return {void}\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 = removedContent;\n this.parent.editableElement.focus();\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 * @method redo\n * @return {void}\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 this.parent.editableElement.innerHTML = this.undoRedoStack[this.steps + 1].text;\n this.parent.editableElement.focus();\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 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 { 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 { 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 * as EVENTS from './../../common/constant';\n/**\n * EditorManager internal component\n * @hidden\n */\nvar EditorManager = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n */\n function EditorManager(options) {\n this.currentDocument = options.document;\n this.editableElement = options.editableElement;\n this.nodeSelection = new NodeSelection();\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.selectionObj = new SelectionBasedExec(this);\n this.inserthtmlObj = new InsertHtmlExec(this);\n this.clearObj = new ClearFormatExec(this);\n this.tableObj = new TableCommand(this);\n this.undoRedoManager = new UndoRedoManager(this, options.options);\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 };\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.execCommand = function (command, value, event, callBack, text, exeValue) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(EVENTS.LIST_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'alignments':\n this.observer.notify(CONSTANT.ALIGNMENT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'indents':\n this.observer.notify(CONSTANT.INDENT_TYPE, { subCommand: value, event: event, callBack: callBack });\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 'images':\n this.observer.notify(CONSTANT.IMAGE, { command: command, value: value, item: exeValue, event: event, callBack: callBack });\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 });\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 }\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 });\n break;\n case 'inserthtml':\n this.observer.notify(CONSTANT.INSERTHTML_TYPE, { callBack: callBack, value: text });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack });\n break;\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 * @hidden\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);\n }\n return _this;\n }\n HTMLFormatter.prototype.initialize = function () {\n this.keyConfig = htmlKeyConfig;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n */\n HTMLFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement && doc) {\n this.editorManager = new EditorManager({\n document: doc,\n editableElement: editElement,\n options: options\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';\n/**\n * Update Toolbar Status\n * @hidden\n */\nexport var statusCollection = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n unorderedlist: 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};\nvar ToolbarStatus = /** @class */ (function () {\n function ToolbarStatus() {\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 nodes = documentNode ? [documentNode] : nodeSelection.getNodeCollection(nodeSelection.getRange(docElement));\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3) {\n nodes.splice(index, 1);\n index--;\n }\n }\n for (var index = 0; index < nodes.length; index++) {\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.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 formatCollection = JSON.parse(JSON.stringify(statusCollection));\n }\n return nodeCollection;\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(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 }\n if (!formatCollection.createlink) {\n formatCollection.createlink = this.isLink(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 (node, fontSize) {\n var size = node.style && node.style.fontSize;\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 if (value.replace(/\"/g, '').replace(/ /g, '') === name.replace(/\"/g, '').replace(/ /g, '')) {\n index = pos;\n }\n }) && (index !== null)))) {\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 return ToolbarStatus;\n}());\nexport { ToolbarStatus };\n","import * as events from '../base/constant';\nimport { ToolbarStatus } from '../../editor-manager/plugin/toolbar-status';\n/**\n * HtmlToolbarStatus module for refresh the toolbar status\n */\nvar HtmlToolbarStatus = /** @class */ (function () {\n function HtmlToolbarStatus(parent) {\n this.parent = parent;\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 };\n HtmlToolbarStatus.prototype.onRefreshHandler = function (args) {\n var fontsize = [];\n var fontName = [];\n var formats = [];\n this.parent.fontSize.items.forEach(function (item) { fontsize.push(item.value); });\n this.parent.fontFamily.items.forEach(function (item) { fontName.push(item.value); });\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 this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n return HtmlToolbarStatus;\n}());\nexport { HtmlToolbarStatus };\n","/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n /**\n * The function is used to render RichTextEditor content div\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 = (rteObj.value !== null && rteObj.value !== '') ? rteObj.value : '


    ';\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 * @return {Element}\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n */\n ContentRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n ContentRender.prototype.getText = function () {\n return this.getEditPanel().textContent;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @return {Document}\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';\n/* tslint:disable */\nvar IFRAMEHEADER = \"\\n \\n \\n \\n \\n \\n \";\n/* tslint:enable */\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\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 RichTextEditor iframe\n */\n IframeContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var rteContent = (rteObj.value !== null && rteObj.value !== '') ? rteObj.value : '


    ';\n var iFrameBodyContent = '' +\n rteContent + '';\n var iFrameContent = IFRAMEHEADER + iFrameBodyContent;\n var iframe = this.parent.createElement('iframe', {\n innerHTML: iFrameContent,\n id: this.parent.getID() + '_rte-view',\n className: 'e-rte-content',\n styles: 'display:block;'\n });\n this.setPanel(iframe);\n rteObj.element.appendChild(iframe);\n iframe.contentDocument.body.id = this.parent.getID() + '_rte-edit-view';\n iframe.contentDocument.open();\n iFrameContent = this.setThemeColor(iFrameContent, { color: '#333' });\n iframe.contentDocument.write(iFrameContent);\n iframe.contentDocument.close();\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 * @return {Element}\n */\n IframeContentRender.prototype.getEditPanel = function () {\n return this.contentPanel.contentDocument.body;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n */\n IframeContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return IframeContentRender;\n}(ContentRender));\nexport { IframeContentRender };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, closest, attributes, removeClass, addClass } 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';\n/**\n * `HtmlEditor` module is used to HTML editor\n */\nvar HtmlEditor = /** @class */ (function () {\n function HtmlEditor(parent, serviceLocator) {\n this.rangeCollection = [];\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n */\n HtmlEditor.prototype.destroy = function () {\n this.removeEventListener();\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.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 };\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 && e.items[0].command !== 'Table')) {\n this.saveSelection.restore();\n }\n };\n HtmlEditor.prototype.onKeyDown = function (e) {\n if (e.args.keyCode === 9 && this.parent.enableTabKey) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var parentNode = this.nodeSelectionObj.getParentNodeCollection(range);\n if (!((parentNode[0].nodeName === 'LI' || parentNode[0].nodeName === 'BR' || closest(parentNode[0], 'li')) &&\n range.startOffset === 0)) {\n e.args.preventDefault();\n if (!e.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 if (e.args.action === 'space' ||\n e.args.action === 'enter') {\n this.spaceLink(e.args);\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;\n var splitText = text.split(' ');\n var urlText = splitText[splitText.length - 1];\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 selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var value = {\n url: urlText,\n selection: selection, selectParent: selectParent,\n text: '',\n title: '',\n target: ''\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 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 (closestElement && !closestElement.classList.contains('e-rte-inline-popup')) {\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 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 === '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 = this.parent.element.querySelector('#' + this.parent.getID() + '_rtelink');\n var imageDialog = this.parent.element.querySelector('#' + 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 '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 '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 default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\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 };\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 this.parent.formatter = new HTMLFormatter({\n currentDocument: this.contentRenderer.getDocument(),\n element: editElement,\n options: option\n });\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new HtmlToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n HtmlEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n };\n /**\n * For internal use only - Get the module name.\n */\n HtmlEditor.prototype.getModuleName = function () {\n return 'htmlEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectAll = function () {\n this.parent.contentModule.getEditPanel().focus();\n this.parent.contentModule.getDocument().execCommand('selectAll', false, null);\n };\n /**\n * For selecting all content in RTE\n * @private\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 * @private\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 { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\n/**\n * Content module is used to render RichTextEditor content\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\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 RichTextEditor header, content and footer rendering\n */\n Render.prototype.render = function () {\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 * @return {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 * @return {void}\n */\n Render.prototype.destroy = function () {\n this.removeEventListener();\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 };\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 };\n Render.prototype.keyUp = function (e) {\n if (this.parent.editorMode === 'HTML') {\n switch (e.args.which) {\n case 46:\n case 8:\n var childNodes = this.parent.contentModule.getEditPanel().childNodes;\n if ((childNodes.length === 0) ||\n (childNodes.length === 1 && ((childNodes[0].tagName === 'BR') ||\n (childNodes[0].tagName === 'P' &&\n (childNodes[0].childNodes.length === 0 || childNodes[0].textContent === ''))))) {\n var node = this.parent.contentModule.getEditPanel();\n node.innerHTML = '


    ';\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","import { EventHandler, detach, isNullOrUndefined } 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 { Dialog } from '@syncfusion/ej2-popups';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent, parseHtml } from '../base/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 }\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.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertCompleted, this.showLinkQuickToolbar, 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 };\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.keyDown, this.onKeyDown);\n this.parent.off(events.insertCompleted, this.showLinkQuickToolbar);\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 };\n Link.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Link.prototype.showLinkQuickToolbar = function (e) {\n var pageX;\n var pageY;\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 range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var args = e.args;\n var target;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target = ((element.nodeName === '#text') ? (element.parentNode) : element);\n }\n });\n if (e.isNotify) {\n pageX = target.getBoundingClientRect().left;\n var tbElement = this.parent.toolbarModule.getToolbarElement();\n var linkTop = target.getBoundingClientRect().top;\n var linkPos = linkTop - parentTop;\n var tbHeight = (tbElement) ? (tbElement.offsetHeight + this.parent.toolbarModule.getExpandTBarPopHeight()) : 0;\n pageY = window.pageYOffset + ((this.parent.iframeSettings.enable) ? (parentTop + tbHeight + linkTop) : (parentTop + linkPos));\n }\n else {\n pageX = 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 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 var args = e.args;\n if (args.which === 2 || 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 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.contains(target.querySelector('img'))) {\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 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.args, 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: originalEvent\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 originalEvent.preventDefault();\n break;\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 selectText;\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', { className: 'e-rte-link-dialog', id: this.rteID + '_rtelink' });\n this.parent.element.appendChild(linkDialogEle);\n var linkContent = this.parent.createElement('div', {\n className: 'e-rte-linkcontent', 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 this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n selectText = (this.parent.editorMode === 'HTML') ? e.selection.getRange(this.parent.contentModule.getDocument()).toString() :\n 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 this.dialogObj = new Dialog({\n header: this.i10n.getConstant('linkHeader'),\n content: linkContent,\n cssClass: CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '310px', height: 'initial',\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertlink.bind(selectObj),\n buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink', isPrimary: true }\n },\n { click: function (e) { _this.cancelDialog(e); }, buttonModel: { cssClass: 'e-flat', 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 _this.dialogObj = null;\n },\n });\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(linkDialogEle);\n linkDialogEle.style.maxHeight = 'initial';\n if (!isNullOrUndefined(inputDetails)) {\n linkUrl.value = inputDetails.url;\n linkText.value = inputDetails.text;\n linkTitle.value = inputDetails.title;\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(selectText) && selectText !== '') &&\n (e.selection.range.startOffset === 0) || e.selection.range.startOffset !== e.selection.range.endOffset))\n || e.module === 'Markdown') {\n linkText.value = selectText;\n }\n EventHandler.add(document, '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 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 linkUrl = 'http://' + linkUrl;\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, '#' + proxy.parent.contentModule.getPanel().id))) {\n proxy.parent.contentModule.getEditPanel().focus();\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 (proxy.parent.editorMode === 'HTML') {\n this.selection.restore();\n }\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n this.selfLink.parent.formatter.process(this.selfLink.parent, this.args, this.args.originalEvent, value);\n if (document.body.contains(proxy.dialogObj.element)) {\n this.selfLink.dialogObj.hide({ returnValue: false });\n }\n this.selfLink.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.isUrl = function (url) {\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 this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, selectParent: e.selectParent, selection: e.selection,\n subCommand: e.args.item.subCommand\n });\n this.contentModule.getEditPanel().focus();\n this.hideLinkQuickToolbar();\n };\n Link.prototype.openLink = function (e) {\n if (e.selectParent[0].classList.contains('e-rte-anchor') || e.selectParent[0].tagName === 'A') {\n this.parent.formatter.process(this.parent, e.args, e.args, {\n url: e.selectParent[0].href,\n target: e.selectParent[0].target === '' ? '_self' : '_blank', selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n }\n };\n Link.prototype.editLink = function (e) {\n if (e.selectParent[0].classList.contains('e-rte-anchor') || e.selectParent[0].tagName === 'A') {\n var selectParentEle = e.selectParent[0];\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.href, text: selectParentEle.innerHTML,\n title: selectParentEle.title, target: selectParentEle.target,\n header: 'Edit Link', btnText: linkUpdate\n };\n this.linkDialog(e, inputDetails);\n }\n };\n Link.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.dialogObj.hide({ returnValue: true });\n this.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.dialogObj) && ((!closest(target, '#' + 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 !closest(target, '#' + this.parent.getID() + '_toolbar_CreateLink') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_CreateLink')))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Link.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Link.prototype.getModuleName = function () {\n return 'link';\n };\n return Link;\n}());\nexport { Link };\n","import { addClass, detach, EventHandler, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Browser, closest, removeClass } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Uploader, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Button, CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent, parseHtml } from '../base/util';\n/**\n * `Image` module is used to handle image actions.\n */\nvar Image = /** @class */ (function () {\n function Image(parent, serviceLocator) {\n this.pageX = null;\n this.pageY = null;\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n Image.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertImage, this.insertImage, this);\n this.parent.on(events.insertCompleted, this.showImageQuickToolbar, this);\n this.parent.on(events.imageToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.imageCaption, this.caption, this);\n this.parent.on(events.imageDelete, this.deleteImg, this);\n this.parent.on(events.imageLink, this.insertImgLink, this);\n this.parent.on(events.imageAlt, this.insertAltText, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.imageSize, this.imageSize, this);\n this.parent.on(events.dropDownSelect, this.alignmentSelect, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n this.parent.on(events.paste, this.imagePaste, this);\n };\n Image.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.insertImage, this.insertImage);\n this.parent.off(events.insertCompleted, this.showImageQuickToolbar);\n this.parent.off(events.imageCaption, this.caption);\n this.parent.off(events.imageToolbarAction, this.onToolbarAction);\n this.parent.off(events.imageDelete, this.deleteImg);\n this.parent.off(events.imageLink, this.insertImgLink);\n this.parent.off(events.imageAlt, this.insertAltText);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.imageSize, this.imageSize);\n this.parent.off(events.dropDownSelect, this.alignmentSelect);\n this.parent.off(events.initialEnd, this.afterRender);\n this.parent.off(events.paste, this.imagePaste);\n if (!isNullOrUndefined(this.contentModule)) {\n EventHandler.remove(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.imageClick);\n this.parent.formatter.editorManager.observer.off(events.checkUndo, this.undoStack);\n if (this.parent.insertImageSettings.resize) {\n EventHandler.remove(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart);\n EventHandler.remove(this.contentModule.getDocument(), 'mousedown', this.onDocumentClick);\n }\n }\n };\n Image.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Image.prototype.afterRender = function () {\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n EventHandler.add(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.imageClick, this);\n if (this.parent.insertImageSettings.resize) {\n EventHandler.add(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart, this);\n EventHandler.add(this.contentModule.getDocument(), 'mousedown', this.onDocumentClick, this);\n }\n };\n Image.prototype.undoStack = function (args) {\n if (args.subCommand.toLowerCase() === 'undo' || args.subCommand.toLowerCase() === 'redo') {\n for (var i = 0; i < this.parent.formatter.getUndoRedoStack().length; i++) {\n var temp = this.parent.createElement('div');\n var contentElem = parseHtml(this.parent.formatter.getUndoRedoStack()[i].text);\n temp.appendChild(contentElem);\n var img = temp.querySelectorAll('img');\n if (temp.querySelector('.e-img-resize') && img.length > 0) {\n for (var j = 0; j < img.length; j++) {\n img[j].style.outline = '';\n }\n detach(temp.querySelector('.e-img-resize'));\n this.parent.formatter.getUndoRedoStack()[i].text = temp.innerHTML;\n }\n }\n }\n };\n Image.prototype.resizeEnd = function (e) {\n this.resizeBtnInit();\n this.imgEle.parentElement.style.cursor = 'auto';\n if (Browser.isDevice) {\n removeClass([e.target.parentElement], 'e-mob-span');\n }\n var args = { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStop, args);\n var pageX = this.getPointX(e);\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + e.clientY : e.pageY;\n this.parent.formatter.editorManager.observer.on(events.checkUndo, this.undoStack, this);\n this.parent.formatter.saveData();\n };\n Image.prototype.resizeStart = function (e) {\n if (e.target.tagName === 'IMG') {\n this.parent.preventDefaultResize(e);\n var img = e.target;\n if (this.imgResizeDiv && this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n detach(this.imgResizeDiv);\n }\n this.imageResize(img);\n }\n if (e.target.classList.contains('e-rte-imageboxmark')) {\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.pageX = this.getPointX(e);\n this.pageY = this.getPointY(e);\n e.preventDefault();\n e.stopImmediatePropagation();\n this.resizeBtnInit();\n if (this.quickToolObj) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n if (e.target.classList.contains('e-rte-topLeft')) {\n this.resizeBtnStat.topLeft = true;\n }\n if (e.target.classList.contains('e-rte-topRight')) {\n this.resizeBtnStat.topRight = true;\n }\n if (e.target.classList.contains('e-rte-botLeft')) {\n this.resizeBtnStat.botLeft = true;\n }\n if (e.target.classList.contains('e-rte-botRight')) {\n this.resizeBtnStat.botRight = true;\n }\n if (Browser.isDevice && this.contentModule.getEditPanel().contains(this.imgResizeDiv) &&\n !this.imgResizeDiv.classList.contains('e-mob-span')) {\n addClass([this.imgResizeDiv], 'e-mob-span');\n }\n else {\n var args = { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStart, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n }\n EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);\n }\n };\n Image.prototype.imageClick = function (e) {\n if (Browser.isDevice) {\n if ((e.target.tagName === 'IMG' &&\n e.target.parentElement.tagName === 'A') ||\n (e.target.tagName === 'IMG')) {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'false');\n e.target.focus();\n }\n else {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'true');\n }\n }\n if (e.target.tagName === 'A' ||\n e.target.parentElement.tagName === 'A') {\n e.preventDefault();\n }\n };\n Image.prototype.imageResize = function (e) {\n this.resizeBtnInit();\n this.imgEle = e;\n addClass([this.imgEle], 'e-resize');\n this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize', id: this.rteID + '_imgResize' });\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-topLeft', styles: 'cursor: nwse-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-topRight', styles: 'cursor: nesw-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-botLeft', styles: 'cursor: nesw-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-botRight', styles: 'cursor: nwse-resize'\n }));\n if (Browser.isDevice) {\n addClass([this.imgResizeDiv], 'e-mob-rte');\n }\n e.style.outline = '2px solid #4a90e2';\n this.imgResizePos(e, this.imgResizeDiv);\n this.resizeImgDupPos(e);\n this.contentModule.getEditPanel().appendChild(this.imgResizeDiv);\n EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);\n };\n Image.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 Image.prototype.getPointY = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageY;\n }\n else {\n return e.pageY;\n }\n };\n Image.prototype.imgResizePos = function (e, imgResizeDiv) {\n var pos = this.calcPos(e);\n var top = pos.top;\n var left = pos.left;\n var imgWid = e.width;\n var imgHgt = e.height;\n var borWid = (Browser.isDevice) ? (4 * parseInt((e.style.outline.slice(-3)), 10)) + 2 :\n (2 * parseInt((e.style.outline.slice(-3)), 10)) + 2; //span border width + image outline width\n var devWid = ((Browser.isDevice) ? 0 : 2); // span border width\n imgResizeDiv.querySelector('.e-rte-botLeft').style.left = (left - borWid) + 'px';\n imgResizeDiv.querySelector('.e-rte-botLeft').style.top = ((imgHgt - borWid) + top) + 'px';\n imgResizeDiv.querySelector('.e-rte-botRight').style.left = ((imgWid - (borWid - devWid)) + left) + 'px';\n imgResizeDiv.querySelector('.e-rte-botRight').style.top = ((imgHgt - borWid) + top) + 'px';\n imgResizeDiv.querySelector('.e-rte-topRight').style.left = ((imgWid - (borWid - devWid)) + left) + 'px';\n imgResizeDiv.querySelector('.e-rte-topRight').style.top = (top - (borWid)) + 'px';\n imgResizeDiv.querySelector('.e-rte-topLeft').style.left = (left - borWid) + 'px';\n imgResizeDiv.querySelector('.e-rte-topLeft').style.top = (top - borWid) + 'px';\n };\n Image.prototype.calcPos = function (elem) {\n var parentOffset = { top: 0, left: 0 };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = ((elem.offsetParent && elem.offsetParent.classList.contains('e-img-caption')) ?\n closest(elem, '#' + this.parent.getID() + '_rte-edit-view') : elem.offsetParent) || 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 Image.prototype.setAspectRatio = function (img, expectedX, expectedY) {\n if (isNullOrUndefined(img.width)) {\n return;\n }\n var width = img.style.width !== '' ? parseInt(img.style.width, 10) : img.width;\n var height = img.style.height !== '' ? parseInt(img.style.height, 10) : img.height;\n if (width > height) {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = (width / height * expectedY) + 'px';\n img.style.height = expectedY + 'px';\n }\n else {\n img.setAttribute('width', (width / height * expectedY).toString());\n img.setAttribute('height', expectedY.toString());\n }\n }\n else if (height > width) {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc(expectedX, (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = expectedX + 'px';\n img.style.height = (height / width * expectedX) + 'px';\n }\n else {\n img.setAttribute('width', expectedX.toString());\n img.setAttribute('height', (height / width * expectedX).toString());\n }\n }\n else {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc(expectedX, (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = expectedX + 'px';\n img.style.height = expectedX + 'px';\n }\n else {\n img.setAttribute('width', expectedX.toString());\n img.setAttribute('height', expectedX.toString());\n }\n }\n };\n Image.prototype.pixToPerc = function (expected, parentEle) {\n return expected / parseFloat(getComputedStyle(parentEle).width) * 100;\n };\n Image.prototype.imgDupMouseMove = function (width, height, e) {\n var args = { event: e, requestType: 'images' };\n this.parent.trigger(events.onResize, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n if ((parseInt(this.parent.insertImageSettings.minWidth, 10) >= parseInt(width, 10) ||\n parseInt(this.parent.insertImageSettings.maxWidth, 10) <= parseInt(width, 10))) {\n return;\n }\n if (!this.parent.insertImageSettings.resizeByPercent &&\n (parseInt(this.parent.insertImageSettings.minHeight, 10) >= parseInt(height, 10) ||\n parseInt(this.parent.insertImageSettings.maxHeight, 10) <= parseInt(height, 10))) {\n return;\n }\n this.imgEle.parentElement.style.cursor = 'pointer';\n this.setAspectRatio(this.imgEle, parseInt(width, 10), parseInt(height, 10));\n this.resizeImgDupPos(this.imgEle);\n this.imgResizePos(this.imgEle, this.imgResizeDiv);\n this.parent.setContentHeight('', false);\n };\n Image.prototype.resizing = function (e) {\n var pageX = this.getPointX(e);\n var pageY = this.getPointY(e);\n var mouseX = (this.resizeBtnStat.botLeft || this.resizeBtnStat.topLeft) ? -(pageX - this.pageX) : (pageX - this.pageX);\n var mouseY = (this.resizeBtnStat.topLeft || this.resizeBtnStat.topRight) ? -(pageY - this.pageY) : (pageY - this.pageY);\n var width = parseInt(this.imgDupPos.width, 10) + mouseX;\n var height = parseInt(this.imgDupPos.height, 10) + mouseY;\n this.pageX = pageX;\n this.pageY = pageY;\n if (this.resizeBtnStat.botRight) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n else if (this.resizeBtnStat.botLeft) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n else if (this.resizeBtnStat.topRight) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n else if (this.resizeBtnStat.topLeft) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n };\n Image.prototype.cancelResizeAction = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n if (this.imgEle && this.imgResizeDiv && this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n detach(this.imgResizeDiv);\n this.imgEle.style.outline = '';\n this.imgResizeDiv = null;\n this.pageX = null;\n this.pageY = null;\n }\n };\n Image.prototype.resizeImgDupPos = function (e) {\n this.imgDupPos = {\n width: (e.style.height !== '') ? this.imgEle.style.width : e.width + 'px',\n height: (e.style.height !== '') ? this.imgEle.style.height : e.height + 'px'\n };\n };\n Image.prototype.resizeBtnInit = function () {\n return this.resizeBtnStat = { botLeft: false, botRight: false, topRight: false, topLeft: false };\n };\n Image.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'Replace':\n this.parent.notify(events.insertImage, args);\n break;\n case 'Caption':\n this.parent.notify(events.imageCaption, args);\n break;\n case 'InsertLink':\n this.parent.notify(events.imageLink, args);\n break;\n case 'AltText':\n this.parent.notify(events.imageAlt, args);\n break;\n case 'Remove':\n this.parent.notify(events.imageDelete, args);\n break;\n case 'Dimension':\n this.parent.notify(events.imageSize, args);\n break;\n case 'OpenImageLink':\n this.openImgLink(args);\n break;\n case 'EditImageLink':\n this.editImgLink(args);\n break;\n case 'RemoveImageLink':\n this.removeImgLink(args);\n break;\n }\n };\n Image.prototype.openImgLink = function (e) {\n var target = e.selectParent[0].parentNode.target === '' ? '_self' : '_blank';\n this.parent.formatter.process(this.parent, e.args, e.args, {\n url: e.selectParent[0].parentNode.href, target: target, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n };\n Image.prototype.editImgLink = function (e) {\n var selectParentEle = e.selectParent[0].parentNode;\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.href, target: selectParentEle.target,\n header: 'Edit Link', btnText: linkUpdate\n };\n this.insertImgLink(e, inputDetails);\n };\n Image.prototype.removeImgLink = function (e) {\n e.selection.restore();\n var insertEle = (this.contentModule.getEditPanel().contains(this.captionEle) && closest(this.captionEle, 'a')) ?\n this.captionEle : e.selectNode[0];\n this.parent.formatter.process(this.parent, e.args, e.args, {\n insertElement: insertEle, selectParent: e.selectParent,\n subCommand: e.args.item.subCommand\n });\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n };\n Image.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n var range;\n var save;\n var selectNodeEle;\n var selectParentEle;\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection)) {\n range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n if (!originalEvent.ctrlKey && originalEvent.key && (originalEvent.key.length === 1 || originalEvent.action === 'enter') &&\n (selectParentEle[0].tagName === 'IMG') && selectParentEle[0].parentElement) {\n var prev = selectParentEle[0].parentElement.childNodes[0];\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n }\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), prev, prev, prev.textContent.length, prev.textContent.length);\n removeClass([selectParentEle[0]], 'e-img-focus');\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n if (originalEvent.ctrlKey && (originalEvent.keyCode === 89 || originalEvent.keyCode === 90)) {\n this.undoStack({ subCommand: (originalEvent.keyCode === 90 ? 'undo' : 'redo') });\n }\n if (originalEvent.keyCode === 8 || originalEvent.keyCode === 46) {\n if (selectNodeEle && selectNodeEle[0].nodeName === 'IMG') {\n originalEvent.preventDefault();\n var event_1 = {\n selectNode: selectNodeEle, selection: save, selectParent: selectParentEle,\n args: {\n item: { command: 'Images', subCommand: 'Remove' },\n originalEvent: originalEvent\n }\n };\n this.deleteImg(event_1);\n }\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n }\n }\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'insert-image':\n if (this.parent.editorMode === 'HTML') {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: originalEvent\n },\n selectNode: selectNodeEle,\n selection: save,\n selectParent: selectParentEle\n });\n }\n else {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: originalEvent\n },\n member: 'image',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertImage'\n });\n }\n originalEvent.preventDefault();\n break;\n }\n };\n Image.prototype.alignmentSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Images') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectNodeEle = (selectNodeEle[0].nodeName === 'IMG') ? selectNodeEle : [this.imgEle];\n var args = { args: e, selectNode: selectNodeEle };\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n switch (item.subCommand) {\n case 'JustifyLeft':\n this.justifyImageLeft(args);\n break;\n case 'JustifyCenter':\n this.justifyImageCenter(args);\n break;\n case 'JustifyRight':\n this.justifyImageRight(args);\n break;\n case 'Inline':\n this.inline(args);\n break;\n case 'Break':\n this.break(args);\n break;\n }\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNodeEle[0]], 'e-img-focus');\n }\n this.cancelResizeAction();\n };\n Image.prototype.imageWithLinkQTBarItemUpdate = function () {\n var separator;\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n addClass([items[i]], 'e-link-groups');\n items[i].style.display = 'none';\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = '';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n };\n Image.prototype.showImageQuickToolbar = function (e) {\n var _this = this;\n if (e.type !== 'Images' || isNullOrUndefined(this.parent.quickToolbarModule)\n || isNullOrUndefined(this.parent.quickToolbarModule.imageQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var args = e.args;\n var target;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target = element;\n }\n });\n if (target && !closest(target, 'a')) {\n this.imageWithLinkQTBarItemUpdate();\n }\n if (target.nodeName === 'IMG') {\n addClass([target], ['e-img-focus']);\n }\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n if (this.parent.quickToolbarModule.imageQTBar) {\n if (e.isNotify) {\n setTimeout(function () { _this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target); }, 400);\n }\n else {\n this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);\n }\n }\n };\n Image.prototype.hideImageQuickToolbar = function () {\n if (!isNullOrUndefined(this.contentModule.getEditPanel().querySelector('.e-img-focus'))) {\n removeClass([this.contentModule.getEditPanel().querySelector('.e-img-focus')], 'e-img-focus');\n if (this.quickToolObj && this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n };\n Image.prototype.editAreaClickHandler = function (e) {\n var args = e.args;\n if (args.which === 2 || args.which === 3) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.imageQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.imageQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'IMG' && this.parent.quickToolbarModule) {\n if (isPopupOpen) {\n return;\n }\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), target);\n addClass([target], 'e-img-focus');\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n var separator = void 0;\n if (closest(target, 'a')) {\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n items[i].style.display = '';\n removeClass([items[i]], 'e-link-groups');\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = 'none';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n }\n else if (!closest(target, 'a')) {\n this.imageWithLinkQTBarItemUpdate();\n }\n this.showImageQuickToolbar({ args: args, type: 'Images', elements: [args.target] });\n }\n else {\n this.hideImageQuickToolbar();\n }\n }\n };\n Image.prototype.insertImgLink = function (e, inputDetails) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' });\n var linkUrl = this.i10n.getConstant('linkurl');\n var content = '
    ' +\n '
    ' +\n '
    ' + '
    ' +\n '
    ';\n var contentElem = parseHtml(content);\n linkWrap.appendChild(contentElem);\n var linkTarget = linkWrap.querySelector('.e-rte-linkTarget');\n var inputLink = linkWrap.querySelector('.e-img-link');\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({\n label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl, change: function (e) {\n if (e.checked) {\n target_1 = '_blank';\n }\n else {\n target_1 = '';\n }\n }\n });\n this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n var target_1 = this.checkBoxObj.checked ? '_blank' : '';\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var linkargs_1 = {\n args: e.args,\n selfImage: this, selection: e.selection,\n selectNode: e.selectNode, selectParent: e.selectParent, link: inputLink, target: target_1\n };\n this.dialogObj.setProperties({\n height: 'initial', width: '290px', header: 'Insert Link', content: linkWrap, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertlink(linkargs_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-link', isPrimary: true\n }\n }]\n });\n if (!isNullOrUndefined(inputDetails)) {\n inputLink.value = inputDetails.url;\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n }\n this.dialogObj.element.style.maxHeight = 'none';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAltText = function (e) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n var altText = this.i10n.getConstant('altText');\n if (!isNullOrUndefined(this.dialogObj)) {\n var altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' });\n var altHeader = this.i10n.getConstant('alternateHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var getAlt = (e.selectNode[0].getAttribute('alt') === null) ? '' :\n e.selectNode[0].getAttribute('alt');\n var content = '
    ' +\n '' +\n '
    ';\n var contentElem = parseHtml(content);\n altWrap.appendChild(contentElem);\n var inputAlt = altWrap.querySelector('.e-img-alt');\n var altArgs_1 = {\n args: e.args, selfImage: this, selection: e.selection, selectNode: e.selectNode,\n alt: inputAlt\n };\n this.dialogObj.setProperties({\n height: 'initial', width: '290px', header: altHeader, content: altWrap, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertAlt(altArgs_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-alt', isPrimary: true\n }\n }]\n });\n this.dialogObj.element.style.maxHeight = 'none';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAlt = function (e) {\n if (!isNullOrUndefined(e.alt)) {\n e.selection.restore();\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n var altText = e.alt.value;\n this.parent.formatter.process(this.parent, e.args, e.args, {\n altText: altText, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n this.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.insertlink = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var url = e.link.value;\n if (url === '') {\n addClass([e.link], 'e-error');\n e.link.setSelectionRange(0, url.length);\n e.link.focus();\n return;\n }\n if (!this.isUrl(url)) {\n url = 'http://' + url;\n }\n else {\n removeClass([e.link], 'e-error');\n }\n var proxy = e.selfImage;\n if (proxy.parent.editorMode === 'HTML') {\n e.selection.restore();\n }\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n if (e.selectNode[0].parentElement.nodeName === 'A') {\n proxy.parent.formatter.process(proxy.parent, e.args, e.args, {\n url: url, target: proxy.checkBoxObj.checked ? '_blank' : '', selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n proxy.dialogObj.hide({ returnValue: true });\n return;\n }\n proxy.parent.formatter.process(proxy.parent, e.args, e.args, {\n url: url, target: e.target, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n proxy.dialogObj.hide({ returnValue: false });\n };\n Image.prototype.isUrl = function (url) {\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Image.prototype.deleteImg = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n e.selection.restore();\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n }\n this.parent.formatter.process(this.parent, e.args, e.args, {\n selectNode: e.selectNode,\n captionClass: classes.CLS_CAPTION,\n subCommand: e.args.item.subCommand\n });\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n this.cancelResizeAction();\n };\n Image.prototype.caption = function (e) {\n var selectNode = e.selectNode[0];\n if (selectNode.nodeName !== 'IMG') {\n return;\n }\n e.selection.restore();\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.cancelResizeAction();\n addClass([selectNode], 'e-rte-image');\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Caption';\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n detach(closest(selectNode, '.' + classes.CLS_CAPTION));\n if (selectNode.parentElement.tagName === 'A') {\n this.parent.formatter.process(this.parent, e.args, e.args, { insertElement: selectNode.parentElement, selectNode: e.selectNode, subCommand: subCommand });\n }\n else {\n this.parent.formatter.process(this.parent, e.args, e.args, { insertElement: selectNode, selectNode: e.selectNode, subCommand: subCommand });\n }\n }\n else {\n this.captionEle = this.parent.createElement('span', {\n className: classes.CLS_CAPTION,\n attrs: { contenteditable: 'false', draggable: 'false' }\n });\n var imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' });\n var imgInner = this.parent.createElement('span', { className: 'e-img-inner', attrs: { contenteditable: 'true' } });\n imgWrap.appendChild(e.selectNode[0]);\n imgWrap.appendChild(imgInner);\n var imgCaption = this.i10n.getConstant('imageCaption');\n imgInner.innerHTML = imgCaption;\n this.captionEle.appendChild(imgWrap);\n if (selectNode.classList.contains(classes.CLS_IMGINLINE)) {\n addClass([this.captionEle], classes.CLS_CAPINLINE);\n }\n if (selectNode.classList.contains(classes.CLS_IMGBREAK)) {\n addClass([this.captionEle], classes.CLS_IMGBREAK);\n }\n if (selectNode.classList.contains(classes.CLS_IMGLEFT)) {\n addClass([this.captionEle], classes.CLS_IMGLEFT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGRIGHT)) {\n addClass([this.captionEle], classes.CLS_IMGRIGHT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGCENTER)) {\n addClass([this.captionEle], classes.CLS_IMGCENTER);\n }\n this.parent.formatter.process(this.parent, e.args, e.args, { insertElement: this.captionEle, selectNode: e.selectNode, subCommand: subCommand });\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), imgInner.childNodes[0], imgInner.childNodes[0], 0, imgInner.childNodes[0].textContent.length);\n }\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNode], 'e-img-focus');\n }\n };\n Image.prototype.imageSize = function (e) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var imgSizeHeader = this.i10n.getConstant('imageSizeHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var dialogContent = this.imgsizeInput(e);\n var selectObj_1 = { args: e.args, selfImage: this, selection: e.selection, selectNode: e.selectNode };\n this.dialogObj.setProperties({\n height: 'initial', width: '290px', header: imgSizeHeader, content: dialogContent, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertSize(selectObj_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-size', isPrimary: true\n }\n }]\n });\n this.dialogObj.element.style.maxHeight = 'none';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.break = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Break';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.inline = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Inline';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.justifyImageLeft = function (e) {\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'JustifyLeft';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.justifyImageRight = function (e) {\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'JustifyRight';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.justifyImageCenter = function (e) {\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'JustifyCenter';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.imagDialog = function (e) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n var imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog', id: this.rteID + '_image' });\n this.parent.element.appendChild(imgDialog);\n var imgInsert = this.i10n.getConstant('dialogInsert');\n var imglinkCancel = this.i10n.getConstant('dialogCancel');\n var imgHeader = this.i10n.getConstant('imageHeader');\n var selection = e.selection;\n var selectObj = { selfImage: this, selection: e.selection, args: e.args, selectParent: e.selectParent };\n this.dialogObj = new Dialog({\n header: imgHeader,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'initial',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertImageUrl.bind(selectObj),\n buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: imglinkCancel }\n }],\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 _this.dialogObj = null;\n },\n });\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(imgDialog);\n imgDialog.style.maxHeight = 'none';\n if (this.quickToolObj) {\n if (this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n Image.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.dialogObj.hide({ returnValue: true });\n };\n Image.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (target.nodeName === 'IMG') {\n this.imgEle = target;\n }\n if (!isNullOrUndefined(this.dialogObj) && ((!closest(target, '#' + this.dialogObj.element.id) && this.parent.toolbarSettings.enable && this.parent.getToolbarElement() &&\n !this.parent.getToolbarElement().contains(e.target)) ||\n (this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_Image') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_Image')))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n if (e.target.tagName !== 'IMG' && this.imgResizeDiv && !(this.quickToolObj &&\n this.quickToolObj.imageQTBar && this.quickToolObj.imageQTBar.element.contains(e.target)) &&\n this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n this.cancelResizeAction();\n }\n if (target.tagName !== 'IMG' && this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n this.contentModule.getEditPanel().querySelector('img').style.outline = '';\n }\n };\n Image.prototype.remvoeResizEle = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n detach(this.contentModule.getEditPanel().querySelector('.e-img-resize'));\n };\n Image.prototype.imageUrlPopup = function (e) {\n var imgUrl = this.parent.createElement('div', { className: 'imgUrl' });\n var placeUrl = this.i10n.getConstant('imageUrl');\n this.inputUrl = this.parent.createElement('input', {\n className: 'e-input e-img-url',\n attrs: { placeholder: placeUrl, spellcheck: 'false' }\n });\n imgUrl.appendChild(this.inputUrl);\n return imgUrl;\n };\n Image.prototype.insertImageUrl = function (e) {\n var proxy = this.selfImage;\n var url = proxy.inputUrl.value;\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n if (!isNullOrUndefined(proxy.uploadUrl) && proxy.uploadUrl.url !== '') {\n proxy.uploadUrl.cssClass = (proxy.parent.insertImageSettings.display === 'inline' ?\n classes.CLS_IMGINLINE : classes.CLS_IMGBREAK);\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, proxy.uploadUrl);\n proxy.dialogObj.hide({ returnValue: false });\n proxy.uploadUrl.url = '';\n }\n else if (url !== '') {\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '#' + proxy.contentModule.getPanel().id))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var regex = /[\\w-]+.(jpg|png|jpeg|gif)/g;\n var matchUrl = (!isNullOrUndefined(url.match(regex)) && proxy.parent.editorMode === 'HTML') ? url.match(regex)[0] : '';\n var value = {\n cssClass: (proxy.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: url, selection: this.selection, altText: matchUrl,\n selectParent: this.selectParent, width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n },\n height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, value);\n proxy.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.imgsizeInput = function (e) {\n var selectNode = e.selectNode[0];\n var imgHeight = this.i10n.getConstant('imageHeight');\n var imgWidth = this.i10n.getConstant('imageWidth');\n var imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' });\n var widthVal = (selectNode.getAttribute('width') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('width'))) ? selectNode.width : selectNode.getClientRects()[0].width;\n var heightVal = (selectNode.getAttribute('height') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('height'))) ? selectNode.height : selectNode.getClientRects()[0].height;\n var content = '
    ' +\n '
    ' + '
    ' +\n '
    ';\n var contentElem = parseHtml(content);\n imgSizeWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({\n format: '###.### px', min: this.parent.insertImageSettings.minWidth,\n max: this.parent.insertImageSettings.maxWidth,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n widthNum.createElement = this.parent.createElement;\n widthNum.appendTo(imgSizeWrap.querySelector('#imgwidth'));\n var heightNum = new NumericTextBox({\n format: '###.### px', min: this.parent.insertImageSettings.minHeight,\n max: this.parent.insertImageSettings.maxHeight,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n heightNum.createElement = this.parent.createElement;\n heightNum.appendTo(imgSizeWrap.querySelector('#imgheight'));\n return imgSizeWrap;\n };\n Image.prototype.insertSize = function (e) {\n e.selection.restore();\n var proxy = e.selfImage;\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n var dialogEle = proxy.dialogObj.element;\n var width = parseFloat(dialogEle.querySelector('.e-img-width').value);\n var height = parseFloat(dialogEle.parentElement.querySelector('.e-img-height').value);\n proxy.parent.formatter.process(this.parent, e.args, e.args, {\n width: width, height: height, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n if (this.imgResizeDiv) {\n proxy.imgResizePos(e.selectNode[0], this.imgResizeDiv);\n }\n proxy.dialogObj.hide({ returnValue: true });\n };\n Image.prototype.insertImage = function (e) {\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var dialogContent = this.parent.createElement('div', { className: 'e-img-content' });\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.appendChild(this.imgUpload(e));\n }\n var linkHeader = this.parent.createElement('div', { className: 'e-linkheader' });\n var linkHeaderText = this.i10n.getConstant('imageLinkHeader');\n if (this.parent.editorMode === 'HTML') {\n linkHeader.innerHTML = linkHeaderText;\n }\n else {\n linkHeader.innerHTML = this.i10n.getConstant('mdimageLink');\n }\n dialogContent.appendChild(linkHeader);\n dialogContent.appendChild(this.imageUrlPopup(e));\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG') {\n this.dialogObj.setProperties({ header: 'Edit Image', content: dialogContent }, false);\n this.dialogObj.element.querySelector('.e-insertImage').textContent = 'Update';\n }\n else {\n this.dialogObj.setProperties({ content: dialogContent }, false);\n }\n this.dialogObj.element.style.maxHeight = 'none';\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.querySelector('#' + this.rteID + '_insertImage').focus();\n }\n else {\n dialogContent.querySelector('.e-img-url').focus();\n }\n }\n };\n Image.prototype.imgUpload = function (e) {\n var _this = this;\n var save;\n var selectParent;\n var proxy = this;\n if (proxy.parent.editorMode === 'HTML' &&\n isNullOrUndefined(closest(e.selection.range.startContainer.parentNode, '#' + this.contentModule.getPanel().id))) {\n this.contentModule.getEditPanel().focus();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n else {\n save = e.selection;\n selectParent = e.selectParent;\n }\n var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' });\n var deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');\n var imgUpMsg = this.i10n.getConstant('imageUploadMessage');\n var span = this.parent.createElement('span', { className: 'e-droptext' });\n span.innerHTML = (Browser.isDevice) ? deviceImgUpMsg : imgUpMsg;\n var btnEle = this.parent.createElement('button', {\n className: 'e-browsebtn', id: this.rteID + '_insertImage',\n attrs: { autofocus: 'true', type: 'button' }\n });\n span.appendChild(btnEle);\n uploadParentEle.appendChild(span);\n var browserMsg = this.i10n.getConstant('browse');\n var button = new Button({ content: browserMsg, enableRtl: this.parent.enableRtl });\n button.createElement = this.parent.createElement;\n button.appendTo(btnEle);\n var btnClick = (Browser.isDevice) ? span : btnEle;\n EventHandler.add(btnClick, 'click', this.fileSelect, this);\n var uploadEle = this.parent.createElement('input', {\n id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n uploadParentEle.appendChild(uploadEle);\n var altText;\n this.uploadObj = new Uploader({\n asyncSettings: {\n saveUrl: this.parent.insertImageSettings.saveUrl,\n },\n dropArea: span,\n multiple: false,\n enableRtl: this.parent.enableRtl,\n allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),\n selected: function (e) {\n altText = e.filesData[0].name;\n if (_this.parent.editorMode === 'HTML' && isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var reader_1 = new FileReader();\n reader_1.addEventListener('load', function (e) {\n var url = URL.createObjectURL(proxy.url(reader_1.result));\n proxy.uploadUrl = {\n url: url, selection: save, altText: altText, selectParent: selectParent,\n width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n },\n height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n });\n reader_1.readAsDataURL(e.filesData[0].rawFile);\n }\n },\n success: function (e) {\n if (!isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var url = _this.parent.insertImageSettings.path + e.file.name;\n var value = { url: url, selection: save };\n proxy.uploadUrl = {\n url: url, selection: save, altText: altText, selectParent: selectParent,\n width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n },\n height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n }\n },\n removing: function () {\n proxy.inputUrl.removeAttribute('disabled');\n proxy.uploadUrl.url = '';\n }\n });\n this.uploadObj.createElement = this.parent.createElement;\n this.uploadObj.appendTo(uploadEle);\n return uploadParentEle;\n };\n Image.prototype.fileSelect = function () {\n document.body.getElementsByClassName('e-file-select-wrap')[0].querySelector('button').click();\n return false;\n };\n Image.prototype.imagePaste = function (args) {\n var proxy = this;\n var reader = new FileReader();\n reader.addEventListener('load', function (e) {\n var url = {\n cssClass: (proxy.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: URL.createObjectURL(proxy.url(reader.result)),\n width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n },\n height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.parent.formatter.process(proxy.parent, { item: { command: 'Images', subCommand: 'Image' } }, args.args, url);\n });\n reader.readAsDataURL(args.file);\n };\n Image.prototype.url = function (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 * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Image.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Image.prototype.getModuleName = function () {\n return 'image';\n };\n return Image;\n}());\nexport { Image };\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 RichTextEditor content\n * @hidden\n */\nvar ViewSource = /** @class */ (function () {\n /**\n * Constructor for view source module\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 };\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.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' });\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 }\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 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.parent.value;\n this.contentModule.getPanel().style.display = 'none';\n rteContent.style.display = 'block';\n }\n else {\n this.contentModule.getPanel().appendChild(this.previewElement);\n this.getPanel().value = (this.contentModule.getEditPanel().innerHTML === '


    ' ||\n this.contentModule.getEditPanel().innerHTML.length === 12) ||\n (this.contentModule.getEditPanel().childNodes.length === 1 &&\n this.contentModule.getEditPanel().childNodes[0].tagName === 'P' &&\n this.contentModule.getEditPanel().innerHTML.length === 8) ? null : this.parent.value;\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');\n this.wireEvent(this.previewElement);\n this.unWireBaseKeyDown();\n this.previewElement.focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder)) {\n var placeHolderWrapper = this.parent.element.querySelector('.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 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 if (this.parent.iframeSettings.enable) {\n editHTML.parentElement.style.display = 'none';\n this.contentModule.getPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = editHTML.value;\n }\n else {\n editHTML.style.display = 'none';\n this.contentModule.getEditPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = editHTML.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();\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');\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.invokeChangeEvent();\n };\n ViewSource.prototype.getPanel = function () {\n return this.parent.element.querySelector('.e-rte-srctextarea');\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 * @return {void}\n */\n ViewSource.prototype.destroy = function () {\n this.removeEventListener();\n };\n return ViewSource;\n}());\nexport { ViewSource };\n","import { detach, closest, Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, EventHandler, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Dialog, Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport * as classes from '../base/classes';\nimport { dispatchEvent, parseHtml } from '../base/util';\n/**\n * `Table` module is used to handle table actions.\n */\nvar Table = /** @class */ (function () {\n function Table(parent, serviceLocator) {\n this.pageX = null;\n this.pageY = null;\n this.moveEle = null;\n this.parent = parent;\n this.rteID = parent.element.id;\n this.l10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n Table.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.createTable, (Browser.isDevice || this.parent.inlineMode.enable) ? this.insertTableDialog : this.renderDlgContent, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n this.parent.on(events.docClick, this.docClick, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.tableToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.dropDownSelect, this.dropdownSelect, this);\n this.parent.on(events.keyDown, this.keyDown, this);\n };\n Table.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.createTable, (Browser.isDevice || this.parent.inlineMode.enable) ?\n this.insertTableDialog : this.renderDlgContent);\n this.parent.off(events.initialEnd, this.afterRender);\n this.parent.off(events.docClick, this.docClick);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.on(events.tableToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.dropDownSelect, this.dropdownSelect, this);\n this.parent.off(events.mouseDown, this.cellSelect);\n this.parent.off(events.tableColorPickerChanged, this.setBGColor);\n this.parent.off(events.keyDown, this.keyDown);\n };\n Table.prototype.afterRender = function () {\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.on(events.tableColorPickerChanged, this.setBGColor, this);\n this.parent.on(events.mouseDown, this.cellSelect, this);\n if (this.parent.tableSettings.resize) {\n EventHandler.add(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart, this);\n }\n if (!Browser.isDevice && this.parent.tableSettings.resize) {\n EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);\n }\n };\n Table.prototype.dropdownSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Table') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var args = {\n args: e,\n selection: this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument()),\n selectParent: this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)\n };\n switch (item.subCommand) {\n case 'InsertRowBefore':\n case 'InsertRowAfter':\n this.addRow(args.selection, e);\n break;\n case 'InsertColumnLeft':\n case 'InsertColumnRight':\n this.addColumn(args.selection, e);\n break;\n case 'DeleteColumn':\n case 'DeleteRow':\n this.removeRowColumn(args.selection, e);\n break;\n case 'AlignTop':\n case 'AlignMiddle':\n case 'AlignBottom':\n this.verticalAlign(args, e);\n break;\n case 'Dashed':\n case 'Alternate':\n this.tableStyles(args, item.subCommand);\n break;\n }\n };\n Table.prototype.keyDown = function (e) {\n var event = e.args;\n var proxy = this;\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection) && this.contentModule) {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n var ele = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)[0];\n ele = (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') ? ele.parentElement : ele;\n if ((event.keyCode === 8 || event.keyCode === 46)) {\n if (ele && ele.tagName === 'TBODY') {\n event.preventDefault();\n proxy.removeTable(selection, event, true);\n }\n else if (ele && ele.querySelectorAll('table').length > 0) {\n this.removeResizeEle();\n }\n }\n ele = (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') ? closest(ele, 'td') : ele;\n if (ele && (ele.tagName === 'TD' || ele.tagName === 'TH')) {\n switch (event.keyCode) {\n case 9:\n case 37:\n case 39:\n proxy.tabSelection(event, selection, ele);\n break;\n case 40:\n case 38:\n proxy.tableArrowNavigation(event, selection, ele);\n break;\n }\n }\n }\n };\n Table.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'TableHeader':\n this.tableHeader(args.selection, args.args);\n break;\n case 'TableRemove':\n this.removeTable(args.selection, args.args);\n break;\n case 'TableEditProperties':\n this.editTable(args);\n break;\n }\n };\n Table.prototype.verticalAlign = function (args, e) {\n var tdEle = (args.selection.range.startContainer.nodeName === 'TD' ||\n args.selection.range.startContainer.nodeName === 'TH') ?\n args.selection.range.startContainer : args.selection.range.startContainer.parentElement;\n if (tdEle.nodeName !== 'TD' && tdEle.nodeName !== 'TH') {\n return;\n }\n this.parent.formatter.process(this.parent, e, e, { tableCell: tdEle, subCommand: e.item.subCommand });\n };\n Table.prototype.tableStyles = function (args, command) {\n var table = closest(args.selectParent[0], 'table');\n if (command === 'Dashed') {\n (this.parent.element.classList.contains(classes.CLS_TB_DASH_BOR)) ?\n this.parent.element.classList.remove(classes.CLS_TB_DASH_BOR) : this.parent.element.classList.add(classes.CLS_TB_DASH_BOR);\n (table.classList.contains(classes.CLS_TB_DASH_BOR)) ? table.classList.remove(classes.CLS_TB_DASH_BOR) :\n table.classList.add(classes.CLS_TB_DASH_BOR);\n }\n if (command === 'Alternate') {\n (this.parent.element.classList.contains(classes.CLS_TB_ALT_BOR)) ?\n this.parent.element.classList.remove(classes.CLS_TB_DASH_BOR) : this.parent.element.classList.add(classes.CLS_TB_ALT_BOR);\n (table.classList.contains(classes.CLS_TB_ALT_BOR)) ? table.classList.remove(classes.CLS_TB_ALT_BOR) :\n table.classList.add(classes.CLS_TB_ALT_BOR);\n }\n this.parent.formatter.saveData();\n };\n Table.prototype.insideList = function (range) {\n var blockNodes = this.parent.formatter.editorManager.domNode.blockNodes();\n var nodes = [];\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 && ((range.startOffset === 0 && range.endOffset === 0))) {\n return true;\n }\n else {\n return false;\n }\n };\n Table.prototype.tabSelection = function (event, selection, ele) {\n var insideList = this.insideList(selection.range);\n if ((event.keyCode === 37 || event.keyCode === 39) && selection.range.startContainer.nodeType === 3 ||\n insideList) {\n return;\n }\n event.preventDefault();\n ele.classList.remove(classes.CLS_TABLE_SEL);\n if (!event.shiftKey && event.keyCode !== 37) {\n var nextElement = (!isNullOrUndefined(ele.nextSibling)) ? ele.nextSibling :\n (!isNullOrUndefined(closest(ele, 'tr').nextSibling) ? closest(ele, 'tr').nextSibling.childNodes[0] :\n (!isNullOrUndefined(closest(ele, 'table').nextSibling)) ?\n (closest(ele, 'table').nextSibling.nodeName.toLowerCase() === 'td') ?\n closest(ele, 'table').nextSibling : ele : ele);\n if (ele === nextElement && ele.nodeName === 'TH') {\n nextElement = closest(ele, 'table').rows[1].cells[0];\n }\n if (event.keyCode === 39 && ele === nextElement) {\n nextElement = closest(ele, 'table').nextSibling;\n }\n if (nextElement) {\n (nextElement.textContent.trim() !== '' && closest(nextElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), nextElement) :\n selection.setSelectionText(this.contentModule.getDocument(), nextElement, nextElement, 0, 0);\n }\n if (ele === nextElement && event.keyCode !== 39 && nextElement) {\n this.addRow(selection, event, true);\n nextElement = nextElement.parentElement.nextSibling.firstChild;\n (nextElement.textContent.trim() !== '' && closest(nextElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), nextElement) :\n selection.setSelectionText(this.contentModule.getDocument(), nextElement, nextElement, 0, 0);\n }\n }\n else {\n var prevElement = (!isNullOrUndefined(ele.previousSibling)) ? ele.previousSibling :\n (!isNullOrUndefined(closest(ele, 'tr').previousSibling) ?\n closest(ele, 'tr').previousSibling.childNodes[closest(ele, 'tr').previousSibling.childNodes.length - 1] :\n (!isNullOrUndefined(closest(ele, 'table').previousSibling)) ?\n (closest(ele, 'table').previousSibling.nodeName.toLowerCase() === 'td') ? closest(ele, 'table').previousSibling :\n ele : ele);\n if (ele === prevElement && ele.cellIndex === 0 &&\n closest(ele, 'table').tHead) {\n var clsTble = closest(ele, 'table');\n prevElement = clsTble.rows[0].cells[clsTble.rows[0].cells.length - 1];\n }\n if (event.keyCode === 37 && ele === prevElement) {\n prevElement = closest(ele, 'table').previousSibling;\n }\n if (prevElement) {\n (prevElement.textContent.trim() !== '' && closest(prevElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), prevElement) :\n selection.setSelectionText(this.contentModule.getDocument(), prevElement, prevElement, 0, 0);\n }\n }\n };\n Table.prototype.tableArrowNavigation = function (event, selection, ele) {\n var selText = selection.range.startContainer;\n if ((event.keyCode === 40 && selText.nodeType === 3 && (selText.nextSibling && selText.nextSibling.nodeName === 'BR' ||\n selText.parentNode && selText.parentNode.nodeName !== 'TD')) ||\n (event.keyCode === 38 && selText.nodeType === 3 && (selText.previousSibling && selText.previousSibling.nodeName === 'BR' ||\n selText.parentNode && selText.parentNode.nodeName !== 'TD'))) {\n return;\n }\n event.preventDefault();\n ele.classList.remove(classes.CLS_TABLE_SEL);\n if (event.keyCode === 40) {\n ele = (!isNullOrUndefined(closest(ele, 'tr').nextSibling)) ?\n closest(ele, 'tr').nextSibling.children[ele.cellIndex] :\n (closest(ele, 'table').tHead && ele.nodeName === 'TH') ?\n closest(ele, 'table').rows[1].cells[ele.cellIndex] :\n (!isNullOrUndefined(closest(ele, 'table').nextSibling)) ? closest(ele, 'table').nextSibling :\n ele;\n }\n else {\n ele = (!isNullOrUndefined(closest(ele, 'tr').previousSibling)) ?\n closest(ele, 'tr').previousSibling.children[ele.cellIndex] :\n (closest(ele, 'table').tHead && ele.nodeName !== 'TH') ?\n closest(ele, 'table').tHead.rows[0].cells[ele.cellIndex] :\n (!isNullOrUndefined(closest(ele, 'table').previousSibling)) ? closest(ele, 'table').previousSibling :\n ele;\n }\n if (ele) {\n selection.setSelectionText(this.contentModule.getDocument(), ele, ele, 0, 0);\n }\n };\n Table.prototype.setBGColor = function (args) {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n var selectedCell = selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? closest(selectedCell.parentNode, 'td,th') : closest(selectedCell, 'td, th');\n if (selectedCell && (selectedCell.nodeName === 'TD' || selectedCell.nodeName === 'TH')) {\n var items = closest(selectedCell, 'table').querySelectorAll('.' + classes.CLS_TABLE_SEL);\n for (var i = 0; i < items.length; i++) {\n items[i].style.backgroundColor = args.item.value;\n }\n this.parent.formatter.saveData();\n }\n };\n Table.prototype.hideTableQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.tableQTBar && document.body.contains(this.quickToolObj.tableQTBar.element)) {\n this.quickToolObj.tableQTBar.hidePopup();\n }\n };\n Table.prototype.tableHeader = function (selection, e) {\n this.parent.formatter.process(this.parent, e, e.originalEvent, { selection: selection, subCommand: e.item.subCommand });\n };\n Table.prototype.editAreaClickHandler = function (e) {\n var args = e.args;\n if (args.which === 2 || args.which === 3) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.tableQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.tableQTBar.element.classList.contains('e-rte-pop');\n if (isPopupOpen) {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n if (target && target.nodeName !== 'A' && target.nodeName !== 'IMG' && (target.nodeName === 'TD' || target.nodeName === 'TH' ||\n target.nodeName === 'TABLE' || closest(target, 'table')) && !(range.startContainer.nodeType === 3 && !range.collapsed)) {\n var range_1 = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.save(range_1, this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n this.quickToolObj.tableQTBar.showPopup(args.pageX, pageY, target);\n this.parent.formatter.editorManager.nodeSelection.restore();\n }\n else {\n this.hideTableQuickToolbar();\n }\n }\n };\n Table.prototype.tableCellSelect = function (e) {\n var target = e.target;\n var row = Array.prototype.slice.call(target.parentElement.parentElement.children).indexOf(target.parentElement);\n var col = Array.prototype.slice.call(target.parentElement.children).indexOf(target);\n var list = this.dlgDiv.querySelectorAll('.e-rte-tablecell');\n Array.prototype.forEach.call(list, function (item) {\n var parentIndex = Array.prototype.slice.call(item.parentElement.parentElement.children).indexOf(item.parentElement);\n var cellIndex = Array.prototype.slice.call(item.parentElement.children).indexOf(item);\n removeClass([item], 'e-active');\n if (parentIndex <= row && cellIndex <= col) {\n addClass([item], 'e-active');\n }\n });\n this.tblHeader.innerHTML = (col + 1) + 'x' + (row + 1);\n };\n Table.prototype.tableCellLeave = function (e) {\n removeClass(this.dlgDiv.querySelectorAll('.e-rte-tablecell'), 'e-active');\n addClass([this.dlgDiv.querySelector('.e-rte-tablecell')], 'e-active');\n this.tblHeader.innerHTML = 1 + 'x' + 1;\n };\n Table.prototype.tableCellClick = function (e) {\n var target = e.target;\n var row = Array.prototype.slice.call(target.parentElement.parentElement.children).indexOf(target.parentElement) + 1;\n var col = Array.prototype.slice.call(target.parentElement.children).indexOf(target) + 1;\n this.self.tableInsert(row, col, e, this);\n };\n Table.prototype.tableInsert = function (row, col, e, selectionObj) {\n var proxy = (selectionObj.self) ? selectionObj.self : this;\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(selectionObj.selection.range.startContainer.parentNode, '#' + proxy.contentModule.getPanel().id))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n selectionObj.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n }\n var value = {\n row: row, columns: col, width: {\n minWidth: proxy.parent.tableSettings.minWidth,\n maxWidth: proxy.parent.tableSettings.maxWidth,\n width: proxy.parent.tableSettings.width,\n },\n selection: selectionObj.selection\n };\n if (proxy.popupObj) {\n proxy.popupObj.hide();\n }\n if (proxy.editdlgObj) {\n proxy.editdlgObj.hide();\n }\n proxy.parent.formatter.process(proxy.parent, selectionObj.args, selectionObj.args.originalEvent, value);\n proxy.contentModule.getEditPanel().focus();\n proxy.parent.on(events.mouseDown, proxy.cellSelect, proxy);\n };\n Table.prototype.cellSelect = function (e) {\n var target = e.args.target;\n target = (target.nodeName !== 'TD') ? closest(target, 'td,th') : target;\n removeClass(this.contentModule.getEditPanel().querySelectorAll('table td, table th'), classes.CLS_TABLE_SEL);\n if (target && (target.tagName === 'TD' || target.tagName === 'TH')) {\n target.removeAttribute('class');\n addClass([target], classes.CLS_TABLE_SEL);\n this.curTable = (this.curTable) ? this.curTable : closest(target, 'table');\n this.removeResizeEle();\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n }\n }\n };\n Table.prototype.resizeHelper = function (e) {\n var target = e.target || e.targetTouches[0].target;\n if (target.nodeName === 'TABLE' || target.nodeName === 'TD' || target.nodeName === 'TH') {\n this.curTable = (target.nodeName === 'TD' || target.nodeName === 'TH') ?\n closest(target, 'table') : target;\n this.removeResizeEle();\n this.tableResizeEleCreation(this.curTable, e);\n }\n };\n Table.prototype.tableResizeEleCreation = function (table, e) {\n this.parent.preventDefaultResize(e);\n var columns = Array.prototype.slice.call(table.rows[0].cells, 1);\n var rows = [];\n for (var i = 0; i < table.rows.length; i++) {\n rows.push(Array.prototype.slice.call(table.rows[i].cells, 0, 1)[0]);\n }\n var height = parseInt(getComputedStyle(table).height, 10);\n var width = parseInt(getComputedStyle(table).width, 10);\n var pos = this.calcPos(table);\n for (var i = 0; columns.length > i; i++) {\n var colReEle = this.parent.createElement('span', {\n className: classes.CLS_TB_COL_RES, attrs: {\n 'data-col': (i + 1).toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n colReEle.style.cssText = 'height: ' + height + 'px; width: 4px; top: ' + pos.top +\n 'px; left:' + (pos.left + this.calcPos(columns[i]).left) + 'px;';\n this.contentModule.getEditPanel().appendChild(colReEle);\n }\n for (var i = 0; rows.length > i; i++) {\n var rowReEle = this.parent.createElement('span', {\n className: classes.CLS_TB_ROW_RES, attrs: {\n 'data-row': (i).toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n rowReEle.style.cssText = 'width: ' + width + 'px; height: 4px; top: ' +\n (this.calcPos(rows[i]).top + pos.top + rows[i].offsetHeight - 2) +\n 'px; left:' + (this.calcPos(rows[i]).left + pos.left) + 'px;';\n this.contentModule.getEditPanel().appendChild(rowReEle);\n }\n var tableReBox = this.parent.createElement('span', {\n className: classes.CLS_TB_BOX_RES, attrs: {\n 'data-col': columns.length.toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n tableReBox.style.cssText = 'top: ' + (pos.top + height - 4) +\n 'px; left:' + (pos.left + width - 4) + 'px;';\n if (Browser.isDevice) {\n tableReBox.classList.add('e-rmob');\n }\n this.contentModule.getEditPanel().appendChild(tableReBox);\n };\n Table.prototype.removeResizeEle = function () {\n var item = this.contentModule.getEditPanel().querySelectorAll('.e-column-resize, .e-row-resize, .e-table-box');\n if (item.length > 0) {\n for (var i = 0; i < item.length; i++) {\n detach(item[i]);\n }\n }\n };\n Table.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 = elem.offsetParent || 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.nodeName === 'TD' && elem.nodeName === 'TABLE') {\n offsetParent = closest(offsetParent, '.e-control');\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 Table.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 Table.prototype.getPointY = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageY;\n }\n else {\n return e.pageY;\n }\n };\n Table.prototype.resizeStart = function (e) {\n if (Browser.isDevice) {\n this.resizeHelper(e);\n }\n var target = e.target;\n if (target.classList.contains(classes.CLS_TB_COL_RES) ||\n target.classList.contains(classes.CLS_TB_ROW_RES) ||\n target.classList.contains(classes.CLS_TB_BOX_RES)) {\n e.preventDefault();\n this.parent.preventDefaultResize(e);\n removeClass(this.curTable.querySelectorAll('td,th'), classes.CLS_TABLE_SEL);\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.pageX = this.getPointX(e);\n this.pageY = this.getPointY(e);\n this.resizeBtnInit();\n this.hideTableQuickToolbar();\n if (target.classList.contains(classes.CLS_TB_COL_RES)) {\n this.resizeBtnStat.column = true;\n this.columnEle = this.curTable.rows[0].cells[parseInt(target.getAttribute('data-col'), 10)];\n this.colIndex = this.columnEle.cellIndex;\n this.moveEle = e.target;\n this.appendHelper();\n }\n if (target.classList.contains(classes.CLS_TB_ROW_RES)) {\n this.rowEle = this.curTable.rows[parseInt(target.getAttribute('data-row'), 10)];\n this.resizeBtnStat.row = true;\n this.appendHelper();\n }\n if (target.classList.contains(classes.CLS_TB_BOX_RES)) {\n this.resizeBtnStat.tableBox = true;\n }\n if (Browser.isDevice && this.helper && !this.helper.classList.contains('e-reicon')) {\n this.helper.classList.add('e-reicon');\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 = { event: e, requestType: 'Table' };\n this.parent.trigger(events.resizeStart, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n }\n EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);\n EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);\n }\n };\n Table.prototype.removeHelper = function (e) {\n var cls = e.target.classList;\n if (!(cls.contains('e-reicon')) && this.helper) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n }\n this.pageX = null;\n this.helper = null;\n }\n };\n Table.prototype.appendHelper = function () {\n this.helper = this.parent.createElement('div', {\n className: 'e-table-rhelper'\n });\n if (Browser.isDevice) {\n this.helper.classList.add('e-reicon');\n }\n this.contentModule.getEditPanel().appendChild(this.helper);\n this.setHelperHeight();\n };\n Table.prototype.setHelperHeight = function () {\n var pos = this.calcPos(this.curTable);\n if (this.resizeBtnStat.column) {\n this.helper.classList.add('e-column-helper');\n this.helper.style.cssText = 'height: ' + getComputedStyle(this.curTable).height + '; top: ' +\n pos.top + 'px; left:' + (pos.left + this.calcPos(this.columnEle).left - 1) + 'px;';\n }\n else {\n this.helper.classList.add('e-row-helper');\n this.helper.style.cssText = 'width: ' + getComputedStyle(this.curTable).width + '; top: ' +\n (this.calcPos(this.rowEle).top + pos.top + this.rowEle.offsetHeight) +\n 'px; left:' + (this.calcPos(this.rowEle).left + pos.left) + 'px;';\n }\n };\n Table.prototype.updateHelper = function () {\n var pos = this.calcPos(this.curTable);\n if (this.resizeBtnStat.column) {\n var left = pos.left + this.calcPos(this.columnEle).left - 1;\n this.helper.style.left = left + 'px';\n }\n else {\n var top_1 = this.calcPos(this.rowEle).top + pos.top + this.rowEle.offsetHeight;\n this.helper.style.top = top_1 + 'px';\n }\n };\n Table.prototype.resizing = function (e) {\n var pageX = this.getPointX(e);\n var pageY = this.getPointY(e);\n var mouseX = (this.parent.enableRtl) ? -(pageX - this.pageX) : (pageX - this.pageX);\n var mouseY = (this.parent.enableRtl) ? -(pageY - this.pageY) : (pageY - this.pageY);\n this.pageX = pageX;\n this.pageY = pageY;\n var args = { event: e, requestType: 'table' };\n this.parent.trigger(events.onResize, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n var tableReBox = this.contentModule.getEditPanel().querySelector('.e-table-box');\n var tableWidth = parseInt(getComputedStyle(this.curTable).width, 10);\n var tableHeight = parseInt(getComputedStyle(this.curTable).height, 10);\n if (this.resizeBtnStat.column) {\n var cellColl = this.curTable.rows[0].cells;\n var width = parseFloat(getComputedStyle(this.columnEle).width);\n var actualwid = width - mouseX;\n var totalwid = parseFloat(getComputedStyle(this.columnEle).width) +\n parseFloat(getComputedStyle(cellColl[this.colIndex - 1]).width);\n for (var i = 0; i < this.curTable.rows.length; i++) {\n if ((totalwid - actualwid) > 20 && actualwid > 20) {\n this.curTable.rows[i].cells[this.colIndex - 1].style.width = totalwid - actualwid + 'px';\n this.curTable.rows[i].cells[this.colIndex].style.width = actualwid + 'px';\n }\n }\n this.updateHelper();\n }\n else if (this.resizeBtnStat.row) {\n this.parent.preventDefaultResize(e);\n var height = parseFloat(getComputedStyle(this.rowEle).height) + mouseY;\n if (height > 20) {\n this.rowEle.style.height = height + 'px';\n }\n this.curTable.style.height = '';\n tableReBox.style.cssText = 'top: ' + (this.calcPos(this.curTable).top + tableHeight - 4) +\n 'px; left:' + (this.calcPos(this.curTable).left + tableWidth - 4) + 'px;';\n this.updateHelper();\n }\n else if (this.resizeBtnStat.tableBox) {\n if (!Browser.isDevice) {\n EventHandler.remove(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper);\n }\n this.curTable.style.width = tableWidth + mouseX + 'px';\n this.curTable.style.height = tableHeight + mouseY + 'px';\n tableReBox.classList.add('e-rbox-select');\n tableReBox.style.cssText = 'top: ' + (this.calcPos(this.curTable).top + tableHeight - 4) +\n 'px; left:' + (this.calcPos(this.curTable).left + tableWidth - 4) + 'px;';\n }\n };\n Table.prototype.cancelResizeAction = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n this.removeResizeEle();\n };\n Table.prototype.resizeEnd = function (e) {\n this.resizeBtnInit();\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n if (this.contentModule.getEditPanel().querySelector('.e-table-box') &&\n this.contentModule.getEditPanel().contains(this.contentModule.getEditPanel().querySelector('.e-table-box'))) {\n if (!Browser.isDevice) {\n EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);\n }\n this.removeResizeEle();\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n this.helper = null;\n }\n this.pageX = null;\n this.pageY = null;\n this.moveEle = null;\n }\n var args = { event: e, requestType: 'table' };\n this.parent.trigger(events.resizeStop, args);\n this.parent.formatter.saveData();\n };\n Table.prototype.resizeBtnInit = function () {\n return this.resizeBtnStat = { column: false, row: false, tableBox: false };\n };\n Table.prototype.addRow = function (selectCell, e, tabkey) {\n var cmd;\n if (tabkey) {\n cmd = {\n item: { command: 'Table', subCommand: 'InsertRowAfter' }\n };\n }\n var value = {\n selection: selectCell,\n subCommand: (tabkey) ? cmd.item.subCommand : e.item.subCommand\n };\n this.parent.formatter.process(this.parent, (tabkey) ? cmd : e, e, value);\n };\n Table.prototype.addColumn = function (selectCell, e) {\n this.parent.formatter.process(this.parent, e, e, { selection: selectCell, width: this.parent.tableSettings.width, subCommand: e.item.subCommand });\n };\n Table.prototype.removeRowColumn = function (selectCell, e) {\n this.parent.formatter.process(this.parent, e, e, { selection: selectCell, subCommand: e.item.subCommand });\n this.hideTableQuickToolbar();\n };\n Table.prototype.removeTable = function (selection, args, delKey) {\n var cmd;\n if (delKey) {\n cmd = { item: { command: 'Table', subCommand: 'TableRemove' } };\n }\n var value = {\n selection: selection,\n subCommand: (delKey) ? cmd.item.subCommand : args.item.subCommand\n };\n this.parent.formatter.process(this.parent, (delKey) ? cmd : args, args.originalEvent, value);\n this.contentModule.getEditPanel().focus();\n this.removeResizeEle();\n this.hideTableQuickToolbar();\n };\n Table.prototype.renderDlgContent = function (args) {\n var _this = this;\n if (this.popupObj) {\n this.popupObj.hide();\n return;\n }\n this.hideTableQuickToolbar();\n var header = this.l10n.getConstant('tblhead');\n var insertbtn = this.l10n.getConstant('inserttablebtn');\n this.dlgDiv = this.parent.createElement('div', { className: 'e-rte-table-popup', id: this.rteID + '_table' });\n this.tblHeader = this.parent.createElement('div', { className: 'e-rte-popup-header' });\n this.tblHeader.innerHTML = header;\n this.dlgDiv.appendChild(this.tblHeader);\n var tableDiv = this.parent.createElement('div', { className: 'e-rte-table-span' });\n this.drawTable(tableDiv, args);\n this.dlgDiv.appendChild(tableDiv);\n this.dlgDiv.appendChild(this.parent.createElement('span', { className: 'e-span-border' }));\n var btnEle = this.parent.createElement('button', {\n className: 'e-insert-table-btn', id: this.rteID + '_insertTable',\n attrs: { type: 'button' }\n });\n this.dlgDiv.appendChild(btnEle);\n var button = new Button({\n iconCss: 'e-icons e-create-table', content: insertbtn, cssClass: 'e-flat',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n button.appendTo(btnEle);\n EventHandler.add(btnEle, 'click', this.insertTableDialog, { self: this, args: args.args, selection: args.selection });\n this.parent.getToolbar().appendChild(this.dlgDiv);\n var target = args.args.originalEvent.target;\n target = target.classList.contains('e-toolbar-item') ? target.firstChild : target.parentElement;\n this.popupObj = new Popup(this.dlgDiv, {\n targetType: 'relative',\n relateTo: target,\n collision: { X: 'fit', Y: 'none' },\n offsetY: 8,\n viewPortElement: this.parent.element,\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl,\n zIndex: 10001,\n close: function (event) {\n _this.parent.isBlur = false;\n _this.popupObj.destroy();\n detach(_this.popupObj.element);\n _this.popupObj = null;\n }\n });\n addClass([this.popupObj.element], 'e-popup-open');\n this.popupObj.refreshPosition(target);\n };\n Table.prototype.docClick = function (e) {\n var target = e.args.target;\n if (target && target.classList && ((this.popupObj && !closest(target, '#' + this.popupObj.element.id) ||\n (this.editdlgObj && !closest(target, '#' + this.editdlgObj.element.id)))) && !target.classList.contains('e-create-table') &&\n target.offsetParent && !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown')) {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n if (this.editdlgObj) {\n this.editdlgObj.hide();\n }\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n if (target && target.tagName !== 'TD' && target.tagName !== 'TH' && !closest(target, 'td') &&\n closest(target, '.e-rte-quick-popup') === null && target.offsetParent &&\n !target.offsetParent.classList.contains('e-quick-dropdown') &&\n !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown') && !closest(target, '.e-rte-dropdown-popup')) {\n removeClass(this.parent.element.querySelectorAll('table td'), classes.CLS_TABLE_SEL);\n this.hideTableQuickToolbar();\n }\n if (target && target.classList && !target.classList.contains(classes.CLS_TB_COL_RES) &&\n !target.classList.contains(classes.CLS_TB_ROW_RES) && !target.classList.contains(classes.CLS_TB_BOX_RES)) {\n this.removeResizeEle();\n }\n };\n Table.prototype.drawTable = function (tableDiv, args) {\n var rowDiv;\n var tableCell;\n for (var row = 0; row < 3; row++) {\n rowDiv = this.parent.createElement('div', { className: 'e-rte-table-row', attrs: { 'data-column': '' + row } });\n for (var col = 0; col < 10; col++) {\n var display = (row > 2) ? 'none' : 'inline-block';\n tableCell = this.parent.createElement('div', { className: 'e-rte-tablecell e-default', attrs: { 'data-cell': '' + col } });\n rowDiv.appendChild(tableCell);\n tableCell.style.display = display;\n if (col === 0 && row === 0) {\n addClass([tableCell], 'e-active');\n }\n EventHandler.add(tableCell, 'mousemove', this.tableCellSelect, this);\n EventHandler.add(rowDiv, 'mouseleave', this.tableCellLeave, this);\n EventHandler.add(tableCell, 'mouseup', this.tableCellClick, { self: this, args: args.args, selection: args.selection });\n }\n tableDiv.appendChild(rowDiv);\n }\n };\n Table.prototype.editTable = function (args) {\n var _this = this;\n this.createDialog(args);\n var editContent = this.tableDlgContent(args);\n var update = this.l10n.getConstant('dialogUpdate');\n var cancel = this.l10n.getConstant('dialogCancel');\n var editHeader = this.l10n.getConstant('tableEditHeader');\n this.editdlgObj.setProperties({\n height: 'initial', width: '290px', content: editContent, header: editHeader,\n buttons: [{\n click: this.applyProperties.bind(this, args),\n buttonModel: { content: update, cssClass: 'e-flat e-size-update', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }]\n });\n this.editdlgObj.element.style.maxHeight = 'none';\n this.editdlgObj.content.querySelector('input').focus();\n };\n Table.prototype.insertTableDialog = function (args) {\n var proxy = (this.self) ? this.self : this;\n if (proxy.popupObj) {\n proxy.popupObj.hide();\n }\n proxy.createDialog(args);\n var dlgContent = proxy.tableCellDlgContent();\n var insert = proxy.l10n.getConstant('dialogInsert');\n var cancel = proxy.l10n.getConstant('dialogCancel');\n proxy.editdlgObj.setProperties({\n height: 'initial', width: '290px', content: dlgContent,\n buttons: [{\n click: proxy.customTable.bind(this, args),\n buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }\n },\n {\n click: function (e) { proxy.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }]\n });\n proxy.editdlgObj.element.style.maxHeight = 'none';\n proxy.editdlgObj.content.querySelector('input').focus();\n };\n Table.prototype.tableCellDlgContent = function () {\n var tableColumn = this.l10n.getConstant('columns');\n var tableRow = this.l10n.getConstant('rows');\n var tableWrap = this.parent.createElement('div', { className: 'e-cell-wrap' });\n var content = '
    '\n + '
    ';\n var contentElem = parseHtml(content);\n tableWrap.appendChild(contentElem);\n this.columnTextBox = new NumericTextBox({\n format: 'n0',\n min: 1,\n value: 3,\n placeholder: tableColumn,\n floatLabelType: 'Auto',\n max: 50,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n this.columnTextBox.appendTo(tableWrap.querySelector('#tableColumn'));\n this.rowTextBox = new NumericTextBox({\n format: 'n0',\n min: 1,\n value: 3,\n placeholder: tableRow,\n floatLabelType: 'Auto',\n max: 50,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n this.rowTextBox.appendTo(tableWrap.querySelector('#tableRow'));\n return tableWrap;\n };\n Table.prototype.createDialog = function (args) {\n var _this = this;\n if (this.editdlgObj) {\n this.editdlgObj.hide({ returnValue: true });\n return;\n }\n var tableDialog = this.parent.createElement('div', { className: 'e-rte-edit-table', id: this.rteID + '_tabledialog' });\n this.parent.element.appendChild(tableDialog);\n var insert = this.l10n.getConstant('dialogInsert');\n var cancel = this.l10n.getConstant('dialogCancel');\n var header = this.l10n.getConstant('tabledialogHeader');\n this.editdlgObj = new Dialog({\n header: header,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'initial',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n _this.editdlgObj.destroy();\n detach(_this.editdlgObj.element);\n _this.editdlgObj = null;\n },\n });\n this.editdlgObj.appendTo(tableDialog);\n if (this.quickToolObj && this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n };\n Table.prototype.customTable = function (args, e) {\n var proxy = (this.self) ? this.self : this;\n if (proxy.rowTextBox.value && proxy.columnTextBox.value) {\n var argument = ((Browser.isDevice || proxy.parent.inlineMode.enable) ? args : this);\n proxy.tableInsert(proxy.rowTextBox.value, proxy.columnTextBox.value, e, argument);\n }\n };\n Table.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.editdlgObj.hide({ returnValue: true });\n };\n Table.prototype.applyProperties = function (args, e) {\n var dialogEle = this.editdlgObj.element;\n var table = closest(args.selectNode[0], 'table');\n table.style.width = dialogEle.querySelector('.e-table-width').value + 'px';\n table.cellPadding = dialogEle.querySelector('.e-cell-padding').value;\n table.cellSpacing = dialogEle.querySelector('.e-cell-spacing').value;\n this.parent.formatter.saveData();\n this.editdlgObj.hide({ returnValue: true });\n };\n Table.prototype.tableDlgContent = function (e) {\n var selectNode = e.selectParent[0];\n var tableWidth = this.l10n.getConstant('tableWidth');\n var cellPadding = this.l10n.getConstant('cellpadding');\n var cellSpacing = this.l10n.getConstant('cellspacing');\n var tableWrap = this.parent.createElement('div', { className: 'e-table-sizewrap' });\n var widthVal = closest(selectNode, 'table').getClientRects()[0].width;\n var content = '
    ' + '
    '\n + '
    ';\n var contentElem = parseHtml(content);\n tableWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: widthVal,\n placeholder: tableWidth,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n widthNum.appendTo(tableWrap.querySelector('#tableWidth'));\n var padding = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: 0,\n placeholder: cellPadding,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n padding.appendTo(tableWrap.querySelector('#cellPadding'));\n var spacing = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: 0,\n placeholder: cellSpacing,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n spacing.appendTo(tableWrap.querySelector('#cellSpacing'));\n return tableWrap;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Table.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Table.prototype.getModuleName = function () {\n return 'table';\n };\n return Table;\n}());\nexport { Table };\n","/** @hidden */\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 '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: 'Links'\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: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertHorizontalRule': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '
    '\n },\n 'insertImage': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertBrOnReturn': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '
    '\n },\n 'insertOrderedList': {\n command: 'Formats',\n value: 'OL'\n },\n 'insertUnorderedList': {\n command: 'Formats',\n value: 'UL'\n },\n 'insertParagraph': {\n command: 'Formats',\n value: 'P'\n },\n 'removeFormat': {\n command: 'Clear',\n subCommand: 'ClearFormat'\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';\nimport { ToolbarType } from '../base/enum';\nimport { TableStyleItems } from '../models/items';\nexport var predefinedItems = ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments',\n 'OrderedList', 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo'];\nexport var fontFamily = [\n { text: 'Segoe UI', value: 'Segoe UI', cssClass: 'e-segoe-ui' },\n { text: 'Arial', value: 'Arial,Helvetica,sans-serif', cssClass: 'e-arial' },\n { text: 'Georgia', value: 'Georgia,serif', cssClass: 'e-georgia' },\n { text: 'Impact', value: 'Impact,Charcoal,sans-serif', cssClass: 'e-impact' },\n { text: 'Tahoma', value: 'Tahoma,Geneva,sans-serif', cssClass: 'e-tahoma' },\n { text: 'Times New Roman', value: 'Times New Roman,Times,serif', cssClass: 'e-times-new-roman' },\n { text: 'Verdana', value: 'Verdana,Geneva,sans-serif', cssClass: 'e-verdana' }\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 { text: 'Paragraph', value: 'P', cssClass: 'e-paragraph' },\n { text: 'Code', value: 'Pre', cssClass: 'e-code' },\n { text: 'Quotation', value: 'BlockQuote', cssClass: 'e-quote' },\n { text: 'Heading 1', value: 'H1', cssClass: 'e-h1' },\n { text: 'Heading 2', value: 'H2', cssClass: 'e-h2' },\n { text: 'Heading 3', value: 'H3', cssClass: 'e-h3' },\n { text: 'Heading 4', value: 'H4', cssClass: 'e-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};\n/**\n * Configures the toolbar settings of the RTE.\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 RTE.\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('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(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 };\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 RTE.\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('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(['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 * Configures the font family settings of the RTE.\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('Segoe UI')\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 RTE.\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('10 pt')\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 RTE.\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('Paragraph')\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 RTE.\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 RTE.\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","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","import { Browser, isNullOrUndefined } 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 FullScreen.prototype.showFullScreen = function (event) {\n this.scrollableParent = getScrollableParent(this.parent.element);\n if (!this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.trigger(events.actionBegin, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n if (this.parent.toolbarSettings.enableFloating && 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 this.parent.setContentHeight();\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.trigger(events.actionComplete, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n }\n };\n FullScreen.prototype.hideFullScreen = function (event) {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.element.classList.remove(classes.CLS_FULL_SCREEN);\n var elem = document.querySelectorAll('.e-overflow');\n for (var i = 0; i < elem.length; i++) {\n removeClass([elem[i]], ['e-rte-overflow']);\n }\n this.parent.trigger(events.actionBegin, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n this.parent.setContentHeight();\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 FullScreen.prototype.toggleParentOverflow = function (isAdd) {\n if (isNullOrUndefined(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 = document.querySelector('#' + this.scrollableParent[i].id);\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 };\n FullScreen.prototype.removeEventListener = function () {\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n FullScreen.prototype.destroy = function () {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.toggleParentOverflow(false);\n }\n this.removeEventListener();\n };\n return FullScreen;\n}());\nexport { FullScreen };\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, Complex, Browser, addClass, select } 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 { 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 } from './enum';\nimport { ExecCommandCallBack } from '../actions/execute-command-callback';\nimport { KeyboardEvents } from '../actions/keyboard';\nimport { ToolbarSettings, ImageSettings, QuickToolbarSettings, FontFamily, FontSize, Format } from '../models/toolbar-settings';\nimport { TableSettings } 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 * as CONSTANT from '../../common/constant';\nimport { dispatchEvent } from '../base/util';\n/**\n * Represents the RichTextEditor 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 /**\n * @hidden\n */\n _this.isFocusOut = false;\n /**\n * @hidden\n */\n _this.isRTE = false;\n /**\n * @hidden\n */\n _this.isBlur = true;\n _this.needsID = true;\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\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 }\n return modules;\n };\n RichTextEditor.prototype.updateEnable = function () {\n if (this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n this.element.tabIndex = 0;\n this.element.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', '0');\n }\n else {\n if (this.getToolbar()) {\n removeClass(this.getToolbar().querySelectorAll('.' + classes.CLS_ACTIVE), classes.CLS_ACTIVE);\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 RichTextEditor.prototype.setEnable = function () {\n this.updateEnable();\n (this.enabled) ? this.eventInitializer() : this.unWireEvents();\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n RichTextEditor.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.setContainer();\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n attributes(this.element, { role: 'application' });\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 this.element.innerHTML = '';\n }\n var invalidAttr = ['class', 'style', 'id'];\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 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 (this.element.tagName === 'TEXTAREA') {\n var rteOutterWrapper = this.createElement('div', {\n className: 'e-control e-richtexteditor'\n });\n rteOutterWrapper.innerHTML = this.element.value;\n this.element.parentElement.insertBefore(rteOutterWrapper, this.element);\n this.valueContainer = this.element;\n this.valueContainer.classList.remove('e-control', 'e-richtexteditor');\n this.element = rteOutterWrapper;\n }\n else {\n this.valueContainer = this.createElement('textarea', {\n id: this.getID() + '-value'\n });\n }\n this.valueContainer.name = this.getID();\n this.valueContainer.style.display = 'none';\n if (this.value !== null) {\n this.valueContainer.value = this.value;\n }\n this.element.appendChild(this.valueContainer);\n };\n RichTextEditor.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n /**\n * Focuses the RichTextEditor component\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 RichTextEditor component\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 * @public\n */\n RichTextEditor.prototype.selectAll = function () {\n this.notify(events.selectAll, {});\n };\n /**\n * Selects a content range or an element\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 * @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 * Executes the commands\n * CommandName - Specifies the name of the command to be executed.\n * value - Specifies the sub command.\n * @public\n */\n RichTextEditor.prototype.executeCommand = function (commandName, value) {\n var tool = executeGroup[commandName];\n this.formatter.editorManager.execCommand(tool.command, tool.subCommand ? tool.subCommand : (value ? value : tool.value), null, null, (value ? value : tool.value), (value ? value : tool.value));\n };\n RichTextEditor.prototype.encode = function (value) {\n var divNode = this.createElement('div');\n divNode.innerText = value.trim();\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n RichTextEditor.prototype.decode = function (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 * For internal use only - To Initialize the component rendering.\n * @private\n */\n RichTextEditor.prototype.render = function () {\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 var execCommandCallBack = new ExecCommandCallBack(this);\n this.notify(events.initialEnd, {});\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 (!this.enabled) ? this.unWireEvents() : this.eventInitializer();\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n */\n RichTextEditor.prototype.eventInitializer = function () {\n this.wireEvents();\n };\n /**\n * For internal use only - keydown the event handler;\n * @private\n */\n RichTextEditor.prototype.keyDown = function (e) {\n this.notify(events.keyDown, { member: 'keydown', args: e });\n if (this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n if (e.action || e.which === 9) {\n this.formatter.process(this, null, e);\n switch (e.action) {\n case 'toolbar-focus':\n if (this.toolbarSettings.enable) {\n var selector = '.e-toolbar-item[aria-disabled=\"false\"][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 this.setPlaceHolder();\n }\n this.autoResize();\n };\n RichTextEditor.prototype.keyUp = function (e) {\n this.notify(events.keyUp, { member: 'keyup', args: e });\n var allowedKeys = e.which === 32 || e.which === 13 || e.which === 8 || e.which === 46;\n if (((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.notify(events.toolbarRefresh, { args: e });\n }\n if (!isNOU(this.placeholder)) {\n this.setPlaceHolder();\n }\n };\n RichTextEditor.prototype.updateValue = function (value) {\n if (isNOU(value)) {\n this.setProperties({ value: this.inputElement.innerHTML });\n }\n else {\n this.setProperties({ value: value });\n }\n };\n RichTextEditor.prototype.mouseUp = function (e) {\n this.notify(events.mouseUp, { member: 'mouseUp', args: e });\n if (this.inputElement && ((this.editorMode === 'HTML' && this.inputElement.textContent.length !== 0) ||\n (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0))) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n RichTextEditor.prototype.onCopy = function () {\n this.contentModule.getDocument().execCommand('copy', false, null);\n };\n RichTextEditor.prototype.onCut = function () {\n this.contentModule.getDocument().execCommand('cut', false, null);\n };\n RichTextEditor.prototype.onPaste = function (e) {\n var _this = this;\n var args = { requestType: 'Paste', editorMode: this.editorMode, event: e };\n var proxy = this;\n var value = null;\n if (e && !isNOU(e.clipboardData)) {\n value = e.clipboardData.getData('text/plain');\n }\n setTimeout(function () { _this.formatter.saveData(); }, 0);\n this.formatter.onSuccess(this, args);\n if (value !== null && value.length === 0) {\n this.notify(events.paste, {\n module: events.imgModule, file: e.clipboardData.items[0].getAsFile(), args: e\n });\n }\n };\n /**\n * @hidden\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 * @method destroy\n * @return {void}\n */\n RichTextEditor.prototype.destroy = function () {\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 this.element.remove();\n if (this.originalElement.innerHTML.trim() !== '') {\n this.valueContainer.value = this.originalElement.innerHTML.trim();\n }\n else {\n this.valueContainer.value = '';\n }\n this.element = this.valueContainer;\n }\n else {\n if (this.originalElement.innerHTML.trim() !== '') {\n this.element.innerHTML = this.originalElement.innerHTML.trim();\n }\n else {\n this.element.innerHTML = '';\n }\n }\n if (this.placeholder && this.placeHolderWrapper) {\n this.placeHolderWrapper.remove();\n }\n if (!isNOU(this.cssClass)) {\n removeClass([this.element], this.cssClass);\n }\n this.removeHtmlAttributes();\n this.removeAttributes();\n _super.prototype.destroy.call(this);\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 * @return {Element}\n */\n RichTextEditor.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n RichTextEditor.prototype.getText = function () {\n return this.contentModule.getText();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n RichTextEditor.prototype.getModuleName = function () {\n return 'richtexteditor';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\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 'value':\n this.value = (this.enableHtmlEncode) ? this.encode(this.decode(newProp[prop])) : newProp[prop];\n this.updatePanelValue();\n this.setPlaceHolder();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'valueTemplate':\n this.setValue();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'width':\n this.setWidth(newProp[prop]);\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 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 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 break;\n case 'undoRedoSteps':\n case 'undoRedoTimer':\n this.formatter.editorManager.observer.notify(CONSTANT.MODEL_CHANGED, { newProp: newProp, oldProp: oldProp });\n break;\n default:\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n }\n }\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.updateValueData = function () {\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(this.decode(this.inputElement.innerHTML)) });\n }\n else {\n this.setProperties({\n value: /<[a-z][\\s\\S]*>/i.test(this.inputElement.innerHTML) ? this.inputElement.innerHTML :\n this.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 srcList[i].remove();\n }\n };\n RichTextEditor.prototype.updatePanelValue = function () {\n var value;\n if (this.editorMode === 'HTML' && this.value) {\n value = this.value.replace(/>\\s+<');\n }\n else {\n value = this.value;\n }\n value = (this.enableHtmlEncode && this.value) ? this.decode(value) : value;\n if (value) {\n if (this.valueContainer) {\n this.valueContainer.value = (this.enableHtmlEncode) ? this.value : value;\n }\n if (this.editorMode === 'HTML' && this.inputElement && this.inputElement.innerHTML.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 (this.editorMode === 'HTML') {\n this.inputElement.innerHTML = '


    ';\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 };\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' });\n if (this.inputElement) {\n this.inputElement.parentElement.insertBefore(this.placeHolderWrapper, this.inputElement);\n }\n attributes(this.placeHolderWrapper, {\n 'style': 'font-size: 16px; padding: 16px; margin-left: 0px; margin-right: 0px;'\n });\n }\n this.placeHolderWrapper.innerHTML = this.placeholder;\n if (this.inputElement.textContent.length !== 0) {\n this.placeHolderWrapper.style.display = 'none';\n }\n else {\n this.placeHolderWrapper.style.display = 'block';\n }\n }\n else {\n this.inputElement.setAttribute('placeholder', this.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 this.element.classList.add(cssClass);\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 }\n else {\n this.element.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 RichTextEditor.prototype.setReadOnly = function (initial) {\n this.updateReadOnly();\n if (!initial) {\n if (this.readonly && this.enabled) {\n this.unbindEvents();\n }\n else if (this.enabled) {\n this.bindEvents();\n }\n }\n };\n /**\n * By default, prints all the pages of the RichTextEditor.\n * @return {void}\n */\n RichTextEditor.prototype.print = function () {\n var printWind;\n var printArgs = {\n element: this.inputElement,\n requestType: 'print',\n cancel: false\n };\n this.trigger(events.actionBegin, printArgs);\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 (printArgs.cancel) {\n return;\n }\n var actionArgs = {\n requestType: 'print'\n };\n this.trigger(events.actionComplete, actionArgs);\n };\n /**\n * Applies all the pending property changes and render the component again.\n * @public\n */\n RichTextEditor.prototype.refresh = function () {\n this.renderModule.refresh();\n };\n /**\n * Shows the RichTextEditor component in full-screen mode.\n */\n RichTextEditor.prototype.showFullScreen = function () {\n if (this.readonly) {\n return;\n }\n this.fullScreenModule.showFullScreen();\n };\n /**\n * Enables the give toolbar items in the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.enableToolbarItem = function (items) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, true);\n };\n /**\n * Disables the given toolbar items in the RichTextEditor component.\n * @public\n */\n RichTextEditor.prototype.disableToolbarItem = function (items) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, false);\n };\n /**\n * Removes the give toolbar items from the RichTextEditor component.\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 * @public\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 };\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.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) {\n this.setProperties({ value: this.encode(this.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 () {\n if (this.valueTemplate) {\n if (typeof this.valueTemplate === 'string') {\n this.setProperties({ value: this.valueTemplate });\n }\n else {\n var compiledString = void 0;\n compiledString = compile(this.valueTemplate);\n var compiledTemplate = compiledString({});\n for (var i = 0; i < compiledTemplate.length; i++) {\n var item = compiledTemplate[i];\n append([item], this.element);\n }\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n }\n else if (this.element.innerHTML.trim() !== '') {\n if (this.element.tagName === 'TEXTAREA') {\n this.setProperties({ value: this.decode(this.element.innerHTML.trim()) });\n }\n else {\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n }\n };\n RichTextEditor.prototype.setContentHeight = function (target, isExpand) {\n var heightValue;\n var topValue = 0;\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 var tbHeight = this.getToolbar() ? this.toolbarModule.getToolbarHeight() : 0;\n var expandPopHeight = this.getToolbar() ? this.toolbarModule.getExpandTBarPopHeight() : 0;\n if (this.toolbarSettings.type === ToolbarType.Expand && isExpand && target !== 'preview') {\n heightValue = (this.height === 'auto') ? 'auto' : rteHeight - (tbHeight + expandPopHeight) + 'px';\n topValue = (!this.toolbarSettings.enableFloating) ? expandPopHeight : 0;\n }\n else {\n if (this.height === 'auto' && !(this.element.classList.contains('e-rte-full-screen'))) {\n heightValue = 'auto';\n }\n else {\n heightValue = rteHeight - tbHeight + 'px';\n }\n }\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\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 if (isExpand) {\n setStyleAttribute(this.getToolbar().parentElement, { height: (tbHeight + expandPopHeight) + 'px' });\n }\n else {\n setStyleAttribute(this.getToolbar().parentElement, { height: tbHeight + 'px' });\n }\n }\n this.autoResize();\n };\n /**\n * Retrieves the HTML from RichTextEditor.\n * @public\n */\n RichTextEditor.prototype.getHtml = function () {\n return this.value;\n };\n /**\n * Shows the source HTML/MD markup.\n * @public\n */\n RichTextEditor.prototype.showSourceCode = function () {\n if (this.readonly) {\n return;\n }\n this.notify(events.sourceCode, {});\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getBaseToolbarObject = function () {\n var tbObj;\n if (this.inlineMode.enable && !Browser.isDevice) {\n tbObj = this.quickToolbarModule && this.quickToolbarModule.getInlineBaseToolbar();\n }\n else {\n tbObj = this.toolbarModule && this.toolbarModule.getBaseToolbar();\n }\n return tbObj;\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getToolbar = function () {\n return this.toolbarModule ? this.toolbarModule.getToolbarElement() : null;\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.getToolbarElement = function () {\n return this.toolbarModule && this.toolbarModule.getToolbarElement();\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 addClass([this.element], [classes.CLS_FOCUS]);\n this.preventDefaultResize(e);\n this.notify(events.mouseDown, { args: e });\n };\n RichTextEditor.prototype.preventImgResize = function (e) {\n if (e.target.nodeName.toLocaleLowerCase() === 'img') {\n e.preventDefault();\n }\n };\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 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 = (this.toolbarSettings.type === ToolbarType.Expand) ? true : false;\n this.setContentHeight('', isExpand);\n };\n RichTextEditor.prototype.scrollHandler = function (e) {\n this.notify(events.scroll, { 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 === '


    ') ? null : this.inputElement.innerHTML;\n }\n else {\n this.cloneValue = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n if (document.activeElement === this.element) {\n this.contentModule.getEditPanel().focus();\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) {\n this.timeInterval = setInterval(this.updateIntervalValue.bind(this), this.saveInterval);\n }\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n }\n };\n RichTextEditor.prototype.setPanelValue = function () {\n if (this.editorMode === 'HTML') {\n this.value = (this.inputElement.innerHTML === '


    ') ? null : this.inputElement.innerHTML;\n }\n else {\n this.value = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n this.valueContainer.value = this.value;\n };\n RichTextEditor.prototype.updateIntervalValue = function () {\n this.setPanelValue();\n this.invokeChangeEvent();\n };\n RichTextEditor.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!this.element.contains(e.target) && document !== e.target && !closest(target, '.' + classes.CLS_RTE) &&\n !closest(target, '.' + classes.CLS_RTE_ELEMENTS)) {\n this.isBlur = true;\n this.isRTE = false;\n }\n this.notify(events.docClick, { args: e });\n };\n RichTextEditor.prototype.blurHandler = function (e) {\n var trg = e.relatedTarget;\n if (trg) {\n if (closest(trg, '.' + classes.CLS_RTE)) {\n this.isBlur = false;\n }\n else if (closest(trg, '.' + classes.CLS_RTE_ELEMENTS)) {\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 this.setPanelValue();\n this.notify(events.toolbarRefresh, { args: e, documentNode: document });\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 }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n }\n else {\n this.isRTE = true;\n }\n };\n RichTextEditor.prototype.invokeChangeEvent = function () {\n var eventArgs = {\n value: this.value\n };\n if (this.value !== this.cloneValue) {\n this.trigger('change', eventArgs);\n this.cloneValue = this.value;\n }\n };\n /**\n * @hidden\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 };\n /**\n * @hidden\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 };\n RichTextEditor.prototype.resetHandler = function () {\n this.setProperties({ value: null });\n this.invokeChangeEvent();\n };\n /**\n * @hidden\n */\n RichTextEditor.prototype.autoResize = function () {\n var _this = this;\n if (this.height === 'auto') {\n if (this.editorMode === 'Markdown') {\n setTimeout(function () { _this.setAutoHeight(_this.inputElement); }, 0);\n }\n else if (this.iframeSettings.enable) {\n var iframeElement_1 = this.element.querySelector('#' + this.getID() + '_rte-view');\n setTimeout(function () { _this.setAutoHeight(iframeElement_1); }, 0);\n }\n }\n else {\n this.inputElement.style.overflow = null;\n }\n };\n RichTextEditor.prototype.setAutoHeight = function (element) {\n element.style.height = '';\n element.style.height = this.inputElement.scrollHeight + 'px';\n element.style.overflow = 'hidden';\n };\n RichTextEditor.prototype.wireEvents = function () {\n this.element.addEventListener('focusin', this.focusHandler.bind(this), true);\n this.element.addEventListener('focusout', this.blurHandler.bind(this), true);\n if (this.readonly && this.enabled) {\n return;\n }\n this.bindEvents();\n };\n RichTextEditor.prototype.bindEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.inputElement, {\n keyAction: this.keyDown.bind(this), keyConfigs: this.formatter.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.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown, this);\n window.addEventListener('resize', this.resizeHandler.bind(this), 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, Browser.touchStartEvent, this.onIframeMouseDown, this);\n }\n this.wireScrollElementsEvents();\n };\n RichTextEditor.prototype.onIframeMouseDown = function (e) {\n this.isBlur = false;\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 }\n if (e.callBack && (e.event.action === 'copy' || e.event.action === 'cut')) {\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.focusHandler.bind(this), false);\n this.element.removeEventListener('focusout', this.blurHandler.bind(this), false);\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 if (this.formatter) {\n this.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown);\n }\n window.removeEventListener('resize', this.resizeHandler.bind(this), false);\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, 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({}, IFrameSettings)\n ], RichTextEditor.prototype, \"iframeSettings\", void 0);\n __decorate([\n Complex({}, ImageSettings)\n ], RichTextEditor.prototype, \"insertImageSettings\", 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 Property('100%')\n ], RichTextEditor.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableRtl\", 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, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableHtmlEncode\", 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(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(-1)\n ], RichTextEditor.prototype, \"maxLength\", void 0);\n __decorate([\n Complex({}, Format)\n ], RichTextEditor.prototype, \"format\", 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, \"created\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"destroyed\", 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 Property(null)\n ], RichTextEditor.prototype, \"formatter\", void 0);\n RichTextEditor = __decorate([\n NotifyPropertyChanges\n ], RichTextEditor);\n return RichTextEditor;\n}(Component));\nexport { RichTextEditor };\n"],"names":["createInstance","classFunction","params","arrayParam","unshift","undefined","Function","prototype","bind","apply","setImmediate","handler","unbind","num","Uint16Array","window","msCrypto","crypto","getRandomValues","secret","ret","i","combineArray","messageHandler","event","source","data","length","addEventListener","postMessage","removeEventListener","getValue","nameSpace","obj","value","splits","replace","split","isUndefined","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","isObject","constructor","getEnumValue","enumObject","enumValue","merge","destination","temrObj","tempProp","_i","keys_1","Object","indexOf","Array","isArray","extend","copied","first","second","deep","result","arguments","_loop_1","arguments_1","obj1","forEach","clone","src","copy","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","args","clearTimeout","setTimeout","compareElementParent","child","parent","node","document","parentNode","throwError","message","Error","e","stack","print","element","printWindow","div","createElement","links","slice","call","getElementsByTagName","querySelectorAll","reference","open","appendChild","cloneNode","len","outerHTML","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","formatUnit","getInstance","component","elem","querySelector","instances","_a","inst","uniqueID","tagName","properties","SVG_REG","test","createElementNS","className","id","styles","setAttribute","attrs","attributes","addClass","elements","classes","classList","getClassList","ele","_b","classList_1","contains","add","removeClass","classList_2","remove","push","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","docFrag","createDocumentFragment","insertBefore","firstElementChild","append","detach","removeChild","EventHandler","clearEvents","select","selector","context","selectAll","closest","el","nodeType","matches","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","getObject","instance","curKey","defaultValue","type","hasOwnProperty","getObjectArray","isSetter","isFactory","curType","setProperties","propertyGetter","Property","target","propertyDescriptor","set","newValue","oldVal","saveChanges","propertySetter","get","enumerable","configurable","defineProperty","addPropertyCollection","Complex","complexSetter","complexGetter","Collection","oldValueCollection","newValCollection","complexArraySetter","defCollection","complexArrayGetter","Event","eventDescriptor","oldValue","finalContext","getParentContext","prefix","NotifyPropertyChanges","classConstructor","propertyType","propList","props","complexProps","colProps","events","propNames","complexPropNames","colPropNames","eventNames","propertyName","getBuilderProperties","builderObject","propCollections","isPropertyArray","rex","prop","childType","tempValue","_c","curText","rippleEffect","rippleOptions","done","rippleModel","ignore","rippleFlag","isCenterRipple","duration","getRippleModel","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","Browser","isPointer","removeAttribute","offset","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","documentElement","Math","max","abs","left","right","top","bottom","radius","sqrt","diameter","x","y","rippleElement","toString","getComputedStyle","getPropertyValue","transform","removeRipple","eventArgs","rippleElements","opacity","getElementsByClassName","setCulture","cultureName","defaultCulture","onIntlChange","notify","locale","getNumericObject","numObject","IntlBase","getDependables","cldrData","mapper","dateObject","numSystem","symbPattern","pattern","getSymbolPattern","getFormatData","dateSeparator","getDateSeparator","getDefaultDateObject","mode","compile","template","helper","fnCode","str","varCOunt","localKeys","LINES","DBL_QUOTED_STR","exp","match","cnt","matchStr","CALL_FUNCTION","rlStr","ELSEIF_STMT","WORD","trim","addNameSpace","QUOTES","IF_STMT","strs","FOR_STMT","rlStr_1","mtc","fnStr","fNameSpace","ELSE_STMT","IF_OR_FOR","evalExp","addNS","ignoreList","NOT_NUMBER","templateString","compiler","engineObj","propName","HAS_SVG","childNodes","HAS_ROW","wrapperInitialize","tag","WRAPPER","role","input","ejInstance","index","nodeName","nodeValue","class","aria-checked","getTextNode","childnode","destroy","ejInst","wrapper","checked","preRender","proxy","control","moduleName","getAttribute","createCheckBox","enableRipple","options","cssClass","enableRtl","rippleSpan","frameSpan","label","labelSpan","rippleMouseHandler","event_1","createEvent","initEvent","dispatchEvent","calculateRelativeBasedPosition","anchor","fixedElement","anchorPos","tempAnchor","offsetParent","position","offsetLeft","offsetTop","parentElement","calculatePosition","currentElement","positionX","positionY","targetValues","popupRect","fixedParent","parentDocument","ownerDocument","posX","posY","pos","elementRect","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","toLowerCase","getBodyScrollTop","getBodyScrollLeft","height","width","fit","viewPortElement","axis","X","Y","elemData","targetContainer","containerWidth","getTargetContainerWidth","getViewPortWidth","containerLeft","ContainerLeft","containerRight","ContainerRight","overLeft","overRight","containerHeight","getTargetContainerHeight","getViewPortHeight","containerTop","ContainerTop","containerBottom","ContainerBottom","overTop","overBottom","isCollide","elemOffset","yAxis","topCollideCheck","xAxis","leftCollideCheck","topSide","rightSide","leftSide","bottomSide","flip","tEdge","TL","TR","BL","BR","eEdge","edge","updateElementData","setPosition","leftFlip","topFlip","setPopup","eStatus","deepCheck","collideSide","getTargetContainerLeft","getTargetContainerTop","innerHeight","innerWidth","getScrollableParent","eleStyle","scrollParents","overflowRegex","parentStyle","overflow","overflowY","overflowX","getZindexPartial","parentZindex","defaultView","childrenZindex","children","isEqualNode","siblingsZindex","finalValue","concat","currentZindexValue","createResize","resizeStart","resizeBegin","resize","resizing","resizeEnd","resizeComplete","targetElement","getDOMElement","containerElement","boundary","directions","direction","resizeHandler","RESIZE_HANDLER","minHeight","minWidth","maxWidth","maxHeight","resizers","selectedHandler","onMouseDown","eventName","info","name","onTouchStart","wireEvents","domElement","getEventType","preventDefault","calculateValues","originalMouseX","originalMouseY","FOCUSED_HANDLER","onMouseMove","onMouseUp","RESTRICT_LEFT","setLeft","touchMoveEvent","touchEndEvent","originalWidth","parseFloat","originalHeight","originalX","originalY","touches","resizeTowards","elementClass","resizeSouth","resizeNorth","resizeWest","resizeEast","getClientRectValues","containerRectValues","documentHeight","clientHeight","calculateValue","currentpageY","targetRectValues","calculatedHeight","borderValue","offsetHeight","topWithoutborder","RESIZE_WITHIN_VIEWPORT","parseInt","targetTop","calculatedTop","boundaryRectValues","currentHeight","top_1","rectValues","documentWidth","clientWidth","resizeWestWidth","calculatedWidth","left_1","previousWidth","setWidth","removeResize","handlers","createSpinner","internalCreateElement","makeElement","container","spinnerContainer","CLS_SPINWRAP","spinnerInnerContainer","CLS_SPININWRAP","wrap","inner_wrap","create_spinner_container","spinTemplate","theme","getTheme","defaultSize","DEFT_MAT_WIDTH","DEFT_FAB_WIDTH","DEFT_BOOT_WIDTH","calculateRadius","setTheme","labelEle","CLS_SPINLABEL","textContent","createLabel","CLS_SPINTEMPLATE","replaceContent","spinCSSClass","CLS_HIDESPIN","createMaterialSpinner","random_generator","globalTimeOut","timeOut","innerContainer","svgMaterial","CLS_MATERIALSPIN","matCirclePath","CLS_SPINCIRCLE","firstChild","create_material_element","svg","path","strokeSize","getStrokeSize","transformOrigin","drawArc","PI","getDashOffset","mat_calculate_attributes","create_fabric_element","CLS_FABRICSPIN","fb_calculate_attributes","createFabricSpinner","svgBoot","CLS_BOOTSPIN","item","bootCircle","defaultRadius","create_bootstrap_element","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","CLS_HIGHCONTRASTSPIN","createHighContrastSpinner","generateSeries","begin","stop","formSeries","series","end","count","increment","toFixed","random","combine","charAt","floor","innerCon","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","CLS_SPINARC","animateMaterial","spinnerInfo","easing","mat_animation","currentTime","min","Date","getTime","startTime","updatePath","change","globalInfo","previousId","getSize","rotate","createCircle","easeAnimation","current","timestamp","timecount","innerConainer","trgClass","centerX","centerY","circle","join","defineCircle","endArc","defineArc","angle","radians","cos","sin","showSpinner","showHideSpinner","isHide","spinnerWrap","inner","CLS_SHOWSPIN","svgEle","isAnimate","globalObject","globalVariables","timeOutVar","startMatAnimate","boot_animate","rotation","animateBootstrap","hideSpinner","getFieldValues","dataItem","fields","fieldData","isHeader","dataField","createMask","autocomplete","autocorrect","autocapitalize","spellcheck","aria-live","aria-valuenow","mask","splitMask","splitInnerMask","j","pushIntoRegExpCollec","chkSpace","customRegExpCollec","hiddenMask","promptChar","escapeMaskValue","promptMask","customCharacters","RegExp","escapeNumber","substring","aria-invalid","applyMask","setElementValue","setMaskValue","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","enabled","bindClearEvent","unwireEvents","showClearButton","inputObj","clearButton","resetHandler","redoCollec","startIndex","selectionStart","endIndex","selectionEnd","triggerMaskChangeEvent","setSelectionRange","unstrippedValue","strippedValue","maskValues","k","checkMask","maskValue","regExpCollec","focusEventArgs","trigger","isFocus","isDevice","version","isIos","placeholder","floatLabelType","labelElement","TOPLABEL","sIndex_1","eIndex_1","oldValue_1","_callPasteHandler","maskKeyPress","validateValue","i_1","preValue_1","sIndex_2","eIndex","undoCollec","value_1","isIE","ctrlKey","keyCode","removeMaskInputValues","addedValues","preEleVal","val","prevValue","startValue","collec","splice","mobileRemoveFunction","sIndex","autoFillMaskInputValues","isRemove","oldEventVal","isDeleted","initStartIndex","initEndIndex","curMask","multipleDel","preValue","prompt_1","elementValue","code","String","fromCharCode","isIosInvalid","changeEventArgs","isInitial","maskedValue","isInteraction","removeMaskError","val_1","startIndex_1","isSpace","isAndroid","preventUnsupportedValues","temp_1","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","curVal","caseCount","toUpperCase","addMaskErrorClass","sIdx","idx","ctrl","chkSupport","timer","INPUTGROUP","FLOATINPUT","ERROR","newVal","BOTTOMLABEL","Input","getMaskInput","UTILMASK","inputEle","regularExpressions","getUtilMaskEle","getModel","model","Search","inputVal","items","searchType","ignoreCase","listItems","itemData","strLength","queryStr","toLocaleLowerCase","itemsData","text","substr","getCloneProperties","doesImplementInterface","checkFor","valueAccessor","field","column","DataUtil","getUpdateUsingRaf","updateFunction","callBack","requestAnimationFrame","iterateArrayOrObject","collection","predicate","pred","iterateExtend","array","baseExtend","getActualProperties","templateCompiler","baseTemplateComplier","setStyleAndAttributes","customAttributes","copyAttr","literals","exclude","moved","prepareColumns","columns","autoWidth","c","Column","headerText","foreignKeyValue","foreignKeyField","visible","setCssInGridPopUp","popUp","isBottomTail","popUpSpan","targetPosition","display","clientY","changedTouches","popup","getPosition","getPopupLeftPosition","ChildProperty","parentsUntil","isID","getElementIndex","inArray","getActualPropFromColl","coll","removeElement","clientX","getUid","appendChildren","parents","calculateAggregate","temp","customAggregate","aggregates","getScrollBarWidth","scrollWidth","divNode","cssText","getRowHeight","rowHeight","table","rect","ceil","isComplexField","getComplexFieldID","setComplexFieldID","isEditable","col","row","isOldRow","isIdentity","isPrimaryKey","allowEditing","isActionPrevent","dlg","editSettings","showConfirmDialog","action","setFormatter","serviceLocator","fmtr","getService","getFormatFunction","skeleton","format","setParser","getParserFunction","addRemoveActiveClasses","cells","distinctStringValues","res","getFilterMenuPostion","dialogObj","grid","elementVisible","newpos","dlgWidth","leftPos","getZIndexCalcualtion","zIndex","toogleCheckbox","span","createCboxWithWrap","removeAddCboxClasses","refreshForeignData","getForeignData","foreignKeyData","cell","isForeignKey","lValue","fField","query","Query","fdata","dataSource","DataManager","json","columnData","getDay","where","getDatePredicate","operator","matchCase","executeLocal","getColumnByForeignKeyValue","some","filterObject","datePredicate","prevDate","nextDate","prevObj","nextObj","setSeconds","getSeconds","setHours","predicateSt","Predicate","predicateEnd","and","or","ejpredicate","renderMovable","frzCols","mEle","childElementCount","object","getCustomDateFormat","colType","intl","Internationalization","getDatePattern","getExpandedState","gObj","hierarchyPrintMode","rows_1","getRowsObject","isExpand","isDetailRow","allowPaging","printMode","pageSettings","currentPage","pageSize","gridModel","getPrintGridModel","childGrid","printGridModel","Print","printGridProp","expandedRows","extendObjWithFn","getPrototypeOf","getPrototypesOfObj","cln","cpy","measureColumnDepth","depth","checkDepth","indices","setStateAndProperties","attribute","highlightSearch","ignoreRegex","replaceQuery","findTextNode","createFloatLabel","overAllWrapper","searchWrapper","inputElement","floatLinelement","floatLabelElement","FLOATLINE","FLOATTEXT","aria-labelledby","LABELTOP","LABELBOTTOM","updateFloatLabelState","setPlaceHolder","summaryIterator","callback","dateanddatetimerender","rtl","isInline","rowData","validateNullOrUndefined","defaultToString","getIndex","hasClass","getDropDownValue","returnType","subCommand","isNOU","iconCss","getFormattedFontSize","getTooltipText","i10n","itemLocale","toolsLocale","getConstant","setToolbarStatus","isPopToolbar","dropDown","dropDownModule","tbItems","itemStr","tbElements","classes.CLS_ACTIVE","toolbarSettings","formatDropDown","types","content","dataBind","alignDropDown","model.alignmentItems","fontNameDropDown","name_1","fontFamily","title","fontSizeDropDown","fontSize","getCollection","getTBarItemsIndex","toolbarItems","itemsIndex","updateUndoRedoStatus","baseToolbar","undoRedoStatus","trgItems","undoRedoItems","toolbarObj","classes.CLS_TB_ITEM","keys_2","enableItems","evt","parseHtml","tempNode","DocumentFragment","createRange","createContextualFragment","toObjectLowerCase","convertedValue","setAttributes","htmlAttributes","rte","isFrame","initial","contentModule","getDocument","htmlAttr","setEnable","readonly","setReadOnly","valueContainer","headerRegex","defaultType","Ajax","async","contentType","emitError","url","send","cancel","Promise","resolve","reject","httpRequest","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onError","onerror","onUploadProgress","upload","setRequestHeader","beforeSend","successHandler","onSuccess","failureHandler","reason","onFailure","responseText","dataType","JSON","parse","error","readyState","status","statusText","getResponseHeader","responseHeaders","header","headers","exec","getAllResponseHeaders","addOrGetEventData","__eventList","listener","bindTo","intDebounce","debounceListener","eventData","copyData","shift","eventProp","eventData_1","Observer","ranArray","boundedEvents","on","property","cntxt","notExist","isHandlerPresent","off","curObject","indexLocation","argument","curObject_1","cur","boundedEvents_1","isColEName","Base","isProtectedOnChange","changedProperties","oldProperties","refreshing","finalUpdate","childChangedProperties","modelObserver","addInstance","isDestroyed","muteOnChange","prevDetection","callChildDataBind","obj_1","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","moduleClass","getModuleName","ej2_instances","filter","REGX_MOBILE","REGX_IE","REGX_IE11","REGX_IOS","REGX_IOS7","REGX_ANDROID","REGX_WINDOWS","REGX_VERSION","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","extractBrowserDetail","browserInfo","culture","clientInfo","userAgent","language","navigator","getEvent","isTouch","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","regX","uA","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchCancelEvent","__extends","extendStatics","d","b","setPrototypeOf","__proto__","p","__","create","__decorate","decorators","desc","r","getOwnPropertyDescriptor","Reflect","decorate","Animation","_super","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","animate","elements_1","element_1","delayAnimation","animation","animationId","frameId","cancelAnimationFrame","applyAnimation","timeStamp","step","timerId","prevTimeStamp","startAnimation","avg","timingFunction","progress","performance","now","fail","newProp","oldProp","CanvasRenderer","rootID","rootId","getOptionValue","createCanvas","canvasObj","ctx","getContext","setCanvasSize","getElementById","size","lineWidth","dashArray","dashArrayString","setLineDash","strokeStyle","drawLine","save","beginPath","stroke","moveTo","x1","y1","lineTo","x2","y2","restore","dataUrl","toDataURL","drawRectangle","canvasCtx","cornerRadius","rx","globalAlpha","drawCornerRadius","fill","fillStyle","fillRect","arcTo","closePath","drawPath","canvasTranslate","dataSplit","borderWidth","flag","translate","innerR","cx","c1","c2","c3","c4","bezierCurveTo","arc","counterClockWise","cy","drawText","fontWeight","font","textAlign","baseline","textBaseline","labelRotation","fillText","drawCircle","drawPolyline","points","point","drawEllipse","circumference","ry","scaleX","scaleY","scale","drawImage","imageObj","Image","href","createLinearGradient","colors","myGradient","colorStop","setGradientValues","createRadialGradient","colorName","color","newColorStop","stopColor","addColorStop","setElementAttributes","values","map","updateCanvasAttributes","img_1","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","modules","usedModules","arg","removableModule_1","mod","parentObj","controlParent","isParentArray","updateChange","updateTimeOut","changeTime_1","curIndex","defaultNumberingSystem","latn","_digits","_type","defaultNumberSymbols","decimal","group","percentSign","plusSign","minusSign","infinity","nan","exponential","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","propKeys_1","getSymbolRegex","regexStr","getSymbolMatch","matchKeys_1","constructRegex","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","errorText","ms","ls","mf","lf","NumberFormat","numberFormatter","option","cldr","symbolPattern","fOptions","cOptions","dOptions","dependable","base","numberMapper","parser","parserObject","currencySymbol","getCurrencySymbol","numericObject","currency","defaultCurrencyCode","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","useGrouping","defaultCurrency","nData","pData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isNaN","isFinite","intNumberFormatter","negativeDataRegex","pattern_1","lastIndexOf","primary","s","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","range","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","toExponential","groupNumbers","latnParseRegex","nlead","nend","toPrecision","level1","sep","decimalSymbol","level2","lead","getResultantPattern","isIslamic","resPattern","iType","basicPatterns","dPattern","tPattern","calendartype","defaultObject","patternMatcher","needFraction","cSymbol","fractionOnly","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","sym","currencyCode","isCurrencyPercent","parts","actual","symbol","part","loc","typeMapper","patternRegex","patternMatch","G","M","L","H","'"," a","yy","EEEE","E","defaultFirstDay","islamicRegex","firstDayMapper","sun","mon","tue","wed","thu","fri","sat","currencyFormatRegex","curWithoutNumberRegex","$","%","-","0","1","dateParseRegex","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","days","short","dayPeriods","am","pm","eras","eraNames","0-alt-variant","1-alt-variant","eraAbbr","eraNarrow","dateFormats","full","long","medium","timeFormats","dateTimeFormats","availableFormats","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","h","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","islamic","yyyy","yyyyM","yyyyMd","yyyyMEd","yyyyMMM","yyyyMMMd","yyyyMMMEd","yyyyMMMM","yyyyQQQ","yyyyQQQQ","timeZoneNames","hourFormat","gmtFormat","gmtZeroFormat","numbers","currencies","USD","displayName","symbol-alt-narrow","EUR","GBP","minimumGroupingDigits","symbols-numberSystem-latn","list","superscriptingExponent","perMille","decimalFormats-numberSystem-latn","standard","percentFormats-numberSystem-latn","currencyFormats-numberSystem-latn","accounting","scientificFormats-numberSystem-latn","monthIndex","month","C","P","N","A","formatSplit","integerPart","fractionPart","customNumberFormat","dateObj","getActualDateTimeFormat","isExcelFormat","calendar","actualPattern","tLength","timeZonePattern","options_1","timeZone","numMapper","timezone","getTimezoneOffset","DateFormat","getTimeZoneValue","getActualNumberFormat","minFrac","parseOptions","custom","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","a","diff","fractionDigitsPattern","integer","minimumIntegerPattern","no","groupingPattern","cPattern","getWeekData","firstDay","iCulture","HijriParser","dateCorrection","getHijriDate","gDate","day","getDate","getMonth","year","getFullYear","tMonth","tYear","yPrefix","julilanOffset","julianNumber","tempMonth","modifiedJulianDate","z","cyc","iy","im","tempDay","iln","ii","hYear","hmonth","hDate","date","toGregorian","julianDate","gDay","gMonth","gYear","lastPageID","abbreviateRegexGlobal","weekdayKey","timeSetter","m","datePartMatcher","Z","dateFormat","formatOptions","dateSeperator","patternMatch_1","char","weekday","designator","eText","era","intDateFormatter","dObject","getCurrentDateValue","matches_1","length_1","curval","processNumber","curstr","desig","getHours","dec","retu","checkTwodigitNumber","tVal","curPattern","ishour","latnRegex","minute","hour","DateParser","dateParser","hourOnly","numOptions","regexString","evalposition","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","canUpdate","charKey","optional","weekObject","hour12","tzone","hpattern","parseTimeZoneRegx","parserRegex","parsedDateParts","internalDateParse","dobj","tDate","ystrig","is2DigitYear","getDateObject","setMilliseconds","setFullYear","tKeys_1","tValue","pDate","setDate","lDate","lastDay","tzValue","setMinutes","getMinutes","retOptions","props_1","matchString","internalNumberParser","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","symbolRegex","symbolpattern","getParsedNumber","isNegative","Infinity","NaN","exponent","rightToLeft","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getNumberPattern","getFirstDayOfWeek","componentCount","lastHistoryLen","Component","randomId","needsID","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","injectModules","render","mergePersistData","event_2","getInjectedModules","injectedModules","Inject","localStorage","getItem","setItem","getPersistData","clearTemplate","templateName","isHistoryChanged","pageID","location","history","hash","charCodeAt","addOnPersist","persistObj","objValue","stringify","ignoreOnPersist","iterateJsonProperties","newObj","newList","this_1","DialogUtility","defaultPosition","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","padding","diffX","prevLeft","prevTop","dragProcessStarted","tapHoldTimer","externalInitialize","diffY","droppables","toggleEvents","scope","isUnWire","handle","enableTapHold","mobileInitialize","initialize","currentTarget","removeTapholdTimer","tapHoldThreshold","curTarget","abort","intCoord","getCoordinates","initialPosition","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isChangeTouch","intCordinate","styleProp","margin","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","calculateParentPosition","getMousePosition","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","dragStart","getProperTargetElement","dragArea","setDragArea","enableTailMode","posValue","getProcessedPositionValue","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","pageYOffset","pageXOffset","queryPositionInfo","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","dragData","intOver","hoverObject","intOut","tLeft","tTop","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","dragValue","enableAutoScroll","scrollIntoView","docBody","docEle","dragStop","dragStopCalled","intDrop","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","elementFromPoint","scrollX","scrollY","cursorAt","sender","reset","draggable","draggedElement","dropIns","getDropInstance","parent_1","drop","eleInst","eleInst_1","Droppable","mouseOver","area","accept","isDrag","isDropArea","canDrop","droppedElement","coord","backspace","tab","enter","alt","pause","capslock","space","escape","pageup","pagedown","home","leftarrow","uparrow","rightarrow","downarrow","insert","delete","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","semicolon","plus","comma","minus","dot","forwardslash","graveaccent","openbracket","backslash","closebracket","singlequote","KeyboardEvents","keyPressHandler","isAltKey","altKey","isShiftKey","shiftKey","curkeyCode","which","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","keyAction","config","configCache","keyData","Number","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","SvgRenderer","svgLink","createSvg","svgObj","setSVGSize","line","rectangle","polyline","ellipse","drawPolygon","polygon","img","setAttributeNS","preserveAspectRatio","createText","createTSpan","tSpan","createTitle","createDefs","createClipPath","clipPath","createForeignObject","foreignObject","createGroup","createPattern","newOptions","fx","fy","drawGradient","gradientType","defs","gradient","stop_1","drawClipPath","drawCircularClipPath","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","timeOutTapHold","tapHoldEvent","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","startX","startY","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","endPoint","calcPoints","swipeArgs","swipeDirection","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","defaultArgs","canTrigger","scrollBool","isScrollable","checkSwipe","modeClear","lastTapTime","eTapArgs","pnt","newX","newY","newT","xDist","yDist","Engine","isRipple","comp","data_1","complexFactorySetter","complexFactoryGetter","complexArrayFactorySetter","complexArrayFactoryGetter","builderFunction","classObj","encodeURIComponent","siblings","childNodes_1","curNode","Node","ELEMENT_NODE","attrVal","cssClassName","Button","isPrimary","setIconCss","disabled","controlStatus","removeRippleEffect","iconPosition","isToggle","btnClickHandler","unWireEvents","DISABLED","RIPPLE","RIPPLECHECK","RIPPLEINDETERMINATE","CheckBox","isKeyPressed","changeState","state","ariaState","getWrapper","indeterminate","clickHandler","focusOutHandler","focusHandler","setDisabled","initWrapper","for","labelPosition","setText","keyDownHandler","labelMouseHandler","mouseDownHandler","labelWrap","changeHandler","stopPropagation","PositionData","CLASSNAMES","Popup","setEnableRtl","refreshPosition","setContent","actionOnScroll","wireScrollEvents","unwireScrollEvents","orientationOnChange","getRelateToElement","scrollRefresh","parent_2","relateToElement","relateTo","hide","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","parent_3","isElementVisible","checkGetBoundingClientRect","win","windowView","outerWidth","outerHeight","parent_4","reposition","collision","checkFixedParent","checkCollision","parentDisplay","getAnchorPosition","anchorEle","eleRect","anchorRect","targetType","callFlip","param","callFit","viewPortRect","horz","vert","show","animationOptions","relativeElement","zIndexElement","showAnimation","hideAnimation","RadioButton","RadioButton_1","radioGrp","radioWrap","getLabel","nextElementSibling","labelRippleHandler","textLabel","rippleLabel","Switch","bar","onLabel","offLabel","setLabel","switchInner","rippleTouchHandler","eventType","onText","offText","switchFocusHandler","switchMouseUp","toggle","delegateMouseUpHandler","delegateKeyDownHandler","classNames","chipSet","chip","avatar","icon","deleteIcon","multiSelection","singleSelection","active","chipWrapper","iconWrapper","focused","ChipList","chips","innerText","createChip","setRtl","wireEvent","selectedChips","rippleFunctin","chipCreation","tabIndex","selection","chipListArray","fieldsData","chipArray","elementCreation","avatarIconCss","avatarText","leadingIconCss","css","aria-label","aria-selected","chipEnabled","trailingIconCss","chipAvatarElement","chipIconElement","chipTextElement","enableDelete","chipdeleteElement","find","chipData","chipElement","HTMLElement","chipsData","selectionHandler","chipElements_1","chipCollection_1","deleteHandler","getSelectedChips","slectedChips","selectedItems_1","texts","Indexes","selectedItem","unWireEvent","keyHandler","focusInHandler","focusedElement","del","deletedItemArgs","selected","selectedItemArgs","clickedItemArgs","activeElement","removeMultipleAttributes","attr","Chip","ButtonProps","AnimationSettings","ROOT","DLG_HEADER_CONTENT","DLG_FOOTER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","SCROLL_DISABLED","FULLSCREEN","DLG_CLOSE_ICON_BTN","DLG_UTIL_DEFAULT_TITLE","DLG_UTIL_ROOT","DLG_UTIL_ALERT","DLG_UTIL_CONFIRM","DLG_RESTRICT_LEFT_VALUE","DLG_RESTRICT_WIDTH_VALUE","Dialog","initRender","enableResize","setResize","animationSettings","effect","getMinHeight","headerContent","classArray","clonedEle","closeIconClickEventHandler","dlgOverlayClickEventHandler","l10n","checkPositionData","prevOnChange","isNumberValue","computedHeaderHeight","computedFooterHeight","minimumHeight","setMinHeight","onResizeStart","onResizing","onResizeComplete","computedHeight","computedWidth","isModal","targetEle","keyDown","buttonObj","btnObj","focusableElements","isTagName","isContentEdit","hasAttribute","closeOnEscape","primaryButtonEle","buttonIndex_1","buttons","buttonModel","click","setCSSClass","setMaxHeight","initialRender","setzIndex","calculatezIndex","setTargetContent","setHeader","showCloseIcon","renderCloseIcon","footerTemplate","setButton","setFooterTemplate","allowDragging","setAllowDragging","aria-modal","setIsModal","dlgContainer","popupObj","focusContent","dlgOverlay","unBindEvent","closeArgs","blur","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","zIndexValue","setPopupPosition","dragObj","buttonContent","buttonType","btn","ftrTemplateContent","aria-describedby","contentEle","innerContentElement","setTemplate","templateFn","isContent","headerEle","createHeaderContent","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","u","disableElement","getAutoFocusNode","validNode","t","elementMatch","Element","bindEvent","updateIsModal","setPopupZindex","isFullScreen","fullScreen","openAnimation","dialogOpen","closeAnimation","getButtons","createDialog","dialogObject","formOptions","isDraggable","formButtonModel","buttonPropModel","buttonProps","alert","dialogElement","alertDialogObj","alertButtonModel","okButton","setAlertButtonModel","alertOptions","confirm","confirmDialogObj","okButtonModel","cancelButtonModel","cancelButton","setConfirmButtonModel","confirmOptions","ListBase","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_RIGHT","POPUP_OPEN","POPUP_CLOSE","Tooltip","formatPosition","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","tipClass","tooltipEle","renderPopup","elePos","mouseTrail","getTooltipPosition","openPopupHandler","closePopupHandler","offsetPos","calculateTooltipOffset","collisionFlipFit","tooltipEventArgs","clear","tooltipEleWidth","tooltipEleHeight","arrowEle","tipWidth","tipHeight","tipAdjust","showTipPointer","tipHeightAdjust","tipWidthAdjust","updateTipPosition","selEle","adjustArrow","leftValue","topValue","tooltipWidth","tooltipHeight","arrowInnerELe","tipPosExclude","tipPointerPosition","POINTER_ADJUST","renderContent","tooltipContent","templateFunction","isSticky","tipClose","ICON","onStickyClose","addDescribedBy","describedby","data-tooltip-id","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","targetList_1","ctrlId","target_1","restoreElement","showTooltip","wireMouseEvents","showTimer","hideTimer","isHidden","TOOLTIP_WRAP","aria-hidden","PopupAnimation","openDelay","horizontal","vertical","affectedPos","collidedPosition","eleOffset","arrowleft","closeAnimation_1","closeDelay","unwireMouseEvents","onMouseOut","eventPageX","eventPageY","colpos","touchEnd","scrollHandler","opensOn","triggerList_1","getTriggerList","wireFocusEvents","touchModule","tapHold","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","findTarget","maxZindex","makeEle","svgElement","replaceTheme","ensureTemplate","from","subQuery","isChild","distincts","queries","fKey","fromTable","lookups","expands","sortedColumns","groupedColumns","setKey","using","dataManager","execute","always","executeQuery","cloned","subQuerySelector","isCountRequired","tableName","addParams","fn","distinct","expand","tables","fieldName","ignoreAccent","search","searchKey","fieldNames","comparer","fnOperators","sortBy","isFromGroup","sorts","order","endsWith","fnSort","filterQueries","sortByDesc","page","pageIndex","take","nos","skip","hierarchy","selectorFn","foreignKey","requiresCount","aggregate","q","filterQueryLists","singles","filtered","isComplex","processOperator","condition","predicates","combinePredicates","fromJson","fromJSONData","validate","record","isAnd","toJson","preds","consts","GroupGuid","startsWith","fnAscending","fnDescending","localeCompare","extractFields","jsonArray","newData","level","groupDs","jsonData","indx","childLevels","grouped","groupedArray","records","_loop_2","this_2","getVal","tempObj","_loop_3","aggs","buildHierarchy","lookup","pKey","grp","fKeyData","getFieldList","copyObj","sort","ds","middle","ignoreDiacritics","diacritics","callAdaptorFunction","adaptor","fnName","param1","param2","getAddParams","adp","dm","req","reqParams","isPlainObject","isCors","xhr","getGuid","rand","arr","Uint8Array","isNull","getItemFromComparer","castRequired","requiresCompleteRecord","tmp","serverTimezoneOffset","sum","average","truecount","falsecount","operatorSymbols","<",">","<=",">=","==","!=","*=","$=","^=","odBiOperator","lessthan","lessthanorequal","greaterthan","greaterthanorequal","equal","notequal","odUniOperator","endswith","startswith","odv4UniOperator","Ⓐ","A","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ⓑ","B","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ⓒ","C","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ⓓ","D","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","DZ","DŽ","Dz","Dž","Ⓔ","E","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ⓕ","F","Ḟ","Ƒ","Ꝼ","Ⓖ","G","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ⓗ","H","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ⓘ","I","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ⓙ","J","Ĵ","Ɉ","Ⓚ","K","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ⓛ","L","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","LJ","Lj","Ⓜ","M","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ⓝ","N","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","NJ","Nj","Ⓞ","O","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ⓟ","P","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ⓠ","Q","Ꝗ","Ꝙ","Ɋ","Ⓡ","R","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ⓢ","S","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ⓣ","T","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ⓤ","U","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ⓥ","V","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ⓦ","W","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ⓧ","X","Ẋ","Ẍ","Ⓨ","Y","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ⓩ","Z","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ⓐ","a","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ⓑ","b","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ⓒ","c","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ⓓ","d","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","dz","dž","ⓔ","e","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ⓕ","f","ḟ","ƒ","ꝼ","ⓖ","g","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ⓗ","h","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ⓘ","i","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ⓙ","j","ĵ","ǰ","ɉ","ⓚ","k","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ⓛ","l","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","lj","ⓜ","m","ḿ","ṁ","ṃ","ɱ","ɯ","ⓝ","n","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ʼn","ꞑ","ꞥ","nj","ⓞ","o","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ⓟ","p","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ⓠ","q","ɋ","ꝗ","ꝙ","ⓡ","r","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ⓢ","s","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ⓣ","t","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ⓤ","u","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ⓥ","v","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ⓦ","w","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ⓧ","x","ẋ","ẍ","ⓨ","y","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ⓩ","z","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","expected","notnull","isnull","processSymbols","parseJson","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","dupValue","dateParse","toTimeZone","isJson","isGuid","replacer","jsonReplacer","arrayReplacer","keys_3","addSelfOffset","toJSON","toUTC","utc","unix","toLocalTime","datefn","differenceString","localtimefn","norm","Adaptor","requestType","pvt","processResponse","JsonAdaptor","processQuery","countFlg","agg","batchRequest","changes","deletedRecordsLen","deletedRecords","addedRecords","changedRecords","update","onWhere","onAggregates","onSearch","onSortBy","fnCompare","onGroup","aggQuery","onPage","onRange","onTake","onSkip","onSelect","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","request","groups","filters","searches","getFiltersFrom","getRequestQuery","pvtData","convertToQueryString","request1","selects","requests","getAggregateResult","original","batchUrl","crudUrl","removeUrl","changed","added","deleted","insertUrl","keyColumn","updateUrl","predicats","aggregateData","groupQuery","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","contentId","batchContent","changeSetContent","batchChangeSetContentType","updateType","onPredicate","requiresCast","guid","returnValue","getField","onComplexPredicate","onEachWhere","onEachSearch","onEachSort","reverse","onCount","settings","overrideMimeType","dataCopy","results","emptyAndBatch","processBatchResponse","versionCheck","requiresFormat","keys_4","localTimeReplacer","convertObj","localTime","compareAndRemove","initialGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","generateBodyContent","method","stat","org","o","cIdx","jsonObj","exVal","changeGuid","valueOf","ODataV4Adaptor","getModulename","isDate","onExpand","expanded","exArr","ex","onDistinct","distinctFields","WebApiAdaptor","Count","Items","WebMethodAdaptor","RemoteSaveAdaptor","updateKey","CacheAdaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","forDel","requestTime","removeItem","generateKey","currentFilter","newQuery","cachedItems","crossDomain","offline","timeTillExpiration","cachingPageSize","enableCaching","jsonp","defaultQuery","isDataAvailable","then","setDefaultQuery","deffered","Deferred","nextTick","getDeferedArgs","makeRequest","promise","extendRequest","fnSuccess","fnFail","cache","processData","isSelector","process","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","subUrl","childReq","subData","virtualRecords","ajax","catch","all","pResult","cResult","deff","doAjaxRequest","defer","li","ul","check","hasChild","collapsible","image","createListFromArray","isSingleLevel","generateUL","createListItemFromArray","subChild","curOpt","defaultListBaseOptions","getModuleClass","generateId","itemCreating","generateSingleLevelLI","generateLI","itemCreated","createListItemFromJson","defaultMappedFields","ariaAttributes","defaultAriaAttributes","typeofData","curItem","innerEle","showCheckBox","showIcon","itemClass","tooltip","imageUrl","imageAttributes","subDS","hasChildren","processSubChild","subLi","createListFromJson","expandCollapse","expandElement","expandIconPosition","expandIconClass","listClass","elementArray","addSorting","sortOrder","getDataSource","createJsonFromElement","curEle","jsonAr","childs","hasChildNodes","attributes_1","getAllAttributes","urlAttributes","typeof","elementAttributes","innerElements","grpLI","elementID","groupItemRole","itemRole","anchorTag","createTextNode","uID","groupTemplate","compiledString","innerDiv","wrapperRole","itemText","liElement","ulElement","listRole","isChecked","groupBy","headerTemplate","createList","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","groupDataSource","curFields","cusQuery","itemObj","grpItem","renderContentTemplate","liCollection","renderGroupTemplate","headerItems","category","headerItems_1","headerData","generateIcon","effectsConfig","None","SlideLeft","SlideDown","Zoom","Fade","effectsRTLConfig","root","hover","parentItem","listItem","listIcon","listItemText","groupListItem","view","headerTemplateText","disable","backIcon","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","FieldSettings","ListView","setHTMLAttribute","setSize","listBaseOption","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","setCheckbox","curViewDS","getSubDS","resetCurrentList","isWindow","enableElement","enable","isEnabled","showBack","showHeader","innerHeaderEle","textEle","hedBackButton","headerTemplateEle","switchView","fromView","toView","fPos_1","overflow_1","anim","aniObj","curUL","renderCheckbox","initialization","animateOptions","currentLiElements","isNestedList","selectedData","selectedId","isValidLI","checkboxElement","frameElement_1","checkInternally","checkBoxPosition","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","args_1","getItemData","selectedItems","refreshItemHeight","back","removeFocus","selectEventData","removeHover","removeSelect","setSelectLI","setCheckboxLI","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","onArrowKeyDown","prev","arrowKeyHandler","elementTop","elementHeight","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","scrollTo","uiFirstIndex","onUIScrolled","listItemHeight","topHeight","headerBounds","enterKeyHandler","spaceKeyHandler","keyActionHandler","tabFocus","swipeActionHandler","focusout","swipe","selectedList","focusedLI_1","hoverLI","selectedLI_1","renderSubList","isInteracted","selectedLI","lastLi","levelKeys","localData","levelKeys_1","curDSJSON","findItemFromDS","curDS","getElementUID","resultJSON","getQuery","setViewDataSource","isInAnimation","setLocalData","renderList","renderIntoDom","isNgTemplate","createUIItem","uiVirtualization","tabindex","rippleFn","classAr","pID","pop","toUL","fromUL","selectItem","selectMultipleItems","getParentId","parentId","getSelectedItems","liTextCollection","liDataCollection","dataParent","tempData","findItem","enableItem","setItemState","disableItem","isEnable","showItem","showHideItem","hideItem","addItem","addListItem","removeItemFromList","groupLi","previousElementSibling","dsIndex","removeMultipleItems","Virtualization","listViewInstance","templateRef","firstDs","expectedDomItemCount","ValidateItemCount","domItemCount","uiLastIndex","wireScrollEvent","otherDs","topElement","bottomElement","totalHeight","topElementHeight","bottomElementHeight","listDiff","uiIndicesInitialization","onVirtualScroll","onVirtualUiScroll","dataSourceLength","itemCount","round","uiIndices","activeIndices","disabledItemIndices","hiddenItemIndices","viewContainerRef","_embeddedViews","nextSibling","getscrollerHeight","startingHeight","scrollPosition","scroll","onLongScroll","onNormalScroll","isScrollingDown","updateUI","updateUiContent","curViewDs","dataset","checkListWrapper","changeElementAttributes","checklistElement","activeIndex","findDSAndIndexFromId","dataCollection_1","textCollection_1","curViewDS_1","curViewDS_2","text_1","resutJSON","isSelected","removeUiItem","addUiItem","changeUiIndices","liItem","lastElementChild","previousSibling","commonTemplate","templateElements","groupTemplateElements","templateData","nodes","flatTemplateNodes","groupTemplateNodes","compileTemplate","textProperty","classProperty","attributeProperty","onChange","listElement","updateContextData","regexMatch","resultantOutput","classNameMatch","subNode","bindedvalue","attributeNames","attributeName","attributeNameFunction","attributeValueFunction","attrNameMatch","attrValueMatch","subNode_1","attrName","attributeValue","isChildHasTextContent","textPropertyMatch","textFunction","onNgChange","$implicit","CLS_RTL","CLS_DISABLE","CLS_NAVARROW","CLS_NAVRIGHTARROW","CLS_NAVLEFTARROW","CLS_HSCROLLNAV","CLS_HSCROLLNAVRIGHT","CLS_HSCROLLNAVLEFT","CLS_OVERLAY","CLS_RIGHTOVERLAY","CLS_LEFTOVERLAY","HScroll","browser","browserCheck","customStep","ieCheck","uniqueId","touchHandler","swipeHandler","scrollEle","createOverlay","createNavIcon","scrollStep","scrollDiv","innerEle_1","ele_1","scrollItems","nav","overlay","navEles","rightOverlayEle","clsRight","rightEle","navItem","leftEle","eventBinding","clsLeft","navEle","navLeftItem","onKeyPress","keyTimer","keyTimeout","eleScrolling","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","timeout","trgt","scrollDis","isContinuous","rootEle","frameScrollRequest","swipeEle","scrollUpdating","scrollVal","arrowDisabling","addDisable","removeDisable","arrowIcon","navLeftEle","navRightEle","leftOverlay","rightOverlay","disEle","CLS_NAVUPARROW","CLS_NAVDOWNARROW","CLS_VSCROLLNAV","CLS_VSCROLLNAVDOWN","CLS_UPOVERLAY","CLS_DOWNOVERLAY","VScroll","scrollEventHandler","createOverlayElement","wheelEventHandler","scrollCnt","buildTag","scrollBar","navs","overlays","downOverlayEle","clsDown","downEle","upEle","clsUp","navElement","navUpItem","ev","deltaY","swipeElement","scrollValue","addDisableCls","removeDisableCls","navUpEle","navDownEle","upOverlay","downOverlay","scrollHeight","FOCUSED","HEADER","SELECTED","SEPARATOR","UPARROW","DOWNARROW","LEFTARROW","RIGHTARROW","ITEM","HIDE","POPUP","MenuItem","MenuAnimationSettings","MenuBase","navIdx","isTapHold","ngElement","renderItems","isMenu","createItems","addScrolling","targetElems","cmenuHandler","delegateMoverHandler","moverHandler","delegateMouseDownHandler","delegateClickHandler","wireKeyboardEvent","keyBoardHandler","closeMenu","actionName","actionNeeded","enableScrolling","removeLIStateByClass","upDownKeyHandler","rightEnterKeyHandler","leftEscKeyHandler","cul","getUlByNavIdx","defaultIdx","fliIdx","fli","getLIByClass","getIdx","cli","navIdxLen","openMenu","sli","canOpen","ulIndex","isMenuVisible","beforeCloseArgs","popupEle","popups","getPopups","unWireKeyboardEvent","destroyScrollObj","toggleAnimation","scrollObj","popupWrapper","lastChild","ICONS","hdata","hli","isNestedOrVerticalMenu","triggerOpen","triggerBeforeOpen","checkScrollOffset","collide","offsetEle","offsetRight","scrollType","wrapperOffset","contentOffset","toggleVisiblity","xCollision","hasField","listBaseOptions","getFields","getLI","showItemOnClick","separator","cliWrapper","isInstLI","setLISelected","showSubMenu","cliIdx","culIdx","classname","getItems","skipHdr","ul_1","ul_2","getChangedItemIndex","insertAfter","ul_3","uls","keyboardModule","isMenuOpen","isUniqueId","nIndex","isCallBack","showItems","showHideItems","hideItems","ishide","removeItems","iitems","insertItems","isAfter","menuitem","removeProperty","ContextMenu","RTL","DISABLE","INPUT","CLEARICON","CLEARICONHIDE","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","_focusFn","getParentNode","_blurFn","createFloatingInput","inputObject","wireFloatingEvents","createInputContainer","customTag","updateLabelState","updateIconState","button","createClearButton","insertAdjacentElement","readOnly","wireClearBtnEvents","validateLabel","tagClass","setCssClass","oldClass","setPlaceholder","aria-placeholder","setReadonly","isReadonly","isRtl","setEnabled","inputContainer","disabledAttrs","aria-disabled","considerWrapper","removeAttributes","addAttributes","setClearButton","isClear","_internalRipple","argsButton","_onMouseDownRipple","_onMouseUpRipple","parentEle","_onMouseRipple","appendSpan","iconClass","createInput","setPropertyValue","removeFloating","unwireFloatingEvents","addFloating","iconEle","floatLine","floatText","setRipple","ErrorOption","SPINICON","INCREMENT","DECREMENT","INTREGEXP","NumericTextBox","isPrevFocused","decimalSeparator","intRegExp","isCalled","cloneElement","angularTagName","incrementTitle","decrementTitle","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","checkAttributes","validateMinMax","validateStep","updatePlaceholder","createWrapper","showSpinButton","spinBtnCreation","changeValue","strictMode","trimValue","decimals","roundNumber","inputWrapper","aria-readonly","hiddenInput","validateHidden","spinDown","spinUp","wireSpinBtnEvents","MAX_VALUE","formattedValue","aria-valuemin","aria-valuemax","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","focusIn","focusOut","keyUpHandler","inputHandler","pasteHandler","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","updateValue","previousValue","beforeUpdate","preventHandler","iOS","platform","currentPos","prevPos","ignoreKeyCode","valArray","prevVal","nextEle","cursorPosChanged","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","stepCount","roundValue","precision","divide","pow","updateCurrency","propVal","numberOfDecimals","decimalPart","modifyText","validateState","result1","result2","metaKey","currentChar","fractionRule","validateDecimalOnType","mouseWheel","delta","rawEvent","wheelDelta","detail","formatValue_1","focusEvent","getElementData","mouseUpClick","floatLabelTypeUpdate","decrement","getText","propValue","#","?","&","MaskUndo","MaskedTextBox","resetMaskedTextBox","setMaskPlaceholder","setVal","dynamicPlaceholder","strippedValue_1","strippedVal","getMaskedValue","TicksData","LimitData","TooltipData","Slider","horDir","verDir","transition","rangeBar","transitionOnMaterialTooltip","scaleTransform","customAriaText","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","internationalization","ticks","formatString","formatInfo","formatValue","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","setZindex","tooltipElement","firstTooltipElement","secondTooltipElement","sliderContainer","showOn","sliderTrack","isMaterial","isBootstrap","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","showButtons","setButtons","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","orientation","firstElementClassName","limitBarFirst","limitBarSecond","firstHandle","secondHandle","setAriaAttributes","customValues","createSecondHandle","secondMaterialHandle","createFirstHandle","firstMaterialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","activeHandle","handlePos1","handlePos2","getHandle","tooltipObj","firstTooltipObj","secondTooltipObj","refreshTooltip","openMaterialTooltip","tooltipAnimation","closeTooltip","handleFocusOut","tooltipValue","preDir","setTooltipContent","addTooltipClass","setAriaAttrValue","formatContent","handleVal1","ariaContent","handle1","handle2","handleVal2","count_1","getTooltipTransformProperties","previousTooltipClass","tooltipPlacement","tooltipPosition","tooltipBeforeOpen","transformProperties","bootstrapCollisionArgs","wireMaterialTooltipEvent","sliderDown","tooltipPositionCalculation","cursor","checkTooltipPosition","firstHandleTooltipPosition","secondHandleTooltipPosition","tooltipClass","tooltipPointer","beforeOpen","beforeCollision","afterClose","tooltipAfterClose","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","openTooltip","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","refreshTooltipOnMove","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","smallStep","showSmallTicks","largeStep","steps","islargeTick","tickWidth","largestep","repeat","createTick","formatTicksValue","decimalPoints","tickesAlignment","ticksWrapper","tickElements","scaleAlignment","tickText","tickElement","tickValuePosition","other","otherChild","ariaValueText","isTickFormatted","valuenow","aria-valuetext","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","focusSliderElement","buttonUp","setRangeBar","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","minValue","maxValue","limitBar","preHandlePos1","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","updateRangeValue","previous","setPreviousVal","preHandlePos2","values_1","tempStartEnd","startHandleFixed","endHandleFixed","xyToPosition","stepValueCalculation","percentStep","remain","addition","f","positionToValue","sliderBarClick","handlepos","handleVal","checkRepeatedValue","xPostion","yPostion","firstPartRemain","secondPartRemain","minDiff","dragRangeBarMove","dragRangeBarUp","sliderBarMove","sliderBarUp","handleValueAdjust","handleValue","assignValue","handleNumber","valueAndPostion","wireButtonEvt","sliderFocusOut","onresize","keyUp","relatedTarget","transformProperties_1","hiddenHandle_1","handle_1","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","EMAIL","URL","DATE_ISO","DIGITS","PHONE","CREDITCARD","TimePickerBase","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","localyMessage","defaultMessages","email","dateIso","creditcard","number","maxLength","minLength","rangeLength","tel","equalTo","rules","localeFunc","afterLocalization","inputElements","createHTML5Rules","FormValidator_1","addRules","removeRules","validateRules","rules_1","clearForm","getInputElement","errorClass","validClass","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","rule","defRule","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","annotationMessage","isCheckable","submitHandler","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","getErrorMessage","errorRule","isValid","removeErrorRules","showMessage","createErrorElement","errorElement","optionalValidationStatus","refer","currentRule","formElement","checkValidator","ruleValue","formats","errorOption","Message","errorContainer","containerId","customPlacement","checkRequired","inputType","uNum","compareTo","Label","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","ICON_FOCUSED","PAUSE_UPLOAD","RESUME_UPLOAD","RESTRICT_SEQUENTIAL","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","multiple","fileList","filesData","uploadedFilesData","isForm","allTypes","pausedData","uploadMetaData","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","renderButtonTemplates","unBindDropEvents","setDropArea","renderPreLoadFiles","updateDirectoryAttributes","sequentialUpload","setLocalizedTexts","preLocaleObj","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","localeText","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","pauseUpload","resume","retry","fileUploadCancel","checkHTMLAttributes","asyncSettings","saveUrl","isPureReactComponent","next","directoryUpload","renderBrowseButton","initializeUpload","wireActionButtonEvents","uploadButtonClick","clearButtonClick","unwireActionButtonEvents","uploadText","clearText","dropAreaWrapper","fileDropArea","aria-activedescendant","files","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","showFileList","dropTextArea","dropArea","dropZoneElement","enableDropText","bindDropEvents","newAttr","createAttribute","setAttributeNode","checkAutoUpload","sequenceUpload","isFileListCreated","browseButtonClick","onSelectFiles","resetForm","setTabFocus","setReverseFocus","metaData","getCurrentMetaData","file","abortUpload","resumeUpload","chunkUpload","removeFiles","fileInfo","targetMetaData","iconElements","iconElement","dropElement","dragHover","onDragLeave","onPasteFile","clipboardData","pasteFile","kind","renderSelectedFiles","getAsFile","selectedElement","spinnerTarget","uploadSequential","removeFilesData","customTemplate","getLiElement","removeUploadedFile","removeDirectly","selectedFiles","formData","FormData","currentRequest","postRawFile","updateFormData","customFormData","removeCompleted","removeFailed","customData","response","getResponse","updateStatus","rootElement","statusElement","getFilesFromFolder","filesEntries","dataTransfer","checkDirectoryUpload","webkitGetAsEntry","isFile","files_2","fileObj","fullPath","isDirectory","traverseFileTree","files_3","createReader","readEntries","entries","targetFiles","sortFileList","directory","paste","isModified","modifiedFilesData","progressInterval","isCanceled","fileDetails","getFileType","webkitRelativePath","validatedFileSize","fileSource","checkExtension","dataFiles","updateSortedFileList","singleUpload","previousListClone","removedList_1","oldList","createParentUL","isBlank","dropFiles","extensions_1","extension","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","createCustomfileList","fileData_1","data-file-name","uploadTemplateFn","templateComplier","fileData_2","textContainer","textElement","getFileNameOnly","fileExtension","rtlContainer","bytesToSize","truncateName","nameElement","tail","setInitialAttributes","filterfileList","filterFiles","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","cancelUploadingFile","updateProgressBarClasses","removecanceledFile","renderFailureState","removeProgressbar","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","withCredentials","callType","progressAnimation","animateProgressBar","extensions","uploadTemplate","exception","chunkSize","chunkIndex","blob","retryCount","sendRequest","totalChunk","chunkUploadComplete","chunkUploadInProgress","currentChunkIndex","eventCancelByArgs","chunkUploadFailed","checkChunkUpload","requestResponse","updateMetaData","eventArgs_1","sendNextRequest","name_2","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","retryRequest","retryAfterDelay","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","loadedSize","bytes","fileNames","sortedFilesData","sortedFileNames_1","name_3","uploadFiles","validateFileType","chunkEnabled","_loop_4","this_3","name_4","getFilesData","validUrl","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","Item","DropDownButton","openPopUp","closePopup","createPopup","getTargetElement","getPopUpElement","hasIcon","createAnchor","appendArrowSpan","setActiveElem","activeElem","getULElement","popupElement","delegateMousedownHandler","mousedownHandler","keyEventHandler","liIdx","removeCustomSelection","selectedLi","beforeOpenArgs","openArgs","focusEle","TAGNAME","SplitButton","createPrimaryButton","createSecondaryButton","secondaryBtnObj","setAria","btnModel","primaryBtnObj","btnElem","dropDownBtnModel","beforeItemRender","beforeClose","aria-expanded","aria-haspopup","aria-owns","primaryBtnClickHandler","btnKeyBoardHandler","altdownarrow","HIDESPINNER","PROGRESSACTIVE","CONTENTCLS","SpinSettings","ProgressButton","init","percent","isPaused","startProgress","progressTime","spinSettings","enableProgress","createProgress","spinner","setSpinPosition","getSpinner","getProgress","cont","clsList","isVertical","startAnimate","startContAnimate","prevTime","prevPercent","prevProgressTime","timeDiff","stepTime","timeDiffBuffer","currentDuration","hideSpin","setSpinnerSize","setIconSpan","iconSpan","nextChild","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HIDEHEX","HIDEOPACITY","HIDERGBA","HIDEVALUE","HIDEVALUESWITCH","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SHOWVALUE","SELECT","SPLITPREVIEW","presets","ColorPicker","Apply","Cancel","ModeSwitcher","inline","createWidget","createSplitBtn","enableOpacity","tileRipple","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","beforeOpenFn","onOpen","beforePopupClose","hex","rgba","convertToRgbString","hexToRgb","preview","backgroundColor","getPopupEle","popupInst","getPopupInst","modal","onPopupClose","destroyOtherComp","presetColors","paletteGroup","appendElement","appendPalette","modeSwitcher","noColor","setNoColor","borderBottomWidth","rgb","hsv","rgbToHsv","refEle","palette","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","background","convertToOtherFormat","pValue","rgbToHex","cValue","updatePreview","triggerEvent","previewContainer","colorValue","isPicker","createNumericInput","numericInput","inputWrap","appendValueSwitchBtn","hexInput","maxlength","clsName","appendOpacityValue","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","getTooltipInst","setTooltipOffset","convertToHsvString","updateHsv","isKey","updateInput","removeTileSelection","convertRgbToNumberArray","n","pickerKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","handlerDragPosition","triggerChangeEvent","prob","setHsv","handlerMove","handlerEnd","switchToPalette","ctrlBtnClick","noColorTile","switchToPicker","grpEle","selectedEle","tiles","prevSelectedEle","tilePosition","keySelectionChanges","newEle","emptyCount","inputValueChange","isPopupOpen","tooltipInst","len_1","bigInt","g","v","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","changeRtlProps","changePaletteProps","changeOpacityProps","reduce","cls","TextBox","textboxWrapper","globalize","interaction","resetInputHandler","OTHERMONTH","OVERLAY","WEEKNUMBER","FOCUSEDDATE","OTHERMONTHROW","CalendarBase","controlUp","controlDown","moveDown","moveUp","moveLeft","moveRight","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","altUpArrow","spacebar","altRightArrow","altLeftArrow","calendarMode","firstDayOfWeek","todayDisabled","todayDate","data-role","calendarElement","createHeader","createContent","validateDate","checkDateValue","currentDate","minMaxUpdate","headerElement","iconContainer","previousIcon","nextIcon","headerTitleElement","aria-atomic","contentElement","createContentHeader","createContentBody","showTodayButton","createContentFooter","getCultureValues","cldrObj","culShortNames","getCultureObjects","shortNames","html","tableHeadElement","weekNumber","shiftArray","renderYears","renderDecades","renderMonths","updateFooter","todayElement","l10","minimum","maximum","today","footer","todayButtonClick","navigateTitle","keyActionHandle","currentView","getViewNumber","navigateTo","selectedDate","focusedDate","tableBodyElement","depthValue","levelRestrict","KeyboardNavigate","selectDate","contentClick","addMonths","addYears","isMonthYearRange","addDay","isMinMaxRange","navigatePreviousHandler","navigatePrevious","navigateNextHandler","navigateNext","navigateHandler","triggerNavigate","minMaxDate","localDate","minDate","maxDate","tdEles","numCells","renderDays","islamicModule","islamicRenderDays","renderTemplate","islamicRenderTemplate","currentMonth","titleUpdate","getMilliseconds","setStartDate","weekEle","weekAnchor","getWeek","dateFormatOptions","tdEle","dayCell","dayLink","renderDayCellArgs","isDisabled","isOutOfRange","renderDayCellEvent","otherMnthBool","disabledCls","getDateVal","updateFocus","otherMonth","tableElement","removeTableHeadElement","valueUtil","curDate","yr","curYrs","minYr","minMonth","maxYr","maxMonth","setMonth","localMonth","localYr","startYr","endYr","startHdrYr","endHdrYr","startYear","rowIterator","lastDate","timeOffset","findLastDay","classNm","trEle","otherMonthCell","iconHandler","islamicIconHandler","setAriaActiveDescendant","clickEventEmitter","eve","getIdValue","islamicDate","getIslamicDate","validateValues","copyValues","skipIndex","tempValueString","minFormatOption","minString","maxFormatOption","maxString","setValueUpdate","dayFormatOptions","monthFormatOptions","setActiveDescendant","focusedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","stringVal","islamicPrevious","islamicNext","ld","time","tzOffset","tzOffsetDiff","setTime","getMaxDays","dateString","setDateDecade","setDateYear","checkPresentDate","tempElement","checkPrevious","navigatedEvent","navigatedArgs","compare","startDate","endDate","modifier","findNextTD","rangeValue","tmpDate","Calendar","isMultiSelection","tempValues","limit","copyDate","previousValues","form","formResetHandler","changedArgs","triggerChange","previousDate","tempDays","islamicRenderYears","islamicRenderDecade","storeView","tempDate","addDate","tempDates","removeDate","INPUTFOCUS","DatePicker","previousElementValue","isDateIconClicked","altDownArrow","calendarKeyConfigs","bindEvents","setAllowEdit","allowEdit","ariaAttrs","isCalendar","disabledDates","minMaxUpdates","dateValue","tempFormat","dateTimeFormat","dateIconHandler","inputFocusHandler","inputBlurHandler","inputChangeHandler","resetFormHandler","keyboardModules","inputKeyActionHandle","CalendarKeyActionHandle","focusArguments","strictModeUpdate","changeTrigger","blurArguments","calendarKeyboardModules","documentHandler","dateOptions","createCalendar","modelHeader","yearHeading","h2","daySpan","monthSpan","selectCalendar","prevent_1","outOfRange","preventArgs","prevent_2","ensureInputAttribute","ngTag","inputEleCopy","validationAttribute","checkHtmlAttributes","nameAttribute","valueCopy","previousValCopy","dateIdString","isDisabledDate","Islamic","calendarInstance","islamicTitleUpdate","gregorianObject","islamicDayCell","prevMonthCompare","islamicCompareMonth","nextMonthCompare","prevYearCompare","hijriCompareYear","nextYearCompare","prevDecadeCompare","hijriCompareDecade","nextDecadeCompare","islamicDate_1","rowCount","islamicDate_2","hijriStart","hijriEnd","islamicCompare","LEFTCALENDER","RIGHTCALENDER","ACTIVE","STARTDATE","ENDDATE","RANGEHOVER","STARTLABEL","ENDLABEL","CALENDAR","TITLE","ICONCONTAINER","RANGECONTAINER","PRESETS","FOCUSDATE","CONTENT","DAYSPAN","DATEDISABLED","ICONDISABLED","LISTCLASS","ListBaseClasses","HOVER","Presets","DateRangePicker","isCustomRange","isCustomWindow","presetsItem","previousEleValue","isKeyPopup","dateDisabled","isRangeIconClicked","isMaxDaysClicked","disabledDays","preventBlur","preventFocus","endValue","setModelValue","presetKeyConfig","keyInputConfigs","defaultConstant","startLabel","endLabel","customRange","applyText","cancelText","selectedDays","isMobile","matchMedia","angularTag","initProperty","navNextFunction","navNextMonth","navPrevFunction","navPrevMonth","deviceNavNextFunction","deviceNavNext","deviceNavPrevFunction","deviceNavPrevious","initStartDate","initEndDate","shiftTab","processPresets","setRangeAllowEdit","rangeIconHandler","inputKeyboardModule","updateHiddenInput","firstHiddenChild","secondHiddenChild","valueType","clearRange","applyButton","removeSelection","applyFunction","leftCalendar","calendarFocus","minDays","maxDays","isPreset","createPresets","listRippleEffect","renderControl","createControl","bindCalendarEvents","updateRange","rightCalendar","disabledDateRender","updateHeader","clearCalendarEvents","leftCalPrevIcon","leftCalNextIcon","rightCalPrevIcon","rightCalNextIcon","updateNavIcons","compareMonths","leftCalCurrentDate","rightCalCurrentDate","calendarIconEvent","deviceCalendarEvent","startButton","deviceHeaderClick","endButton","calendarIconRipple","leftKeyboardModule","keyInputHandler","rightKeyboardModule","bindCalendarCellEvents","removeFocusedDate","updateDeviceCalendar","deviceNavigation","deviceCalendar","removeClassDisabled","updateMinMaxDays","selectableDates","refreshControl","previousStartValue","previousEndValue","inputStr","isDateDisabled","keyCalendarUpdate","isLeftCalendar","updateCalendarElement","navInCalendar","leftLimit","rightLimit","keyNavigation","rightDateLimit","leftDateLimit","presetElement","selectRange","yearDate","calendarNavigation","checkMinMaxDays","presetHeight","tdCells_1","hoverSelection","focusedDate_1","tdCells_2","isDisabledCell","eleDate","startDateValue","elementCollection","elementCollection_1","tdCells_3","eleDateValue","eleDateValue_1","addSelectedAttributes","endDateValue","rangeArgs","inputValue","otherMonthSelect","isStartDate","sameDate","tdCell","endEle","endEle_1","endEle_2","ele_2","removeSelectedAttributes","tdCells","tdCells_4","tdCells_5","startMonth","maxEle","tdCells_6","calendar_1","tdCells_7","disabledDayCnt","start_1","end_1","updateControl","createRangeHeader","labelContainer","endBtn","startBtn","changeIcon","disableInput","validateRangeStrict","validateMinMaxDays","validateRange","renderCalendar","isSameMonth","startMonthCurrentDate","selectNextMonth","selectStartMonth","calendarContainer","prevIcon","leftTitle","leftContainer","rightContainer","leftNavTitle","rightTitle","rightNavTitle","controlContainer","headerContainer","footerSection","cancelBtn","CANCEL","applyBtn","cancelFunction","deviceHeaderUpdate","closeEventArgs","popupKeyboardModule","popupKeyActionHandle","onMouseClick","isClick","setListSelection","onMouseOver","onMouseLeave","renderCustomPopup","removeListSelection","applyPresetRange","modelValue","showPopup","openEventArgs","listTag","wireListEvents","unWireListEvents","popupWidth","btnKeyboardModule","presetKeyboardModule","presetKeyActionHandler","popupKeyBoardHandler","popupCloseHandler","rangeContainer","listMoveDown","setScrollPosition","listMoveUp","hvrItem","getHoverLI","actItem","getActiveLI","listHeight","liHeight","setEleWidth","virtualRenderCellArgs","virtualRenderCellEvent","isStartDisabled","isEndDisabled","createHiddenInput","isBlur","getSelectedRange","refreshChange","enableInput","clearModelvalue","DAY","MONTH","YEAR","NAVIGATION","FOCUS","createListItems","createdEl","timeFormat","timeCollections","CellType","TimePicker","disableItemCollection","keyConfigure","down","up","createInputElement","setTimeAllowEdit","validateInterval","validateDisable","getFormattedValue","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","aria-autocomplete","isNullOrEmpty","unBindEvents","ariaAttribute","generateList","listWrapper","addSelection","getPopupHeight","popupHeight","popupCalculation","firstItem","isEmptyList","textIndent","paddingRight","paddingLeft","containerStyle","setPopupWidth","createDateObj","removeErrorClass","checkErrorState","disableTimeIcon","selectInputText","getMeridianText","getCursorSelection","getActiveElement","borderLeftWidth","setScrollTo","findScrollTop","initialTime","scrollTime","cldrTimeFormat","cldrDateFormat","getCultureDateObject","getCultureTimeObject","dateToNumeric","getExactDateTime","checkValue","compareFormatChange","updatePlaceHolder","popupHandler","mouseUpHandler","curPos","cursorDetails","focusSelection","isSeparator","objToString","previousState","setSelection","animModel","documentClickHandler","checkValueChange","isNavigation","valueProcess","currentLi","setHover","minVal","maxVal","dateVal","strictOperation","setCurrentDate","clearHandler","inputEvent","setZIndex","getTextFormat","strArray","newval","findNextElement","textVal","timeVal","validLiElement","backward","elementIndex","isCheck","nextItem","offsetValue","lastItemOffsetValue","ulPadding","paddingTop","isUpdate","hoveredItem","getHoverItem","setActiveClass","TimeParse","getProperty","HOUR","MINUTE","SECOND","MILLISECOND","DATETIMEPOPUPWRAPPER","DateTimePicker","previousDateTime","blurHandler","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isDisable","timeIcon","renderTimeIcon","timeHandler","dateHandler","inputKeyAction","getCldrFormat","isDatePopupOpen","listCreation","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","TimeKeyActionHandle","unWireTimeListEvents","setDimension","setTimeHover","removeTimeHover","setInputValue","getFullDateTime","tempVal","combineDateTime","minutes","seconds","timeValue","setTimeActiveClass","collections","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","hours","milliseconds","tempStartValue","tempMin","tempEndValue","tempMax","getUTCFullYear","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","queryString","prevString","activeClass","dropDownBaseClasses","noData","fixedHead","grouping","DropDownBase","getPropObject","newProperty","oldProperty","getValueByText","listData","checkValueCase","isTextByValue","typeOfData","dataSource_1","checkingAccent","checkIgnoreCase","getItemValue","checkNonIgnoreCase","itemValue","textItem","typedText","l10nUpdate","actionFailure","noRecordsTemplate","actionFailureTemplate","getTextByValue","enableRtlElements","jsonElement","resetList","renderItemsBySelect","setListData","getJSONfromOption","optionGroup","scrollTimer","isRequested","isDataFetched","isActive","emptyDataRequest","onActionComplete","bindChildItems","onActionFailure","localDataArgs","remainingItems","sortedData","updateListValues","raiseDataBound","spliceData","itemTemplate","listElements","templateListItem","listOption","postRender","focusItem","listEle","getSortedDataSource","fieldValues","setFloatingHeader","fixedHeaderElement","setFixedHeader","scrollStop","topIndex","liWidth","firstLi","textField","getIndexByValue","setFields","updateSelection","updateDataSource","setUpdateInitial","updateData","isEmptyData","rippleFun","wrapperElement","itemIndex","itemsCount","selectedItemValue","updateActionCompleteData","tempLi","hidden","getDataByValue","dropDownListClasses","inputFocus","iconAnimation","device","filterBarClearIcon","filterInput","filterParent","mobileFilter","clearIconHide","popupFullScreen","disableIcon","hiddenElement","DropDownList","initializeData","isDocumentClick","isFilterFocus","beforePopupOpen","initRemoteRender","isNotSearchList","isTyped","preventAutoFill","isValidKey","typedString","isEscapeKey","isTabKey","actionCompleteData","isUpdated","prevSelectPoints","isSelectCustom","isDropDownClick","preventAltUp","isCustomFilter","isSecondClick","floatLabelChange","floatElement","onChangeEvent","resetFocusElement","resetSelection","allowFiltering","valueTempElement","setHTMLAttributes","getAriaAttributes","hidePopup","preventTabIndex","getNgDirective","getElementByText","getElementByValue","listItems_1","updateValues","setHiddenValue","onBlur","isFilterLayout","focusOutAction","onFocusOut","onFocus","resetValueHandler","dropDownClick","bindCommonEvent","unBindCommonEvent","charCode","searchKeyEvent","incrementalSearch","selectedIndex","spinnerElement","filterInputObj","preventAction","preventHomeEnd","isEditTextBox","isTabAction","isSelectFocusItem","pageUpSelection","getPageCount","pageDownSelection","focusDropDown","selectCurrentItem","previousItem","onDocumentClick","activeStateChange","proxy_1","cloneElements","updateSelectedItem","preventSelect","detachChanges","previousItemData","focusedItem","activeItem","valueTemplate","setValueTemplate","previousSelectedLI","dataValue","dataText","detachChangeEvent","defineProperties","preItems","onFilterUp","searchLists","onFilterDown","getSelectionPoints","removeFillSelection","isFiltering","preventDefaultAction","filteringAction","baseEventArgs","filterQuery","focusIndexItem","setSearchBox","filterBarPlaceholder","clearIconElement","searchKeyModule","onInput","addNewItem","newElement","highlightedItem","refreshPopup","searchBox","setHeaderTemplate","searchBoxHeight","getOffsetValue","getFocusElement","setSearchBoxPosition","backIconElement","clickOnBackIcon","scrollParentElements_1","listScroll","popupStyles","borderTop","borderBottom","destroyPopup","clearElement","border","popupOffset","lastItem","paddingBottom","scrollBottom","currentOffset","nextBottom","nextOffset","boxRange","isPopupButton","scrollableParentElements_1","invalidAttr","selectElement","onselect","stopImmediatePropagation","onchange","setOldText","setOldValue","checkValidLi","setSelectionData","ddlProps","proxy_2","onpopstate","pushState","ValueFormatter","allowSorting","allowResizing","allowGrouping","allowReordering","showColumnMenu","enableGroupByFormat","showInColumnChooser","edit","sortDirection","getEditTemplate","editTemplateFn","getFilterTemplate","filterTemplateFn","valueFormatter","commands","commandsTemplate","headerTemplateFn","fltrTemplateFn","editTemplate","filterTemplate","isForeignColumn","editType","sortComparer","a_1","getSortDirection","setSortDirection","getFormatter","formatFn","getParser","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","disableHtmlEncode","queryCellInfo","headerCellInfo","actionBegin","actionComplete","dataBound","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnDragStart","columnDrag","columnDrop","rowDragStartHelper","rowDragStart","rowDrag","rowDrop","printComplete","detailDataBound","batchAdd","batchCancel","batchDelete","beforeDataBound","beforeOpenColumnChooser","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","initialLoad","initialEnd","dataReady","contentReady","uiUpdate","onEmpty","inBoundModelChanged","modelChanged","colGroupRefresh","headerRefreshed","pageComplete","sortComplete","filterComplete","searchComplete","reorderComplete","groupComplete","ungroupComplete","groupAggregates","refreshFooterRenderer","refreshAggregateCell","refreshAggregates","cellSelectionComplete","beforeCellFocused","cellFocused","keyPressed","columnVisibilityChanged","columnWidthChanged","columnPositionChanged","rowsAdded","rowsRemoved","columnDragStop","headerDrop","dataSourceModified","refreshVirtualBlock","dblclick","toolbarRefresh","autoCol","tooltipDestroy","saveComplete","deleteComplete","preventBatch","dialogDestroy","crudAction","addDeleteAction","destroyForm","doubleTap","excelExportComplete","excelHeaderQueryCellInfo","exportDetailDataBound","pdfExportComplete","pdfHeaderQueryCellInfo","freezeRender","filterOpen","filterDialogCreated","filterMenuClose","initForeignKeyColumn","getForeignKeyData","generateQuery","showEmptyGrid","dataStateChange","dataSourceChanged","rtlUpdated","beforeFragAppend","frozenHeight","recordAdded","cancelBegin","editNextValCell","hierarchyPrint","expandChildGrid","exportRowDataBound","rowPositionChanged","scrollModule","isAsyncPrint","defered","events.contentReady","isContentReady","events.actionBegin","events.onEmpty","events.hierarchyPrint","isPrintGrid","removeColGroup","printGridObj","printModule","renderPrintGrid","printWind","resizeTo","screen","availWidth","availHeight","printGrid","Grid","isPrinting","injectedModues","setInjectedModules","printgrid","registeredTemplate","selectedRows","getContentTable","cssProps","getCssProperties","contentDiv","headerDiv","groupSettings","waitingPop","printGridElement","events.printComplete","groupCaption","colSpan","colGroups","RenderType","ToolbarItem","CheckBoxFilter","filterSettings","existingPredicate","foreignKeyQuery","filterState","renderEmpty","cBoxTrue","cBoxFalse","closeDialog","searchHandler","searchBoxKeyUp","foreignKeyFilter","fColl","mPredicate","fPredicate","filterCollection","events.generateQuery","fpred","foreignFilter","getDataModule","isRemote","initalPredicate","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","getLocalizedLabel","localeObj","updateModel","actualPredicate","filteredColumns","sortSettings","allowCaseSensitive","isFiltered","getAndSetChkElem","sBox","hideSearchbox","inputargs","cBox","showDialog","events.filterBeforeOpen","filterModel","columnName","columnType","btnClick","isExcel","created","dialogCreated","getAllData","events.filterDialogCreated","openDialog","getColumns","destroyTemplate","events.filterMenuClose","clearFilter","events.preventBatch","fltrBtnHandler","optr","caseSen","defaults","isNotEqual","itemsCnt","fObj","searchInput","arg1","arg2","arg3","arg4","arg5","arg6","initiateFilter","firstVal","foreignQuery","parsed","predicte","addDistinct","filterChoiceCount","filterEvent","processSearch","getPredicateFromCols","getPredicate","predicateList","foreignColumn","getForeignKeyColumns","events.filterChoiceRequest","processDataOperation","filteredColumn","eventPromise","dataSuccess","getStateEventArgument","def","events.dataStateChange","adaptr","allPromise","runArray","fullData","cols","filteredData","getDistinct","processDataSource","events.filterAfterOpen","events.actionComplete","updateResult","createFilterItems","result_1","updateAllCBoxes","updateIndeterminatenBtn","cBoxes_1","createCheckbox","cBoxes","nullCounter","selectAllValue","checkBox","isColFiltered","isRndere","getCheckedState","foreignDataObj","events.foreignKeyData","generatePredicate","updateDateFilter","getCaseValue","Data","dataState","isPending","resolver","initDataManager","events.rowsAdded","addRows","events.rowPositionChanged","reorderRows","events.rowsRemoved","removeRows","events.dataSourceModified","events.destroy","events.updateData","crudActions","events.addDeleteAction","getData","toIndex","fromIndex","skipPage","columnQueryMode","selectQueryFields","searchQuery","aggregateQuery","sortQuery","pageQuery","isForeign","pageCount","getColumnByField","isGrpFmt","formatGroupColumn","sortGrp","sSettings","searchSettings","fGeneratePredicate","skipFoerign","actualFilter","checkBoxCols","defaultFltrCols","columns_1","excelPredicate","_d","_e","defaultFltrCols_1","column_1","sType","events.showEmptyGrid","getKey","getPrimaryKeyFieldNames","crud","events.recordAdded","deferred_1","previousData","events.crudAction","endEdit","setState","events.dataSourceChanged","getState","dataArgs","isDataChanged","editArgs","Row","Cell","isSpanned","isRowSpanned","CellMergeRender","cellArgs","td","spannedCell","cellRenderer","getCellRenderer","cellType","cellSpan","rowSpan","isDataRow","targetCell_1","colSpanLen","colSpanRange","rowSpanRange","spanText","aria-colSpan","rowspan","aria-rowspan","enableColumnVirtualization","containsKey","backupMergeCells","fName","setMergeCells","generteKey","fname","splitKey","getMergeCells","mergeCells","updateVirtualCells","rows","mCells","columnIndex","getIndexFromAllColumns","vColumnIndices","getColumnIndexesInView","getVisibleColumns","RowRenderer","isSpan","rowTemplate","refreshRow","isChanged","refreshMergeCells","tr","cells_1","rowArgs","attrCopy","chekBoxEnable","getSelectedRowIndexes","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","cellRendererFact","DetailExpand","Filter","CommandColumn","requestTypeAction","prevRowCell","summarycell","isAltRow","RowModelGenerator","generateRows","generateRow","ensureColumns","detailTemplate","generateCell","isRowDragable","RowDragIcon","indent","enableAltRow","refreshForeignKeyRow","generateCells","dummy","rowId","oIndex","opt","isDataCell","isTemplate","rowID","refreshRows","SummaryModelGenerator","groupFooterTemplate","groupCaptionTemplate","columnSelector","currentViewData","buildSummaryData","getGeneratedRow","summaryRow","raw","indents","getIndentByLevel","isDetailGridAlone","indentLength","getGeneratedCell","getCellType","Indent","DetailFooterIntent","sColumn","scolumn","single","disp","Summary","GroupSummaryModelGenerator","GroupSummary","CaptionSummaryModelGenerator","isEmpty","CaptionSummary","GroupModelGenerator","summaryModelGen","captionModelGen","getGroupedRecords","generateDataRows","generateCaptionRow","getCaptionRowCells","visibles","indexes","groupedLen","generateIndentCell","Expand","captionCells","cIndex_1","wFlag","tmpFlag","GroupCaption","GroupCaptionEmpty","cRow","ContentRender","freezeRows","movableRows","isLoaded","events.columnDrop","rafCallback","ariaService","setBusy","getPanel","getFrozenColumns","isFrozen","events.dataBound","allowTextWrap","events.freezeRender","case","generator","getModelGenerator","events.columnVisibilityChanged","setVisible","events.colGroupRefresh","events.uiUpdate","enableAfterRender","renderPanel","setOptions","busy","setPanel","renderTable","createContentTable","setTable","getTable","multiselectable","selectionSettings","initializeContentDrop","frozenRows","getHeaderContent","cellspacing","setColGroup","getColGroup","splitRows","freezeRowElements","rowElements","refreshContentRows","hdrTbody","frag","hdrfrag","fCont","mCont","modelData","templatetoclear","rootNodes","tbody","getRowTemplate","isTR","events.expandChildGrid","colcount","getHeaderTable","events.beforeFragAppend","borderRightWidth","appendContent","contentPanel","panel","contentTable","getRows","getMovableRows","getRowElements","getMovableRowElements","setRowElements","colgroup","colGroup","fRows","mRows","rowLen","cellLen","testRow","clen","getNormalizedColumnIndex","canSkip","displayVal","getContent","replaceChild","getRowByIndex","getDataRows","getVirtualRowIndex","getMovableRowByIndex","getMovableDataRows","setRowObjects","HeaderRender","frzIdx","notfrzIdx","visualElement","headercelldiv","getStackedHeaderColumnByHeaderText","getColumnByUid","lockColumn","lineHeight","events.columnDragStart","getClosest","events.columnDrag","events.columnDragStop","events.headerDrop","widthService","events.columnPositionChanged","colPosRefresh","createHeaderTable","initializeHeaderDrag","initializeHeaderDrop","events.headerRefreshed","headerPanel","headerTable","tHead","createTable","findHeaderRow","thead","caption","bodyCell","rowBody","Header","updateColGroup","colHeader","rowRenderer","headerRow","colDepth","getHeaderCells","len_2","HeaderIndent","DetailHeader","RowDragHIcon","lockcolPositionCount","lockColsRendered","appendCells","isFirstObj","isFirstCol","isLastCol","isMovable","lastCol","getCellCnt","frzObj","refreshFrozenHdr","isPartial","isComp","stackedLockColsCount","getStackedLockColsCount","frozenColumns","StackedHeader","getColSpan","getColumnIndexByUid","lockColsCount","getColumnIndexByField","frozenCnt","frzCol","rowIndex","colIndex","refreshUI","setWidthToColumns","updateDefaultCursor","gCells","textWrapSettings","wrapMode","showDropArea","headerRows","CellRenderer","locator","localizer","formatter","rowChkBox","getGui","evaluate","fData","dummyData","invokeFormatter","refreshCell","refreshTD","innerHtml","displayAsCheckBox","localeStr","fromFormatter","appendHtml","persistSelection","checkWrap","buildAttributeFromCell","clipMode","isCheckBoxType","AriaService","setExpand","setSort","isBusy","invalid","setGrabbed","isGrabbed","grabbed","setDropTarget","isTarget","dropeffect","haspopup","HeaderCellRenderer","hTxtEle","sortEle","gui","chkAllBox","fltrMenuEle","prepareHeader","ariaAttr","innerDIV","e-mappinguid","checkAllWrap","matchFlColumns","extendPrepareHeader","gridObj","headerTextAlign","alignment","matchFilteredColumns","StackedHeaderCellRenderer","toolTip","IndentCellRenderer","GroupCaptionCellRenderer","fKeyValue","captionTemplate","GroupCaptionEmptyCellRenderer","ExpandCellRenderer","HeaderIndentCellRenderer","DetailHeaderIndentCellRenderer","DetailExpandCellRenderer","RowDragDropRenderer","nodeElement","RowDragDropHeaderRenderer","Render","emptyGrid","renderer","headerRenderer","getRenderer","contentRenderer","Content","isLayoutRendered","emptyRow","refreshDataManager","events.cancelBegin","refreshComplete","isFActon","isNeedForeignAction","getFData","deffered_1","events.getForeignKeyData","disablePageWiseAggregates","validateGroupRecords","dataManagerSuccess","dataManagerFailure","deferred","sendBulkRequest","dmSuccess","dmFailure","renderEmptyRow","isTrigger","colspan","dynamicColumnChange","getCurrentViewRecords","updateColumnType","validationRules","isColTypeDef","events.beforeDataBound","isEdit","events.tooltipDestroy","prevPageMoving","totalRecordsCount","updatesOnInitialRender","isInitialLoad","events.dataReady","events.toolbarRefresh","events.actionFailure","buildColumns","events.autoCol","instantiateRenderer","addRenderer","cellrender","addCellRenderer","events.initialLoad","events.modelChanged","group0","groupN","addWhere","curFilter","rPredicate","updateGroupInfo","untouched","uGroup","itemGroup","uGroupItem","CellRendererFactory","cellRenderMap","ServiceLocator","services","register","RendererFactory","rendererMap","rName","ColumnWidthService","setColumnWidth","cWidth","getWidth","setWidthToTable","Boolean","elementWidth","headerCol","fWidth","mHdr","contentCol","getSiblingsHeight","getHeightFromDirection","sibling","getTableWidth","tWidth","setWidthToFrozenTable","freezeWidth","setWidthToMovableTable","movableWidth","FocusStrategy","currentInfo","oneTime","swap","forget","skipFocus","focusByClick","prevIndexes","focusCheck","setActive","matrix","validator","passiveFocus","skipAction","getFocusInfo","elementToFocus","onClick","force","clearOutline","beforeArgs","byKey","byClick","clickArgs","event.beforeCellFocused","skipOn","keyArgs","bValue","outline","swapInfo","jump","toHeader","toFrozen","getNextCurrent","setActiveByKey","clearIndicator","getFocusedElement","fContent","fHeader","setFocusedElement","addFocus","event.cellFocused","isJump","getInfo","cellIndex","focusedColumnUid","getColumnByIndex","refreshMatrix","FixedContentFocus","ContentFocus","FixedHeaderFocus","HeaderFocus","cFocus","updateRow","isRowTemplate","generate","frozenColumnsCount","newMovableRows","newFrozenRows","handlerInstance","index_1","focusElement","cellPosition","gridPosition","passiveHandler","event.keyPressed","event.click","event.contentReady","event.headerRefreshed","restoreFocus","event.batchAdd","event.batchCancel","event.batchDelete","event.detailDataBound","event.onEmpty","internalCellFocus","getPrevIndexes","forgetPrevious","actions","ctrlHome","ctrlEnd","getFocusable","Matrix","allow","inValid","vector","rIndex","cIndex","keyActions","rightArrow","leftArrow","upArrow","downArrow","shiftUp","shiftDown","shiftRight","shiftLeft","shiftEnter","indexesByKey","getCurrentFromAction","isPresent","shouldFocusChange","rN","cN","oRowIndex","oCellIndex","isDirty","frozenSwap","enterFrozen","optionals","defaultLen","isData","isSelectable","current1","current2","current3","SearchBox","searchFocus","searchBlur","PageSettings","__assign","assign","Selection","selectedRowIndexes","selectedRowCellIndexes","selectedRecords","isMultiShiftRequest","isMultiCtrlRequest","enableSelectMultiTouch","selectedRowState","chkAllCollec","isCheckedOnAdd","persistSelectedData","isCancelDeSelect","isPreventCellSelect","disableUI","factory","initializeSelection","onActionBegin","fDataUpdate","rowObj","getRowObj","currentIndex","gridElement","hidePopUp","clearSelection","isEditing","editModule","formObj","isPersistSelection","getSelectedMovableRow","getCurrentBatchRecordChanges","currentRecords","getBatchChanges","primaryKey","selectRow","enableSimpleMultiRowSelection","addRowsToSelection","selectedRow","selectedMovableRow","selectData","getRowObjectFromUID","isRowType","isCtrlPressed","isShiftPressed","previousRow","prevRowIndex","previousRowIndex","actualTarget","addMovableArgs","events.rowSelecting","clearRow","updateRowSelection","selectedRowIndex","events.rowSelected","updateRowProps","targetObj","mRow","mObj","previousMovRow","selectRowsByRange","selectRows","getCollectionFromIndexes","rowIndexes","isSingleSel","prevRow","rowIndexes_1","rowIdx","rowIndexes_2","isUnSelected","rowDeselect","events.rowDeselecting","addRemoveClassesForRow","events.rowDeselected","clearRowSelection","isRowSelected","updatePersistCollection","chkState","pKey_1","updatePersistDelete","updateCheckBoxes","chkBox","checkedTarget","setCheckAllState","clearCellSelection","currentRow","movableRow","rowDeselectObj","getSelectedMovableCell","getMovableCellFromIndex","getColIndex","selectCell","isCellType","selectedCell","getCellFromIndex","isCellSelected","prevCIdxs","currentCell","previousRowCellIndex","prevECIdxs","previousRowCell","getCellIndex","events.cellSelecting","clearCell","updateCellSelection","updateCellProps","selectedRowCellIndex","events.cellSelected","rIdx","selectCellsByRange","cellIndexes","stIndex","edIndex","cellSelectionMode","getLastColIndex","addAttribute","selectCells","rowCellIndexes","addRowCellIndex","addCellsToSelection","hideAutoFill","getMovableRowsObject","cellIndexes_1","selectedCellIdx","cellDeselect","events.cellDeselecting","events.cellDeselected","rowCellIndex","isRowAvail","selectedCells","getSelectedCellsElement","rowCell","cLen","addMovableRows","mouseMoveHandler","gBRect","isDragged","isCellDrag","startAFCell","startCell","endAFCell","selectLikeExcel","startDIndex","isAutoFillSel","showAFBorders","selectLikeAutoFill","startDCellIndex","drawBorders","bdrBottom","createBorders","positionBorders","hideBorders","updateStartEndCells","bdrLeft","showBorders","stOff","endOff","endCell","parentOff","bdrRight","bdrTop","drawAFBorders","bdrAFBottom","createAFBorders","positionAFBorders","bdrAFLeft","bdrAFRight","bdrAFTop","hideAFBorders","updateCell","isApply","startrowIdx","startCellIdx","endrowIdx","endCellIdx","colLen","cellIdx","startCellIndex","trIdx","mUPTarget","updateAutoFillPosition","updateStartCellsIndex","autofill","enableAutoFill","clientRect","allowRowDragAndDrop","enableDrag","postion","clearSelAfterRefresh","events.initialEnd","events.cellSelectionComplete","events.inBoundModelChanged","events.cellFocused","onCellFocused","actionBeginFunction","actionCompleteFunction","refreshHeader","addEventListener_checkbox","removeEventListener_checkbox","getCheckAllBox","checkBoxSelectionChanged","initPerisistSelection","checkboxMode","gobj","checkboxColumn","chkField","ensureCheckboxFieldSelection","refreshPersistSelection","setRowSelection","checkState","editChkBox","onDataBound","checkSelectAllAction","cRenderer","editForm","checkSelectAll","stateStr","getCheckAllStatus","triggerChkChangeEvent","checkSelect","rowCellSelectionHandler","moveIntoUncheckCollection","updateSelectedRowIndex","selectedVal","checkedLen","spanEle","popUpClickHandler","chkSelect","checkboxOnly","headerAction","thLen","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","ctrlPlusA","applySpaceSelection","applyUpDown","isAdd","getSelectedRecords","onDataBoundFunction","actionCompleteFunc","actionCompleteHandler","events.click","resizeEndFn","searchString","refreshSearch","events.searchComplete","onSearchComplete","cancelBeginEvent","ShowHide","showBy","getToggleFields","hideBy","getKeyBy","allowSelection","Scroll","lastScrollTop","oneTimeReady","toolbarModule","toolbar","refreshOverflow","setHeight","mHdrHeight","ensureOverflow","setPadding","getThreshold","removePadding","setScrollLeft","headerModule","getMovableHeader","onContentScroll","scrollTarget","isPreventScrollEvent","isFooter","onFreezeContentScroll","onWheelScroll","deltaMode","onTouchScroll","pointerType","pageXY","getPointXY","setPageXY","getFooterContent","sLeft","sHeight","AggregateColumn","getTemplate","setPropertiesSilent","AggregateRow","Clipboard","copyContent","isSelect","events.keyPressed","clipBoardTextArea","x_1","y_1","isAvail","dataRows","fTr","mTr","selectionModule","setCopyData","withHeader","getSelection","selectedIndexes","headerTextArray","getCopyData","checkBoxSelection","colIndexes","getColumnHeaderByIndex","isCell","isElement","queryCommandSupported","execCommand","removeAllRanges","rowCellIndxes","getSelectedRowCellIndexes","SortDescriptor","SortSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","GroupSettings","EditSettings","inViewIndexes","freezeRefresh","Grid_1","mergePersistGridData","keyEntity","currentObject","ignoreInArrays","ignoreOnColumn","ignoreInColumn","allowExcelExport","allowPdfExport","isDetail","toolbarTemplate","isCommandColumn","allowAdding","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","initProperties","initializeServices","mediaCol","filterOperators","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","defaultLocale","EmptyRecord","True","False","InvalidFilterMessage","GroupDropArea","UnGroup","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Update","Delete","Pdfexport","Excelexport","Wordexport","Csvexport","Columnchooser","Save","EditOperationAlert","DeleteOperationAlert","SaveButton","OKButton","CancelButton","EditFormTitle","AddFormTitle","BatchSaveConfirm","BatchSaveLostChanges","ConfirmDelete","CancelEdit","ChooseColumns","SearchColumns","Matchs","FilterButton","ClearButton","StartsWith","EndsWith","Contains","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","ChooseDate","EnterValue","Copy","Group","Ungroup","autoFitAll","autoFit","Export","FirstPage","LastPage","PreviousPage","NextPage","SortAscending","SortDescending","EditRecord","DeleteRecord","FilterMenu","SelectAll","Blanks","FilterTrue","FilterFalse","NoResult","ClearFilter","NumberFilter","TextFilter","DateFilter","DateTimeFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","ctrlDownArrow","ctrlUpArrow","ctrlPlusP","ctrlEnter","ctrlPlusC","ctrlShiftPlusH","renderModule","getMediaColumns","searchModule","checkLockColumns","processModel","gridRender","addListener","updateStackedFilter","gcol","getShowHideService","hideAtMedia","media","mediaQueryUpdate","showHider","refreshMediaCol","eventInitializer","hasGridChild","removeListener","destroyDependentModules","toolTipObj","focusModule","enableBoxSelection","checkCursor","requireRefresh","requireGridRefresh","updateColumnObject","properties_1","rowTemplateFn","detailTemplateFn","extendedPropertyChange","updateRTL","getToolbar","contextMenuModule","getContextMenu","columnMenuModule","getColumnMenu","events.rtlUpdated","updateResizeLines","updateGridLines","columnMenuItems","applyTextWrap","removeTextWrap","isModeChg","pending_1","gResult_1","enableHover","filterModule","refreshFilter","headerRows_1","updateColumnModel","columnModel","updateFrozenColumns","updateLockableColumns","frozenCount","movableCount","isRefresh","inview","vLen","stackedHeader","individualColumn","stackedColumn","getLocaleConstants","setColumnIndexesInView","setGridHeaderContent","setGridContentTable","setGridContent","setGridHeaderTable","footerElement","getFooterContentTable","getPager","gridPager","setGridPager","getRowInfo","row_1","rowsObject","mrows","dRows","setCellValue","fieldIdx","pkName","movableSelectedRow","rowObjects","movableRowObjects","sRow","events.refreshFooterRenderer","events.groupAggregates","events.queryCellInfo","setRowData","rowObject","getColumnHeaderByField","getColumnHeaderByUid","getStackedColumns","getUidByColumnField","getColumnFieldNames","columnNames","getDetailTemplate","getSelectedRows","showColumns","hideColumns","getFrozenCount","getVisibleFrozenColumns","getVisibleFrozenColumnsCount","getVisibleFrozenCount","visibleFrozenColumns","goToPage","pageNo","pagerModule","updateExternalMessage","sortColumn","isMultiSort","sortModule","clearSorting","removeSortColumn","filterByColumn","filterOperator","filterValue","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","deleteRecord","fieldname","startEdit","closeEdit","addRecord","deleteRow","clipboardModule","recalcIndentWidth","indentWidth","perPixel","events.columnWidthChanged","rowDropSettings","targetID","reorderColumns","fromFName","toFName","reorderModule","fromIndexes","rowDragAndDropModule","refreshDataSource","disableRowDD","disValue","autoFitColumns","resizeModule","createColumnchooser","columnChooserModule","renderColumnChooser","valueFormatterService","gCols","sCols","sLen","showGroupedColumn","parentDetails","parentKeyFieldValue","initForeignColumn","events.initForeignKeyColumn","rendererFactory","createGridPopUpElement","createTooltip","gridLines","getTooltipStatus","htable","ctable","isEllipsisTooltip","myTableDiv","mySubDiv","myTable","myTr","mytd","mouseClickHandler","dblClickHandler","allowKeyboard","dataBoundFunction","isChildGrid","checkEdit","events.dblclick","filterClear","keyPress","saveCell","events.editNextValCell","editFormValidate","dataObj","mergeColumns","storedColumn","ind","localCol","refreshColumns","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","groupColumn","groupModule","ungroupColumn","isContextMenuOpen","isOpen","ensureModuleInjected","propertyNames","Sort","contentRefresh","isModelChanged","aria","sortedColumn","getSortedColsIndexByField","sortedCols","sCol","getSortColumnFromField","lastSortedCol","allowMultiSorting","backupSettings","removeSortIcons","updateSortedCols","lastSortedCols","lastCols","restoreSettings","refreshSortSettings","addSortIcons","events.sortComplete","refreshSortIcons","colObj","initiateSort","showPopUp","allowUnsort","enableSortMultiTouch","filterElement","updateAriaAttr","NumericContainer","pagerElement","renderNumericContainer","refreshNumericLinks","updateTotalPages","updateLinksHtml","updateStyles","link","pagerObj","renderFirstNPrev","renderPrevPagerSet","renderNextPagerSet","renderNextNLast","pagerContainer","prevPager","PP","nextPager","NP","last","previousPageNo","currentPageSet","totalPages","customText","updateFirstNPrevStyles","updatePrevPagerSetStyles","updateNextPagerSetStyles","updateNextNLastStyles","firstPage","firstPageDisabled","prevPage","prevPageDisabled","lastPage","lastPageDisabled","nextPage","nextPageDisabled","PagerMessage","pageNoMsgElem","pageCountMsgElem","regx","Pager","defaultConstants","currentPageInfo","totalItemsInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","pagerAllDropDown","All","containerModule","pagerMessageModule","enableExternalMessage","checkpagesizes","pagerTemplate","initLocalization","renderFirstPrevDivForDevice","enablePagerMessage","renderNextLastDivForDevice","pagerdropdownModule","addAriaLabel","externalMessageModule","checkGoToPage","currentPageChanged","setDropDownValue","pageSizes","newPageNo","oldPageNo","enableQueryString","updateQueryString","getPagerTemplate","updatedUrl","getUpdatedURL","uri","ComboBox","targetFocus","customValue","allowCustom","valueMuteChange","aria-hasPopup","setHoverList","inlineSearch","setAutoFill","isHover","currentFillValue","isAndroidAutoFill","setAutoFillSelection","currentPoints","prevEnd","curEnd","prevStart","curStart","isKeyNavigate","changeData","comboProps","isEscape","searchItem","Global","AutoComplete","filterType","mapping","suggestionCount","filterAction","postBackAction","fieldsSettings","highlight","itemCreated_1","showPopupButton","atcProps","HIDE_LIST","CHIP","CHIP_CLOSE","CHIP_SELECTED","ZERO_SIZE","CLOSEICON_CLASS","CLOSE_ICON_HIDE","dropdownIcon","TOTAL_COUNT_WRAPPER","PagerDropDown","MultiSelect","selectAllEventData","selectAllEventEle","scrollFocusStatus","keyDownStatus","enableRTL","allowCustomValue","hideSelectedItem","closePopupOnSelect","updateHTMLAttribute","updateReadonly","updateClearButton","overAllClear","componentWrapper","updateCssClass","onPopupShown","focusAtFirstListItem","showDropDownIcon","isFirstClick","mainList","refreshListItems","enableSelectionOrder","valueEle","addListFocus","focusAtLastListItem","aria-multiselectable","updateListARIA","disableStatus","removelastSelection","chipCollectionWrapper","removeValue","removeChipSelection","updateDelimeter","delimiterChar","makeTextBoxEmpty","refreshSelection","targetInputElement","getForQuery","valuecheck","updateActionList","showSelectAll","mainData","mainListCollection","remoteCustomValue","checkForCustomValue","tempQuery","unwireListEvents","setInitialValue","selectAllAction","setDynValue","initialTextUpdate","initialValueUpdate","initialUpdate","refreshPlaceHolder","updateValueState","hideGroupItem","ariaValue","checkMaxSelection","element1","temp1","searchCount","searchActiveCount","openClick","openOnClick","KeyUp","expandTextbox","showOverAllClear","checkTextLength","remoteFilterAction","dataUpdater","backCommand","dataChecks","wrapperClick","updateDelimView","removeChipFocus","refreshInputHight","floatLabelBlur","initStatus","getPagingCount","showDelimWrapper","viewWrapper","floatLabelFocus","delimiterWrapper","hideDelimWrapper","mobFilter","calcPopupWidth","popupKeyActions","updateAriaAttribute","onKeyDown","arrowUp","arrowDown","selectByKey","spaceKeySelection","escapeAction","checkBackCommand","moveByList","focuseElem","moveBy","removeSelectedChip","selectListByKey","hideOverAllClear","maximumSelectionLength","updateListSelection","selectedElem","addChipSelection","moveByTop","chipClick","onChipRemove","customVal","setFloatLabelType","hideElement","updateMainList","removeChip","updateChipStatus","element2","addValue","addListSelection","addChip","dispatchSelect","isNotTrigger","getChip","closeElements","onMobileChipInteraction","chipElem","chipClose","data-value","chipContent","setClass","mouseIn","mouseOut","fieldProperty","listCurrentOptions","overAllHeight","selectAllHeight","onListMouseDown","ClearAll","windowResize","delim","textArr","indexItem","selectItems","mainlist","addListHover","ariaCheck","delimChar","tempIndex","wrapperleng","remaining","downIconWidth","overAllContainer","overflowCountTemplate","totalCountTemplate","remainContent","raminElement","totalCompiledString","remainSize","dropIcon","getOverflowVal","totalWidth","updateRemainTemplate","updateRemainingText","newTemp","selectAllItem","onLoadSelect","selectAllItems","updateVal","dropDownIcon","msProps","mainLiLength","liLength","DELIMITER_VIEW","checkAutoFocus","placeholderText","placeholderElement","pagerDropDownDiv","dropDownDiv","defaultTextDiv","pagerCons","pageSizesModule","pageSizesArray","convertValue","dropDownListObject","beforeValueChange","pageSizeValue","ExternalMessage","externalMessage","Page","pagerDestroy","gridExtend","dropDownChanged","addAriaAttr","numericContainerNew","numericContainer","numericContainerDiv","isForceCancel","previousPage","appendToElement","complete","updateLayout","inboundChange","events.pageComplete","FilterCellRenderer","fltrData","filterBarTemplate","templateWrite","FlMenuOptrUI","customFltrOperators","customFilterOperators","renderOperatorUI","dlgConetntEle","dlgObj","optrData","customOptr","operators","dropDatasource","selectedValue","dropSelectedVal","optrDiv","optrInput","dropOptr","dropDownOpen","selValue","selectedField","getFlOperator","StringFilterUI","serLocator","actObj","getAutoCompleteOptions","getOptrInstance","localizeText","mapObj","filteredValue","read","filterOptr","filterObj","actuiObj","NumberFilterUI","numericTxtObj","BooleanFilterUI","dropInstance","drpuiObj","DateFilterUI","fltrSettings","inputElem","datePickerObj","FilterMenuRenderer","fltrObj","isDialogOpen","colTypes","string","boolean","datetime","flMuiObj","renderDlgContent","mainDiv","dlgDiv","filterBtnClick","clearBtnClick","renderFilterUI","writeMethod","renderFlValueUI","valueDiv","instanceofFilterUI","ui","dlgContentEle","flValue","flOptrValue","targ","fltrValue","flIcon","CLS_ITEMS","CLS_ITEM","CLS_SEPARATOR","CLS_POPUPICON","CLS_POPUPDOWN","CLS_TBARTEXT","CLS_TBAROVERFLOW","CLS_POPOVERFLOW","CLS_TBARNAV","CLS_TBARPOS","CLS_POPUPCLASS","CLS_POPUP","CLS_TBARNAVACT","CLS_TBARIGNORE","CLS_POPPRI","CLS_MULTIROW_SEPARATOR","CLS_EXTENDABLE_SEPARATOR","CLS_EXTENDEDPOPOPEN","Toolbar","popupOpen","popupClose","tempId","trgtEle","ctrlTem","clearProperty","popObj","tbarAlign","attrb","enableCollision","tbarItemsCol","popupPriCount","keyModule","docKeyDown","popCheck","overflowMode","destroyScroll","docEvent","tbarEle","tbarAlgEle","lefts","centers","rights","popEle","destroyItems","tbarItems","destroyMode","tempEle","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","keyHandling","clst","navChk","scrollChk","popAnimate","eleFocus","popupCheck","popFrstEle","activeEle","activeEleRemove","tbarScrollChk","sib","skipEle","isPopupElement","popupNav","popupClickHandler","getElementOffsetY","setStyle","aria-orientation","renderOverflowMode","itemPositioning","checkPopupRefresh","initScroll","innerItems","checkOverflow","itemWidthCal","getScrollCntEle","innerItem","eleWidth","itemWidth","popNav","scrollNav","navEleWidth","priorityCheck","offsetWid","removePositioning","createPopupEle","eleInlineItem","eleItem","multiVar","extendVar","innerNav","createPopupIcon","innerNavDom","checkPriority","pushingPoppedEle","tbarObj","popupPri","eleHeight","sepHeight","nodeIndex","nodePri","tbResize","tbarElement","sepItem","extendEle","popupInit","eleStyles","tbarPopupHandler","toolEle","popupElePos","popIcon","overflowHeight","tbEleData","inEle","pre","popPriority","eleWid","sepCheck","itemPopCount","checkClass","rVal","mrgn","compuStyle","fstEleCheck","tbarEleMrgn","eleWid_1","sepEle","popedEle","tbarPriRef","sepPri","des","elWid","wid","ig","ignoreCount","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","isVer","dimension","popupEleWidth","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","tbarWidth","tbarItemsWid","elWidth","btnText","eleSplice","align","sepBeforePri_1","refreshPositioning","tbarWid","popWid","tbarItemAlign","itemEle","showAlwaysInPopup","alignDiv","alignEle","leftAlign_1","ctrlTemplate","itemEleDom","innerPos","renderSubComponent","setAttr","addItems","itemsDiv","itemsRerender","itemAgn","items_1","algIndex","removeItemByIndex","eleIdx","indexAgn","templateRender","templateProp","isComponent","itemType","tempStr","tempArray","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","tooltipText","tempDom","itemClick","showTextOn","sTxt","multirowele","tEle","changedProb","popupPriCheck","booleanCheck","CLS_ACRDN_ROOT","CLS_ROOT","CLS_HEADER","CLS_HEADERCTN","CLS_CONTENT","CLS_CTENT","CLS_TOOGLEICN","CLS_CTNHIDE","CLS_SLCTED","CLS_ACTIVE","CLS_TOGANIMATE","CLS_EXPANDSTATE","AccordionActionSettings","AccordionAnimationSettings","AccordionItem","Accordion","isDestroy","templateEle","eleStr","nested","isNested","expandedItems","initExpand","expandMode","initItemExpand","innerEles","aria-level","toggleIconGenerate","tglIcon","hdrColIcon","expandItem","renderInnerItem","acrdnItem","acrdnHdr","acrdnCtn","acrdnCtnItem","acrdActive","getIndexByItem","contentRendering","ariaAttrUpdate","cntclkCheck","acrdAniEle","acrdAniEle_1","sameContentCheck","sameHeader","acrdnCtn_1","expandState","collapse","eleMoveFocus","clstItem","headerEleGenerate","ctnEle","hdrEle","fetchElement","hdr","hdrIcnEle","hdrIcon","temString","eleVal","itemcnt","ctn","trgtItemEle","isExpanded","eff","expandedItemsPush","expandProgress","expandAnimation","ef","icn","lastActiveItemId","expandedItemsPop","collapseProgress","collapseAnimation","trgtItEl","trgtHeight","itemHeight","itemAttribUpdate","itemLen","innerItemEle","expandedItemRefresh","eleHeader","itemExpand","expandedItem","updateItem","acrdn","changedProp","Menu","tempItems","createMenuItems","pIdField","CLS_HIDDEN","CLS_ICON_CLOSE","CLS_WRAP","CLS_TB_ITEMS","CLS_TB_ITEM","CLS_TB_POPUP","CLS_PROGRESS","TabActionSettings","TabAnimationSettings","TabItem","Tab","animObj","lastIndex","isIconAlone","tbObj","expTemplateContent","cntEle","prevIndex","isPopup","isSwipeed","itemIndexArray","updatePopAnimationConfig","btnCls","CLS_ICONS","renderContainer","setOrientation","headerPlacement","renderHeader","scrCnt","bdrLine","CLS_INDICATOR","scrCntClass","setContentHeight","hdrPlace","tabItems","addVerticalClass","hdrItems","aria-controls","txt","parseObject","clicked","updateOrientationAttribute","setCloseButton","showCloseButton","hdrItem","contents","reRenderItems","txtWrapEle","tbCount","tItems","spliceArray","tHtml","txtEmpty","headerTextCompile","tCont","wrapAttrs","tItem","spliceItemIndex","removeActiveClass","hdrActEle","checkPopupOverflow","tbPop","tbrItems","isOverflow","ripEle","tbItem","actEleId","prevEle","trg","refreshActElePosition","prevCtnAnimation","triggerPrevAnimation","oldCnt","animateObj","triggerAnimation","prevActiveEle","extIndex","newCnt","getTrgContent","idNo","openEff","clsEff","setActiveBorder","trgParent","trgIndex","getEleIndex","templateCompile","compileElement","templateFUN","findEle","tbPos","place","heightAdjustMode","getHeight","cs","trgHdrEle","tbWidth","trg_1","enableAnimation","eleTrg","curActItem","refreshItemVisibility","eventArg","prevItem","previousIndex","selectedContent","selectedID","isSwiped","setItems","isReplace","refreshActiveBorder","tbPopObj","spaceKeyDown","tabKeyModule","removeTab","actEle","nxtSib","scrBar","scrStart","scrEnd","eleStart","eleEnd","eleViewRange","closeButtonTitle","evalOnPropertyChangeItems","cntItem","isHiddenEle","addTab","hideTab","enableTab","lastEleIndex","addedItems","textValue","removeArgs","removedItem","removedIndex","cntTrg","selectingID","selectingItem","selectingIndex","selectingContent","COLLAPSIBLE","EXPANDABLE","LISTITEM","LISTTEXT","PARENTITEM","LOAD","PROCESS","TEXTWRAP","TREEINPUT","SIBLING","DROPNEXT","FULLROW","EXPANDED","CHECK","CHECKBOXWRAP","CHECKBOXFRAME","treeAriaAttr","treeRole","FieldsSettings","ActionSettings","NodeAnimationSettings","TreeView","preventExpand","checkedElement","disableNode","mouseDownStatus","TreeView_1","checkActionNodes","dragStartAction","ctrlDown","ctrlUp","ctrlA","shiftHome","shiftEnd","csDown","csUp","csEnter","csHome","csEnd","beforeNodeCreate","updateListProp","treeList","isInitalExpand","setTouchClass","selectedNodes","checkedNodes","expandedNodes","setDataBinding","setExpandOnType","wireEditingEvents","setDragAndDrop","allowDragAndDrop","setFullRow","fullRowSelect","nodeTemplateFn","nodeTemplate","iconModel","rippleIconFn","setMultiSelect","firstUl","treeData","isNumberTypeId","getType","setRootData","finalize","rootData","parentID","getDataType","groupedData","getGroupedData","rootItems","getChildNodes","isSorted","getSortedData","loadOnDemand","renderChildNodes","finalizeNode","checkboxEle","touchClass","addCheck","frame","frameMouseHandler","createFullRow","allowMultiSelection","addActionClass","nodeData","actionValue","iNodes","sNodes","selectNode","cNodes","disableExpandAttr","eNodes","updateList","updateCheckedProp","nodes_1","ensureIndeterminate","autoCheck","ensureParentCheckState","ensureChildCheckState","checkBoxEle","parentUL","currentParent","childElement","checkBoxes","checkedState","currentLoadData","isNodeChecked","doCheckBoxAction","doCheck","liEle","getElement","validateCheckNode","isPrevent","currLi","getCheckEvent","removeCheck","getNodeData","firstNode","updateIdAttr","hasPid","doExpandAction","eUids","expandGivenNodes","eNode","expandAction","afterFinalized","expandCallback","eUid","doSelectionAction","sUids","sNode","selectGivenNodes","preventContextMenu","setFocusElement","checkWrapper","checkElement","triggerClickEvent","collapseNode","toggleSelect","nodeCheckingEvent","nodeCheckedEvent","expandNode","liEle_1","animateHeight","expandedNode","addExpand","expandArgs","getExpandEvent","colArgs","collapsedNode","removeExpand","toRemove","parentLi","expandChild","eicon","childItems","mapper_1","getChildFields","loadChild","ensureCheckNode","disableTreeNodes","renderSubChild","getNodeObject","doDisableAction","nodeLevel","dataLevel","getChildMapper","isRoot","getChildGroup","objlen","dataId","cIcons","multiSelect","unselectNode","getSelectEvent","removeSelectAll","startNode","liList","currNode","addSelect","focusedNode","getFocusedNode","expandOnType","expandOn","expandHandler","expandCollapseAction","inpEle","oldText","checkNode","openNode","shiftKeySelect","navigateNode","navigateRootNode","createTextbox","navigateToFocus","isUp","focusNode","getScrollParent","parentPos","isVisibleInViewport","txtWrap","isTowards","nextNode","getNextNode","getPrevNode","allCheckNode","newCheck","childCheck","validateCheck","childId","childId_1","toBeOpened","focusNextNode","setFocus","isBackwards","rootNode","getRootNode","getEndNode","fNode","prevNode","endNode","preNode","hoveredNode","fromDS","pNode","pid","reRenderNodes","newClass","editingHandler","oldInpEle","updateOldText","getEditEvent","wireInputEvents","editData","editFields","inputFocusOut","newText","txtEle","appendNewText","isInput","getId","getChildNodeObject","childData","toBind","initializeDrag","destroyDrag","virtualEle","dragRoot","dragWrap","dragLi","isSameNode","cloneEle","DRAGITEM","nLen","cNode","getDragEvent","draggedNode","targetTouches","dragAction","removeVirtualEle","dropTarget","dropRoot","preventTargetExpand","dragParent","draggedParentNode","dropObj","over","dropAction","dropWrap","dropLi","isDescendant","virEle","renderVirtualEle","dropIndicator","dragInstance","appendNode","dropAsSiblingNode","dropAsChildNode","dropUl","dragParentUl","dragParentLi","moveData","updateElement","updateAriaLevel","updateInstance","dropParentUl","expandParent","childLi","dropParentLi","removedData","updateChildField","refId","getDataPos","updateField","currPid","removeChildNodes","addChildData","dragIcon","updateChildAriaLevel","sibEle","dragNode","dropData","draggedNodeData","newParent","dragLiParent","targetParent","indexValue","dropTar","clonedNode","droppedNode","droppedNodeData","dropIndex","dropLevel","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeNode","removeData","updateSelectedNodes","updateExpandedNodes","newId","currId","doGivenAction","toExpand","addGivenNodes","dropEle","updateMapper","refNode","navigateUrl","nodeId","updated","childObj","doEnableAction","updatePersistProp","removeField","sleNodes","l","slelen","enodes","nodelen","cnodes","names","getMapperProp","resultData","touchEditObj","wireClickEvent","proxy_3","touchClickObj","wireExpandOnEvent","proxy_4","touchExpandObj","matched","setCheckedNodes","uncheckAll","checkAll","collapseAll","onLoaded","addNodes","dropUl_1","proxy_5","beginEdit","disableNodes","enableNodes","ensureVisible","expandAll","getAllCheckedNodes","checkNodes","childNode","getNode","getTreeData","moveNodes","sourceNodes","removeNodes","updateNode","CLOSE","OPEN","TRASITION","VISIBILITY","DISABLEANIMATION","CONTEXT","SIDEBARABSOLUTE","Sidebar","setTarget","enableDock","setDock","setMediaQuery","setType","setCloseOnDocumentClick","closeOnDocumentClick","documentclickHandler","dockSize","z-index","classELement","destroyBackDrop","showBackdrop","closeArguments","changeArguments","setAnimation","openArguments","createBackDrop","mediaQuery","enableGestureHandler","setEnableGestures","enableGestures","mainContentEle","sidebarEle","margin-left","margin-right","ExcelFilter","getCMenuDS","unwireExEvents","cmenu","createMenu","isCheckIcon","menu","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","clickExHandler","menuItem","destroyCMenu","menuObj","submenu","isCMenuOpen","selectedMenu","menuOptions","selectHandler","onClose","preventClose","client","contextRect","getContextBounds","getCMenuYPosition","MouseEvent","contextWidth","filterLength","renderDialogue","complexFieldName","overlayClick","removeDialog","createdDialog","removeObjects","datePicker","dateTimePicker","renderCustomFilter","dlgFields","fieldSet","checkBoxValue","colValue","fOperator","sValue","sOperator","andRadio","firstOperator","firstValue","secondOperator","secondValue","arg7","arg8","isFirst","fieldElement","xlfloptr","menuText","getSelectedValue","getSelectedText","renderRadioButton","radioDiv","frstpredicate","secndpredicate","renderMatchCase","orRadio","elementId","isFilteredCol","fltrPredicates","columnObj","valueInput","renderAutoComplete","renderNumericTextBox","renderDate","renderDateTime","matchCaseDiv","matchCaseInput","completeAction","columnvalue","mapObject","performComplexDataOperation","returnObj","duplicateMap","cellText","nextFlMenuOpen","Excel","fltrDlgDetails","getLocalizedCustomOperators","fltrElem","rowdrag","updateFilterMsg","filterBarElement","currentFilterObject","getFilteredColsIndexByField","currentFilteringColumn","events.filterComplete","events.filterOpen","columnMenuFilter","filterIconClickHandler","filterCell","checkForSkipInput","filterStatusMsg","applyColumnFormat","addFilteredClass","checkAlreadyColFiltered","getFlvalue","setFormatForFlColumn","refreshFilterSettings","updateFilter","getFilterBarElement","fltrElement","isClose","filterDialogOpen","customOperators","filterHandler","localizedStrings","fCell","currentFilterColumn","closeHeaderEle","processFilter","updateCrossIcon","getFormatFlValue","showFilterBarStatus","isSkip","skipInput","stopTimer","startTimer","onTimerTick","immediateModeDelay","templateRead","validateFilterValue","getOperator","singleOp","multipleOp","=","!","numOptr","stringOperator","numberOperator","dateOperator","datetimeOperator","booleanOperator","gClient","fClient","datepickerEle","targetText","filterIconElement","refreshFilterIcon","resizeClassList","suppress","Resize","tapped","isDblClk","findColumn","resizeColumn","footerTable","headerTextClone","contentTextClone","indentWidthClone","detailsElement","contentText","wHeader","wContent","columnbyindex","calcTableWidth","tableWidth","offsetWidthValue","refreshHeight","setHandlerHeight","getResizeHandlers","callAutoFit","getTargetColumn","refreshColumnWidth","refreshStackedColumnWidth","mtbody","ftbody","mtr","ftr","parentElementWidth","appendHelper","getPointX","minMove","removeHelper","cancelResizeAction","updateCursor","removeEvents","getColData","mousemove","setHelperHeight","colData","finalColumns","getSubColumns","calulateColumnsWidth","finalColumns_1","updateHelper","colWidth","subColumns","isFrozenColResized","doubleTapEvent","columns_2","getStackedWidth","calcPos","fLeft","parentOffset","doc","getUserAgent","timeoutHandler","Reorder","events.reorderComplete","createReorderElement","chkDropPosition","srcElem","destElem","bool","closestElement","targetParentContainerIndex","chkDropAllCols","isFound","findColParent","getColumnsModel","subCols","uId","destElemUid","destColumn","sourceUid_1","colMatchIndex_1","destUid_1","moveColumns","newIndex","destElement","oldIdx","column_2","destIndex","reorderByColumn","getColParent","srcIdx","flatColumns","fTh","mTh","fHeaders","reorderSingleColumn","fColumn","toColumn","reorderMultipleColumns","fromFNames","isLeft","setDisplay","updateScrollPostion","updateArrowPosition","draggableType","cliRect","cliRectBaseLeft","cliRectBaseRight","scrollElem","cliRectBase","RowDD","isOverflowBorder","selectedRowColls","dragelement","events.rowDragStartHelper","startedRow","removeCell","dropCountEle","spanCssEle","events.rowDragStart","dropElem","getElementFromPosition","hoverState","trElement","events.rowDrag","moveDragRows","bottomborder","gridcontentEle","getScrollWidth","removeBorder","startRow","stRow","startedRowIndex","events.rowDrop","targetRow","deleteCell","onDataBoundFn","draggedRecords","dropIdx","actualIdx","len1","reorderRow","scrollPixel_1","setScrollDown","scrollPixel_2","scrollPixel","setBorder","removeFirstRowBorder","removeLastRowBorder","rowElement","gridheaderEle","islastRowIndex","getTargetIdx","singleRowDrop","srcControl","isSingleRowDragDrop","targetIndex","isAppliedGroup","isAppliedUnGroup","groupGenerator","events.groupComplete","events.ungroupComplete","onGroupAggregates","grpRow","expandCollapseRows","applySortFromTarget","unGroupFromTarget","toogleGroupFromHeader","showToggleButton","gHeader","rowNodes","expandElem","renderGroupDropArea","initDragAndDrop","refreshToggleBtn","groupElem","updateGroupDropArea","dragLabel","initializeGHeaderDrop","initializeGHeaderDrag","colName","addColToGroupDrop","groupAddSortingQuery","removeColFromGroupDrop","groupedColumn","childDiv","ej-mappingname","headerCell","showUngroupButton","getGHeaderCell","updateGroupedColumn","updateButtonVisibility","clearGrouping","editedData","iterateGroupAggregates","summaryRows","dataUid","events.refreshAggregateCell","updatedData","initData","deletedCols","changeds","mergeData","pKeyVal","cItem","eData","aggr","aggrds","DetailRow","toogleExpandcollapse","nextRow","detailRow","data-uid","detailCell","getGridModel","parentPrimaryKeys","parentKeyField","parentRowData","promiseResolve","gridElem","events.detailDataBound","detailElement","getTDfromIndex","predefinedItems","gridID","preItems_1","localeName","ColumnChooser","createToolbar","tool","toolbarClickHandler","viewStr","searchElement","refreshToolbarItems","updateSearchBox","disableItems","hasData","toolbarItems_1","getItemObject","itemObject","itemName","gID","tarElement","searchBoxObj","FooterRenderer","gridModule","modelGenerator","movableContent","fDiv","mDiv","frozenContent","tFoot","freezeTable","renderSummaryContent","cStart","cEnd","summaries","dummies","fragment","rowrenderer","srow","frozenDiv","onScroll","refreshCol","mheaderCol","fheaderCol","onWidthChange","getColFromIndex","updateFooterTableWidth","fCol","mergeds","initds","addrow","idVal","currentds","currentData","curIndx","agrVal","SummaryCellRenderer","refreshWithAggregate","cellNode","curCell","Aggregate","initiateRender","cellFac","footerRenderer","prepareSummaryInfo","getFormatFromType","cModel","InterSectionObserver","fromWheel","touchMove","sentinelInfo","containerRect","entered","pageHeight","observe","onEnterCallback","virtualScrollHandler","debounced100","debounced50","axes","sentinel","setPageHeight","VirtualRowModelGenerator","cOffsets","rowModelGenerator","notifyArgs","virtualInfo","loadNext","loadSelf","nextInfo","getBlockIndexes","loadedBlocks","checkAndResetCache","blockIndexes","isBlockAvailable","getStartIndex","median","updateGroupRow","getPage","block","columnIndexes","blk","even","getColumnIndexes","calWidth","iOffset","offsetVal","refreshColOffsets","gLen","currentFirst","iterateGroup","oRow","VirtualContentRenderer","prevHeight","preventEvent","offsets","tmpOffsets","VirtualElementHandler","offsetKeys","eventListener","vgenerator","renderWrapper","renderPlaceHolder","debounceEvent","getBlockHeight","observer","adjustTable","scrollListener","scrollArgs","viewInfo","getInfoFromView","prevInfo","tempBlocks","infoType","getPageFromTop","blocks","ensureBlocks","every","mIdx","old","isEndBlock","getTotalBlocks","newChild","cBlock","cOffset","getColumnOffset","refreshOffsets","vHeight","getTranslateY","setWrapperWidth","sTop","setVirtualHeight","getOffset","onDataReady","maxPage","resetScrollPosition","cHeight","isOnenter","endTranslate","blockHeight","maxBlock","onEntered","isWheel","getBlockSize","totalBlocks","startIdx","bSize","rem","refreshVirtualElement","VirtualHeaderRenderer","gen","xValue","yValue","VirtualScroll","ensurePageSize","blockSize","InlineEditRender","addNew","mTbody","newRowPosition","getEditElement","renderMovableform","events.frozenHeight","movableForm","updateFreezeEdit","getFreezeRow","fHdr","tdElement","refreshFreezeEdit","fCls","mTd","updateFrozenCont","td_1","BatchEditRender","columnObject","DialogEditRender","events.dialogDestroy","setLocaleObj","dialog","primaryKeyValue","dialogClose","events.destroyForm","checkColumnIsGrouped","dataCell","EditRender","Inline","Normal","Batch","getEditElements","convertWidget","fForm","cols_1","tArgs","BooleanEditCell","activeClasses","selectChkBox","editRow","checkBoxChange","DropDownEditCell","ddActionComplete","dlgElement","NumericEditCell","DefaultEditCell","NormalEdit","allowEditOnDblClick","editComplete","editRowIndex","primaryKeys","primaryKeyValues","applyFormValidation","form1","form2","mFormObj","isDlg","dlgWrapper","dlgForm","getCurrentEditedData","mForm","addedRowIndex","destroyElements","destroyWidgets","editHandler","edSucc","edFail","editSuccess","editFailure","updateCurrentViewData","requestSuccess","stopEditStatus","dataLen","tmpRecord","contained","mElem","editMElem","events.doubleTap","events.deleteComplete","events.saveComplete","InlineEdit","BatchEdit","cellDetails","events.beforeCellFocused","onBeforeCellFocused","setCellIdx","editCell","isAddRow","validateFormObj","isLastCellPrimaryKey","editCellFromIndex","isAdded","removeRowObjectFromUID","events.batchCancel","refreshRowIdx","bulkDelete","bulkAddRow","batchSave","checkAllBox","batchChanges","mergeBatchChanges","addRowObject","getIndexFromData","uniqueid","events.batchDelete","nonMovableRows","defaultData","getDefaultData","events.batchAdd","findNextEditableCell","args1","isValOnly","validation","checkNPCell","dValues","mRowData","colIdx","getDataByIndex","getCellIdx","isColored","setChanges","rowcell","isForceSave","cloneEditedData","visibleColumns","addCancelWhilePaging","DialogEdit","DatePickerEditCell","TemplateEditCell","editCellType","dropdownedit","numericedit","datepickeredit","datetimepickeredit","booleanedit","defaultedit","templateedit","updateEditObj","createAlertDlg","createConfirmDlg","updateColTypeObj","tapEvent","alertDObj","refreshToolbar","showDeleteConfirmDialog","endEditing","getCurrentEditCellData","getValueFromType","destroyToolTip","dlgWidget","dlgOk","dlgCancel","alertClick","btnOptions","executeAction","inputs","preventObj","mRules","createFormObj","validationComplete","valErrorPlacement","getElemTable","isFHdr","gcontent","isScroll","inputClient","arrow","InternalEnum","showColumn","hideColumn","isDlgOpen","dlghide","initialOpenDlg","stateChangeColumns","isInitialOpen","isCustomizeOpenCC","searchOperator","rtlUpdate","enableAfterRenderEle","hideDialog","clearActions","refreshCheckboxState","columnChooserSearch","removeCancelIcon","refreshCheckboxButton","targetdlg","hideOpenedDialog","addcancelIcon","events.beforeOpenColumnChooser","mOpenDlg","openColumnChooser","renderChooserList","customDialogOpen","customDialogClose","columnChooserManualSearch","confirmDlgBtnClick","searchDiv","ccsearchele","ccsearchicon","conDiv","innerDivContent","refreshCheckboxList","columnStateChange","dialogInstance","stateColumns","colUid","currentCol","checkstatecolumn","coluid","searchVal","fltrCol","clearSearch","buttonEle","nMatchele","checkBoxClickHandler","checkstate","columnUid","srchShowCols","searchData","itemsLen","columnUID","hideCols","gdCol","gridObject","currentCheckBoxColls","cbox","cclist","hideColState","showColState","cccheckboxlist","searchValue","openCC","dlgEle","dlgLen","CellStyle","numFmtId","backColor","fontName","fontColor","italic","bold","underline","wrapText","hAlign","vAlign","numberFormat","borders","Borders","isGlobalStyle","Font","sz","CellXfs","Alignment","CellStyleXfs","CellStyles","xfId","NumFmt","formatCode","Border","mLine","mColor","lineStyle","Cells","inserted","Rows","Worksheets","Worksheet","isSummaryRowBelow","showGridLines","HyperLink","Grouping","FreezePane","MergeCell","MergeCells","mergeCell","mCell","isIntersecting","intersectingCell","Width","Height","ref","fileName","buffer","mimeType","getMimeType","Blob","isMicrosoftBrowser","msSaveBlob","downloadLink","saveInternal","hasDownloadAttribute","download","dataUrl_1","createObjectURL","revokeObjectURL","reader_1","FileReader","onloadend","readAsDataURL","XmlWriter","contentPos","bufferText","bufferBlob","currentState","namespaceStack","Namespace","elementStack","XmlElement","attributeStack","flush","writeProcessingInstruction","checkName","writeStartDocument","writeProcessingInstructionInternal","standalone","rawText","writeEndDocument","writeEndElement","writeStartElement","localName","namespace","startElementContent","lookupPrefix","lookupNamespace","writeStartElementInternal","writeEndElementInternal","previousTop","writeElementString","writeString","writeAttributeString","writeStartAttribute","writeStringInternal","writeEndAttribute","writeInternal","writeRaw","isRawString","writeStartAttributePrefixAndNameSpace","writeStartAttributeSpecialAttribute","skipPushAndWrite","pushNamespaceExplicit","pushNamespaceImplicit","writeStartAttributeInternal","namespaceName","writeNamespaceDeclaration","namespaceUri","writeStartNamespaceDeclaration","inAttributeValue","addNamespace","ns","lookupNamespaceIndex","existingNsIndex","XmlAttribute","isDuplicate","Encoding","includeBom","emitBOM","encodingType","initBOM","getByteCount","chars","utf8Len","getByteCountInternal","codePoint","isHighSurrogate","codeUnit","toCodepoint","highCodeUnit","lowCodeUnit","charIndex","charCount","byteCount","isUtf8","high","low","getBytes","RangeError","ArrayBuffer","getBytesOfUtf8Encoding","getBytesOfUnicodeEncoding","getBytesOfAnsiEncoding","getString","byteLength","byteCal","getStringOfUtf8Encoding","byteUnicode","getStringofUnicodeEncoding","bufview","charcode","uint","uint16","byteUni","byte16","StreamWriter","encoding","enc","setBomByte","arrayUnicode","uint8","arrayUtf8","utf8","bufferArray","writeLine","ARR_LITERAL_CODES","Int16Array","ARR_LITERAL_LENGTHS","ARR_DISTANCE_CODES","ARR_DISTANCE_LENGTHS","CompressedStreamWriter","noWrap","pendingBuffer","pendingBufLength","pendingBufCache","pendingBufBitsInCache","bufferPosition","extraBits","currentHash","matchStart","matchLength","matchPrevAvail","blockStart","stringStart","lookAhead","totalBytesIn","inputOffset","inputEnd","windowSize","windowMask","hashSize","hashMask","hashShift","maxDist","checkSum","isHuffmanTreeInitiated","initHuffmanTree","treeLiteral","CompressorHuffmanTree","treeDistances","treeCodeLengths","arrDistances","arrLiterals","stream","dataWindow","hashHead","hashPrevious","writeZLibHeader","compressedString","encode","inputBuffer","ChecksumCalculator","checksumUpdate","pendingBufferFlush","compressData","headerDate","pendingBufferWriteShortBytes","finish","success","fillWindow","canFlush","compressSlow","lookAheadCompleted","slideWindow","prevMatch","prevLen","discardMatch","matchPreviousBest","matchPreviousAvailable","huffmanIsFull","insertString","findLongestMatch","huffmanTallyLit","huffmanTallyDist","huffmanFlushBlock","lastBlock","more","subarray","updateHash","chainLen","niceLen","scan","bestEnd","bestLength","stringEnd","scanEnd1","scanEnd","literal","codeFrequencies","dist","lc","huffmanLengthCode","dc","huffmanDistanceCode","stored","storedOffset","storedLength","buildTree","calculateBLFreq","blTreeCodes","codeLengths","huffCodeLengthOrders","opt_len","getEncodedLength","static_len","huffmanFlushStoredBlock","pendingBufferWriteBits","setStaticCodes","huffmanCompressBlock","huffmanReset","huffmanSendAllTrees","pendingBufferAlignToByte","pendingBufferWriteShort","pendingBufferWriteByteBlock","buildCodes","treeLength","rank","writeTree","literalLen","writeCodeToStream","bits","Uint32Array","pendingBufferFlushBits","bitReverse","writer","elementCount","minCodes","codeMinCount","codeFrequency","lengthCount","Int32Array","codeCount","codeLength","codes","lengths","lengthTemp","nextCode","bitsCount","reverseBits","blTree","maxCount","minCount","curLen","nextLen","maxRepeatCount","minRepeatCount","currentRepeatCount","currentCodeLength","codesCount","arrTree","freq","pPos","nodesCount","iIndex","constructHuffmanTree","buildLength","lastVal","minDepth","numNodes","numLeafs","calculateOptimalCodeLength","iIncreasableLength","recreateTree","nodePtr","childPtr","childIndex","bitLength","checksum","checksum_uint","s1","s2","checkSumBitOffset","checksumIterationCount","checksumBase","CRC32TABLE","ZipArchive","initCrc32Table","ZipArchiveItem","addDirectory","directoryName","zipArchive","saveAsBlob","skipFileSave","zipData","dirLength","getCompressedData","constructZippedObject","writeZippedContent","crc32Value","compressedData","compressedSize","uncompressedDataSize","compressionType","calculateCrc32Value","readAsArrayBuffer","crc32Table","compressor","nextIndex","subArray","zipParts","extFileAttr","writeHeader","localHeader","centralDir","writeCentralDirectory","zipHeader","getModifiedTime","getModifiedDate","localDirLen","cenDirLen","getArrayBuffer","writeFooter","externalFileAttribute","centralLength","localLength","modTime","modiDate","displayText","CsvHelper","csvStr","globalStyles","worksheets","parseWorksheet","parseRows","parseRow","parseCell","csv","parseCellValue","has","dwlLink","BlobHelper","getBlob","Workbook","saveType","currencyString","sharedStringCount","unitsProportions","hyperlinkStyle","mSaveType","mArchive","sharedString","mFonts","mBorders","mStyles","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","cellStyle","parserCellStyle","cellStylesIn","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","author","comments","company","manager","subject","createdDate","modifiedDate","tags","jsonSheet","sheet","mergedCellsStyle","mHyperLinks","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","pageSetup","hyperLinks","mergeOptions","applyProperties","sourceJson","destJson","getCellName","getColumnName","strColumnName","iCurrentDigit","titleRowName","printTitleName","fromRow","toRow","titleColName","fromColumn","freezePanes","leftCell","columnsLength","rowsLength","parserRow","insertMergedCellsStyle","rowToInsert","createCell","insertIndex","styleIndex","cellToInsert","refName","parseGrouping","parseCells","outlineLevel","isCollapsed","cellsLength","spanMin","spanMax","cellId","jsonCell","hyperlink","hyperLink","getCellValueType","rId","formula","parseCellType","processMergeCells","spans","applyGlobalStyle","defStyleIndex","parserBorder","leftBorder","rightBorder","topBorder","bottomBorder","processCellStyle","switchNumberFormat","numFmt","cellStyleXfs","cellXfs","returnFormat","processNumFormatId","compareResult","compareStyle","isNewFont","toCompareStyle","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","baseStyle","toOADate","blobSaveType","blobData","proxyUrl","xlsxMatch","csvMatch","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveSheetView","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","_f","_g","_h","_j","hLink","saveSheetRelations","pixels","dDigitWidth","trunc","relStr","paneString","sstStart","si","processString","updateCellXfsStyleXfs","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","compareFontResult","fontId","fillId","borderId","applyAlignment","numFmtStyle_1","fontStyle","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","saveAlignment","cellXf","alignString","appString","coreString","toISOString","wbRelation","contentTypeString","sheetsOverride","xmlString","archiveItem","updatedMergedCellStyles","sCell","eCell","dateToTicks","isLeapYear","timeToTicks","daysTo1899","ExportHelper","hideColumnInclude","getGridRowModel","processColumns","childGridLevel","getColumnData","columnPromise","fColumns","getHeaders","isHideColumnInclude","processHeaderCells","generateActualColumns","getConvertedWidth","actualColumns","getCellCount","appendGridCells","gridRows","isIgnoreFirstCell","gridColumn","checkAndExport","gridPool","globalResolve","childGridObj","createChildGrid","exportType","detailRowModule","exportId","ExportValueFormatter","returnFormattedValue","formatCellValue","ExcelExport","book","workSheet","rowLength","expType","includeHiddenColumn","isCsvExport","isElementIdChanged","isExporting","exportValueFormatter","exportProperties","isCsv","hierarchyExportMode","processRecords","processInnerRecords","allPromise_1","events.excelExportComplete","blobPromise","groupedColLength","blankRows","multipleExport","processExcelHeader","processGridExport","organisedRows","organiseRows","processExcelFooter","initialIndex","childRows","excelRows","groupIndent","processHeaderContent","processRecordContent","currentViewRecords","excelRow","processRecordRows","processGroupedRows","processAggregates","getCaptionThemeStyle","groupCaptionSummaryRows","fillAggregates","lIndex","hIndex","tCell","gCell","fkData","excelCellArgs","getColumnStyle","returnVal","events.exportDetailDataBound","childGridCell","events.exportRowDataBound","excelExportProps","gRow","intent","rec","byGroup","summaryModel","groupSummaryRows","sRows","customIndex","rows_2","Sum","Average","Max","Min","TrueCount","FalseCount","Custom","getAggreateValue","gridCellStyle","JSON1","JSON2","attrname","gridColumns","spannedCells","currentCellIndex","gridCell","getHeaderThemeStyle","excelHeaderCellArgs","events.excelHeaderQueryCellInfo","parseStyles","getRecordThemeStyle","updateThemeStyle","themestyle","noRows","updatedCellIndex","footerRows","spannedCells_1","Dictionary","toStringFunction","nElements","toStr","pair","previousElement","keysArray","namesOfKeys","index1","pair1","valuesArray","namesOfValues","index2","pair2","PdfName","stringStartMark","internalValue","isSaving6","position6","normalizeValue","status6","index6","escapeString","crossTable","newName","stringValue","ch","delimiters","replacements","Operators","forTest","endObj","whiteSpace","slash","newLine","endStream","xref","trailer","startxref","eof","beginText","endText","appendLineSegment","fillEvenOdd","fillStroke","fillStrokeEvenOdd","appendbeziercurve","appendRectangle","saveState","restoreState","paintXObject","modifyCtm","modifyTM","setLineWidth","setLineCapStyle","setLineJoinStyle","setDashPattern","setFlatnessTolerance","closeStrokePath","closeFillStrokePath","setCharacterSpace","setWordSpace","setHorizontalScaling","setTextLeading","setFont","setRenderingMode","setTextRise","setTextScaling","setCoords","goToNextLine","setTextWithFormatting","setTextOnNewLine","selectcolorspaceforstroking","selectcolorspacefornonstroking","setrbgcolorforstroking","setrbgcolorfornonstroking","setcmykcolorforstroking","setcmykcolorfornonstroking","setgraycolorforstroking","setgraycolorfornonstroking","clipPathEvenOdd","endPath","setGraphicsState","comment","evenOdd","setMiterLimit","DictionaryProperties","pages","kids","resources","mediaBox","decodeParms","type1","baseFont","subtype","procset","colorSpace","extGState","xObject","bitsPerComponent","dctdecode","blackIs1","predictor","deviceRgb","annot","annots","ca","CA","xyz","dest","BM","flatedecode","bBox","w","cIDFontType2","cIDToGIDMap","identity","dw","fontDescriptor","cIDSystemInfo","flags","fontBBox","missingWidth","stemV","italicAngle","capHeight","ascent","descent","leading","avgWidth","fontFile2","xHeight","stemH","registry","ordering","supplement","type0","identityH","toUnicode","descendantFonts","PdfDictionary","dictionary","position7","primitiveItems","suffix","archive","isFont","encrypt","dictionaryProperties","freezeChanges","status7","isSaving7","index7","getArchive","setArchive","setEncrypt","modify","getEncrypt","freezer","bChanged","onBeginSave","beginSave","onFontDictionaryBeginSave","fontDictionaryBeginSave","onDescendantFontBeginSave","descendantFontBeginSave","onTemplateBeginSave","pageBeginDrawTemplate","pageBeginSave","onBeginAnnotationSave","annotationBeginSave","onSectionBeginSave","saveEvent","sectionBeginSave","bRaiseEvent","saveItems","SaveSectionCollectionEventHandler","SaveDescendantFontEventHandler","SaveFontDictionaryEventHandler","SaveAnnotationEventHandler","SaveSectionEventHandler","SaveTemplateEventHandler","PdfNumber","position5","status5","isSaving5","index5","intValue","floatToString","returnString","PdfArray","startMark","endMark","position9","clonedObject9","internalElements","tempNumberArray","pdfNumber","status9","isSaving9","index9","pdfCrossTable","markedChange","newArray","fromRectangle","bounds","tempElements","markChanged","removeAt","PdfStream","dicPrefix","dicSuffix","clonedObject2","bCompress","isImageStream","isFontStream","dataStream2","bCompress2","clearStream","internalStream","writeBytes","onCmapBeginSave","cmapBeginSave","onFontProgramBeginSave","fontProgramBeginSave","compressContent","byteArray","dataArray","sw","getCompressedString","addFilter","filterName","PdfReferenceHolder","isImage","bytesToString","output","SaveCmapEventHandler","SaveFontProgramEventHandler","ForceEncoding","SourceType","PdfHorizontalAlignment","PdfString","bHex","position1","clonedObject1","bDecrypted","isParentDecrypted","isPacked","isFormField","isColorSpace","isHexString","status1","isSaving1","bConverted","bForceEncoding","bytesToHex","Ascii","pdfEncode","stringMark","escapeSymbols","CrossTable","newString","toUnicodeArray","bAddPrefix","byteToString","hexStringMark","hexFormatPattern","PdfReference","objNumber","genNumber","index3","position3","status3","isSaving3","obj2","index4","position4","objectIndex","primitiveObject","status4","isSaving4","pdfReference","cTable","isSaving","getReference","PdfAction","pdfDictionary","PdfUriAction","uniformResourceIdentifier","PdfVerticalAlignment","PdfTextAlignment","TextRenderingMode","PdfLineJoin","PdfLineCap","PdfDashStyle","PdfFillMode","PdfColorSpace","PdfBlendMode","PdfGraphicsUnit","PdfGridImagePosition","PdfTextDirection","PdfFontStyle","PdfColor","color1","color2","color3","color4","redColor","greenColor","blueColor","grayColor","gray","alpha","filled","maxColourChannelValue","cyanColor","magentaColor","yellowColor","blackColor","assignCMYK","red","green","blue","black","cyan","magenta","yellow","rgbToString","ifStroking","colour","rgbStrings","toArray","Rgb","grayStringsSroke","grayStringsFill","PointF","SizeF","RectangleF","pointf","sizef","Rectangle","topLeft","PdfBrush","PdfSolidBrush","pdfColor","monitorChanges","brush","streamWriter","getResources","currentColorSpace","setColorAndSpace","resetChanges","PdfFontFamily","PdfFontType","PdfWordWrapType","PdfSubSuperScript","FontEncoding","TtfCmapFormat","TtfCmapEncoding","TtfPlatformID","TtfMicrosoftEncodingID","TtfMacintoshEncodingID","FontDescriptorFlags","TtfCompositeGlyphFlags","LineType","PdfStringFormat","scalingFactor","wordWrapType","Word","internalLineLimit","textAlignment","verticalAlignment","Top","isRightToLeft","internalCharacterSpacing","internalWordSpacing","clip","pdfSubSuperScript","internalParagraphIndent","firstLineIndent","trailingSpaces","isNoClip","initialLineIndent","StringTokenizer","currentPosition","getCharsCount","numSymbols","readLine","text2","peekLine","readWord","peekWord","word","builder","peek","readToEnd","spaces","whiteSpacePattern","PdfStringLayouter","isOverloadWithPosition","layout","clientSize","doLayout","rectSize","reader","PdfStringLayoutResult","lineResult","lines","lineIndent","getLineIndent","layoutLine","numSymbolsInserted","returnedValue","copyToResult","numInserted","finalizeResult","firstLine","paragraphIndent","getLineHeight","lineSpacing","getLineWidth","layoutLineHeight","lineType","FirstParagraphLine","addToLineResult","NewLineBreak","curLine","curIndent","curLineWidth","getWrapType","WordOnly","textRemainder","wordWrap","Character","ln","LayoutBreak","LastParagraphLine","layoutLines","breakType","LineInfo","actualSize","allowPartialLines","lineLimit","expHeight","trimLine","size1","empty","ObjectStatus","PdfFont","Regular","metrics","Bold","Italic","Strikeout","Underline","fontMetrics","pdfFontInternals","measureString","temparg2","layoutArea","temparg3","equalsTo","equalsToFont","getInternals","setInternals","internals","applyFormatSettings","realWidth","characterSpacing","wordSpacing","charSizeMultiplier","syncObject","PdfWriter","pdfDocument","overload","tempOverload","ObjectType","PdfMainObjectCollection","objectCollections","mainObjectCollection","primitiveObjectCollection","isNew","objInfo","ObjectInfo","Registered","lookFor","wasNew","trySetReference","found","setReference","pdfObject","objectCollectionIndex","PdfDocumentBase","isStreamCopied","PdfDocument","objects","currentSavingObject","pdfCatalog","setMainObjectCollection","setCrossTable","setCatalog","catalog","filename","SW","encoding_1","SW_1","docSave","PdfPageOrientation","PdfCatalog","sections","tempDictionaryProperties","PdfCrossTable","maxGenNumIndex","objectCount","merging","internalTrailer","pdfObjects","saveHead","mappedReferences","markTrailerReferences","saveObjects","saveCount","xrefPos","registerObject","saveSections","saveTrailer","saveTheEndess","objectCollection","prevXRef","objectNum","prepareSubsection","saveSubsection","Free","generation","isFree","addOffsetLength","addGenNumberLength","generateFileVersion","bNew","getSubReference","objnumber","nextObjNumber","tempkey","tempvalue","bForceNew","saveIndirectObject","currentSavingObj","doSaveObject","free","RegisteredObject","dereference","tempOffset","offsetNumber","tempReference","PdfPageSize","letter","note","legal","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","archE","archD","archC","archB","archA","flsa","halfLetter","letter11x17","ledger","PdfPageRotateAngle","PdfNumberStyle","PdfDockStyle","PdfAlignmentStyle","TemplateType","ImageFormat","PdfMargins","pdfMargin","setMargins","leftMargin","topMargin","rightMargin","bottomMargin","margin1","margin2","margin3","margin4","PdfPageSettings","margins","pageMargins","rotateAngle","RotateAngle0","pageOrientation","Portrait","pageOrigin","isRotation","updateSize","Landscape","getActualSize","PdfStreamWriter","dictionaryName","writeOperator","executeObject","useEvenOddRule","fillStrokePath","fillPath","closeFillPath","textScaling","strokePath","restoreGraphicsState","saveGraphicsState","startNextLine","writePoint","showText","checkTextParam","writeText","setLeading","setTextRenderingMode","renderingMode","setCharacterSpacing","charSpacing","setWordSpacing","showNextLineText","setColorSpace","temparg1","op","opcode","updateY","writeComment","forStroking","setLineDashPattern","patternOffset","setLineDashPatternHelper","tempPattern","miterLimit","setLineCap","lineCapStyle","setLineJoin","lineJoinStyle","PdfPen","dashOffsetValue","penDashPattern","pdfDashStyle","Solid","pdfLineCap","pdfLineJoin","penWidth","internalMiterLimit","setBrush","Dash","Dot","DashDot","DashDotDot","sBrush","pdfBrush","currentPen","dashControl","lineJoin","lineCap","pen","getPattern","dashOffset","dashPattern","PdfTransformationMatrix","radDegFactor","transformationMatrix","multiply","degreesToRadians","degreesX","degRadFactor","radiansToDegrees","metrixElements","tempMatrix","dispose","ProcedureSets","pdf","imageB","imageC","imageI","TemporaryDictionary","mKeys","mValues","ReferenceError","PdfTransparency","PdfAutomaticFieldInfoCollection","automaticFieldsInformation","fieldInfo","automaticFields","PdfGraphicsElement","drawHelper","graphics","bNeedSave","gState","translateTransform","drawInternal","PdfAutomaticField","internalBounds","internalTemplateSize","internalFont","internalBrush","internalPen","internalStringFormat","performDrawHelper","scalingX","scalingY","getFont","stringFormat","draw","location_1","PdfAutomaticFieldInfo","getBrush","defaultFont","getPageFromGraphics","pageNumberFieldLocation","pageNumberField","ByteArray","mPosition","dataView","DataView","readByte","getBuffer","writeFromBase64String","base64","encodedString","chr1","chr2","chr3","enc2","enc3","keyStr","resultIndex","totalLength","PdfBoolean","objectStatus","saving","boolToStr","PdfLayoutType","ImageDecoder","mFormat","Unknown","mbitsPerComponent","mStream","mHeight","mWidth","mImageData","internalBuffer","checkIfJpeg","Jpeg","parseJpegImage","imgData","mJpegHeader","getImageDictionary","imageData","imageStream","tempString","decodedString","imageDataAsNumberArray","compress","getColorSpace","getDecodeParams","decodeParams","mPngHeader","GIF_HEADER","BMP_HEADER","PdfUnitConverter","dpi","updateProportionsHelper","convertUnits","to","convertFromPixels","convertToPixels","proportions","pixelPerInch","horizontalResolution","verticalResolution","PdfImage","imageWidth","imageHeight","imagePhysicalDimension","getPointSize","dpiX","dpiY","ucX","ucY","ptWidth","Pixel","Point","ptHeight","PdfBitmap","imageStatus","loadImage","initializeAsync","decoder","TtfTableInfo","TtfNameTable","TtfNameRecord","TtfHeadTable","TtfMetrics","macStyle","TtfHorizontalHeaderTable","TtfOS2Table","TtfPostTable","TtfLongHorMetric","TtfCmapSubTable","TtfCmapTable","TtfGlyphInfo","glyph","TtfLocaTable","TtfAppleCmapSubTable","TtfMicrosoftCmapSubTable","TtfTrimmedCmapSubTable","TtfGlyphHeader","BigEndianWriter","capacity","int32Size","int16Size","int64Size","bufferLength","internalPosition","writeShort","writeInt","writeUInt","buff","TtfReader","fontData","isTtcFont","isMacTtf","metricsName","isMacTTF","missedGlyphs","tableNames","entrySelectors","macintoshDictionary","microsoftDictionary","internalMacintoshGlyphs","internalMicrosoftGlyphs","readFontDictionary","nameTable","readNameTable","headTable","readHeadTable","initializeFontName","checkPreambula","numTables","readInt16","tableDirectory","tableKey","readString","readInt32","lowestPosition","fixOffsets","minOffset","tableKeys","tableInfo","formatSelector","readUInt16","recordsCount","nameRecords","platformID","encodingID","languageID","nameID","unicode","readFixed","fontRevision","checkSumAdjustment","readUInt32","magicNumber","unitsPerEm","readInt64","modified","xMin","yMin","xMax","yMax","lowestReadableSize","fontDirectionHint","indexToLocalFormat","glyphDataFormat","readHorizontalHeaderTable","ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","metricDataFormat","numberOfHMetrics","readOS2Table","xAvgCharWidth","usWeightClass","usWidthClass","fsType","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","sFamilyClass","panose","readBytes","ulUnicodeRange1","ulUnicodeRange2","ulUnicodeRange3","ulUnicodeRange4","vendorIdentifier","fsSelection","usFirstCharIndex","usLastCharIndex","sTypoAscender","sTypoDescender","sTypoLineGap","usWinAscent","usWinDescent","ulCodePageRange1","ulCodePageRange2","sxHeight","sCapHeight","usDefaultChar","usBreakChar","usMaxContext","readPostTable","formatType","underlinePosition","underlineThickness","isFixedPitch","minType42","maxType42","minType1","maxType1","readWidthTable","glyphCount","advanceWidth","lsb","glyphWidth","readCmapTable","tablesCount","subTables","subTable","readCmapSubTable","getCmapEncoding","Macintosh","Microsoft","Apple","readAppleCmapTable","readMicrosoftCmapTable","Trimmed","readTrimmedCmapTable","maxMacIndex","glyphInfo","macintosh","addGlyph","Unicode","microsoft","segCountX2","searchRange","entrySelector","rangeShift","segCount","endCount","readUshortArray","reservedPad","startCount","idDelta","idRangeOffset","glyphID","codeOffset","Symbol","firstCode","entryCount","postScriptName","glyphCode","Undefined","Roman","microsoftGlyphs","macintoshGlyphs","initializeMetrics","horizontalHeadTable","os2Table","postTable","cmapTables","bSymbol","isSymbol","factor","winAscent","macAscent","winDescent","macDescent","fontBox","widthTable","updateWidth","subScriptSizeFactor","superscriptSizeFactor","getGlyph","byteToProcess","getDefaultGlyph","readLocaTable","bShort","updateGlyphChars","glyphChars","locaTable","glyphCharKeys","nextKey","processCompositeGlyph","glyphOffset","glyphHeader","numberOfContours","skipBytes","glyphIndex","MoreComponents","Arg1And2AreWords","WeHaveScale","WeHaveAnXyScale","WeHaveTwoByTwo","generateGlyphTable","newLocaTable","newGlyphTable","activeGlyphs","glyphSize","glyphSizeAligned","nextGlyphOffset","nextGlyphIndex","oldGlyphOffset","oldNextGlyphOffset","glyphTableSize","updateLocaTable","bLocaIsShort","newLocaTableOut","newLocaUpdated","newLocaSize","getFontProgram","locaTableSize","getFontProgramLength","fontProgramLength","writeCheckSums","writeGlyphs","usedTablesSize","nextTableSize","calculateCheckSum","byte1","byte2","byte3","byte4","setOffset","createInternals","bIsLocaShort","isFontPresent","getGlyphChars","charKeys","getAllGlyphs","allGlyphInfo","readFontProgram","convertString","getCharWidth","isUnicode","i1","i2","i3","i4","written","PdfFontMetrics","getAscent","getDescent","getLineGap","clearTypeFonts","clearTypeFontCollection","subSuperScript","SubScript","SuperScript","WidthTable","internalWidthTable","StandardWidthTable","widths","UnicodeTrueTypeFont","base64String","nameString","isCompress","isEmbedFont","cmapPrefix","cmapEndCodespaceRange","cmapBeginRange","cmapEndRange","cmapSuffix","fontString","Initialize","ttfReader","ttfMetrics","fontDictionary","fontProgram","cmap","descendantFont","subsetName","getFontName","createDescendantFont","createCmap","createFontDictionary","createFontProgram","isBold","formatName","createFontDescriptor","systemInfo","createSystemInfo","descriptor","getDescriptorFlags","getBoundBox","descFonts","usedChars","getDescendantWidth","generateCmap","generateFontProgram","chLen","firstGlyphIndex","lastGlyphIndex","firstGlyphIndexWasSet","widthDetails","middlePart","toHexString","nextRange","FixedPitch","Symbolic","Nonsymbolic","isItalic","ForceBold","isCaseChange","setSymbols","ArabicShapeRenderer","arabicCharTable","alef","alefHamza","alefHamzaBelow","alefMadda","lam","hamza","zeroWidthJoiner","hamzaAbove","hamzaBelow","wawHamza","yehHamza","waw","alefMaksura","yeh","farsiYeh","shadda","madda","lwa","lwawh","lwawhb","lwawm","bwhb","fathatan","superScriptalef","vowel","arabicMapTable","getCharacterShape","shape","doShape","ArabicShape","present","ligature","shapeCount","getShapeCount","Shapes","Value","Ligature","Type","shapeValue","shapeType","shapeVowel","shapeLigature","shapeShapes","Bidi","indexLevels","mirroringShapeCharacters","doMirrorShaping","getLogicalToVisualString","inputText","rtlCharacters","RtlCharacters","getVisualOrder","setDefaultIndexLevel","doOrder","resultBuilder","odd","pstart","pend","reArrange","textOrder","rtlCharacterTypes","LRE","LRO","R","AL","RLE","RLO","PDF","EN","ES","ET","AN","CS","NSM","BN","B","S","WS","ON","charTypes","getCharacterCode","doVisualOrder","levels","characterCodes","setDefaultLevels","setLevels","updateLevels","getEmbeddedCharactersLength","preType","checkNSM","checkEmbeddedCharacters","startType","endType","charType","checkEuropeanDigits","checkArabicCharacters","checkEuropeanNumberSeparator","checkEuropeanNumberTerminator","getLength","checkOtherNeutrals","checkOtherCharacters","pst","checkCommanCharacters","validSet","byte","lt","tt","rt","RtlRenderer","openBracket","closeBracket","wordSpace","customLayout","splitLayout","customSplitLayout","getGlyphIndex","glyphs","fontInternal","textDirection","layouted","words","addChars","PdfGraphics","previousTextRenderingMode","Fill","previousCharacterSpacing","previousWordSpacing","previousTextScaling","procedureSets","isNormalRender","isUseFontSize","isEmfTextScaled","isEmf","isEmfPlus","isBaselineFormat","emfScalingFactor","colorSpaceChanged","isPointOverload","currentColorSpaces","isImageOptimized","graphicsState","istransparencySet","internalAutomaticFields","startCutIndex","pdfStreamWriter","canvasSize","pdfStringLayoutResult","internalMediaBoxUpperRightBound","clipBounds","pageLayer","bStateSaved","currentBrush","currentFont","bCSInitialized","currentStringFormat","requireProcedureSet","drawPdfTemplate","bNeedScale","getTranslateTransform","getScaleTransform","getName","newLocation","drawString","arg9","temparg4","temparg5","temparg6","temparg7","temparg8","temparg9","checkCorrectLayoutRectangle","drawStringLayoutResult","stateControl","Winding","isPen","isBrush","isEvenOdd","Alternate","physicalDimension","setResources","resource","getLineBounds","lineIndex","layoutRectangle","lineCount","getTextVerticalAlignShift","hShift","getHorizontalAlignShift","shouldJustify","textSize","layoutedRectangle","Center","Right","lineAlignment","Middle","Bottom","setLayer","layer","pageSave","performDraw","applyStringSettings","horizontalScalingFactor","resultHeight","remainingString","drawLayoutResult","underlineStrikeoutText","getNextPage","section","getPages","setClip","tm","getTextRenderingMode","ws","textHeight","boundsHeight","vAlignShift","ttfFont","lineInfo","hAlignShift","drawUnicodeLine","drawAsciiLine","justifyLine","useWordSpace","Justify","rtlRender","rightAlign","RightToLeft","drawUnicodeBlocks","breakUnicodeLine","tokens","token","convertToUnicode","getUnicodeString","xShift","spaceWidth","tokenWidth","converted","boundsWidth","hasWordSpacing","whitespacesCount","initializeCoordinates","justifyStyle","goodWidth","hasSpaces","goodLineBreakStyle","strikeout","linePen","createUnderlineStikeoutPen","vShift","underlineYOffset","strikeoutYOffset","FillStroke","Stroke","ClipFlag","layoutBounds","firstParagraphLine","Left","lastDocumentCS","lastGraphicsCS","initCurrentColorSpace","penControl","brushControl","fontControl","colorspace","curSubSuper","prevSubSuper","setTransparency","trasparencies","transp","TransparencyData","clipTranslateMargins","clipArea","rotateTransform","getRotateTransform","mediaBoxUpperRightBound","cropBox","PdfGraphicsState","textRenderingMode","doRestoreState","pathTypesValuesMask","transparencyObject","GetResourceEventHandler","internalTextRenderingMode","internalTextScaling","pdfColorSpace","pdfGraphics","pdfPen","pdfFont","alphaPen","alphaBrush","blendMode","PdfPageLayer","streamClipPageTemplates","sublayer","contentLength","pdfPage","clipPageTemplates","layerid","layerName","initializeGraphics","PdfPageLayerCollection","sign","oPage","gr","sc","isSame","origin","clipRect","getActualBounds","PdfCollection","parentLayerCount","optionalContent","PdfPageBase","lPage","parseLayers","firstArgument","secondArgument","addLayer","insertLayer","loadedPage","saveStream","restoreStream","saveData","PdfTemplate","writeTransformation","tempSize","templateSize","PdfResources","addType","addSubType","baseDictionary","getNames","primitive","sName","generateName","pdfNames","fonts","procedureSetName","procSets","removeFont","Guid","getNewGuidString","xobjects","savable","transDic","parentXObjects","hasSameImageStream","oldReference","randomString","randomNumber","defLayerIndex","pageDictionary","pdfSection","layers","defaultLayerIndex","layerCollection","PdfAnnotationCollection","alreadyExistsAnnotationError","missingAnnotationException","internalAnnotations","lists","annotation","doAdd","setPage","layoutResult","lastPosition","setColor","colours","PdfPage","annotationCollection","defaultLayer","annotations","setSection","resetProgress","isProgressOn","getClientSize","drawPageTemplates","containsTemplates","backLayer","drawTemplates","frontLayer","PageAddedEventArgs","PdfSectionPageCollection","PdfDocumentTemplate","leftTemplate","topTemplate","rightTemplate","bottomTemplate","evenLeft","evenTop","evenRight","evenBottom","oddLeft","oddTop","oddRight","oddBottom","getLeft","isEven","EvenLeft","OddLeft","getTop","EvenTop","OddTop","getRight","EvenRight","OddRight","getBottom","EvenBottom","OddBottom","pageCollectionIndex","templateElement","PdfSectionTemplate","rightValue","bottomValue","stampValue","PdfSection","pageAdded","pdfPages","initialSettings","sectionCollection","pagesReferences","pageTemplate","pagesCollection","pointToNativePdf","setPageSettings","PageSettingsState","foreground","documentHeaders","getDocumentTemplates","documentTemplates","templates","applyDocumentTopTemplate","applyDocumentBottomTemplate","applyDocumentLeftTemplate","applyDocumentRightTemplate","page_1","checkPresence","pageAddedMethod","rh","onPageAdded","document_1","getLeftIndentWidth","getTopIndentHeight","getRightIndentWidth","getBottomIndentHeight","includeMargins","templateWidth","docTemplateWidth","templateHeight","docTemplateHeight","temproaryPages","applyPageSettings","parentSettings","PdfSectionCollection","rotateFactor","drawTemplatesHelper","pageRotate","sectionCount","pdfSectionCollection","section_1","checkSection","countPages","PdfDocumentPageCollection","pdfPageCollectionIndex","previousPageOrientation","getLastSection","getPageByIndex","sectionStartIndex","numPages","PdfCacheCollection","referenceObjects","pdfFontCollection","getGroup","createNewGroup","tGroup","representative","removeGroup","isMerging","defaultMargin","documentPageCollection","cacheCollection","defaultStandardFont","PdfStandardFont","Helvetica","isCacheEnabled","Cmyk","GrayScale","checkPagesPresence","PdfStandardFontMetricsFactory","getMetrics","getHelveticaMetrics","Courier","getCourierMetrics","TimesRoman","getTimesMetrics","getSymbolMetrics","ZapfDingbats","getZapfDingbatsMetrics","subSuperScriptFactor","helveticaBoldItalicAscent","helveticaBoldItalicDescent","helveticaBoldItalicName","arialBoldWidth","helveticaBoldAscent","helveticaBoldDescent","helveticaBoldName","helveticaItalicAscent","helveticaItalicDescent","helveticaItalicName","arialWidth","helveticaAscent","helveticaDescent","helveticaName","courierBoldItalicAscent","courierBoldItalicDescent","courierBoldItalicName","fixedWidth","courierBoldAscent","courierBoldDescent","courierBoldName","courierItalicAscent","courierItalicDescent","courierItalicName","courierAscent","courierDescent","courierName","timesBoldItalicAscent","timesBoldItalicDescent","timesBoldItalicName","timesRomanBoldItalicWidths","timesBoldAscent","timesBoldDescent","timesBoldName","timesRomanBoldWidth","timesItalicAscent","timesItalicDescent","timesItalicName","timesRomanItalicWidth","timesAscent","timesDescent","timesName","timesRomanWidth","symbolAscent","symbolDescent","symbolName","symbolWidth","zapfDingbatsAscent","zapfDingbatsDescent","zapfDingbatsName","zapfDingbatsWidth","fontFamilyPrototype","encodings","pdfFontFamily","checkStyle","initializeInternals","convert","getCharWidthInternal","stFont","fontFamilyEqual","lineReducer","styleEqual","WinAnsiEncoding","charOffset","PdfAnnotation","textBrush","textFont","internalColor","darkness","nativeRectangle","initialHeight","tempLoacation","PdfLinkAnnotation","PdfActionLinkAnnotation","pdfAction","getSetAction","PdfDocumentLinkAnnotation","pdfDestination","ElementLayouter","layoutElement","layoutInternal","Layouter","PdfLayoutFormat","baseFormat","break","paginateBounds","boundsSet","usePaginateBounds","layoutType","layoutPaginateBounds","PdfLayoutParams","layoutFormat","PdfLayoutResult","PdfLayoutElement","beginPageLayout","endPageLayout","onBeginPageLayout","onEndPageLayout","bEmbedFonts","PdfLayoutBreakType","PdfDestinationMode","TextLayouter","currentBounds","pageResult","TextPageLayoutResult","remainder","layoutOnPage","getLayoutResult","PdfTextLayoutResult","lastLineBounds","checkCorrectBounds","stringResult","textFinished","FitElement","PdfTextWebLink","getTextPageBounds","verticalShift","remainderText","lastLineTextBounds","PdfTextElement","hasPointOverload","isPdfTextElement","stringLayoutResult","previousPosition","calculateResultBounds","lineSize","maximumWidth","startPosition","PdfUriAnnotation","pdfUriAction","uriAction","uniformResourceLocator","uriAnnotation","recalculateBounds","defaultBorder","previousFontStyle","calculateBounds","drawMultipleLineWithPoint","drawMultipleLineWithBounds","PdfNumbersConvertor","intArabic","numberStyle","Numeric","LowerLatin","arabicToLetter","LowerRoman","arabicToRoman","UpperLatin","UpperRoman","retval","generateNumber","arabic","convertToLetter","appendChar","magnitude","numberstring","letterLimit","acsiiStartIndex","PdfTemplateValuePair","pdfTemplate","PdfMultipleValueField","drawLocation","PdfPageNumberField","internalNumberStyle","internalGetValue","PdfCompositeField","internalText","automaticField","PdfSingleValueField","painterGraphics","PdfPageCountField","PdfBorderOverlapStyle","PdfDestination","destinationMode","Location","zoomFactor","destinationLocation","initializePrimitive","simplePage","FitToPage","PdfTrueTypeFont","createFontInternal","getUnicodeLineWidth","codeWidth","calculateStyle","iStyle","equalFont","enableCache","isEmbed","isUnicodeFont","glyphIndices","resultGlyph","PdfPageTemplateElement","dockStyle","resetAlignment","alignmentStyle","setAlignment","isForeground","currentLocation","templateType","updateDocking","dock","canBeSet","TopLeft","MiddleLeft","BottomLeft","TopCenter","TopRight","MiddleRight","BottomRight","BottomCenter","MiddleCenter","getAlignmentBounds","getDockBounds","getSimpleAlignmentBounds","getTemplateAlignmentBounds","actualBounds","getSimpleDockBounds","getTemplateDockBounds","PdfBorders","defaultBorderPenLeft","dashStyle","defaultBorderPenRight","defaultBorderPenTop","defaultBorderPenBottom","leftPen","rightPen","topPen","bottomPen","PdfPaddings","hasLeftPad","hasRightPad","hasTopPad","hasBottomPad","leftPad","rightPad","bottomPad","topPad","PdfHorizontalOverflowType","PdfGridStyleBase","gridBackgroundBrush","gridTextBrush","gridTextPen","gridFont","gridBackgroundImage","PdfGridStyle","gridBorderOverlapStyle","Overlap","bAllowHorizontalOverflow","gridHorizontalOverflowType","gridCellSpacing","gridCellPadding","PdfGridCellStyle","gridCellBorders","default","PdfGridRowStyle","gridRowBackgroundBrush","setBackgroundBrush","getCell","backgroundBrush","gridRowTextBrush","setTextBrush","gridRowTextPen","setTextPen","textPen","gridRowFont","gridRowBorder","setParent","gridRowBackgroundImage","PdfGridCell","cellWidth","cellHeight","tempval","fontSpilt","finsh","rowSpanRemainingHeight","hasRowSpan","hasColSpan","isFinish","gridRowSpan","gridRow","internalIsCellMergeContinue","internalIsRowMergeContinue","internalIsCellMergeStart","internalIsRowMergeStart","objectValue","PdfGrid","isSingleGrid","ParentCell","getRow","colCount","rowSpanExists","hasRowSpanSpan","measureHeight","columnSpanExists","isComplete","measureWidth","layouter","getTextFont","webLink","cellPadding","cellSpacing","drawCellBackground","getBackgroundBrush","backgroundImage","getBackgroundImage","adjustContentLayoutArea","returnBounds","cancelSubsequentSpans","allowHorizontalOverflow","rowOverflowIndex","adjustOuterLayoutArea","getTextPen","getTextBrush","strFormat","getStringFormat","innerLayoutArea","allowRowBreakAcrossPages","splitChildRowIndex","rowFontSplit","repeatFlag","layoutRect","PdfGridLayouter","PdfGridLayoutFormat","LayoutFormat","Paginate","setSpan","checkSpan","childGridResult","rowBreakHeightValue","rowBreakHeight","NestedGridLayoutResult","imageBounds","drawCellBorders","borderOverlapStyle","Inside","p1","p2","Square","currentColIndex","columnSpan","isCellMergeContinue","compWidth","getColumn","currentRowIndex","rowCollection","getHeader","rowMergeComplete","calculateWidth","internalWidth","tempWidth","PdfGridCellCollection","tempcell","PdfGridColumn","columnWidth","isCustomWidth","PdfGridColumnCollection","internalColumns","measureColumnsWidth","initialWidth","isPageWidth","getDefaultWidths","subFactor","PdfGridRow","gridRowOverflowIndex","rowWidth","isrowFinish","isRowSpanRowHeightSet","noOfPageCount","isRowHeightSet","isPageBreakRowSpanApplied","isRowMergeComplete","pdfGrid","bRowSpanExists","gridCells","rowStyle","gridRowBreakHeight","gridResult","bColumnSpanExists","cellIn","rowin","rowWid","PdfGridRowCollection","addRow","temprow","PdfGridHeaderCollection","gridSize","isGridSplit","isRearranged","pageBounds","listOfNavigatePages","parentCellIndex","breakRow","hasColumnSpan","beginCellDraw","endCellDraw","bRepeatHeader","gridHeaders","gridInitialWidth","gridStyle","ispageWidth","ischildGrid","measure","parentCell","onBeginCellDraw","raiseBeginCellDraw","onEndCellDraw","raiseEndCellDraw","gridLocation","maxSpan","isRowMergeContinue","isCellMergeStart","isRowMergeStart","maximumRowSpan","cellcolSpan","cellrowSpan","cellmaxSpan","columnCount","childGridColumnWidth","colCount_1","colCount_2","RowCount","ColCount","childGridColWidth","childheight","columnRanges","getFormat","gridLayoutFormat","currentPageBounds","currentGraphics","FitColumnsToPage","startLocation","hType","horizontalOverflowType","determineColumnDrawRanges","startColumn","endColumn","cellWidths","availableWidth","subWidths","layoutedPages","startPage","cellBounds","cellStartIndex","cellEndIndex","returnObject","raiseBeforePageLayout","drawRow","repeatRow","repeatRowIndex","rowResult","tempResult","raisePageLayouted","getNextPageformat","isRowBreaksNextPage","i_2","repeatHeader","j_1","headerRepeat","j_2","tempResult1","i_3","i_4","OnePage","i_5","recalHeight","ReCalculateHeight","secion","pageGraphics","location_2","totalwidth","i_6","isPdfGrid","maximumCellBoundsWidth","largeNavigatePage","rowLayoutBoundsWidth","reArrangePages","pageindex","CheckIfDefaultFormat","defaultFormat","measureTrailingSpaces","noClip","RaiseBeforeCellDraw","PdfGridBeginCellDrawEventArgs","raiseAfterCellDraw","cellstyle","PdfGridEndCellDrawEventArgs","PdfGridLayoutResult","newHeight","raiseBeginPageLayout","PdfGridBeginPageLayoutEventArgs","startRowIndex","PdfGridEndPageLayoutEventArgs","raiseEndPageLayout","RowLayoutResult","rowHeightWithSpan","currRowIndex","FitPage","drawRowWithBreak","repeatRowNumber","location_4","cancelSpans","calculateHeight","gridHeight","cellstyle1","FinishedDrawingCell","rowBreakPageHeightCellIndex","GridCellEventArgs","gridRowIndex","gridCellIndex","gridBounds","bSkip","PdfCancelEventArgs","isCancel","BeginPageLayoutEventArgs","EndPageLayoutEventArgs","nextPdfPage","layoutedBounds","bIsFinished","PdfExport","customDataSource","isGrouping","exportWithData","processExport","events.pdfExportComplete","processSectionExportProperties","pdfPageSettings","getPageSize","gridTheme","processExportProperties","headerThemeStyle","headerFont","headerBrush","processGridHeaders","setColumnProperties","captionThemeStyle","getSummaryCaptionThemeStyle","processGroupedRecords","processRecord","getFontFamily","getFontStyle","penBrushColor","borderCaption","getBorderStyle","groupIndex","dataSourceItems","captionSummaryModel","gridHeader","cellLength","pdfCell","getHorizontalAlignment","getVerticalAlignment","events.pdfHeaderQueryCellInfo","fromTop","drawPageTemplate","fromBottom","processContentValidation","drawPageNumber","getBrushFromContent","textPenColor","penColor","setContentFormat","documentHeader","textBrushColor","brushColor","pageNumber","getPageNumberStyle","pageNumberType","compositeField","getPenFromContent","penSize","getDashStyle","isCaption","captionRow","sRows_1","leastCaptionSummaryIndex","getSummaryWithoutTemplate","getTemplateFunction","setRecordThemeStyle","borderRecord","gridRow_1","borderColor","verticalAlign","bigint","CommandColumnRenderer","buttonElement","unbounDiv","command","renderButton","buttonOption","onclick","commandType","commandClickHandler","menuClass","batchEdit","editIcon","pager","ungroup","excel","fPage","nPage","pPage","ascending","descending","groupHeader","touchPop","defaultItems","hiddenItems","setLocaleKey","enableAfterRenderMenu","contextMenu","getMenuItems","contextMenuItemClick","contextMenuBeforeOpen","contextMenuOpen","contextMenuOnClose","menuItems","exportItems","getDefaultItems","buildDefaultItems","exportGroup","getLastPage","totalpage","getKeyFromId","targetColumn","updateItemStatus","getLocaleText","closestGrid","hideSepItems","showSepItems","dItem","ensureDisabledStatus","ensureTarget","ensureFrozenHeader","generateID","AutoFitAll","AutoFit","CsvExport","export","PrevPage","FreezeRowModelGenerator","isFrzLoad","FreezeContentRender","setFrozenContent","setMovableContent","getMovableContent","getFrozenContent","mTbl","FreezeRender","refreshFreeze","setFrozenHeight","rfshMovable","updateColgroup","setFrozenHeader","setMovableHeader","getFrozenHeader","refreshStackedHdrHgt","addMovableFirstCls","movablefirstcell","filterRow","hdrClassList","setWrapHeight","updateResizeHandler","isContReset","isStackedHdr","fRowHgt","mRowHgt","isWrap","tBody","movableContentHeight","fRowSpan","mRowSpan","getRowSpan","updateStackedHdrRowHgt","rSpan","minRowSpan","maxRowSpan","frozenHeader","movableHeader","mTable","Freeze","ColumnMenu","GROUP","UNGROUP","ASCENDING","DESCENDING","FILTER","POP","WRAP","CHOOSER","getColumnMenuHandlers","columnMenuHandlerDown","columnMenu","unwireFilterEvents","columnMenuHandlerClick","getHeaderCell","openColumnMenu","isFilterItemAdded","filterPosition","columnMenuItemClick","columnMenuBeforeOpen","columnMenuOnClose","beforeMenuItemRender","columnMenuBeforeClose","wireFilterEvents","appendFilter","isChooserItem","colChooser","getFilter","isFilterPopupOpen","defultItems_1","getDefault","getDefaultItem","createChooserItems","filterPopup","getFilterPop","gridPos","liPos","ForeignKey","initForeignKeyColumns","generateQueryFormData","foreignColumns","genarateColumnQuery","genarateQuery","responses","fromData","needQuery","queryColumn","isTrue","filterColumn","destroyEvent","iframeMouseDown","toolbarClick","refreshBegin","toolbarUpdated","bindOnEnd","renderColorPicker","htmlToolbarClick","markdownToolbarClick","destroyColorPicker","toolbarRenderComplete","enableFullScreen","disableFullScreen","dropDownSelect","beforeDropDownItemRender","execCommandCallBack","imageToolbarAction","linkToolbarAction","insertLink","updateToolbarItem","insertImage","insertCompleted","imageLink","imageAlt","imageSize","sourceCode","updateSource","beforeDropDownOpen","selectionSave","selectionRestore","expandPopupClick","mouseDown","sourceCodeMouseDown","editAreaClick","colorPickerChanged","tableColorPickerChanged","focusChange","getSelectedHtml","renderInlineToolbar","rtlMode","tableToolbarAction","checkUndo","readOnlyMode","CLS_SCRIPT_SHEET","CLS_STYLE_SHEET","CLS_TOOLBAR","CLS_INLINE","CLS_FULL_SCREEN","CLS_QUICK_TB","CLS_QUICK_DROPDOWN","CLS_INLINE_POP","CLS_INLINE_DROPDOWN","CLS_DROPDOWN_POPUP","CLS_DROPDOWN_ICONS","CLS_DROPDOWN_ITEMS","CLS_DROPDOWN_BTN","CLS_TB_WRAP","CLS_RM_WHITE_SPACE","CLS_IMGBREAK","CLS_CAPTION","CLS_IMGINLINE","CLS_EXPAND_OPEN","CLS_RTE_ELEMENTS","CLS_COLOR_CONTENT","CLS_RTE_READONLY","CLS_TABLE_SEL","CLS_TB_DASH_BOR","CLS_TB_ALT_BOR","CLS_TB_COL_RES","CLS_TB_ROW_RES","CLS_TB_BOX_RES","ToolbarType","templateItems","tools","alignments","justifyleft","justifycenter","justifyright","justifyfull","fontname","fontsize","fontcolor","backgroundcolor","strikethrough","clearformat","clearall","cut","unorderedlist","orderedlist","outdent","undo","redo","superscript","subscript","createlink","openlink","editlink","removelink","createtable","removetable","openimagelink","editimagelink","removeimagelink","insertlink","alttext","fullscreen","maximize","minimize","lowercase","uppercase","sourcecode","viewside","insertcode","tableheader","tableremove","tablerows","tablecolumns","tablecellbackground","tablecellhorizontalalign","tablecellverticalalign","tableeditproperties","alignmentItems","imageAlignItems","imageDisplayItems","tableRowsItems","tableColumnsItems","TableCellVerticalAlignItems","TableStyleItems","justifyLeft","justifyCenter","justifyRight","justifyFull","clearFormat","unorderedList","orderedList","createLink","openLink","editLink","removeLink","altText","lowerCase","upperCase","insertCode","linkText","linkTooltipLabel","linkWebUrl","linkTitle","linkurl","linkOpenInNewWindow","linkHeader","dialogInsert","dialogCancel","dialogUpdate","imageHeader","imageLinkHeader","mdimageLink","imageUploadMessage","imageDeviceUploadMessage","imageAlternateText","alternateHeader","imageCaption","imageSizeHeader","textPlaceholder","tblhead","inserttablebtn","tabledialogHeader","cellpadding","tableRows","tableColumns","tableCellHorizontalAlign","tableCellVerticalAlign","removeTable","tableHeader","tableRemove","tableCellBackground","tableEditProperties","insertColumnLeft","insertColumnRight","deleteColumn","insertRowBefore","insertRowAfter","tableEditHeader","TableHeadingText","TableColText","insertcolumnleft","insertcolumnright","deletecolumn","aligntop","alignmiddle","alignbottom","insertrowbefore","insertrowafter","deleterow","ToolbarRenderer","popupOverlay","onPopupOverlay","toolbarBeforeCreate","toolbarCreated","toolbarClicked","events.toolbarClick","dropDownSelected","events.dropDownSelect","events.beforeDropDownItemRender","classes.CLS_QUICK_DROPDOWN","popupModal","events.selectionSave","dropDownClose","events.selectionRestore","renderToolbar","rteToolbarObj","beforeCreate","renderDropDownButton","inlineMode","events.beforeDropDownOpen","setIsModel","popupContainer","paletteSelection","dropDownArgs","colorbox","borderBottomColor","renderColorPickerDropDown","colorPicker","inlineEle","currentDropdown","colorpickerValue","editorManager","nodeSelection","getRange","startContainer","collapsed","events.tableColorPickerChanged","events.colorPickerChanged","setColorPickerContentWidth","onmousedown","colorPickerContent","beforeTileRender","colorPickerArgs","iosDevices","isIDevice","beforeModeSwitch","colorCode","toolbarPanel","BaseToolbar","renderFactory","itemConfigs","events.rtlMode","getTemplateObject","getID","tbItems_1","getToolbarOptions","toolbarRenderer","DropDownButtons","initializeInstance","beforeRender","dropdownContent","renderDropDowns","containerType","tbElement","model.templateItems","classes.CLS_DROPDOWN_BTN","formatItem","classes.CLS_DROPDOWN_POPUP","classes.CLS_DROPDOWN_ITEMS","fontItem","imageAlignmentDropDown","imageDisplayDropDown","rowDropDown","columnDropDown","verticalAlignDropDown","tableStylesDropDown","getUpdateItems","dropDownItems","fontItems","classes.CLS_QUICK_TB","formatItems","tableRowsDropDown","model.tableRowsItems","tableColumnsDropDown","model.tableColumnsItems","tableCellVerticalAlignDropDown","model.TableCellVerticalAlignItems","displayDropDown","model.imageDisplayItems","imageAlignDropDown","classes.CLS_DROPDOWN_ICONS","model.imageAlignItems","tableSettings","removeDropDownClasses","destroyDropDowns","events.iframeMouseDown","onIframeMouseDown","ToolbarAction","renderSelection","events.htmlToolbarClick","events.markdownToolbarClick","isToolbar","isTransformChild","model.tools","editableElement","getEditPanel","editPanel","toolbarBindEvent","keyBoardModule","getToolbarElement","toolBarKeyDown","keyConfig","createToolbarElement","enableFloating","tbWrapper","classes.CLS_TB_WRAP","getToolbarMode","tbMode","checkToolbarResponsive","addFixedTBarClass","events.renderColorPicker","checkIsTransformChild","transformElements","toggleFloatClass","scrollParent","isBody","isFloat","floatOffset","floatingToolbarOffset","tbHeight","getToolbarHeight","getExpandTBarPopHeight","scrollParentRelativeTop","trgHeight","bodyStyle","scrollParentYOffset","scrollParentRect","scrollParentTop","events.renderInlineToolbar","refreshToolbarOverflow","removeFixedTBarClass","showFixedTBar","hideFixedTBar","targetItem","addTBarItem","prefixId","updateToolbarStatus","fullScreenModule","showFullScreen","hideScreen","hideFullScreen","getBaseToolbar","enableTBarItems","undoRedoManager","getUndoStatus","removeTBarItems","getBaseToolbarObject","popHeight","expandPopup","classes.CLS_EXPAND_OPEN","classes.CLS_TOOLBAR","isToolbarDestroyed","destroyToolbar","unWireScrollElementsEvents","events.destroyColorPicker","focusChangeHandler","dropDownBeforeOpenHandler","toolbarMouseDownHandler","toolbarActionModule","events.bindOnEnd","events.toolbarUpdated","events.refreshBegin","onRefresh","events.enableFullScreen","events.disableFullScreen","events.updateToolbarItem","events.expandPopupClick","events.focusChange","events.mouseDown","events.sourceCodeMouseDown","wireScrollElementsEvents","]","[","ColorPickerInput","renderColorPickerInput","suffixID","fontNode","classes.CLS_RTE_ELEMENTS","fontColorPicker","fontColorDropDown","backNode","backgroundColorPicker","backgroundColorDropDown","events.toolbarRenderComplete","BaseQuickToolbar","isDOMElement","popupRenderer","dropDownButtons","colorPickerObj","appendPopupContent","toolbarElement","popupType","classes.CLS_INLINE_POP","popupId","stringItems","quickTBarObj","imgWrapper","classes.CLS_RM_WHITE_SPACE","targetOffsetTop","parentOffsetTop","parentData","editTop","tBarElementHeight","editHeight","popWidth","viewPort","parentTop","contentTop","windowY","windowHeight","windowWidth","bodyRightSpace","editPanelTop","editPanelHeight","bodyRight","toolbarAvail","expTBHeight","tBarHeight","iframeSettings","contentWindow","disableToolbarItem","enableToolbarItem","showPopupData","viewSourcePanel","sourceCodeModule","getViewPanel","removeEleFromDOM","addQTBarItem","removeQTBarItem","PopupRenderer","popupPanel","QuickToolbar","formattedItems","getQTBarOptions","popType","renderType","createQTBar","qTBar","initializeQuickToolbars","quickToolbarModule","isRTE","renderQuickToolbars","linkQTBar","imageQTBar","textQTBar","tableQTBar","quickToolbarSettings","LinkToolbar","TextToolbar","ImageToolbar","TableToolbar","renderInlineQuickToolbar","inlineQTBar","InlineToolbar","showInlineQTBar","hideInlineQTBar","hideQuickToolbars","deBounce","deBouncer","isIFrame","onSelection","inlineQTBarMouseDownHandler","getInlineBaseToolbar","wireInlineQTBarEvents","events.keyDown","unWireInlineQTBarEvents","renderCount","appendCount","charCountBackground","htmlLength","htmlText","editorMode","percentage","restrict","showCharCount","arrayKey","events.sourceCode","events.updateSource","MarkdownSelection","getLineNumber","textarea","getAllParents","getSelectedLine","getLine","getSelectedParentPoints","selectedPoints","selectedLine","startLength","firstPoint","lastPoint","textArea","isStartWith","isStart","replaceSpecialChar","getRegex","syntax","getSelectedInlinePoints","MarkdownToolbarStatus","toolbarStatus","inlinecode","onRefreshHandler","parentsLines","documentNode","isListsApplied","currentFormat","mdSelectionFormats","isAppliedCommand","listTags","formatTags","checkLine","selectionDirection","parentLines","firstPrevText","lastNextText","ExecCommandCallBack","events.execCommandCallBack","commandCallBack","FORMAT_TYPE","KEY_DOWN_HANDLER","KEY_UP_HANDLER","MODEL_CHANGED_PLUGIN","MODEL_CHANGED","Formatter","self","rangeCount","getRangeAt","getAncestorNode","commonAncestorContainer","itemCollection","CONSTANT.actionBegin","getUndoRedoStack","clipboardAction","CONSTANT.checkUndo","enableUndo","onKeyHandler","CONSTANT.execCommandCallBack","CONSTANT.actionComplete","CONSTANT.insertCompleted","isNotify","autoResize","undoRedoStack","selectionCommand","MD_TABLE","MDLists","markdownSelection","applyListsHandler","EVENTS.KEY_DOWN_HANDLER","EVENTS.KEY_UP_HANDLER","tabKey","enterKey","addedLength","isNotFirst","isNotFirstLine","getListRegex","currentAction","getAction","prevLine","tabSpaceLength","splitTab","getTabSpace","tabs","currentLine","curTabSpace","prevTabSpace","ol","OL","UL","tabSpace","endLength","appliedLine","selectedText","configKey","MDFormats","EVENTS.FORMAT_TYPE","applyFormats","isAppliedFormat","applyCodeBlock","cleanFormat","CONSTANT.selectionCommand","clearRegex","removeLength","removeText","cmd","startNo","endNo","repStartText","replaceAt","repEndText","lastLine","MDSelectionFormats","applyCommands","isMatch","matchText","InlineCode","StrikeThrough","singleCharRegx","multiCharRegx","isFormat","splitText","splitAt","cmdB","cmdI","beforeText","afterText","startCmd","endCmd","isApplied","textReplace","repStart","repEnd","regxB","repText","regxTemp","regTest","markdownFormatTags","h6","h5","h4","h3","h1","blockquote","markdownSelectionTags","UpperCase","LowerCase","markdownListsTags","htmlKeyConfig","toolbar-focus","insert-link","insert-image","outdents","html-source","full-screen","decrease-fontsize","increase-fontsize","justify-center","justify-full","justify-left","justify-right","clear-format","ordered-list","unordered-list","markdownKeyConfig","UndoRedoCommands","undoRedoSteps","undoRedoTimer","onAction","EVENTS.MODEL_CHANGED_PLUGIN","changEle","removedContent","MDLink","startOffset","endOffset","MDTable","CONSTANT.MD_TABLE","end3","end1","textAreaInitial","textUnEmpty","headingText","dummyElement","colText","convertToLetters","startNotEqualEnd","startEqualEnd","textApplyFormat","parentTextLength","parentText","callRestore","singleLine","multipleLines","selectedTextSplit","selectedSplitText","formatLastLine","lastSelectedLineIndex","rowNumber","baseChar","letters","ClearFormat","replaceRegex","clearSelectionTags","selectionTags","expString","regExp","startExp","endExp","clearFormatTags","MarkdownParser","listObj","formatObj","linkObj","tableObj","clearObj","editorKeyDown","editorKeyUp","EVENTS.MODEL_CHANGED","exeValue","MarkdownFormatter","updateFormatter","editElement","MarkdownRender","rteID","rteObj","MarkdownEditor","saveSelection","onToolbarClick","events.selectAll","events.getSelectedHtml","onSelectionSave","onSelectionRestore","events.readOnlyMode","updateReadOnly","classes.CLS_RTE_READONLY","events.insertLink","events.insertImage","tableConstant","toolbarUpdate","TABLE_VERTICAL_ALIGN","BLOCK_TAGS","IGNORE_BLOCK_TAGS","TABLE_BLOCK_TAGS","NodeSelection","startNodeName","endNodeName","saveInstance","cloneRange","documentFromRange","getNodeArray","endContainer","docElement","setStart","isChildNode","nodeCollection","getNodeCollection","getParentNodeCollection","getParentNodes","getSelectionNodeCollection","getSelectionNodes","getInsertNodeCollection","getInsertNodes","setRangePoint","isvalid","constant","setRange","addRange","setSelectionText","setEnd","setSelectionContents","setSelectionNode","selectNodeContents","getSelectedNodes","insertParentNode","newNode","surroundContents","setCursorPoint","markerClassName","DOMNode","currentDocument","isBlockNode","CONSTANT.BLOCK_TAGS","isLink","blockParentNode","rawAttributes","rawAttr","orderRawAttr","attrKey","attrValue","clearAttributes","openTagString","closeTagString","createTagString","isList","replaceWith","parseHTMLFragment","referenceNode","wrapInner","unWrap","unWrapNode","getSelectedNode","TEXT_NODE","nodeFinds","existNodes","isEditorArea","getRangePoint","ranges","getPreviousNode","saveMarker","startTextNode","endTextNode","marker","setMarker","existNode","textNodes","CONSTANT.IGNORE_BLOCK_TAGS","createTempNode","blockNodes","collectionNodes","ignoreTableTag","listNodes","CONSTANT.TABLE_BLOCK_TAGS","Lists","domNode","ignoreDefault","revertList","revertClean","nestedList","cleanNode","prevSibling","noPreviousElement","firstNodeOL","siblingListOL","siblingListLI","siblingListLIFirst","list-style-type","nestedElement","nestedElementLI","firstNodeLI","listsNodes","applyLists","isRevert","checkLists","openTag","closeTag","replaceHTML","collectionString","nodesTemp","liParents","contentNodes","findUnSelected","rightIndent","indentElements","childElements","childLI","viewNode","classAttr","nodeInnerHtml","emptyUl","emptyLi","Formats","formatsNodes","cleanFormats","replaceTag","ignoreAttr","InsertMethods","WrapBefore","textNode","AppendBefore","Wrap","unwrap","NodeCutter","GetSpliceNode","SplitNode","setStartBefore","setEndAfter","extractContents","spliceEmptyNode","GetCursorStart","GetCursorRange","cursorRange","TrimLineBreak","GetCursorNode","InsertHtml","Insert","insertNode","editNode","nodeCutter","closestParentNode","closestEle","sibNode","lasNode","deleteContents","LinkCommand","linkCommand","selectParent","Alignments","JustifyLeft","JustifyCenter","JustifyRight","JustifyFull","alignmentNodes","text-align","Indents","indentValue","applyIndents","indentsNodes","parentNodes","indentsValue","CLASS_IMAGE_RIGHT","CLASS_IMAGE_LEFT","CLASS_IMAGE_CENTER","CLASS_CAPTION","ImageCommand","imageCommand","createImage","insertImageLink","openImageLink","editImageLink","removeImageLink","removeImage","insertAltTextImage","imageDimension","imageJustifyLeft","imageJustifyCenter","imageJustifyRight","imageInline","imageBreak","imgElement","imgEle","insertElement","classes.CLASS_CAPTION","classes.CLASS_IMAGE_RIGHT","classes.CLASS_IMAGE_LEFT","classes.CLASS_IMAGE_CENTER","TableCommand","insertRow","insertColumn","CONSTANT.TABLE_VERTICAL_ALIGN","tableVerticalAlign","tblBody","tdWid","newRow","curRow","tabCell","allRows","colTemplate","parentTable","seletedTable","cellCount","createTHead","th","deleteTHead","tableCell","IsFormatted","getFormattedNode","getFormatParent","isFormattedNode","isUnderline","isStrikethrough","isSuperscript","isSubscript","isFontColor","isFontName","isFontSize","isBackgroundColor","inlineTags","textDecoration","SelectionCommands","applyFormat","domSelection","isFormatted","isCursor","isFontStyle","cursorNode","insertCursorNode","formatNode","insertFormat","removeFormat","applySelection","cursorNodes","cursorFormat","getInsertNode","splitNode","lastNode","GetFormatNode","toLocaleUpperCase","getChildNode","SelectionBasedExec","InsertHtmlExec","applyHtml","exactNodes","cloneSelectNodes","clearInlines","reSelection","cloneParentNodes","clearBlocks","selectionNodes","endIndexNode","spliceParent","removeParent","parentIndex","NONVALID_TAGS","NONVALID_PARENT_TAGS","removeInlineParent","ClearFormatExec","applyClear","UndoRedoManager","EditorManager","alignmentObj","indentsObj","imgObj","selectionObj","inserthtmlObj","HTMLFormatter","statusCollection","ToolbarStatus","targetNode","formatCollection","isOrderedList","isUnorderedList","isAlignment","isFormats","HtmlToolbarStatus","rteContent","contenteditable","IframeContentRender","iFrameContent","iframe","contentDocument","setThemeColor","HtmlEditor","rangeCollection","nodeSelectionObj","colorPickerModule","events.selectRange","enableTabKey","textCont","spaceLink","selectNodeEle","urlText","selectParentEle","events.imageToolbarAction","events.linkToolbarAction","events.tableToolbarAction","linkDialog","imageDialog","events.createTable","Link","events.insertCompleted","showLinkQuickToolbar","onToolbarAction","events.editAreaClick","editAreaClickHandler","quickToolObj","linkTop","linkPos","hideLinkQuickToolbar","inputDetails","selectText","linkWebAddress","linkDisplayText","linkTooltip","urlPlace","textPlace","linkDialogEle","linkContent","contentElem","linkTarget","linkUrl","linkOpenLabel","checkBoxObj","linkInsert","linkCancel","selectObj","selfLink","cancelDialog","checkUrl","linkEle","isUrl","linkUpdate","showImageQuickToolbar","deleteImg","events.imageLink","insertImgLink","events.imageAlt","insertAltText","events.imageSize","alignmentSelect","afterRender","events.paste","imagePaste","imageClick","events.checkUndo","undoStack","insertImageSettings","resizeBtnInit","preventDefaultResize","imgResizeDiv","imageResize","getPointY","resizeBtnStat","topRight","botLeft","botRight","imgResizePos","resizeImgDupPos","imgWid","imgHgt","borWid","devWid","setAspectRatio","expectedX","expectedY","resizeByPercent","pixToPerc","imgDupMouseMove","mouseX","mouseY","imgDupPos","openImgLink","editImgLink","removeImgLink","insertEle","captionEle","remvoeResizEle","justifyImageLeft","justifyImageCenter","justifyImageRight","imageWithLinkQTBarItemUpdate","newItems","hideImageQuickToolbar","imagDialog","linkWrap","inputLink","linkargs_1","selfImage","altWrap","altHeader","inputAlt","altArgs_1","insertAlt","captionClass","classes.CLS_CAPTION","imgWrap","imgInner","imgCaption","classes.CLS_IMGINLINE","classes.CLS_IMGBREAK","imgSizeHeader","dialogContent","imgsizeInput","selectObj_1","insertSize","imgDialog","imgInsert","imglinkCancel","imgHeader","insertImageUrl","imageUrlPopup","imgUrl","placeUrl","inputUrl","uploadUrl","matchUrl","imgHeight","imgWidth","imgSizeWrap","getClientRects","widthNum","heightNum","dialogEle","imgUpload","linkHeaderText","uploadParentEle","deviceImgUpMsg","imgUpMsg","btnEle","autofocus","browserMsg","fileSelect","uploadEle","uploadObj","allowedTypes","removing","dataurl","mime","bstr","atob","u8arr","ViewSource","onInitialEnd","updateSourceCode","CONSTANT.KEY_DOWN_HANDLER","getSourceCode","previewKeyDown","previewElement","wireBaseKeyDown","unWireBaseKeyDown","updateValueData","invokeChangeEvent","editHTML","Table","moveEle","insertTableDialog","docClick","dropdownSelect","cellSelect","setBGColor","resizeHelper","addColumn","removeRowColumn","tableStyles","removeResizeEle","tabSelection","tableArrowNavigation","editTable","classes.CLS_TB_DASH_BOR","classes.CLS_TB_ALT_BOR","insideList","classes.CLS_TABLE_SEL","prevElement","clsTble","nextElement","selText","hideTableQuickToolbar","range_1","tableCellSelect","tblHeader","tableCellLeave","tableCellClick","tableInsert","editdlgObj","curTable","tableResizeEleCreation","colReEle","classes.CLS_TB_COL_RES","data-col","unselectable","rowReEle","classes.CLS_TB_ROW_RES","data-row","tableReBox","classes.CLS_TB_BOX_RES","columnEle","rowEle","tableBox","tableHeight","cellColl","actualwid","totalwid","tabkey","delKey","insertbtn","tableDiv","drawTable","data-column","data-cell","editContent","tableDlgContent","editHeader","dlgContent","tableCellDlgContent","customTable","tableColumn","tableRow","tableWrap","columnTextBox","rowTextBox","tableDialog","widthVal","executeGroup","strikeThrough","formatBlock","heading","insertHTML","insertText","insertHorizontalRule","insertBrOnReturn","insertOrderedList","insertUnorderedList","insertParagraph","ToolbarSettings","ImageSettings","TableSettings","QuickToolbarSettings","FontFamily","FontSize","Format","FontColor","BackgroundColor","Resources","IFrameSettings","InlineMode","FullScreen","scrollableParent","classes.CLS_FULL_SCREEN","toggleParentOverflow","RichTextEditor","isFocusOut","updateEnable","setContainer","originalElement","rteOutterWrapper","executeCommand","commandName","decode","RTERender","allowedKeys","mouseUp","onCopy","onCut","onPaste","placeHolderWrapper","removeHtmlAttributes","updatePanelValue","countModule","frameSetting","scripts","classes.CLS_SCRIPT_SHEET","removeSheets","classes.CLS_STYLE_SHEET","setIframeSettings","CONSTANT.MODEL_CHANGED","enableHtmlEncode","srcList","unbindEvents","printArgs","removeToolbarItem","styleSrc","scriptSrc","InjectSheet","scriptSheet","scriptEle","createScriptElement","styleEle","createStyleElement","rel","compiledTemplate","heightValue","rteHeight","expandPopHeight","getHtml","showSourceCode","preventImgResize","defaultResize","cloneValue","saveInterval","timeInterval","updateIntervalValue","setPanelValue","scrollParentElements","setAutoHeight","iframeElement_1","exports","__button","__checkbox","navigations","__contextmenu","__datamanager","__datepicker","__calendar","__daterangepicker","__datetimepicker","__timepicker","splitbuttons","__dropdownbutton","dropdowns","__dropdownlist","__progressbutton","__tooltip","__uploader","__grid.Grid","__grid.Filter","__grid.Page","__grid.Selection","__grid.Sort","__grid.Group","__grid.Reorder","__grid.RowDD","__grid.DetailRow","__grid.Toolbar","__grid.Aggregate","__grid.Search","__grid.VirtualScroll","__grid.Edit","__grid.Resize","__grid.ExcelExport","__grid.PdfExport","__grid.CommandColumn","__grid.ContextMenu","__grid.Freeze","__grid.ColumnMenu","__grid.ColumnChooser","__grid.ForeignKey","grids","__grid","__toolbar","__autocomplete","__richtexteditor.RichTextEditor","__richtexteditor.Toolbar","__richtexteditor.Link","__richtexteditor.Image","__richtexteditor.Count","__richtexteditor.QuickToolbar","__richtexteditor.HtmlEditor","__richtexteditor.MarkdownEditor","richtexteditor","__richtexteditor","_base","_lists","_data","_inputs","_popups","_buttons","excelexport","_excelexport","pdfexport","_pdfexport","fileutils","_fileutils","compression","_compression","_splitbuttons"],"mappings":"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,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACrI,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAA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VC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU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AAYqiR,KACbC,EAASjvR,UAAW,iBAAa,GACpC0xC,IACI5lC,KACDmjR,EAASjvR,UAAW,oBAAgB,GACvC0xC,IACI5lC,EAAS,KACVmjR,EAASjvR,UAAW,gBAAY,GACnC0xC,IACI5lC,GAAS,IACVmjR,EAASjvR,UAAW,yBAAqB,GAC5C0xC,IACI5lC,GAAS,IACVmjR,EAASjvR,UAAW,iBAAa,GACpC0xC,IACI5lC,KACDmjR,EAASjvR,UAAW,qBAAiB,GACxC0xC,IACI5lC,EAAS,SACVmjR,EAASjvR,UAAW,gBAAY,GACnC0xC,IACI/kC,KAAYmiR,KACbG,EAASjvR,UAAW,cAAU,GACjC0xC,IACI5lC,GAAS,IACVmjR,EAASjvR,UAAW,qBAAiB,GACxC0xC,IACI5lC,GAAS,IACVmjR,EAASjvR,UAAW,oBAAgB,GACvC0xC,IACI5lC,KACDmjR,EAASjvR,UAAW,oBAAgB,GACvC0xC,IACI5lC,KACDmjR,EAASjvR,UAAW,qBAAiB,GACxC0xC,IACI5lC,EAAS,SACVmjR,EAASjvR,UAAW,iBAAa,GACpC0xC,IACI5lC,GAAS,IACVmjR,EAASjvR,UAAW,oBAAgB,GACvC0xC,IACI5lC,GAAS,IACVmjR,EAASjvR,UAAW,iBAAa,GACpC0xC,IACItkC,KACD6hR,EAASjvR,UAAW,eAAW,GAClC0xC,IACItkC,KACD6hR,EAASjvR,UAAW,iBAAa,GACpC0xC,IACItkC,KACD6hR,EAASjvR,UAAW,yBAAqB,GAC5C0xC,IACItkC,KACD6hR,EAASjvR,UAAW,gBAAY,GACnC0xC,IACItkC,KACD6hR,EAASjvR,UAAW,iBAAa,GACpC0xC,IACItkC,KACD6hR,EAASjvR,UAAW,gBAAY,GACnC0xC,IACItkC,KACD6hR,EAASjvR,UAAW,mBAAe,GACtC0xC,IACItkC,KACD6hR,EAASjvR,UAAW,oBAAgB,GACvC0xC,IACItkC,KACD6hR,EAASjvR,UAAW,mBAAe,GACtC0xC,IACItkC,KACD6hR,EAASjvR,UAAW,qBAAiB,GACxC0xC,IACItkC,KACD6hR,EAASjvR,UAAW,sBAAkB,GACzC0x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qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,OAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,OAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,OAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,OAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,OAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,OAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAE7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAM,MAC7C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,MAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,MAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,MAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,MAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,MAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,MAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,MAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,KAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2qX,yBAAyBvtX,SAAS,MAAO,OAC9C4C,KAAK2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,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAM/E5B,EAA8BqD,iBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IA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AK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,KAMTzC,EAA8ByD,aAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,GAMxCzD,EAA8B6D,mBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IA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"}