{"version":3,"file":"ej2.min.js","sources":["../node_modules/@syncfusion/ej2-base/dist/src/es5/util.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/dom.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/notify-property-change.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/animation.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/internationalization.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/template.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/template-engine.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/common/common.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/common/position.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/common/collision.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/popup/popup.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/spinner/spinner.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/maskedtextbox/base/mask-base.js","../node_modules/@syncfusion/ej2-lists/dist/src/es5/common/list-base.js","../node_modules/@syncfusion/ej2-file-utils/dist/src/es5/encoding.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/collections/utils.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/theme.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/utils/helper.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/model/acc-base.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/common/incremental-search.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/common/highlight-search.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/util.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/aria-service.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/utils/helper.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/util.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/recurrence-editor/date-generator.js","../node_modules/@syncfusion/ej2-splitbuttons/dist/src/es5/common/common.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/ajax.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/event-handler.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/observer.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/base.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/browser.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/intl-base.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/canvas-renderer.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/module-loader.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/child-property.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/parser-base.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/number-formatter.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/date-formatter.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/input/input.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/date-parser.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/number-parser.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/component.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/draggable.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/droppable.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/keyboard.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/l10n.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/svg-renderer.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/touch.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/button/button.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/check-box/check-box.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/radio-button/radio-button.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/dialog/dialog.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/numerictextbox/numerictextbox.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/form-validator/form-validator.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/maskedtextbox/maskedtextbox/maskedtextbox.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/slider/slider.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/uploader/uploader.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/query.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/util.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/adaptors.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/manager.js","../node_modules/@syncfusion/ej2-lists/dist/src/es5/list-view/list-view.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/timepicker/timepicker.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/calendar/calendar.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/datepicker/datepicker.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/daterangepicker/daterangepicker.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/datetimepicker/datetimepicker.js","../node_modules/@syncfusion/ej2-file-utils/dist/src/es5/save.js","../node_modules/@syncfusion/ej2-file-utils/dist/src/es5/stream-writer.js","../node_modules/@syncfusion/ej2-compression/dist/src/es5/compression-writer.js","../node_modules/@syncfusion/ej2-compression/dist/src/es5/zip-archive.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/collections/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-string.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-name.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-operators.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-dictionary-properties.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-number.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-array.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-stream.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-reference.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/actions/action.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/actions/uri-action.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-color.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/drawing/pdf-drawing.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/brushes/pdf-brush.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/brushes/pdf-solid-brush.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-string-format.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/string-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/string-tokenizer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-font.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-writer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-main-object-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-document-base.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-catalog.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-size.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-margins.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/image-decoder.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-settings.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-stream-writer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-pen.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-transformation-matrix.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/constants.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/collections/object-object-pair/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-transparency.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/automatic-field-info-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/base/graphics-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/automatic-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/automatic-field-info.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-graphics.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-layer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/pdf-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-layer-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/pdf-template.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/byte-array.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-boolean.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/unit-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/pdf-image.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/pdf-bitmap.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-resources.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-base.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/annotation-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/page-added-event-arguments.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-document-template.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section-templates.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-document-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/pdf-cache-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-document.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-font-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-standard-font-metrics-factory.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-standard-font.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/action-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/document-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/base/element-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/layout-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/base/text-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/text-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/uri-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/pdf-text-web-link.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/pdf-numbers-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/pdf-template-value-pair.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/multiple-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/pdf-page-number-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/composite-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/single-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/page-count-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/pdf-destination.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/tables/light-tables/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-template-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/styles/pdf-borders.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/styles/style.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid-cell.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid-column.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid-row.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/utils/double-range.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/double-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/constants.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/model/chart-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/cartesian-panel.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/utils/get-data.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/chart-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/data.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/marker-explode.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/marker.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/legend/legend.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/technical-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/utils/export.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/chart.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/axis-helper.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/date-time-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/category-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/logarithmic-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/date-time-category-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/strip-line.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/line-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/line-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/column-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/column-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/multi-colored-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/bar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/polar-radar-panel.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/polar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/radar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/stacking-bar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/candle-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/stacking-column-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/step-line-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/step-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/stacking-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/scatter-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/range-column-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/waterfall-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/hilo-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/hilo-open-close-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/range-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/bubble-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/spline-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/spline-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/spline-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/indicator-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/sma-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/ema-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/tma-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/ad-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/atr-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/momentum-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/rsi-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/stochastic-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/bollinger-bands.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/macd-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/trend-lines/trend-line.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/crosshair.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/zooming-toolkit.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/zooming.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/data-label.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/error-bar.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/box-and-whisker-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/multi-colored-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/multi-colored-line-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/multi-level-labels.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/accumulation-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/pie-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/pie-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/accumulation.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/triangular-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/funnel-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/pyramid-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/legend.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/dataLabel.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/annotation/annotation.js","../charts.ts","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/model/theme.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/model/base.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/model/constants.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/pointer-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/circular-gauge.js","../circulargauge.ts","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/drop-down-base/drop-down-base.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/drop-down-list/drop-down-list.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/combo-box/combo-box.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/auto-complete/auto-complete.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/multi-select/multi-select.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/multi-select/checkbox-selection.js","../dropdowns.ts","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/enum.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/cell-style.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/cell.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/column.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/row.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/worksheets.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/worksheet.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/value-formatter.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/csv-helper.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/blob-helper.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/workbook.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/common/h-scroll.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/toolbar/toolbar.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/accordion/accordion.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/context-menu/context-menu.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/tab/tab.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/treeview/treeview.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/sidebar/sidebar.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/value-formatter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/column.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/constant.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/checkbox-filter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/data.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/row.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/cell-merge-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/row-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/row-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/summary-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/group-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/content-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/header-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/stacked-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/indent-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/caption-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/detail-header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/detail-expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/render.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/cell-render-factory.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/service-locator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/renderer-factory.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/width-controller.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/focus-strategy.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/page-settings.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/selection.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/search.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/show-hide.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/scroll.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/print.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/aggregate.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/clipboard.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/grid.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/sort.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/numeric-container.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/pager-message.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/pager.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/pager-dropdown.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/external-message.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/page.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/filter-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/filter-menu-operator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/string-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/number-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/boolean-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/date-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/filter-menu-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/excel-filter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/filter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/resize.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/reorder.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/row-reorder.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/group.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/detail-row.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/toolbar.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/footer-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/summary-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/aggregate.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/intersection-observer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/virtual-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/virtual-content-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/virtual-scroll.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/inline-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/batch-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/dialog-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/boolean-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/dropdown-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/numeric-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/default-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/normal-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/inline-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/batch-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/dialog-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/datepicker-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/column-chooser.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/export-helper.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/excel-export.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/pdf-export.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/command-column-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/command-column.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/context-menu.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/freeze-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/freeze-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/freeze.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/column-menu.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/foreign-key.js","../grids.ts","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/model/base.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/animation.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/linear-gauge.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/model/theme.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/model/base.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/model/constants.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/bing-map.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/color-mapping.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/layer-panel.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/annotation.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/maps.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/bubble.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/marker.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/data-label.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/navigation-selected-line.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/legend.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/highlight.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/selection.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/zoom.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/constant.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/scroll.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/touch.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/keyboard.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/data.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/timezone/timezone.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/event-base.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/crud.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/form-validator.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/quick-popups.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/event-tooltip.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/recurrence-editor/recurrence-editor.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/event-window.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/renderer.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/work-hours.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/fields.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/event-settings.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/schedule.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/view-base.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/work-cells.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/day.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/week.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/work-week.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/month.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/month.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/agenda-base.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/agenda.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/month-agenda.js","../schedule.ts","../node_modules/@syncfusion/ej2-splitbuttons/dist/src/es5/drop-down-button/drop-down-button.js","../node_modules/@syncfusion/ej2-splitbuttons/dist/src/es5/split-button/split-button.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 };\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.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.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 for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n temrObj[key] = tempProp[key];\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)) {\n clone = isObject(src) ? src : {};\n result[key] = extend({}, clone, copy, true);\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}\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';\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 var element = 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)) {\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]);\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 return getObject(this, curKey, defaultValue, curType);\n };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue);\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 = getObjectArray(this, curKey, defaultValue, type, false, true);\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 = 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 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 __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 var Animation_1;\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;\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 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() {\n return IntlBase.getDependables(cldrData, '', 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 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 /**\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 (IF_STMT.test(cnt)) {\n //handling 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 (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 return 'var i=0; i < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n + '[i]; \\n var ' + rlStr_1[0] + 'Index=i; \\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);\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);\n}\nfunction setPopup(element, pos) {\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');\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) {\n pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent);\n edge.TL = calculatePosition(target, 'left', 'top', fixedParent);\n edge.TR = calculatePosition(target, 'right', 'top', fixedParent);\n edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent);\n edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent);\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);\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);\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 = 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 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 var _this = _super.call(this, options, element) || this;\n _this.fixedParent = false;\n return _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.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 === '' ? 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 = relateToElement.getBoundingClientRect();\n if (!rect.height || !rect.width) {\n return false;\n }\n if (scrollElement.getBoundingClientRect) {\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) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n this.checkCollision();\n };\n Popup.prototype.reposition = function () {\n var pos;\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 (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 this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n var eleRect = ele.getBoundingClientRect();\n var anchorRect = anchorEle.getBoundingClientRect();\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 anchorPos = calculateRelativeBasedPosition(anchor, ele);\n }\n switch (position.X) {\n default:\n case 'left':\n break;\n case 'center':\n 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 (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 (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 (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 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 };\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 === 'fit') {\n this.callFit({ X: true, Y: false });\n }\n else if (vert === 'fit') {\n this.callFit({ X: false, Y: true });\n }\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 }\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 */\n Popup.prototype.show = function (animationOptions) {\n var _this = this;\n if (this.zIndex === 1000) {\n this.zIndex = getZindexPartial(this.element);\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 finalValue = parentZindex.concat(childrenZindex);\n return Math.max.apply(Math, finalValue) + 1;\n}\n","import { isNullOrUndefined, classList } 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) {\n var radius;\n var container = create_spinner_container(args.target);\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);\n if (!isNullOrUndefined(args.label)) {\n createLabel(container.inner_wrap, args.label);\n }\n }\n container.wrap.classList.add(CLS_HIDESPIN);\n}\nfunction createLabel(container, label) {\n var labelEle = document.createElement('div');\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.textContent = label;\n container.appendChild(labelEle);\n return labelEle;\n}\nfunction createMaterialSpinner(container, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n create_material_element(container, uniqueID);\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) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FABRICSPIN);\n fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\nfunction createHighContrastSpinner(container, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN);\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) {\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);\n break;\n case 'Fabric':\n createFabricSpinner(innerContainer, radius);\n break;\n case 'Bootstrap':\n createBootstrapSpinner(innerContainer, radius);\n break;\n case 'HighContrast':\n createHighContrastSpinner(innerContainer, radius);\n break;\n }\n}\nfunction createBootstrapSpinner(innerContainer, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n create_bootstrap_element(innerContainer, uniqueID);\n boot_calculate_attributes(innerContainer, radius);\n}\nfunction create_bootstrap_element(innerContainer, uniqueID) {\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(innerContainer, uniqueID, themeClass) {\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 innerContainer.insertBefore(svgFabric, innerContainer.firstChild);\n svgFabric.appendChild(fabricCirclePath);\n svgFabric.appendChild(fabricCircleArc);\n}\nfunction create_material_element(innerContainer, uniqueID) {\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) {\n var spinnerContainer = document.createElement('div');\n spinnerContainer.classList.add(CLS_SPINWRAP);\n var spinnerInnerContainer = document.createElement('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}\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}\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}\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) {\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);\n }\n}\nfunction ensureTemplate(template, container, theme, cssClass) {\n if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n replaceTheme(container, theme, cssClass);\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) {\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);\n}\n","/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser } 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, { 'role': 'textbox', 'autocomplete': 'off', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': '' });\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, '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}\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, '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 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) {\n var value = '';\n var k = 0;\n var checkMask = false;\n if (!isNullOrUndefined(element) && !isNullOrUndefined(this) && element.value !== 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 ((element.value[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]]))))) && (element.value !== '')) {\n value += element.value[i];\n }\n }\n ++k;\n }\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.placeholder && this.element.value === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(this.focusEventArgs.selectionStart, this.focusEventArgs.selectionEnd);\n setTimeout(function () {\n _this.element.setSelectionRange(_this.focusEventArgs.selectionStart, _this.focusEventArgs.selectionEnd);\n }, 1);\n }\n else {\n this.element.setSelectionRange(this.focusEventArgs.selectionStart, this.focusEventArgs.selectionEnd);\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 setTimeout(function () {\n var value = _this.element.value;\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 }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask) {\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 }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputKeyDownHandler(event) {\n var _this = this;\n if (this.mask) {\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 else {\n setTimeout(function () {\n removeMaskInputValues.call(_this, event);\n }, 0);\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 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 mobileRemoveFunction.call(this);\n oldEventVal = this.element.value;\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 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 triggerMaskChangeEvent.call(this, event, oldEventVal);\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 }\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n}\nfunction triggerMaskChangeEvent(event, oldValue) {\n if (!isNullOrUndefined(this.changeEventArgs)) {\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 attributes(this.element, { 'aria-valuenow': this.element.value });\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask) {\n var collec = void 0;\n if (!this.maskKeyPress && event.keyCode === 229) {\n var oldEventVal = void 0;\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var val_1 = this.element.value.substring(startIndex - addedValues, startIndex);\n if (this.undoCollec.length > 0) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n var startIndex_1 = this.element.selectionStart;\n oldEventVal = collec.value;\n var oldVal = collec.value.substring(startIndex_1 - addedValues, startIndex_1);\n collec = this.redoCollec[0];\n val_1 = val_1.trim();\n var isSpace = Browser.isAndroid && val_1 === '';\n if (!isSpace && oldVal !== val_1 && collec.value.substring(startIndex_1 - addedValues, startIndex_1) !== val_1) {\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n else if (isSpace) {\n preventUnsupportedValues.call(this, event, startIndex_1 - 1, this.element.selectionEnd - 1, val_1, event.ctrlKey, false);\n }\n }\n else {\n oldEventVal = this.promptMask;\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n this.maskKeyPress = false;\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n else {\n removeMaskError.call(this);\n }\n var val = strippedValue.call(this, this.element);\n if (!((this.element.selectionStart === 0) && (this.promptMask === this.element.value) && val === '')\n || (val === '' && this.value !== val)) {\n this.prevValue = val;\n this.value = val;\n }\n }\n else {\n triggerMaskChangeEvent.call(this, event);\n this.value = this.element.value;\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 validateValue(key, isCtrlKey, event) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\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 triggerMaskChangeEvent.call(this, event, eventOldVal);\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 triggerMaskChangeEvent.call(this, event, eventOldVal);\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 && !isNullOrUndefined(val) && (val === '' || this.prevValue !== val)) {\n this.maskKeyPress = true;\n setElementValue.call(this, this.promptMask);\n if (val !== '') {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\n this.value = strippedValue.call(this, this.element);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\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' && isNullOrUndefined(this.value)) {\n val = '';\n }\n Input.setValue(val, (element ? element : this.element), this.floatLabelType);\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","import { extend, merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { createElement, 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 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(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(dataSource, isSingleLevel, options);\n }\n else {\n return createListFromJson(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(dataSource, isSingleLevel, options) {\n var subChild = createListItemFromArray(dataSource, isSingleLevel, options);\n return generateUL(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(dataSource, isSingleLevel, options) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = genUID(); // 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(dataSource[i], null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(dataSource[i], 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(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 (Object.keys(dataSource).length && !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = genUID(); // 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 (Object.keys(dataSource).length && fieldData.hasOwnProperty(fields.id)\n && !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)) {\n if (!isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n }\n li = generateSingleLevelLI(curItem, fields, curOpt.itemClass, innerEle, (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n }\n else {\n li = generateLI(curItem, 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 var attr = { src: fieldData[fields.imageUrl] };\n if (fieldData.hasOwnProperty(fields.imageUrl)) {\n merge(attr, fieldData[fields.imageAttributes]);\n }\n prepend([createElement('img', { className: cssClass.image, attrs: attr })], li.firstElementChild);\n }\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !curOpt.template) {\n if (!isNullOrUndefined(fieldData[fields.iconCss])) {\n prepend([createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] })], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n processSubChild(curItem, 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(dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(dataSource, options, level, isSingleLevel);\n return generateUL(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 cusQuery = new Query().group(fields.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[fields.text] = ds[j].key;\n grpItem[hdr] = true;\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 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 json[fields.id] = genUID();\n var attributes_1 = getAllAttributes(li);\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(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 compiledString = compile(template);\n var liCollection = [];\n var id = genUID(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n var value = (typeof curItem === 'string' || typeof curItem === 'number') ? curItem : fieldData[fields.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: fields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n value = fieldData[fields.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[fields.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: fields\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 category = fields.groupBy;\n var headerData = {};\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n headerData[category] = header.textContent;\n header.innerHTML = '';\n append(compiledString(headerData), header);\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function genUID() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n function processSubChild(curItem, fields, ds, options, element, level) {\n var fieldData = getFieldValues(curItem, fields);\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(subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n if (element.firstElementChild.classList.contains(cssClass.textContent)) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n }\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(item, 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 var fieldData = getFieldValues(item, fields);\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n 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.hasOwnProperty(fields.url) && fieldData[fields.url]) {\n li.appendChild(anchorTag(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(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 }\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(item, 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 var fieldData;\n if (typeof item !== 'string') {\n fieldData = getFieldValues(item, fields);\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', genUID());\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', { className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {}) });\n if (dataSource && fieldData.hasOwnProperty(fields.url) && fieldData[fields.url]) {\n innerDiv.appendChild(anchorTag(dataSource, fields, text));\n }\n else {\n innerDiv.appendChild(createElement('span', { className: cssClass.text, innerHTML: text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {}) }));\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(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(liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className) })], 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 var value;\n if (isNullOrUndefined(dataItem)) {\n return dataItem;\n }\n else if (typeof (dataItem) === 'string' || typeof (dataItem) === 'number') {\n return dataItem;\n }\n else if (isNullOrUndefined(dataItem.isHeader)) {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n if (!isNullOrUndefined(fields[field]) &&\n typeof (fields[field]) === 'string') {\n var property = fields[field].split('.');\n var dataField = property.length > 1 ? property[0] : fields[field];\n if (!isNullOrUndefined(dataItem[dataField])) {\n value = getValue(fields[field], dataItem);\n if (!isNullOrUndefined(value)) {\n fieldData[fields[field]] = value;\n }\n }\n }\n }\n }\n else if (!isNullOrUndefined(dataItem.isHeader) && dataItem.isHeader) {\n fieldData = dataItem;\n }\n return fieldData;\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) {\n uint[j] = charcode;\n }\n else if (charcode < 0x800) {\n uint[j] = 0xc0 | (charcode >> 6);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else if ((charcode < 0xd800 || charcode >= 0xe000)) {\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 * Specifies Chart Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisTitleFont = {\n size: '14px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.chartTitleFont = {\n size: '15px',\n fontWeight: '500',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.crosshairLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.tooltipLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.stripLineLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#353535',\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getSeriesColor(theme) {\n var palette;\n switch (theme) {\n case 'Fabric':\n palette = ['#4472c4', '#ed7d31', '#ffc000', '#70ad47', '#5b9bd5',\n '#c1c1c1', '#6f6fe2', '#e269ae', '#9e480e', '#997300'];\n break;\n case 'Bootstrap':\n palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n break;\n case 'Highcontrast':\n palette = ['#79ECE4', '#E98272', '#DFE6B6', '#C6E773', '#BA98FF',\n '#FA83C3', '#00C27A', '#43ACEF', '#D681EF', '#D8BC6E'];\n break;\n default:\n palette = ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n break;\n }\n return palette;\n}\n/** @private */\nexport function getThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n axisLabel: '#ffffff',\n axisTitle: '#ffffff',\n axisLine: '#ffffff',\n majorGridLine: '#BFBFBF',\n minorGridLine: '#969696',\n majorTickLine: '#BFBFBF',\n minorTickLine: '#969696',\n chartTitle: '#ffffff',\n legendLabel: '#ffffff',\n background: '#000000',\n areaBorder: '#ffffff',\n errorBar: '#ffffff',\n crosshairLine: '#ffffff',\n crosshairFill: '#ffffff',\n crosshairLabel: '#000000',\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696',\n markerShadow: '#BFBFBF',\n selectionRectFill: 'rgba(255, 217, 57, 0.3)',\n selectionRectStroke: '#ffffff',\n selectionCircleStroke: '#FFD939'\n };\n break;\n default:\n style = {\n axisLabel: '#686868',\n axisTitle: '#424242',\n axisLine: '#b5b5b5',\n majorGridLine: '#dbdbdb',\n minorGridLine: '#eaeaea',\n majorTickLine: '#b5b5b5',\n minorTickLine: '#d6d6d6',\n chartTitle: '#424242',\n legendLabel: '#353535',\n background: '#FFFFFF',\n areaBorder: 'Gray',\n errorBar: '#000000',\n crosshairLine: '#4f4f4f',\n crosshairFill: '#4f4f4f',\n crosshairLabel: '#e5e5e5',\n tooltipFill: 'rgba(0, 8, 22, 0.75)',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff',\n markerShadow: null,\n selectionRectFill: 'rgba(41, 171, 226, 0.1)',\n selectionRectStroke: '#29abe2',\n selectionCircleStroke: '#29abe2'\n };\n break;\n }\n return style;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer, Animation, compile as templateComplier } from '@syncfusion/ej2-base';\nimport { merge, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { Index } from '../../common/model/base';\n/**\n * Methods for calculating the text size.\n */\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('chartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'chartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Function to sort the dataSource, by default it sort the data in ascending order.\n * @param {Object} data\n * @param {string} fields\n * @param {boolean} isDescending\n * @returns Object\n */\nexport function sort(data, fields, isDescending) {\n var sortData = extend([], data, null);\n sortData.sort(function (a, b) {\n var first = 0;\n var second = 0;\n for (var i = 0; i < fields.length; i++) {\n first += a[fields[i]];\n second += b[fields[i]];\n }\n if ((!isDescending && first < second) || (isDescending && first > second)) {\n return -1;\n }\n else if (first === second) {\n return 0;\n }\n return 1;\n });\n return sortData;\n}\n/** @private */\nexport function rotateTextSize(font, text, angle, chart) {\n var renderer = new SvgRenderer(chart.element.id);\n var box;\n var options;\n var htmlObject;\n options = {\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'transform': 'rotate(' + angle + ', 0, 0)',\n 'text-anchor': 'middle'\n };\n htmlObject = renderer.createText(options, text);\n if (!chart.delayRedraw) {\n chart.element.appendChild(chart.svgObject);\n }\n chart.svgObject.appendChild(htmlObject);\n box = htmlObject.getBoundingClientRect();\n remove(htmlObject);\n if (!chart.delayRedraw) {\n remove(chart.svgObject);\n }\n return new Size((box.right - box.left), (box.bottom - box.top));\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function logBase(value, base) {\n return Math.log(value) / Math.log(base);\n}\n/** @private */\nexport function showTooltip(text, x, y, areaWidth, id, element, isTouch) {\n //let id1: string = 'EJ2_legend_tooltip';\n var tooltip = document.getElementById(id);\n var width = measureText(text, {\n fontFamily: 'Segoe UI', size: '12px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n }).width + 5;\n x = (x + width > areaWidth) ? x - width : x;\n if (!tooltip) {\n tooltip = createElement('div', {\n innerHTML: text,\n id: id,\n styles: 'top:' + (y + 15).toString() + 'px;left:' + (x + 15).toString() + 'px;background-color: rgb(255, 255, 255);' +\n 'position:absolute;border:1px solid rgb(112, 112, 112); padding-left : 3px; padding-right : 2px;' +\n 'padding-bottom : 2px; padding-top : 2px; font-size:12px; font-family: \"Segoe UI\"'\n });\n element.appendChild(tooltip);\n }\n else {\n tooltip.innerHTML = text;\n tooltip.style.top = (y + 15).toString() + 'px';\n tooltip.style.left = (x + 15).toString() + 'px';\n }\n if (isTouch) {\n setTimeout(function () { removeElement(id); }, 1500);\n }\n}\n/** @private */\nexport function inside(value, range) {\n return (value < range.max) && (value > range.min);\n}\n/** @private */\nexport function withIn(value, range) {\n return (value <= range.max) && (value >= range.min);\n}\n/** @private */\nexport function withInRange(previousPoint, currentPoint, nextPoint, series) {\n var mX2 = series.logWithIn(currentPoint.xValue, series.xAxis);\n var mX1 = previousPoint ? series.logWithIn(previousPoint.xValue, series.xAxis) : mX2;\n var mX3 = nextPoint ? series.logWithIn(nextPoint.xValue, series.xAxis) : mX2;\n var xStart = Math.floor(series.xAxis.visibleRange.min);\n var xEnd = Math.ceil(series.xAxis.visibleRange.max);\n return ((mX1 >= xStart && mX1 <= xEnd) || (mX2 >= xStart && mX2 <= xEnd) ||\n (mX3 >= xStart && mX3 <= xEnd) || (xStart >= mX1 && xStart <= mX3));\n}\n/** @private */\nexport function sum(values) {\n var sum = 0;\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n sum += value;\n }\n return sum;\n}\n/** @private */\nexport function subArraySum(values, first, last, index, series) {\n var sum = 0;\n if (index !== null) {\n for (var i = (first + 1); i < last; i++) {\n if (index.indexOf(i) === -1) {\n sum += values[i][series.yName];\n }\n }\n }\n else {\n for (var i = (first + 1); i < last; i++) {\n if (!isNullOrUndefined(values[i][series.yName])) {\n sum += values[i][series.yName];\n }\n }\n }\n return sum;\n}\n/** @private */\nexport function subtractThickness(rect, thickness) {\n rect.x += thickness.left;\n rect.y += thickness.top;\n rect.width -= thickness.left + thickness.right;\n rect.height -= thickness.top + thickness.bottom;\n return rect;\n}\n/** @private */\nexport function subtractRect(rect, thickness) {\n rect.x += thickness.x;\n rect.y += thickness.y;\n rect.width -= thickness.x + thickness.width;\n rect.height -= thickness.y + thickness.height;\n return rect;\n}\n/** @private */\nexport function degreeToLocation(degree, radius, center) {\n var radian = (degree * Math.PI) / 180;\n return new ChartLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\nfunction getAccumulationLegend(locX, locY, r, height, width, mode) {\n var cartesianlarge = degreeToLocation(270, r, new ChartLocation(locX, locY));\n var cartesiansmall = degreeToLocation(270, r, new ChartLocation(locX + (width / 10), locY));\n return 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + ' ' + (locX + r) + ' ' + (locY) + ' ' + 'A' + ' ' + (r) + ' ' + (r) +\n ' ' + 0 + ' ' + 1 + ' ' + 1 + ' ' + cartesianlarge.x + ' ' + cartesianlarge.y + ' ' + 'Z' + ' ' + 'M' + ' ' + (locX +\n (width / 10)) + ' ' + (locY - (height / 10)) + ' ' + 'L' + (locX + (r)) + ' ' + (locY - height / 10) + ' ' + 'A' + ' '\n + (r) + ' ' + (r) + ' ' + 0 + ' ' + 0 + ' ' + 0 + ' ' + cartesiansmall.x + ' ' + cartesiansmall.y + ' ' + 'Z';\n}\n/** @private */\nexport function getAngle(center, point) {\n var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n angle = angle < 0 ? (6.283 + angle) : angle;\n return angle * (180 / Math.PI);\n}\n/** @private */\nexport function subArray(values, index) {\n var subArray = [];\n for (var i = 0; i <= index - 1; i++) {\n subArray.push(values[i]);\n }\n return subArray;\n}\n/** @private */\nexport function valueToCoefficient(value, axis) {\n var range = axis.visibleRange;\n var result = (value - range.min) / (range.delta);\n return axis.isInversed ? (1 - result) : result;\n}\n/** @private */\nexport function TransformToVisible(x, y, xAxis, yAxis, isInverted, series) {\n x = (xAxis.valueType === 'Logarithmic' ? logBase(x > 1 ? x : 1, xAxis.logBase) : x);\n y = (yAxis.valueType === 'Logarithmic' ?\n logBase(y > 1 ? y : 1, yAxis.logBase) : y);\n x += xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks' && series.type !== 'Radar' ? 0.5 : 0;\n var radius = series.chart.radius * valueToCoefficient(y, yAxis);\n var point = CoefficientToVector(valueToPolarCoefficient(x, xAxis), series.chart.primaryXAxis.startAngle);\n return {\n x: (series.clipRect.width / 2 + series.clipRect.x) + radius * point.x,\n y: (series.clipRect.height / 2 + series.clipRect.y) + radius * point.y\n };\n}\n/**\n * method to find series, point index by element id\n * @private\n */\nexport function indexFinder(id, isPoint) {\n if (isPoint === void 0) { isPoint = false; }\n var ids = ['NaN', 'NaN'];\n if (id.indexOf('_Point_') > -1) {\n ids = id.split('_Series_')[1].split('_Point_');\n }\n else if (id.indexOf('_shape_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n ids = id.split('_shape_');\n ids[0] = '0';\n }\n else if (id.indexOf('_text_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n ids = id.split('_text_');\n ids[0] = '0';\n }\n return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n}\n/** @private */\nexport function CoefficientToVector(coefficient, startAngle) {\n startAngle = startAngle < 0 ? startAngle + 360 : startAngle;\n var angle = Math.PI * (1.5 - 2 * coefficient);\n angle = angle + (startAngle * Math.PI) / 180;\n return { x: Math.cos(angle), y: Math.sin(angle) };\n}\n/** @private */\nexport function valueToPolarCoefficient(value, axis) {\n var range = axis.visibleRange;\n var delta;\n var length;\n if (axis.valueType !== 'Category') {\n delta = (range.max - (axis.valueType === 'DateTime' ? axis.dateTimeInterval : range.interval)) - range.min;\n length = axis.visibleLabels.length - 1;\n delta = delta === 0 ? 1 : delta;\n }\n else {\n delta = range.delta;\n length = axis.visibleLabels.length;\n }\n return axis.isInversed ? ((value - range.min) / delta) * (1 - 1 / (length)) :\n 1 - ((value - range.min) / delta) * (1 - 1 / (length));\n}\n/** @private */\nvar Mean = /** @class */ (function () {\n function Mean(verticalStandardMean, verticalSquareRoot, horizontalStandardMean, horizontalSquareRoot, verticalMean, horizontalMean) {\n this.verticalStandardMean = verticalStandardMean;\n this.horizontalStandardMean = horizontalStandardMean;\n this.verticalSquareRoot = verticalSquareRoot;\n this.horizontalSquareRoot = horizontalSquareRoot;\n this.verticalMean = verticalMean;\n this.horizontalMean = horizontalMean;\n }\n return Mean;\n}());\nexport { Mean };\n/** @private */\nvar PolarArc = /** @class */ (function () {\n function PolarArc(startAngle, endAngle, innerRadius, radius, currentXPosition) {\n this.startAngle = startAngle;\n this.endAngle = endAngle;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.currentXPosition = currentXPosition;\n }\n return PolarArc;\n}());\nexport { PolarArc };\n/** @private */\nexport function createTooltip(id, text, top, left, fontSize) {\n var tooltip = getElement(id);\n var style = 'top:' + top.toString() + 'px;' +\n 'left:' + left.toString() + 'px;' +\n 'background:' + '#FFFFFF' + ';' +\n 'position:absolute;border:1px solid #707070;font-size:' + fontSize + ';border-radius:2px;';\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id, innerHTML: ' ' + text + ' ', styles: style\n });\n document.body.appendChild(tooltip);\n }\n else {\n tooltip.setAttribute('innerHTML', ' ' + text + ' ');\n tooltip.setAttribute('styles', style);\n }\n}\n/** @private */\nexport function createZoomingLabels(chart, axis, parent, index, isVertical, rect) {\n var margin = 5;\n var opposedPosition = axis.opposedPosition;\n var anchor = isVertical ? 'start' : 'auto';\n var size;\n var chartRect = chart.availableSize.width;\n var x;\n var y;\n var rx = 3;\n var arrowLocation;\n var direction;\n for (var i = 0; i < 2; i++) {\n size = measureText(i ? axis.endLabel : axis.startLabel, axis.labelStyle);\n if (isVertical) {\n arrowLocation = i ? new ChartLocation(rect.x, rect.y + rx) :\n new ChartLocation(axis.rect.x, (rect.y + rect.height - rx));\n x = (rect.x + (opposedPosition ? (rect.width + margin) : -(size.width + margin + margin)));\n y = (rect.y + (i ? 0 : rect.height - size.height - margin));\n x += (x < 0 || ((chartRect) < (x + size.width + margin))) ? (opposedPosition ? -(size.width / 2) : size.width / 2) : 0;\n direction = findDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, false, false, !opposedPosition, arrowLocation.x, arrowLocation.y + (i ? -rx : rx));\n }\n else {\n arrowLocation = i ? new ChartLocation((rect.x + rect.width - rx), (rect.y + rect.height)) :\n new ChartLocation(rect.x + rx, (rect.y + rect.height));\n x = (rect.x + (i ? (rect.width - size.width - margin) : 0));\n y = (opposedPosition ? (rect.y - size.height - 10) : (rect.y + rect.height + margin));\n direction = findDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, opposedPosition, !opposedPosition, false, arrowLocation.x + (i ? rx : -rx), arrowLocation.y);\n }\n x = x + (margin / 2);\n y = y + (3 * (size.height / 4)) + (margin / 2);\n parent.appendChild(chart.renderer.drawPath(new PathOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_Shape_' + i, '#414141', 2, '#414141', 1, null, direction)));\n textElement(new TextOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_' + i, x, y, anchor, i ? axis.endLabel : axis.startLabel), { color: 'white', fontFamily: 'Segoe UI', fontWeight: 'Regular', size: '11px' }, 'white', parent);\n }\n return parent;\n}\n//Within bounds\n/** @private */\nexport function withInBounds(x, y, bounds, width, height) {\n if (width === void 0) { width = 0; }\n if (height === void 0) { height = 0; }\n return (x >= bounds.x - width && x <= bounds.x + bounds.width + width && y >= bounds.y - height\n && y <= bounds.y + bounds.height + height);\n}\n/** @private */\nexport function getValueXByPoint(value, size, axis) {\n var actualValue = !axis.isInversed ? value / size : (1 - (value / size));\n return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/** @private */\nexport function getValueYByPoint(value, size, axis) {\n var actualValue = axis.isInversed ? value / size : (1 - (value / size));\n return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/** @private */\nexport function findClipRect(series) {\n var rect = series.clipRect;\n if (series.chart.requireInvertedAxis) {\n rect.x = series.yAxis.rect.x;\n rect.y = series.xAxis.rect.y;\n rect.width = series.yAxis.rect.width;\n rect.height = series.xAxis.rect.height;\n }\n else {\n rect.x = series.xAxis.rect.x;\n rect.y = series.yAxis.rect.y;\n rect.width = series.xAxis.rect.width;\n rect.height = series.yAxis.rect.height;\n }\n}\n/** @private */\nexport function firstToLowerCase(str) {\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n}\n/** @private */\nexport function getMinPointsDelta(axis, seriesCollection) {\n var minDelta = Number.MAX_VALUE;\n var xValues;\n var minVal;\n seriesCollection.forEach(function (series, index) {\n xValues = [];\n if (series.visible &&\n (axis.name === series.xAxisName || (axis.name === 'primaryXAxis' && series.xAxisName === null)\n || (axis.name === series.chart.primaryXAxis.name && !series.xAxisName))) {\n xValues = series.points.map(function (point, index) {\n return point.xValue;\n });\n xValues.sort(function (first, second) { return first - second; });\n if (xValues.length === 1) {\n minVal = xValues[0] - ((series.xMin && series.xAxis.valueType !== 'DateTime') ?\n series.xMin : axis.visibleRange.min);\n if (minVal !== 0) {\n minDelta = Math.min(minDelta, minVal);\n }\n }\n else {\n xValues.forEach(function (value, index, xValues) {\n if (index > 0 && value) {\n minVal = value - xValues[index - 1];\n if (minVal !== 0) {\n minDelta = Math.min(minDelta, minVal);\n }\n }\n });\n }\n }\n });\n if (minDelta === Number.MAX_VALUE) {\n minDelta = 1;\n }\n return minDelta;\n}\n/** @private */\nexport function getAnimationFunction(effect) {\n var functionName;\n switch (effect) {\n case 'Linear':\n functionName = linear;\n break;\n }\n return functionName;\n}\n/**\n * Animation Effect Calculation Started Here\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function markerAnimate(element, delay, duration, series, pointIndex, point, isLabel) {\n var centerX = point.x;\n var centerY = point.y;\n var height = 0;\n element.style.visibility = 'hidden';\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n height = ((args.timeStamp - args.delay) / args.duration);\n element.setAttribute('transform', 'translate(' + centerX\n + ' ' + centerY + ') scale(' + height + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n },\n end: function (model) {\n element.style.visibility = '';\n element.removeAttribute('transform');\n if ((series.type === 'Scatter' || series.type === 'Bubble') && !isLabel && (pointIndex === series.points.length - 1)) {\n series.chart.trigger('animationComplete', { series: series });\n }\n }\n });\n}\n/**\n * Animation for template\n * @private\n */\nexport function templateAnimate(element, delay, duration, name, isRemove) {\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n name: name,\n progress: function (args) {\n args.element.style.visibility = 'visible';\n },\n end: function (args) {\n if (isRemove) {\n remove(args.element);\n }\n else {\n args.element.style.visibility = 'visible';\n }\n },\n });\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var functionName = 'Path';\n var renderer = new SvgRenderer('');\n var temp = calculateShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n htmlObject.setAttribute('aria-label', label);\n return htmlObject;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n case 'Hilo':\n case 'HiloOpenClose':\n case 'Candle':\n case 'Waterfall':\n case 'BoxAndWhisker':\n case 'StepArea':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pyramid':\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Funnel':\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n options = calculateLegendShapes(location, new Size(width, height), shape, options).renderOption;\n return { renderOption: options, functionName: functionName };\n}\n/** @private */\nexport function getRectLocation(startLocation, endLocation, outerRect) {\n var x;\n var y;\n x = (endLocation.x < outerRect.x) ? outerRect.x :\n (endLocation.x > (outerRect.x + outerRect.width)) ? outerRect.x + outerRect.width : endLocation.x;\n y = (endLocation.y < outerRect.y) ? outerRect.y :\n (endLocation.y > (outerRect.y + outerRect.height)) ? outerRect.y + outerRect.height : endLocation.y;\n return new Rect((x > startLocation.x ? startLocation.x : x), (y > startLocation.y ? startLocation.y : y), Math.abs(x - startLocation.x), Math.abs(y - startLocation.y));\n}\n/** @private */\nexport function minMax(value, min, max) {\n return value > max ? max : (value < min ? min : value);\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/** @private */\nexport function createTemplate(childElement, pointIndex, content, chart, point, series) {\n var templateFn;\n var templateElement;\n templateFn = getTemplateFunction(content);\n try {\n if (templateFn && templateFn({ chart: chart, series: series, point: point }).length) {\n templateElement = templateFn({ chart: chart, series: series, point: point });\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n }\n catch (e) {\n return childElement;\n }\n return childElement;\n}\n/** @private */\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/** @private */\nexport function measureElementRect(element) {\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n removeElement(element.id);\n return bounds;\n}\n/** @private */\nexport function findlElement(elements, id) {\n var element;\n for (var i = 0, length_1 = elements.length; i < length_1; i++) {\n if (elements[i].id.indexOf(id) > -1) {\n element = elements[i];\n continue;\n }\n }\n return element;\n}\n/** @private */\nexport function getPoint(x, y, xAxis, yAxis, isInverted, series) {\n x = ((xAxis.valueType === 'Logarithmic') ? logBase(((x > 1) ? x : 1), xAxis.logBase) : x);\n y = ((yAxis.valueType === 'Logarithmic') ? logBase(((y > 1) ? y : 1), yAxis.logBase) : y);\n x = valueToCoefficient(x, xAxis);\n y = valueToCoefficient(y, yAxis);\n var xLength = (isInverted ? xAxis.rect.height : xAxis.rect.width);\n var yLength = (isInverted ? yAxis.rect.width : yAxis.rect.height);\n var locationX = isInverted ? y * (yLength) : x * (xLength);\n var locationY = isInverted ? (1 - x) * (xLength) : (1 - y) * (yLength);\n return new ChartLocation(locationX, locationY);\n}\n/** @private */\nexport function appendElement(child, parent) {\n if (child && child.hasChildNodes() && parent) {\n parent.appendChild(child);\n }\n else {\n return null;\n }\n}\n/** @private */\nexport function getDraggedRectLocation(x1, y1, x2, y2, outerRect) {\n var width = Math.abs(x1 - x2);\n var height = Math.abs(y1 - y2);\n var x = Math.max(checkBounds(Math.min(x1, x2), width, outerRect.x, outerRect.width), outerRect.x);\n var y = Math.max(checkBounds(Math.min(y1, y2), height, outerRect.y, outerRect.height), outerRect.y);\n return new Rect(x, y, Math.min(width, outerRect.width), Math.min(height, outerRect.height));\n}\n/** @private */\nexport function checkBounds(start, size, min, max) {\n if (start < min) {\n start = min;\n }\n else if ((start + size) > (max + min)) {\n start = (max + min) - size;\n }\n return start;\n}\n/** @private */\nexport function getLabelText(currentPoint, series, chart) {\n var labelFormat = series.yAxis.labelFormat;\n var text = [];\n var customLabelFormat = labelFormat.match('{value}') !== null;\n switch (series.seriesType) {\n case 'XY':\n text.push(currentPoint.text || currentPoint.yValue.toString());\n break;\n case 'HighLow':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n break;\n case 'HighLowOpenClose':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.max(currentPoint.open, currentPoint.close).toString());\n text.push(currentPoint.text || Math.min(currentPoint.open, currentPoint.close).toString());\n break;\n case 'BoxPlot':\n text.push(currentPoint.text || currentPoint.median.toString());\n text.push(currentPoint.text || currentPoint.maximum.toString());\n text.push(currentPoint.text || currentPoint.minimum.toString());\n text.push(currentPoint.text || currentPoint.upperQuartile.toString());\n text.push(currentPoint.text || currentPoint.lowerQuartile.toString());\n for (var _i = 0, _a = currentPoint.outliers; _i < _a.length; _i++) {\n var liers = _a[_i];\n text.push(currentPoint.text || liers.toString());\n }\n break;\n }\n if (labelFormat && !currentPoint.text) {\n for (var i = 0; i < text.length; i++) {\n text[i] = customLabelFormat ? labelFormat.replace('{value}', series.yAxis.format(parseFloat(text[i]))) :\n series.yAxis.format(parseFloat(text[i]));\n }\n }\n return text;\n}\n/** @private */\nexport function stopTimer(timer) {\n window.clearInterval(timer);\n}\n/** @private */\nexport function isCollide(rect, collections, clipRect) {\n var isCollide;\n var currentRect = new Rect(rect.x + clipRect.x, rect.y + clipRect.y, rect.width, rect.height);\n isCollide = collections.some(function (rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n });\n return isCollide;\n}\n/** @private */\nexport function isOverlap(currentRect, rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n}\n/** @private */\nexport function containsRect(currentRect, rect) {\n return (currentRect.x <= rect.x && currentRect.x + currentRect.width >= rect.x + rect.width &&\n currentRect.y <= rect.y && currentRect.height + currentRect.y >= rect.y + rect.height);\n}\n/** @private */\nexport function calculateRect(location, textSize, margin) {\n return new Rect((location.x - (textSize.width / 2) - margin.left), (location.y - (textSize.height / 2) - margin.top), textSize.width + margin.left + margin.right, textSize.height + margin.top + margin.bottom);\n}\n/** @private */\nexport function convertToHexCode(value) {\n return '#' + componentToHex(value.r) + componentToHex(value.g) + componentToHex(value.b);\n}\n/** @private */\nexport function componentToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/** @private */\nexport function convertHexToColor(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new ColorValue(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new ColorValue(255, 255, 255);\n}\n/** @private */\nexport function colorNameToHex(color) {\n var element;\n color = color === 'transparent' ? 'white' : color;\n element = document.getElementById('chartmeasuretext');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n var exp = /^(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/;\n var isRGBValue = exp.exec(color);\n return convertToHexCode(new ColorValue(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\n}\n/** @private */\nexport function getSaturationColor(color, factor) {\n color = colorNameToHex(color);\n color = color.replace(/[^0-9a-f]/gi, '');\n if (color.length < 6) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n factor = factor || 0;\n // convert to decimal and change luminosity\n var rgb = '#';\n var colorCode;\n for (var i = 0; i < 3; i++) {\n colorCode = parseInt(color.substr(i * 2, 2), 16);\n colorCode = Math.round(Math.min(Math.max(0, colorCode + (colorCode * factor)), 255));\n rgb += ('00' + colorCode.toString(16)).substr(colorCode.toString(16).length);\n }\n return rgb;\n}\n/** @private */\nexport function getMedian(values) {\n var half = Math.floor(values.length / 2);\n return values.length % 2 ? values[half] : ((values[half - 1] + values[half]) / 2.0);\n}\n/** @private */\n// tslint:disable-next-line:max-func-body-length\nexport function calculateLegendShapes(location, size, shape, options) {\n var padding = 10;\n var path = '';\n var height = size.height;\n var width = size.width;\n var locX = location.x;\n var locY = location.y;\n switch (shape) {\n case 'MultiColoredLine':\n case 'Line':\n path = 'M' + ' ' + (locX + (-width / 2)) + ' ' + (locY) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY);\n merge(options, { 'd': path });\n break;\n case 'StepLine':\n options.fill = 'transparent';\n path = 'M' + ' ' + (locX + (-width / 2) - (padding / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX +\n (-width / 2) + (width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (-width / 2) + (width / 10))\n + ' ' + (locY) + ' ' + 'L' + ' ' + (locX + (-width / 10)) + ' ' + (locY) + ' ' + 'L' + ' ' + (locX + (-width / 10))\n + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'L' +\n ' ' + (locX + (width / 5)) + ' ' + (locY + (-height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY +\n (-height / 2)) + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + '' + (locX + (width / 2)\n + (padding / 4)) + ' ' + (locY + (height / 2));\n merge(options, { 'd': path });\n break;\n case 'RightArrow':\n var space = 2;\n path = 'M' + ' ' + (locX + (-width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY) + ' ' + 'L' + ' ' +\n (locX + (-width / 2)) + ' ' + (locY + (height / 2)) + ' L' + ' ' + (locX + (-width / 2)) + ' ' +\n (locY + (height / 2) - space) + ' ' + 'L' + ' ' + (locX + (width / 2) - (2 * space)) + ' ' + (locY) +\n ' L' + (locX + (-width / 2)) + ' ' + (locY - (height / 2) + space) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'LeftArrow':\n options.fill = options.stroke;\n options.stroke = 'transparent';\n space = 2;\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (-width / 2)) + ' ' + (locY) + ' ' + 'L' + ' ' +\n (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' +\n (locX + (width / 2)) + ' ' + (locY + (height / 2) - space) + ' L' + ' ' + (locX + (-width / 2) + (2 * space))\n + ' ' + (locY) + ' L' + (locX + (width / 2)) + ' ' + (locY - (height / 2) + space) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Column':\n case 'StackingColumn':\n case 'StackingColumn100':\n case 'RangeColumn':\n path = 'M' + ' ' + (locX - 3 * (width / 5)) + ' ' + (locY - (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (-width / 10)) + ' ' + (locY - (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (-width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX - 3 *\n (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' +\n (locX + (-width / 10) - (width / 20)) + ' ' + (locY - (height / 4) - (padding / 2))\n + ' ' + 'L' + ' ' + (locX + (width / 10) + (width / 20)) + ' ' + (locY - (height / 4) -\n (padding / 2)) + ' ' + 'L' + ' ' + (locX + (width / 10) + (width / 20)) + ' ' + (locY\n + (height / 2)) + ' ' + 'L' + ' ' + (locX + (-width / 10) - (width / 20)) + ' ' + (locY +\n (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' + (locX + 3 * (width / 10)) + ' ' + (locY) + ' ' +\n 'L' + ' ' + (locX + 3 * (width / 5)) + ' ' + (locY) + ' ' + 'L' + ' '\n + (locX + 3 * (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' '\n + (locX + 3 * (width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'Bar':\n case 'StackingBar':\n case 'StackingBar100':\n path = 'M' + ' ' + (locX + (-width / 2) + (-padding / 4)) + ' ' + (locY - 3 * (height / 5)) + ' '\n + 'L' + ' ' + (locX + 3 * (width / 10)) + ' ' + (locY - 3 * (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (width / 10)) + ' ' + (locY - 3 * (height / 10)) + ' ' + 'L' + ' ' +\n (locX - (width / 2) + (-padding / 4)) + ' ' + (locY - 3 * (height / 10)) + ' ' + 'Z' + ' '\n + 'M' + ' ' + (locX + (-width / 2) + (-padding / 4)) + ' ' + (locY - (height / 5)\n + (padding / 20)) + ' ' + 'L' + ' ' + (locX + (width / 2) + (padding / 4)) + ' ' + (locY\n - (height / 5) + (padding / 20)) + ' ' + 'L' + ' ' + (locX + (width / 2) + (padding / 4))\n + ' ' + (locY + (height / 10) + (padding / 20)) + ' ' + 'L' + ' ' + (locX - (width / 2)\n + (-padding / 4)) + ' ' + (locY + (height / 10) + (padding / 20)) + ' ' + 'Z' + ' ' + 'M'\n + ' ' + (locX - (width / 2) + (-padding / 4)) + ' ' + (locY + (height / 5)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX + (-width / 4)) + ' ' + (locY + (height / 5)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX + (-width / 4)) + ' ' + (locY + (height / 2)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX - (width / 2) + (-padding / 4))\n + ' ' + (locY + (height / 2) + (padding / 10)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'Spline':\n options.fill = 'transparent';\n path = 'M' + ' ' + (locX - (width / 2)) + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' '\n + locX + ' ' + (locY - height) + ' ' + locX + ' ' + (locY + (height / 5))\n + ' ' + 'M' + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + (locX\n + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + (locX + (width / 2)) + ' '\n + (locY - (height / 2));\n merge(options, { 'd': path });\n break;\n case 'Area':\n case 'MultiColoredArea':\n case 'RangeArea':\n case 'StackingArea':\n case 'StackingArea100':\n path = 'M' + ' ' + (locX - (width / 2) - (padding / 4)) + ' ' + (locY + (height / 2))\n + ' ' + 'L' + ' ' + (locX + (-width / 4) + (-padding / 8)) + ' ' + (locY - (height / 2))\n + ' ' + 'L' + ' ' + (locX) + ' ' + (locY + (height / 4)) + ' ' + 'L' + ' ' + (locX\n + (width / 4) + (padding / 8)) + ' ' + (locY + (-height / 2) + (height / 4)) + ' '\n + 'L' + ' ' + (locX + (height / 2) + (padding / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'SplineArea':\n path = 'M' + ' ' + (locX - (width / 2)) + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + locX\n + ' ' + (locY - height) + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Z' + ' ' + 'M'\n + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + (locX + (width / 2)) + ' '\n + (locY + (height / 2)) + ' ' + (locX + (width / 2)) + ' '\n + (locY - (height / 2)) + ' ' + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Pie':\n case 'Doughnut':\n options.stroke = 'transparent';\n var r = Math.min(height, width) / 2;\n path = getAccumulationLegend(locX, locY, r, height, width, shape);\n merge(options, { 'd': path });\n break;\n }\n return { renderOption: options };\n}\n/** @private */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth) {\n return label;\n }\n }\n }\n return label;\n}\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/** @private */\nexport function findDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY, tipRadius) {\n var direction = '';\n var startX = rect.x;\n var startY = rect.y;\n var width = rect.x + rect.width;\n var height = rect.y + rect.height;\n tipRadius = tipRadius ? tipRadius : 0;\n if (top) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + startY + ' ' + (startX + rX) + ' ' + startY + ' ' +\n ' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n + startY + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n if (arrowPadding !== 0) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX + tipRadius) + ' ' + (height + arrowPadding - tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (height + arrowPadding) + ' ' + (tipX - tipRadius) +\n ' ' + (height + arrowPadding - tipRadius);\n }\n if ((arrowLocation.x - arrowPadding / 2) > startX) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + height +\n ' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n if (arrowPadding === 0) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n }\n }\n }\n else if (bottom) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (tipX - tipRadius) + ' ' + (arrowLocation.y + tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (arrowLocation.y) + ' ' + (tipX + tipRadius) + ' ' + (arrowLocation.y + tipRadius);\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (startY) + ' L' + ' '\n + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height) +\n ' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else if (left) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n + (startY) + ' ' + (width) + ' ' + (startY + rY) + ' L' + ' ' + (width) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (width + arrowPadding) + ' ' + (tipY) + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n + (startY) + ' ' + (startX) + ' ' + (startY + rY) + ' L' + ' ' + (startX) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (startX - arrowPadding) + ' ' + (tipY) + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX + rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n + (height) + ' ' + (width) + ' ' + (height - rY) +\n ' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n }\n return direction;\n}\n/** @private */\nexport function textElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {};\n var htmlObject;\n var tspanElement;\n var renderer = new SvgRenderer('');\n var text;\n var height;\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n htmlObject = renderer.createText(renderOptions, text);\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + ((isMinus) ? -(i * height) : (i * height))\n }, isMinus ? options.text[options.text.length - (i + 1)] : options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Method to calculate the width and height of the chart\n */\nexport function calculateSize(chart) {\n var containerWidth = chart.element.clientWidth;\n var containerHeight = chart.element.clientHeight;\n chart.availableSize = new Size(stringToNumber(chart.width, containerWidth) || containerWidth || 600, stringToNumber(chart.height, containerHeight) || containerHeight || 450);\n}\nexport function createSvg(chart) {\n chart.renderer = new SvgRenderer(chart.element.id);\n calculateSize(chart);\n chart.svgObject = chart.renderer.createSvg({\n id: chart.element.id + '_svg',\n width: chart.availableSize.width,\n height: chart.availableSize.height\n });\n}\n/**\n * To calculate chart title and height\n * @param title\n * @param style\n * @param width\n */\nexport function getTitle(title, style, width) {\n var titleCollection = [];\n switch (style.textOverflow) {\n case 'Wrap':\n titleCollection = textWrap(title, width, style);\n break;\n case 'Trim':\n titleCollection.push(textTrim(width, title, style));\n break;\n default:\n titleCollection.push(title);\n break;\n }\n return titleCollection;\n}\n/**\n * Method to calculate x position of title\n */\nexport function titlePositionX(chartSize, leftPadding, rightPadding, titleStyle) {\n var positionX;\n if (titleStyle.textAlignment === 'Near') {\n positionX = leftPadding;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionX = chartSize.width / 2;\n }\n else {\n positionX = chartSize.width - rightPadding;\n }\n return positionX;\n}\n/**\n * Method to find new text and element size based on textOverflow\n */\nexport function textWrap(currentLabel, maximumWidth, font) {\n var textCollection = currentLabel.split(' ');\n var label = '';\n var labelCollection = [];\n var text;\n for (var i = 0, len = textCollection.length; i < len; i++) {\n text = textCollection[i];\n if (measureText(label.concat(text), font).width < maximumWidth) {\n label = label.concat((label === '' ? '' : ' ') + text);\n }\n else {\n if (label !== '') {\n labelCollection.push(textTrim(maximumWidth, label, font));\n label = text;\n }\n else {\n labelCollection.push(textTrim(maximumWidth, text, font));\n text = '';\n }\n }\n if (label && i === len - 1) {\n labelCollection.push(textTrim(maximumWidth, label, font));\n }\n }\n return labelCollection;\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar StackValues = /** @class */ (function () {\n function StackValues(startValue, endValue) {\n this.startValues = startValue;\n this.endValues = endValue;\n }\n return StackValues;\n}());\nexport { StackValues };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/** @private */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/** @private */\nvar PolygonOption = /** @class */ (function () {\n function PolygonOption(id, points, fill) {\n this.id = id;\n this.points = points;\n this.fill = fill;\n }\n return PolygonOption;\n}());\nexport { PolygonOption };\n/** @private */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar ChartLocation = /** @class */ (function () {\n function ChartLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return ChartLocation;\n}());\nexport { ChartLocation };\n/** @private */\nvar Thickness = /** @class */ (function () {\n function Thickness(left, right, top, bottom) {\n this.left = left;\n this.right = right;\n this.top = top;\n this.bottom = bottom;\n }\n return Thickness;\n}());\nexport { Thickness };\n/** @private */\nvar ColorValue = /** @class */ (function () {\n function ColorValue(r, g, b) {\n this.r = r;\n this.g = g;\n this.b = b;\n }\n return ColorValue;\n}());\nexport { ColorValue };\n/** @private */\nvar PointData = /** @class */ (function () {\n function PointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n this.lierIndex = index;\n }\n return PointData;\n}());\nexport { PointData };\n/** @private */\nvar AccPointData = /** @class */ (function () {\n function AccPointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n }\n return AccPointData;\n}());\nexport { AccPointData };\n/** @private */\nvar ControlPoints = /** @class */ (function () {\n function ControlPoints(controlPoint1, controlPoint2) {\n this.controlPoint1 = controlPoint1;\n this.controlPoint2 = controlPoint2;\n }\n return ControlPoints;\n}());\nexport { ControlPoints };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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/**\n * AccumulationChart base file\n */\nimport { Property, ChildProperty, Complex, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Border, Font, Animation, EmptyPointSettings, Connector } from '../../common/model/base';\nimport { Rect, stringToNumber, PathOption } from '../../common/utils/helper';\nimport { seriesRender, pointRender } from '../../common/model/constants';\nimport { getSeriesColor } from '../../common/model/theme';\nimport { getElement, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Annotation for accumulation series\n */\nvar AccumulationAnnotationSettings = /** @class */ (function (_super) {\n __extends(AccumulationAnnotationSettings, _super);\n function AccumulationAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property('Pixel')\n ], AccumulationAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], AccumulationAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], AccumulationAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], AccumulationAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"description\", void 0);\n return AccumulationAnnotationSettings;\n}(ChildProperty));\nexport { AccumulationAnnotationSettings };\n/**\n * Configures the dataLabel in accumulation chart.\n */\nvar AccumulationDataLabelSettings = /** @class */ (function (_super) {\n __extends(AccumulationDataLabelSettings, _super);\n function AccumulationDataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], AccumulationDataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], AccumulationDataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Inside')\n ], AccumulationDataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], AccumulationDataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '11px', color: null }, Font)\n ], AccumulationDataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Complex({}, Connector)\n ], AccumulationDataLabelSettings.prototype, \"connectorStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"template\", void 0);\n return AccumulationDataLabelSettings;\n}(ChildProperty));\nexport { AccumulationDataLabelSettings };\n/**\n * Points model for the series.\n */\nvar AccPoints = /** @class */ (function () {\n function AccPoints() {\n this.visible = true;\n this.symbolLocation = null;\n /** @private */\n this.region = null;\n /** @private */\n this.labelRegion = null;\n /** @private */\n this.labelVisible = true;\n this.regions = null;\n }\n return AccPoints;\n}());\nexport { AccPoints };\n/**\n * Configures the series in accumulation chart.\n */\nvar AccumulationSeries = /** @class */ (function (_super) {\n __extends(AccumulationSeries, _super);\n function AccumulationSeries() {\n /**\n * Specifies the dataSource for the series. It can be an array of JSON objects or an instance of DataManager.\n * ```html\n *
\n * ```\n * ```typescript\n * let dataManager: DataManager = new DataManager({\n * url: 'http://mvc.syncfusion.com/Services/Northwnd.svc/Tasks/'\n * });\n * let query: Query = new Query().take(50).where('Estimate', 'greaterThan', 0, false);\n * let pie: AccumulationChart = new AccumulationChart({\n * ...\n * series: [{\n * dataSource: dataManager,\n * xName: 'Id',\n * yName: 'Estimate',\n * query: query\n * }],\n * ...\n * });\n * pie.appendTo('#Pie');\n * ```\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.points = [];\n /** @private */\n _this.sumOfPoints = 0;\n /** @private */\n _this.isRectSeries = true;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private To refresh the Datamanager for series */\n AccumulationSeries.prototype.refreshDataManager = function (accumulation) {\n var _this = this;\n if (isNullOrUndefined(this.query)) {\n this.dataManagerSuccess({ result: this.dataSource, count: this.dataSource.length }, accumulation);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, accumulation); });\n };\n /**\n * To get points on dataManager is success\n * @private\n */\n AccumulationSeries.prototype.dataManagerSuccess = function (e, accumulation) {\n var argsData = {\n name: seriesRender, series: this, data: e.result,\n };\n accumulation.trigger(seriesRender, argsData);\n this.resultData = e.result;\n this.getPoints(e.result, accumulation);\n if (++accumulation.seriesCounts === accumulation.visibleSeries.length) {\n accumulation.refreshChart();\n }\n };\n /** @private To find points from result data */\n AccumulationSeries.prototype.getPoints = function (result, accumulation) {\n var length = Object.keys(result).length;\n this.sumOfPoints = 0;\n if (length === 0) {\n return null;\n }\n this.findSumOfPoints(result);\n this.points = [];\n this.sumOfClub = 0;\n var point;\n var colors = this.palettes.length ? this.palettes : getSeriesColor(accumulation.theme);\n var clubValue = stringToNumber(this.groupTo, this.sumOfPoints);\n for (var i = 0; i < length; i++) {\n point = this.setPoints(result, i, colors);\n var currentY = point.y;\n if (!this.isClub(point, clubValue)) {\n if (isNullOrUndefined(point.y)) {\n point.visible = false;\n }\n this.pushPoints(point, colors);\n }\n }\n this.lastGroupTo = this.groupTo;\n if (this.sumOfClub > 0) {\n var clubPoint = new AccPoints();\n clubPoint.x = 'Others';\n clubPoint.y = this.sumOfClub;\n clubPoint.text = clubPoint.originalText = clubPoint.x + ': ' + this.sumOfClub;\n this.pushPoints(clubPoint, colors);\n }\n };\n /**\n * Method to set point index and color\n */\n AccumulationSeries.prototype.pushPoints = function (point, colors) {\n point.index = this.points.length;\n point.color = point.color || colors[point.index % colors.length];\n this.points.push(point);\n };\n /**\n * Method to find club point\n */\n AccumulationSeries.prototype.isClub = function (point, clubValue) {\n if (Math.abs(point.y) <= clubValue && !isNullOrUndefined(clubValue)) {\n this.sumOfClub += Math.abs(point.y);\n return true;\n }\n return false;\n };\n /**\n * Method to find sum of points in the series\n */\n AccumulationSeries.prototype.findSumOfPoints = function (result) {\n var length = Object.keys(result).length;\n for (var i = 0; i < length; i++) {\n if (!isNullOrUndefined(result[i][this.yName])) {\n this.sumOfPoints += Math.abs(result[i][this.yName]);\n }\n }\n };\n /**\n * Method to set points x, y and text from data source\n */\n AccumulationSeries.prototype.setPoints = function (data, i, colors) {\n var point = new AccPoints();\n point.x = getValue(this.xName, data[i]);\n point.y = getValue(this.yName, data[i]);\n point.color = getValue(this.pointColorMapping, data[i]);\n point.text = point.originalText = getValue(this.dataLabel.name || '', data[i]);\n this.setAccEmptyPoint(point, i, data, colors);\n return point;\n };\n /**\n * Method render the series elements for accumulation chart\n * @private\n */\n AccumulationSeries.prototype.renderSeries = function (accumulation) {\n var seriesGroup = accumulation.renderer.createGroup({ id: accumulation.element.id + '_Series_' + this.index });\n this.renderPoints(accumulation, seriesGroup);\n var datalabelGroup;\n if (accumulation.accumulationDataLabelModule && this.dataLabel.visible) {\n datalabelGroup = accumulation.renderer.createGroup({ id: accumulation.element.id + '_datalabel_Series_' + this.index });\n datalabelGroup.style.visibility =\n (this.animation.enable && accumulation.animateSeries && this.type === 'Pie') ? 'hidden' : 'visible';\n this.renderDataLabel(accumulation, datalabelGroup);\n }\n if (this.type === 'Pie') {\n this.findMaxBounds(this.labelBound, this.accumulationBound);\n accumulation.pieSeriesModule.animateSeries(accumulation, this.animation, this, seriesGroup);\n }\n if (accumulation.accumulationLegendModule) {\n this.labelBound.x -= accumulation.explodeDistance;\n this.labelBound.y -= accumulation.explodeDistance;\n this.labelBound.height += (accumulation.explodeDistance - this.labelBound.y);\n this.labelBound.width += (accumulation.explodeDistance - this.labelBound.x);\n }\n };\n /**\n * Method render the points elements for accumulation chart series.\n */\n AccumulationSeries.prototype.renderPoints = function (accumulation, seriesGroup) {\n var pointId = accumulation.element.id + '_Series_' + this.index + '_Point_';\n var option;\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var argsData = {\n cancel: false, name: pointRender, series: this, point: point, fill: point.color,\n border: this.isEmpty(point) ? { width: this.emptyPointSettings.border.width, color: this.emptyPointSettings.border.color } :\n { width: this.border.width, color: this.border.color }\n };\n accumulation.trigger(pointRender, argsData);\n point.color = argsData.fill;\n if (point.visible) {\n option = new PathOption(pointId + point.index, point.color, argsData.border.width || 1, argsData.border.color || point.color, 1, '', '');\n accumulation[(firstToLowerCase(this.type) + 'SeriesModule')].\n renderPoint(point, this, accumulation, option);\n seriesGroup.appendChild(accumulation.renderer.drawPath(option));\n }\n }\n accumulation.getSeriesElement().appendChild(seriesGroup);\n };\n /**\n * Method render the datalabel elements for accumulation chart.\n */\n AccumulationSeries.prototype.renderDataLabel = function (accumulation, datalabelGroup) {\n accumulation.accumulationDataLabelModule.findAreaRect();\n var element = createElement('div', {\n id: accumulation.element.id + '_Series_0' + '_DataLabelCollections'\n });\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.visible) {\n accumulation.accumulationDataLabelModule.renderDataLabel(point, this.dataLabel, datalabelGroup, this.points, this.index, element);\n }\n }\n if (this.dataLabel.template !== null && element.childElementCount) {\n getElement(accumulation.element.id + '_Secondary_Element').appendChild(element);\n }\n accumulation.getSeriesElement().appendChild(datalabelGroup);\n };\n /**\n * To find maximum bounds for smart legend placing\n * @private\n */\n AccumulationSeries.prototype.findMaxBounds = function (totalbound, bound) {\n totalbound.x = bound.x < totalbound.x ? bound.x : totalbound.x;\n totalbound.y = bound.y < totalbound.y ? bound.y : totalbound.y;\n totalbound.height = (bound.y + bound.height) > totalbound.height ? (bound.y + bound.height) : totalbound.height;\n totalbound.width = (bound.x + bound.width) > totalbound.width ? (bound.x + bound.width) : totalbound.width;\n };\n /**\n * To set empty point value for null points\n * @private\n */\n AccumulationSeries.prototype.setAccEmptyPoint = function (point, i, data, colors) {\n if (!isNullOrUndefined(point.y)) {\n return null;\n }\n point.color = this.emptyPointSettings.fill || point.color;\n switch (this.emptyPointSettings.mode) {\n case 'Zero':\n point.y = 0;\n point.visible = true;\n break;\n case 'Average':\n var previous = data[i - 1] ? (data[i - 1][this.yName] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][this.yName] || 0) : 0;\n point.y = (Math.abs(previous) + Math.abs(next)) / 2;\n this.sumOfPoints += point.y;\n point.visible = true;\n break;\n case 'Drop':\n point.visible = false;\n break;\n }\n };\n /**\n * To find point is empty\n */\n AccumulationSeries.prototype.isEmpty = function (point) {\n return point.color === this.emptyPointSettings.fill;\n };\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], AccumulationSeries.prototype, \"query\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"yName\", void 0);\n __decorate([\n Property(true)\n ], AccumulationSeries.prototype, \"visible\", void 0);\n __decorate([\n Complex({ color: null, width: 0 }, Border)\n ], AccumulationSeries.prototype, \"border\", void 0);\n __decorate([\n Complex(null, Animation)\n ], AccumulationSeries.prototype, \"animation\", void 0);\n __decorate([\n Property('SeriesType')\n ], AccumulationSeries.prototype, \"legendShape\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"groupTo\", void 0);\n __decorate([\n Complex({}, AccumulationDataLabelSettings)\n ], AccumulationSeries.prototype, \"dataLabel\", void 0);\n __decorate([\n Property([])\n ], AccumulationSeries.prototype, \"palettes\", void 0);\n __decorate([\n Property(0)\n ], AccumulationSeries.prototype, \"startAngle\", void 0);\n __decorate([\n Property(360)\n ], AccumulationSeries.prototype, \"endAngle\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"radius\", void 0);\n __decorate([\n Property('0')\n ], AccumulationSeries.prototype, \"innerRadius\", void 0);\n __decorate([\n Property('Pie')\n ], AccumulationSeries.prototype, \"type\", void 0);\n __decorate([\n Property(true)\n ], AccumulationSeries.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(false)\n ], AccumulationSeries.prototype, \"explode\", void 0);\n __decorate([\n Property('30%')\n ], AccumulationSeries.prototype, \"explodeOffset\", void 0);\n __decorate([\n Property(false)\n ], AccumulationSeries.prototype, \"explodeAll\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"explodeIndex\", void 0);\n __decorate([\n Complex({ mode: 'Drop' }, EmptyPointSettings)\n ], AccumulationSeries.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(0)\n ], AccumulationSeries.prototype, \"gapRatio\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"width\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"height\", void 0);\n __decorate([\n Property('20%')\n ], AccumulationSeries.prototype, \"neckWidth\", void 0);\n __decorate([\n Property('20%')\n ], AccumulationSeries.prototype, \"neckHeight\", void 0);\n __decorate([\n Property('Linear')\n ], AccumulationSeries.prototype, \"pyramidMode\", void 0);\n __decorate([\n Property(1)\n ], AccumulationSeries.prototype, \"opacity\", void 0);\n return AccumulationSeries;\n}(ChildProperty));\nexport { AccumulationSeries };\n/**\n * method to get series from index\n * @private\n */\nexport function getSeriesFromIndex(index, visibleSeries) {\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (index === series.index) {\n return series;\n }\n }\n return visibleSeries[0];\n}\n/**\n * method to get point from index\n * @private\n */\nexport function pointByIndex(index, points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index === index) {\n return point;\n }\n }\n return null;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * Specifies Circular-Gauge Helper methods\n */\nimport { SvgRenderer, compile as templateComplier } from '@syncfusion/ej2-base';\nimport { merge } from '@syncfusion/ej2-base';\nimport { createElement, remove, setStyleAttribute } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns Size\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('gauge-measuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'gauge-measuretext' });\n document.body.appendChild(htmlObject);\n }\n var style = 'position: absolute; visibility: hidden;' +\n ';left: 0; top: -100; white-space: nowrap;' + getFontStyle(font);\n htmlObject.innerHTML = text;\n htmlObject.setAttribute('style', style);\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Function to find number from string\n * * @returns number\n * @private\n */\nexport function toPixel(value, maxDimension) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (maxDimension / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to get the style from FontModel.\n * @returns string\n * @private\n */\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/**\n * Function to set style to the element.\n * @private\n */\nexport function setStyles(element, fill, border) {\n setStyleAttribute(element, {\n 'stroke': border.color, 'stroke-width': border.width,\n 'fill': fill\n });\n}\n/**\n * Function to measure the element rect.\n * @returns ClientRect\n * @private\n */\nexport function measureElementRect(element) {\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n removeElement(element.id);\n return bounds;\n}\n/**\n * Function to convert the number from string.\n * @returns number\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to create the text element.\n * @returns Element\n * @private\n */\nexport function textElement(options, font, color, parent, styles) {\n var renderOptions = {};\n var htmlObject;\n var renderer = new SvgRenderer('');\n var style = styles + ' font-size:' + font.size + '; font-style:' + font.fontStyle +\n ' ; font-weight:' + font.fontWeight + '; font-family:' + font.fontFamily + ';';\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine,\n 'style': style\n };\n htmlObject = renderer.createText(renderOptions, options.text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Function to append the path to the element.\n * @returns Element\n * @private\n */\nexport function appendPath(options, element, gauge, functionName) {\n functionName = functionName ? functionName : 'Path';\n var htmlObject = gauge.renderer['draw' + functionName](options);\n htmlObject.setAttribute('transform', options.transform);\n htmlObject.setAttribute('style', options.style);\n element.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Function to calculate the sum of array values.\n * @returns number\n * @private\n */\nexport function calculateSum(from, to, values) {\n var sum = 0;\n var length = values.length;\n for (; from < length; from++) {\n sum += values[from];\n }\n return sum;\n}\n/**\n * Function to calculate the value for linear animation effect\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Function to get the angle from value for circular gauge.\n * @returns number\n * @private\n */\nexport function getAngleFromValue(value, maximumValue, minimumValue, startAngle, endAngle, isClockWise) {\n var angle;\n endAngle -= isCompleteAngle(startAngle, endAngle) ? 0.0001 : 0;\n startAngle -= 90;\n endAngle -= 90;\n if (isClockWise) {\n angle = ((value - minimumValue) * (getDegree(startAngle, endAngle) / (maximumValue - minimumValue))) + startAngle;\n }\n else {\n angle = endAngle - ((value - minimumValue) * (getDegree(startAngle, endAngle) / (maximumValue - minimumValue)));\n angle = angle < 0 ? 360 + angle : angle;\n }\n angle = Math.round(angle) >= 360 ? (angle - 360) : Math.round(angle) < 0 ? (360 + angle) : angle;\n return angle;\n}\n/**\n * Function to get the degree for circular gauge.\n * @returns number\n * @private\n */\nexport function getDegree(startAngle, endAngle) {\n var degree = endAngle - startAngle;\n return degree < 0 ? (degree + 360) : degree;\n}\n/**\n * Function to get the value from angle for circular gauge.\n * @returns number\n * @private\n */\nexport function getValueFromAngle(angle, maximumValue, minimumValue, startAngle, endAngle, isClockWise) {\n endAngle -= isCompleteAngle(startAngle, endAngle) ? 0.0001 : 0;\n angle = angle < startAngle ? (angle + 360) : angle;\n if (isClockWise) {\n return (((angle - startAngle) / getDegree(startAngle, endAngle)) * (maximumValue - minimumValue)) + minimumValue;\n }\n else {\n return maximumValue - ((((angle - startAngle) / getDegree(startAngle, endAngle)) * (maximumValue - minimumValue)) + minimumValue);\n }\n}\n/**\n * Function to check whether it's a complete circle for circular gauge.\n * @returns boolean\n * @private\n */\nexport function isCompleteAngle(startAngle, endAngle) {\n var totalAngle = endAngle - startAngle;\n totalAngle = totalAngle <= 0 ? (totalAngle + 360) : totalAngle;\n return Math.floor(totalAngle / 360) !== 0;\n}\n/**\n * Function to get angle from location for circular gauge.\n * @returns number\n * @private\n */\nexport function getAngleFromLocation(center, point) {\n var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n angle = Math.round((angle < 0 ? (6.283 + angle) : angle) * (180 / Math.PI)) - 270;\n angle += angle < 0 ? 360 : 0;\n return angle;\n}\n/**\n * Function to get the location from angle for circular gauge.\n * @returns GaugeLocation\n * @private\n */\nexport function getLocationFromAngle(degree, radius, center) {\n var radian = (degree * Math.PI) / 180;\n return new GaugeLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\n/**\n * Function to get the path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getPathArc(center, start, end, radius, startWidth, endWidth) {\n end -= isCompleteAngle(start, end) ? 0.0001 : 0;\n var degree = getDegree(start, end);\n var startRadius = radius - startWidth;\n var endRadius = radius - endWidth;\n var arcRadius = radius - ((startWidth + endWidth) / 2);\n if (startWidth !== undefined && endWidth !== undefined) {\n return getRangePath(getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), getLocationFromAngle(start, startRadius, center), getLocationFromAngle(end, endRadius, center), radius, arcRadius, arcRadius, (degree < 180) ? 0 : 1);\n }\n else {\n return getCirclePath(getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), radius, (degree < 180) ? 0 : 1);\n }\n}\n/**\n * Function to get the range path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getRangePath(start, end, innerStart, innerEnd, radius, startRadius, endRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y +\n ' A ' + radius + ' ' + radius + ' 0 ' +\n clockWise + ' 1 ' + end.x + ' ' + end.y +\n ' L ' + innerEnd.x + ' ' + innerEnd.y +\n ' A ' + endRadius + ' ' + startRadius + ' 0 ' +\n clockWise + ' 0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n}\n/**\n * Function to calculate the complete path arc of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCompleteArc(center, start, end, radius, innerRadius) {\n end -= isCompleteAngle(start, end) ? 0.0001 : 0;\n var degree = getDegree(start, end);\n return getCompletePath(center, getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), radius, getLocationFromAngle(start, innerRadius, center), getLocationFromAngle(end, innerRadius, center), innerRadius, (degree < 180) ? 0 : 1);\n}\n/**\n * Function to get the circular path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCirclePath(start, end, radius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' +\n radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y;\n}\n/**\n * Function to get the complete path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCompletePath(center, start, end, radius, innerStart, innerEnd, innerRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise +\n ' 1 ' + end.x + ' ' + end.y + ' L ' + innerEnd.x + ' ' + innerEnd.y + ' A ' + innerRadius +\n ' ' + innerRadius + ' 0 ' + clockWise + ',0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n}\n/**\n * Function to get element from id.\n * @returns Element\n * @private\n */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * Function to compile the template function for circular gauge.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/**\n * Function to remove the element from id.\n * @private\n */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/**\n * Function to get current point for circular gauge using element id.\n * @returns IVisiblePointer\n * @private\n */\nexport function getPointer(targetId, gauge) {\n var tempString;\n tempString = targetId.split(gauge.element.id + '_Axis_')[1];\n return {\n axisIndex: +tempString[0],\n pointerIndex: +tempString[tempString.length - 1]\n };\n}\n/**\n * Function to convert the label using formar for cirular gauge.\n * @returns string\n * @private\n */\nexport function getLabelFormat(format) {\n var customLabelFormat = format && format.match('{value}') !== null;\n var skeleton = customLabelFormat ? '' : format;\n return skeleton;\n}\n/**\n * Function to calculate the marker shape for circular gauge.\n * @returns PathOption\n * @private\n */\nexport function calculateShapes(location, shape, size, url, options) {\n var path;\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX - height) + ' ' + (locY - (width / 2)) +\n 'L' + ' ' + (locX - height) + ' ' + (locY + (width / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + height) + ' ' + (locY - (width / 2)) +\n 'L' + ' ' + (locX + height) + ' ' + (locY + (width / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Image':\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return options;\n}\n/**\n * Function to get range color from value for circular gauge.\n * @returns string\n * @private\n */\nexport function getRangeColor(value, ranges, color) {\n var min = 0;\n var max = 0;\n var currentRange = ranges.filter(function (range) {\n min = Math.min(range.start, range.end);\n max = Math.max(range.start, range.end);\n return (value >= min && max >= value);\n });\n return currentRange.length ? currentRange[0].rangeColor : color;\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d, transform, style) {\n if (transform === void 0) { transform = ''; }\n if (style === void 0) { style = ''; }\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n _this.transform = transform;\n _this.style = style;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect) {\n var _this = _super.call(this, id) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = border.color;\n _this['stroke-width'] = border.width;\n return _this;\n }\n return RectOption;\n}(CustomizeOption));\nexport { RectOption };\n/**\n * Internal class size\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar GaugeLocation = /** @class */ (function () {\n function GaugeLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return GaugeLocation;\n}());\nexport { GaugeLocation };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, size) {\n this.text = text;\n this.value = value;\n this.size = size;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\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","/**\n * Function helps to find which highlightSearch is to call based on your data.\n * @param {HTMLElement} content - Specifies an content 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(content, query, ignoreCase, type) {\n revert(content);\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 var pattern = new RegExp(replaceQuery, ignoreRegex);\n var li = content.querySelectorAll('ul li');\n for (var i = 0; i < li.length; i++) {\n var element = li[i];\n element.innerHTML = element.innerHTML.replace(pattern, '$1');\n }\n }\n}\n/**\n * Function helps to remove highlighted element based on your data.\n * @param {HTMLElement} id - Specifies an id of list data.\n */\nfunction revert(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","import { ChildProperty, compile as baseTemplateComplier, setValue } 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 { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Column } from '../models/column';\nimport { calculateRelativeBasedPosition, calculatePosition } from '@syncfusion/ej2-popups';\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 getValue(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 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 column = new Column(columns[c]);\n columns[c].columns = prepareColumns(columns[c].columns);\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 = 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 return column.customAggregate ? column.customAggregate.call(context, data, column) : '';\n }\n return DataUtil.aggregates[type.toLowerCase()](data, column.field);\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 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 {\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}\nexport function changeButtonType(target) {\n var elements = [].slice.call(target.querySelectorAll('button'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var button = elements_1[_i];\n attributes(button, { type: 'button' });\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 var query = new Query();\n var fdata = foreignKeyData || (column.dataSource instanceof DataManager) && column.dataSource.dataSource.offline ?\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) {\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 prevDate = new Date(value.setHours(0) - 1);\n nextDate = new Date(value.setHours(24));\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 filterObject.ejpredicate = datePredicate;\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 * 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","var __extends = (this && this.__extends) || (function () {\n var 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 function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer, compile as templateComplier, remove, merge, createElement } from '@syncfusion/ej2-base';\n/**\n * Specifies Linear-Gauge Helper methods\n */\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('gauge-measuretext');\n var size;\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'gauge-measuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n size = new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n //remove(htmlObject);\n return size;\n}\n/** @private */\nexport function withInRange(value, start, end, max, min, type) {\n var withIn;\n if (type === 'pointer') {\n withIn = (((value <= max) && (value >= min)));\n }\n else {\n withIn = (start != null && (start <= max) && (start >= min)) && (end != null && (end <= max) && (end >= min));\n }\n return withIn;\n}\nexport function convertPixelToValue(parentElement, pointerElement, orientation, axis, type, location) {\n var elementRect = parentElement.getBoundingClientRect();\n var pointerRect = pointerElement.getBoundingClientRect();\n var height = (pointerElement.id.indexOf('MarkerPointer') > -1) ? (pointerRect.height / 2) :\n (!axis.isInversed) ? 0 : pointerRect.height;\n var width = (pointerElement.id.indexOf('MarkerPointer') > -1) ? (pointerRect.width / 2) :\n (!axis.isInversed) ? pointerRect.width : 0;\n var size = new Size(axis.lineBounds.width, axis.lineBounds.height);\n var y = (type === 'drag') ? (location.y - axis.lineBounds.y) :\n ((pointerRect.top + height) - elementRect.top - axis.lineBounds.y);\n var x = (type === 'drag') ? (location.x - axis.lineBounds.x) :\n ((pointerRect.left + width) - elementRect.left - axis.lineBounds.x);\n var newSize = (orientation === 'Vertical') ? size.height : size.width;\n var divideVal = (orientation === 'Vertical') ? y : x;\n var value = (orientation === 'Vertical') ? (axis.isInversed) ? (divideVal / newSize) :\n (1 - (divideVal / newSize)) : (axis.isInversed) ? (1 - (divideVal / newSize)) : (divideVal / newSize);\n value = value * (axis.visibleRange.delta) + axis.visibleRange.min;\n return value;\n}\nexport function getPathToRect(path, size, parentElement) {\n var tempDiv = document.getElementById('gauge_path');\n if (tempDiv === null) {\n tempDiv = createElement('text', { id: 'gauge_path' });\n tempDiv.style.position = 'absolute';\n tempDiv.style.top = '0px';\n tempDiv.style.left = '0px';\n parentElement.appendChild(tempDiv);\n }\n var render = new SvgRenderer('id');\n var svg = render.createSvg({ id: 'box_path', width: size.width, height: size.height });\n svg.appendChild(path);\n tempDiv.appendChild(svg);\n var svgRect = path.getBBox();\n remove(tempDiv);\n return svgRect;\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function isPointerDrag(axes) {\n var pointerEnable = false;\n axes.map(function (axis, index) {\n axis.pointers.map(function (pointer, index) {\n if (pointer.enableDrag) {\n pointerEnable = true;\n }\n });\n });\n return pointerEnable;\n}\n/** @private */\nexport function valueToCoefficient(value, axis, orientation, range) {\n var result = (value - range.min) / range.delta;\n result = (orientation === 'Vertical') ? (!axis.isInversed) ? (1 - result) : result : (!axis.isInversed) ? result : (1 - result);\n return result;\n}\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/** @private */\nexport function getLabelFormat(format) {\n var customLabelFormat = format && format.match('{value}') !== null;\n var skeleton = customLabelFormat ? '' : format;\n return skeleton;\n}\n/** @private */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/** @private */\nexport function getElementOffset(childElement, parentElement) {\n var width;\n var height;\n parentElement.appendChild(childElement);\n width = childElement.offsetWidth;\n height = childElement.offsetHeight;\n parentElement.removeChild(childElement);\n return new Size(width, height);\n}\n/** @private */\nvar VisibleRange = /** @class */ (function () {\n function VisibleRange(min, max, interval, delta) {\n this.min = min;\n this.max = max;\n this.interval = interval;\n this.delta = delta;\n }\n return VisibleRange;\n}());\nexport { VisibleRange };\n/** @private */\nvar GaugeLocation = /** @class */ (function () {\n function GaugeLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return GaugeLocation;\n}());\nexport { GaugeLocation };\n/**\n * Internal class size for height and width\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d, transform) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n _this.transform = transform;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function () {\n function RectOption(id, fill, border, opacity, rect, transform, dashArray) {\n this.opacity = opacity;\n this.id = id;\n this.y = rect.y;\n this.x = rect.x;\n this.fill = fill;\n this.stroke = border.color;\n this['stroke-width'] = border.width;\n this.height = rect.height;\n this.width = rect.width;\n }\n return RectOption;\n}());\nexport { RectOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, size) {\n this.text = text;\n this.value = value;\n this.size = size;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n/** @private */\nvar Align = /** @class */ (function () {\n function Align(axisIndex, align) {\n this.align = align;\n this.axisIndex = axisIndex;\n }\n return Align;\n}());\nexport { Align };\n/** @private */\nexport function textElement(options, font, color, parent) {\n var renderOptions = {};\n var htmlObject;\n var renderer = new SvgRenderer('');\n var style = 'fill:' + color + '; font-size:' + font.size +\n '; font-style:' + font.fontStyle + ' ; font-weight:' + font.fontWeight + '; font-family:' +\n font.fontFamily + '; text-anchor:' + options.anchor + '; transform:' + options.transform +\n '; opacity:' + font.opacity + '; dominant-baseline:' + options.baseLine + ';';\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'style': style\n };\n htmlObject = renderer.createText(renderOptions, options.text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nexport function calculateNiceInterval(min, max, size, orientation) {\n var delta = max - min;\n var currentInterval;\n var intervalDivs = [10, 5, 2, 1];\n var desiredIntervalsCount = getActualDesiredIntervalsCount(size, orientation);\n var niceInterval = delta / desiredIntervalsCount;\n var minInterval = Math.pow(10, Math.floor(Math.log(niceInterval) / Math.log(10)));\n for (var _i = 0, intervalDivs_1 = intervalDivs; _i < intervalDivs_1.length; _i++) {\n var interval = intervalDivs_1[_i];\n currentInterval = minInterval * interval;\n if (desiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n}\nexport function getActualDesiredIntervalsCount(size, orientation) {\n var maximumLabels = 5;\n var desiredIntervalsCount = (orientation === 'Horizontal' ? 0.533 : 1) * maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n}\n/** @private */\nexport function getPointer(target, gauge) {\n var split = [];\n var axisIndex;\n var radix = 10;\n var pointIndex;\n var axis;\n var pointer;\n split = target.id.split('_');\n axisIndex = parseInt(split[2], radix);\n pointIndex = parseInt(split[4], radix);\n axis = gauge.axes[axisIndex];\n pointer = gauge.axes[axisIndex].pointers[pointIndex];\n return { axis: axis, axisIndex: axisIndex, pointer: pointer, pointerIndex: pointIndex };\n}\n/** @private */\nexport function getRangeColor(value, ranges) {\n var rangeColor = null;\n ranges.forEach(function (range, index) {\n if (value >= range.start && range.end >= value) {\n rangeColor = range.interior;\n }\n });\n return rangeColor;\n}\n/** @private */\nexport function getRangePalette() {\n var palette = ['#ff5985', '#ffb133', '#fcde0b', '#27d5ff', '#50c917'];\n return palette;\n}\n/** @private */\nexport function calculateShapes(location, shape, size, url, options, orientation, axis, pointer) {\n var path;\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var radius;\n switch (shape) {\n case 'Circle':\n radius = ((width + height) / 4);\n locX = (orientation === 'Vertical') ? (!axis.opposedPosition) ? (pointer.placement !== 'Far') ? locX - radius : locX + radius :\n pointer.placement === 'Near' ? locX - radius : locX + radius : locX;\n locY = (orientation === 'Vertical') ? locY : (!axis.opposedPosition) ? (pointer.placement === 'Far') ?\n locY + radius : locY - radius : (pointer.placement === 'Near') ? locY - radius : locY + radius;\n merge(options, { 'r': radius, 'cx': locX, 'cy': locY });\n break;\n case 'Diamond':\n case 'Rectangle':\n locX = (orientation === 'Horizontal') ? ((locX - (width / 2))) : ((!axis.opposedPosition && pointer.placement !== 'Far') ||\n (axis.opposedPosition && pointer.placement === 'Near')) ? locX - width : locX;\n locY = (orientation === 'Vertical') ? locY : (!axis.opposedPosition) ?\n (pointer.placement === 'Far') ? locY + (height / 2) : locY - (height / 2) :\n (pointer.placement === 'Near') ? locY - (height / 2) : locY + (height / 2);\n if (shape === 'Diamond') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + locY + ' z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY - (height / 2)) + ' z';\n }\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX - width) + ' ' + (locY - (height / 2)) +\n 'L' + (locX - width) + ' ' + (locY + (height / 2)) + ' Z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY - height) +\n 'L' + (locX - (width / 2)) + ' ' + (locY - height) + ' Z';\n }\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + width) + ' ' + (locY - (height / 2)) +\n 'L' + (locX + width) + ' ' + (locY + (height / 2)) + ' Z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY + height) +\n 'L' + (locX - (width / 2)) + ' ' + (locY + height) + ' Z';\n }\n merge(options, { 'd': path });\n break;\n case 'Arrow':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX - width) + ' '\n + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX - width) + ' ' + ((locY + (height / 2)) -\n (height / 4)) + ' ' + 'L' + (locX - (width / 2)) + ' ' + ((locY + (height / 2)) - (height / 4)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + (locY + height / 2) + 'z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ((locX + (width / 2)) - (width / 4)) + ' ' + (locY - (height / 2)) + ' ' + 'L' + ((locX + (width / 2)) -\n (width / 4)) + ' ' + (locY - height) + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY - height) +\n ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY - (height / 2)) + ' ' + 'L' + (locX - (width / 2))\n + ' ' + (locY - (height / 2)) + 'z';\n }\n merge(options, { 'd': path });\n break;\n case 'InvertedArrow':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + 'L' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX + width) + ' '\n + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX + width) + ' ' + ((locY + (height / 2)) - (height / 4))\n + ' ' + 'L' + (locX + (width / 2)) + ' ' + ((locY + (height / 2)) - (height / 4)) + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY + height / 2) + 'z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ((locX + (width / 2)) - (width / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ((locX + (width / 2)) -\n (width / 4)) + ' ' + (locY + height) + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY + height)\n + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + (locY + (height / 2)) + 'z';\n }\n merge(options, { 'd': path });\n break;\n case 'Image':\n merge(options, { 'href': url, 'height': height, 'width': width, x: locX - (width / 2), y: locY - (height / 2) });\n break;\n }\n return options;\n}\n/** @private */\nexport function getBox(location, boxName, orientation, size, type, containerWidth, axis, cornerRadius) {\n var path = ' ';\n var radius = cornerRadius;\n var x1;\n var y1;\n var rectWidth;\n var rectHeight;\n var bottomRadius;\n var topRadius;\n switch (boxName) {\n case 'RoundedRectangle':\n x1 = location.x;\n y1 = location.y;\n rectWidth = location.width;\n rectHeight = location.height;\n path = 'M' + ' ' + x1 + ' ' + (radius + y1) + ' Q ' + x1 + ' ' + y1 + ' ' + (x1 + radius) + ' ' + y1 + ' ';\n path += 'L' + ' ' + (x1 + rectWidth - radius) + ' ' + y1 + ' Q ' + (x1 + rectWidth) + ' ' + y1 + ' '\n + (x1 + rectWidth) + ' ' + (y1 + radius) + ' ';\n path += 'L ' + (x1 + rectWidth) + ' ' + (y1 + rectHeight - radius) + ' Q ' + (x1 + rectWidth) + ' ' + (y1 + rectHeight)\n + ' ' + (x1 + rectWidth - radius) + ' ' + (y1 + rectHeight) + ' ';\n path += ' L ' + (x1 + radius) + ' ' + (y1 + rectHeight) + ' Q ' + x1 + ' ' + (y1 + rectHeight)\n + ' ' + x1 + ' ' + (y1 + rectHeight - radius) + ' ';\n path += 'L' + ' ' + x1 + ' ' + (radius + y1) + ' ' + 'z';\n break;\n case 'Thermometer':\n var width = (orientation === 'Vertical') ? location.width : location.height;\n bottomRadius = width + ((width / 2) / Math.PI);\n topRadius = width / 2;\n if (orientation === 'Vertical') {\n var addValue = ((containerWidth + ((containerWidth / 2) / Math.PI)) - bottomRadius);\n var y1_1 = (type === 'bar') ? location.y + addValue : location.y;\n var locY = (type === 'bar') ? location.y + (topRadius - (topRadius / Math.PI)) : location.y;\n var locHeight = location.height;\n path = 'M' + location.x + ' ' + (y1_1 + locHeight) +\n ' A ' + bottomRadius + ' ' + bottomRadius + ', 0, 1, 0, ' + (location.x + location.width) + ' ' + (y1_1 + locHeight) +\n ' L ' + (location.x + location.width) + ' ' + locY +\n ' A ' + topRadius + ' ' + topRadius + ', 0, 1, 0, ' + location.x + ' ' + locY + ' z ';\n }\n else {\n var x1_1 = (type === 'bar' && !axis.isInversed) ?\n location.x - ((containerWidth + ((containerWidth / 2) / Math.PI)) - bottomRadius) : location.x;\n var locWidth = (type === 'bar') ? (location.width - (topRadius - ((topRadius / Math.PI)))) : location.width;\n path = 'M' + x1_1 + ' ' + (location.y) +\n ' A ' + bottomRadius + ' ' + bottomRadius + ', 0, 1, 0, ' + x1_1 + ' ' + (location.y + location.height) +\n ' L ' + ((type === 'bar' ? location.x : x1_1) + locWidth) + ' ' + (location.y + location.height) +\n ' A ' + topRadius + ' ' + topRadius + ', 0, 1, 0, ' +\n ((type === 'bar' ? location.x : x1_1) + locWidth) + ' ' + (location.y) + ' z ';\n }\n break;\n }\n return path;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * Helper functions for maps control\n */\nimport { SvgRenderer, createElement, isNullOrUndefined, remove, compile as templateComplier, merge } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../index';\n/**\n * Maps internal use of `Size` type\n * @private\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/**\n * To find number from string\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Method to calculate the width and height of the maps\n */\nexport function calculateSize(maps) {\n var containerWidth = maps.element.clientWidth;\n var containerHeight = maps.element.clientHeight;\n maps.availableSize = new Size(stringToNumber(maps.width, containerWidth) || containerWidth || 600, stringToNumber(maps.height, containerHeight) || containerHeight || (maps.isDevice ?\n Math.min(window.innerWidth, window.innerHeight) : 450));\n}\n/**\n * Method to create svg for maps.\n */\nexport function createSvg(maps) {\n maps.renderer = new SvgRenderer(maps.element.id);\n calculateSize(maps);\n maps.svgObject = maps.renderer.createSvg({\n id: maps.element.id + '_svg',\n width: maps.availableSize.width,\n height: maps.availableSize.height\n });\n}\n/**\n * Method to convert degrees to radians\n */\nexport function degreesToRadians(deg) {\n return deg * (Math.PI / 180);\n}\n/**\n * Convert radians to degrees method\n */\nexport function radiansToDegrees(radian) {\n return radian * (180 / Math.PI);\n}\n/**\n * Method for converting from latitude and longitude values to points\n */\nexport function convertGeoToPoint(latitude, longitude, factor, layer, mapModel) {\n var mapSize = new Size(mapModel.mapAreaRect.width, mapModel.mapAreaRect.height);\n var x;\n var y;\n var value;\n var lat;\n var lng;\n var temp;\n var longitudeMinMax = mapModel.baseMapBounds.longitude;\n var latitudeMinMax = mapModel.baseMapBounds.latitude;\n var latRadian = degreesToRadians(latitude);\n var lngRadian = degreesToRadians(longitude);\n var type = mapModel.projectionType;\n var size = (isNullOrUndefined(factor)) ? Math.min(mapSize.width, mapSize.height) :\n (Math.min(mapSize.width, mapSize.height) * factor);\n if (layer.geometryType === 'Normal') {\n x = isNullOrUndefined(factor) ? longitude : Math.abs((longitude - longitudeMinMax.min) * factor);\n y = isNullOrUndefined(factor) ? latitude : Math.abs((latitudeMinMax.max - latitude) * factor);\n }\n else if (layer.geometryType === 'Geographic') {\n switch (type) {\n case 'Mercator':\n var pixelOrigin = new Point(size / 2, size / 2);\n x = pixelOrigin.x + longitude * (size / 360);\n var sinY = calculateBound(Math.sin(degreesToRadians(latitude)), -0.9999, 0.9999);\n y = pixelOrigin.y + 0.5 * (Math.log((1 + sinY) / (1 - sinY))) * (-(size / (2 * Math.PI)));\n break;\n case 'Winkel3':\n value = aitoff(lngRadian, latRadian);\n lng = (value.x + lngRadian / (Math.PI / 2)) / 2;\n lat = (value.y + latRadian) / 2;\n break;\n case 'Miller':\n lng = lngRadian;\n lat = (1.25 * Math.log(Math.tan((Math.PI / 4) + (.4 * latRadian))));\n break;\n case 'Eckert3':\n temp = Math.sqrt(Math.PI * (4 + Math.PI));\n lng = 2 / temp * lngRadian * (1 + Math.sqrt(1 - 4 * latRadian * latRadian / (Math.PI * Math.PI)));\n lat = 4 / temp * latRadian;\n break;\n case 'AitOff':\n value = aitoff(lngRadian, latRadian);\n lng = value.x;\n lat = value.y;\n break;\n case 'Eckert5':\n lng = lngRadian * (1 + Math.cos(latRadian)) / Math.sqrt(2 + Math.PI);\n lat = 2 * latRadian / Math.sqrt(2 + Math.PI);\n break;\n case 'Equirectangular':\n lng = lngRadian;\n lat = latRadian;\n break;\n case 'Eckert6':\n var epsilon = 1e-6;\n temp = (1 + (Math.PI / 2)) * Math.sin(latRadian);\n var delta = Infinity;\n for (var i = 0; i < 10 && Math.abs(delta) > epsilon; i++) {\n delta = (latRadian + (Math.sin(latRadian)) - temp) / (1 + Math.cos(latRadian));\n latRadian = latRadian - delta;\n }\n temp = Math.sqrt(2 + Math.PI);\n lng = lngRadian * (1 + Math.cos(latRadian)) / temp;\n lat = 2 * latRadian / temp;\n break;\n }\n x = (type === 'Mercator') ? x : roundTo(xToCoordinate(mapModel, radiansToDegrees(lng)), 3);\n y = (type === 'Mercator') ? y : (-(roundTo(yToCoordinate(mapModel, radiansToDegrees(lat)), 3)));\n }\n return new Point(x, y);\n}\n/**\n * Converting tile latitude and longitude to point\n */\nexport function convertTileLatLongToPoint(center, zoomLevel, tileTranslatePoint, isMapCoordinates) {\n var size = Math.pow(2, zoomLevel) * 256;\n var x = (center.x + 180) / 360;\n var sinLatitude = Math.sin(center.y * Math.PI / 180);\n var y = 0.5 - Math.log((1 + sinLatitude) / (1 - sinLatitude)) / (4 * Math.PI);\n var pixelX = center.x;\n var pixelY = center.y;\n if (isMapCoordinates) {\n pixelX = (x * size + 0.5) + tileTranslatePoint.x;\n pixelY = (y * size + 0.5) + tileTranslatePoint.y;\n }\n return { x: pixelX, y: pixelY };\n}\n/**\n * Method for calculate x point\n */\nexport function xToCoordinate(mapObject, val) {\n var longitudeMinMax = mapObject.baseMapBounds.longitude;\n var totalSize = isNullOrUndefined(mapObject.baseSize) ? mapObject.mapAreaRect.width : mapObject.mapAreaRect.width +\n (Math.abs(mapObject.baseSize.width - mapObject.mapAreaRect.width) / 2);\n return Math.round(totalSize * (val - longitudeMinMax.min) / (longitudeMinMax.max - longitudeMinMax.min) * 100) / 100;\n}\n/**\n * Method for calculate y point\n */\nexport function yToCoordinate(mapObject, val) {\n var latitudeMinMax = mapObject.baseMapBounds.latitude;\n return Math.round(mapObject.mapAreaRect.height * (val - latitudeMinMax.min) / (latitudeMinMax.max - latitudeMinMax.min) * 100) / 100;\n}\n/**\n * Method for calculate aitoff projection\n */\nexport function aitoff(x, y) {\n var cosy = Math.cos(y);\n var sincia = sinci(acos(cosy * Math.cos(x /= 2)));\n return new Point(2 * cosy * Math.sin(x) * sincia, Math.sin(y) * sincia);\n}\n/**\n * Method to round the number\n */\nexport function roundTo(a, b) {\n var c = Math.pow(10, b);\n return (Math.round(a * c) / c);\n}\nexport function sinci(x) {\n return x / Math.sin(x);\n}\nexport function acos(a) {\n return Math.acos(a);\n}\n/**\n * Method to calculate bound\n */\nexport function calculateBound(value, min, max) {\n if (!isNullOrUndefined(min)) {\n value = Math.max(value, min);\n }\n if (!(isNullOrUndefined(max))) {\n value = Math.min(value, max);\n }\n return value;\n}\n/**\n * Map internal class for point\n */\nvar Point = /** @class */ (function () {\n function Point(x, y) {\n this.x = x;\n this.y = y;\n }\n return Point;\n}());\nexport { Point };\n/**\n * Map internal class for min and max\n *\n */\nvar MinMax = /** @class */ (function () {\n function MinMax(min, max) {\n this.min = min;\n this.max = max;\n }\n return MinMax;\n}());\nexport { MinMax };\n/**\n * Map internal class locations\n */\nvar GeoLocation = /** @class */ (function () {\n function GeoLocation(latitude, longitude) {\n this.latitude = new MinMax(latitude.min, latitude.max);\n this.longitude = new MinMax(longitude.min, longitude.max);\n }\n return GeoLocation;\n}());\nexport { GeoLocation };\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('mapsmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'mapsmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n this.transform = '';\n this.baseLine = 'auto';\n this.id = id;\n this.x = x;\n this.y = y;\n this.anchor = anchor;\n this.text = text;\n this.transform = transform;\n this.baseLine = baseLine;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * Internal use of path options\n * @private\n */\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d, markerStart, markerEnd) {\n this.id = id;\n this.opacity = opacity;\n this.fill = fill;\n this.stroke = color;\n this['stroke-width'] = width;\n this['stroke-dasharray'] = dashArray;\n this.d = d;\n this['marker-start'] = markerStart;\n this['marker-end'] = markerEnd;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Internal use of circle options\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/**\n * Internal use of polygon options\n * @private\n */\nvar PolygonOption = /** @class */ (function (_super) {\n __extends(PolygonOption, _super);\n function PolygonOption(id, points, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n var _this = _super.call(this, id, fill, width, color, opacity, dashArray) || this;\n _this.points = points;\n return _this;\n }\n return PolygonOption;\n}(PathOption));\nexport { PolygonOption };\n/**\n * Internal use of polyline options\n * @private\n */\nvar PolylineOption = /** @class */ (function (_super) {\n __extends(PolylineOption, _super);\n function PolylineOption(id, points, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n return _super.call(this, id, points, fill, width, color, opacity, dashArray) || this;\n }\n return PolylineOption;\n}(PolygonOption));\nexport { PolylineOption };\n/**\n * Internal use of line options\n * @private\n */\nvar LineOption = /** @class */ (function (_super) {\n __extends(LineOption, _super);\n function LineOption(id, line, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n var _this = _super.call(this, id, fill, width, color, opacity, dashArray) || this;\n _this.x1 = line.x1;\n _this.y1 = line.y1;\n _this.x2 = line.x2;\n _this.y2 = line.y2;\n return _this;\n }\n return LineOption;\n}(PathOption));\nexport { LineOption };\n/**\n * Internal use of line\n * @property\n */\nvar Line = /** @class */ (function () {\n function Line(x1, y1, x2, y2) {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n return Line;\n}());\nexport { Line };\n/**\n * Internal use of map location type\n * @private\n */\nvar MapLocation = /** @class */ (function () {\n function MapLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return MapLocation;\n}());\nexport { MapLocation };\n/**\n * Internal use of type rect\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Internal use for pattern creation.\n * @property\n */\nvar PatternOptions = /** @class */ (function () {\n function PatternOptions(id, x, y, width, height, patternUnits, patternContentUnits, patternTransform, href) {\n if (patternUnits === void 0) { patternUnits = 'userSpaceOnUse'; }\n if (patternContentUnits === void 0) { patternContentUnits = 'userSpaceOnUse'; }\n if (patternTransform === void 0) { patternTransform = ''; }\n if (href === void 0) { href = ''; }\n this.id = id;\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.patternUnits = patternUnits;\n this.patternContentUnits = patternContentUnits;\n this.patternTransform = patternTransform;\n this.href = href;\n }\n return PatternOptions;\n}());\nexport { PatternOptions };\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n var text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n var tspanElement;\n var renderer = new SvgRenderer('');\n var height;\n var htmlObject = renderer.createText(renderOptions, text);\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + ((isMinus) ? -(i * height) : (i * height))\n }, isMinus ? options.text[options.text.length - (i + 1)] : options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * @private\n */\nexport function convertElement(element, markerId, data, index, mapObj) {\n var markerEle = isNullOrUndefined(element.childElementCount) ? element[0] : element;\n var templateHtml = markerEle.outerHTML;\n var properties = Object.keys(data);\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].toLowerCase() !== 'latitude' && properties[i].toLowerCase() !== 'longitude') {\n templateHtml = templateHtml.replace(new RegExp('{{:' + properties[i] + '}}', 'g'), data[properties[i].toString()]);\n }\n }\n return createElement('div', {\n id: markerId,\n innerHTML: templateHtml,\n styles: 'position: absolute;pointer-events: auto;'\n });\n}\nexport function convertElementFromLabel(element, labelId, data, index, mapObj) {\n var labelEle = isNullOrUndefined(element.childElementCount) ? element[0] : element;\n var templateHtml = labelEle.outerHTML;\n var properties = Object.keys(data);\n for (var i = 0; i < properties.length; i++) {\n templateHtml = templateHtml.replace(new RegExp('{{:' + properties[i] + '}}', 'g'), data[properties[i].toString()]);\n }\n return createElement('div', {\n id: labelId,\n innerHTML: templateHtml,\n styles: 'position: absolute'\n });\n}\n/**\n * Internal use of append shape element\n * @private\n */\nexport function appendShape(shape, element) {\n if (element) {\n element.appendChild(shape);\n }\n return shape;\n}\n/**\n * Internal rendering of Circle\n * @private\n */\nexport function drawCircle(maps, options, element) {\n return appendShape(maps.renderer.drawCircle(options), element);\n}\n/**\n * Internal rendering of Rectangle\n * @private\n */\nexport function drawRectangle(maps, options, element) {\n return appendShape(maps.renderer.drawRectangle(options), element);\n}\n/**\n * Internal rendering of Path\n * @private\n */\nexport function drawPath(maps, options, element) {\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Polygon\n * @private\n */\nexport function drawPolygon(maps, options, element) {\n return appendShape(maps.renderer.drawPolygon(options), element);\n}\n/**\n * Internal rendering of Polyline\n * @private\n */\nexport function drawPolyline(maps, options, element) {\n return appendShape(maps.renderer.drawPolyline(options), element);\n}\n/**\n * Internal rendering of Line\n * @private\n */\nexport function drawLine(maps, options, element) {\n return appendShape(maps.renderer.drawLine(options), element);\n}\n/**\n * @private\n * Calculate marker shapes\n */\nexport function calculateShapes(maps, shape, options, size, location, markerEle) {\n var tempGroup;\n switch (shape) {\n case 'Balloon':\n tempGroup = drawBalloon(maps, options, size, location, markerEle);\n break;\n case 'Cross':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height\n / 2) + ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n break;\n case 'Diamond':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' '\n + location.y + ' L ' + location.x + ' ' + (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + location.y + ' Z';\n break;\n case 'Star':\n options.d = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6)\n + ' L ' + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n break;\n case 'Triangle':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + (location.y + size.height / 2) + ' Z';\n break;\n case 'HorizontalLine':\n options.d = ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' '\n + location.y;\n break;\n case 'VerticalLine':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2);\n break;\n }\n return shape === 'Balloon' ? tempGroup : maps.renderer.drawPath(options);\n}\n/**\n * Internal rendering of Diamond\n * @private\n */\nexport function drawDiamond(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' + location.y +\n ' L ' + location.x + ' ' + (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + location.y + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Triangle\n * @private\n */\nexport function drawTriangle(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + (location.y + size.height / 2) + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Cross\n * @private\n */\nexport function drawCross(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2) +\n ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of HorizontalLine\n * @private\n */\nexport function drawHorizontalLine(maps, options, size, location, element) {\n options.d = ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of VerticalLine\n * @private\n */\nexport function drawVerticalLine(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2);\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Star\n * @private\n */\nexport function drawStar(maps, options, size, location, element) {\n options.d = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6) + ' L '\n + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2)\n + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Balloon\n * @private\n */\nexport function drawBalloon(maps, options, size, location, element) {\n var width = size.width;\n var height = size.height;\n var padding = 5;\n location.x -= width / 2;\n location.y -= height;\n options.d = 'M15,0C8.8,0,3.8,5,3.8,11.2C3.8,17.5,9.4,24.4,15,30c5.6-5.6,11.2-12.5,11.2-18.8C26.2,5,21.2,0,15,0z M15,16' +\n 'c-2.8,0-5-2.2-5-5s2.2-5,5-5s5,2.2,5,5S17.8,16,15,16z';\n var balloon = maps.renderer.drawPath(options);\n var x = size.width / 22.5;\n var y = size.height / 30;\n balloon.setAttribute('transform', 'translate(' + location.x + ', ' + location.y + ') scale(' + x + ', ' + y + ')');\n var g = maps.renderer.createGroup({ id: options.id });\n appendShape(balloon, g);\n return appendShape(g, element);\n}\n/**\n * Internal rendering of Pattern\n * @private\n */\nexport function drawPattern(maps, options, elements, element) {\n var pattern = maps.renderer.createPattern(options, 'pattern');\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var ele = elements_1[_i];\n appendShape(ele, pattern);\n }\n return appendShape(pattern, element);\n}\n/**\n * Method to get specific field and vaues from data.\n * @private\n */\n// tslint:disable:no-any\nexport function getFieldData(dataSource, fields) {\n var newData = [];\n var data;\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var temp = dataSource_1[_i];\n data = {};\n for (var _a = 0, fields_1 = fields; _a < fields_1.length; _a++) {\n var field = fields_1[_a];\n if (temp[field]) {\n data[field] = temp[field];\n }\n }\n newData.push(data);\n }\n return newData;\n}\n/**\n * To find the index of dataSource from shape properties\n */\n// tslint:disable:no-string-literal\nexport function checkShapeDataFields(dataSource, properties, dataPath, propertyPath) {\n if (!(isNullOrUndefined(properties))) {\n for (var i = 0; i < dataSource.length; i++) {\n if (dataSource[i][dataPath] === properties[propertyPath]) {\n return i;\n }\n }\n }\n return null;\n}\nexport function filter(points, start, end) {\n var pointObject = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (start <= point.y && end >= point.y) {\n pointObject.push(point);\n }\n }\n return pointObject;\n}\n/**\n * To find the midpoint of the polygon from points\n */\nexport function findMidPointOfPolygon(points) {\n if (!points.length) {\n return null;\n }\n var min = 0;\n var max = points.length;\n var startX;\n var startY;\n var startX1;\n var startY1;\n var sum = 0;\n var xSum = 0;\n var ySum = 0;\n for (var i = min; i <= max - 1; i++) {\n startX = points[i].x;\n startY = points[i].y;\n if (i === max - 1) {\n startX1 = points[0].x;\n startY1 = points[0].y;\n }\n else {\n startX1 = points[i + 1].x;\n startY1 = points[i + 1].y;\n }\n sum = sum + Math.abs(((startX * startY1)) - (startX1 * startY));\n xSum = xSum + Math.abs(((startX + startX1) * (((startX * startY1) - (startX1 * startY)))));\n ySum = ySum + Math.abs(((startY + startY1) * (((startX * startY1) - (startX1 * startY)))));\n }\n sum = 0.5 * sum;\n xSum = (1 / (4 * sum)) * xSum;\n ySum = (1 / (4 * sum)) * ySum;\n /* Code for finding nearest points in polygon related to midPoint*/\n var rightMinPoint = { x: 0, y: 0 };\n var rightMaxPoint = { x: 0, y: 0 };\n var leftMinPoint = { x: 0, y: 0 };\n var leftMaxPoint = { x: 0, y: 0 };\n var bottomMinPoint = { x: 0, y: 0 };\n var bottomMaxPoint = { x: 0, y: 0 };\n var topMinPoint = { x: 0, y: 0 };\n var topMaxPoint = { x: 0, y: 0 };\n var height = 0;\n for (var i = min; i <= max - 1; i++) {\n var point = points[i];\n if (point.y > ySum) {\n if (point.x < xSum && xSum - point.x < xSum - bottomMinPoint.x) {\n bottomMinPoint = { x: point.x, y: point.y };\n }\n else if (point.x > xSum && (bottomMaxPoint.x === 0 || point.x - xSum < bottomMaxPoint.x - xSum)) {\n bottomMaxPoint = { x: point.x, y: point.y };\n }\n }\n else {\n if (point.x < xSum && xSum - point.x < xSum - topMinPoint.x) {\n topMinPoint = { x: point.x, y: point.y };\n }\n else if (point.x > xSum && (topMaxPoint.x === 0 || point.x - xSum < topMaxPoint.x - xSum)) {\n topMaxPoint = { x: point.x, y: point.y };\n }\n }\n height = (bottomMaxPoint.y - topMaxPoint.y) + ((bottomMaxPoint.y - topMaxPoint.y) / 4);\n if (point.x > xSum) {\n if (point.y < ySum && ySum - point.y < ySum - rightMinPoint.y) {\n rightMinPoint = { x: point.x, y: point.y };\n }\n else if (point.y > ySum && (rightMaxPoint.y === 0 || point.y - ySum < rightMaxPoint.y - ySum)) {\n rightMaxPoint = { x: point.x, y: point.y };\n }\n }\n else {\n if (point.y < ySum && ySum - point.y < ySum - leftMinPoint.y) {\n leftMinPoint = { x: point.x, y: point.y };\n }\n else if (point.y > ySum && (leftMaxPoint.y === 0 || point.y - ySum < leftMaxPoint.y - ySum)) {\n leftMaxPoint = { x: point.x, y: point.y };\n }\n }\n }\n return {\n x: xSum, y: ySum, rightMin: rightMinPoint, rightMax: rightMaxPoint,\n leftMin: leftMinPoint, leftMax: leftMaxPoint, points: points, topMax: topMaxPoint, topMin: topMinPoint,\n bottomMax: bottomMaxPoint, bottomMin: bottomMinPoint, height: height\n };\n}\n/**\n * @private\n * Check custom path\n */\n/* tslint:disable:no-string-literal */\nexport function isCustomPath(layerData) {\n var customPath = false;\n if (Object.prototype.toString.call(layerData) === '[object Array]') {\n layerData.forEach(function (layer, index) {\n if (!isNullOrUndefined(layer['geometry']) && layer['geometry']['type'] === 'Path') {\n customPath = true;\n }\n });\n }\n return customPath;\n}\n/**\n * @private\n * Trim the title text\n */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth || label.length < 4) {\n if (label.length < 4) {\n label = ' ';\n }\n return label;\n }\n }\n }\n return label;\n}\n/**\n * Method to calculate x position of title\n */\nexport function findPosition(location, alignment, textSize, type) {\n var x;\n var y;\n switch (alignment) {\n case 'Near':\n x = location.x;\n break;\n case 'Center':\n x = (type === 'title') ? (location.width / 2 - textSize.width / 2) :\n ((location.x + (location.width / 2)) - textSize.width / 2);\n break;\n case 'Far':\n x = (type === 'title') ? (location.width - location.y - textSize.width) :\n ((location.x + location.width) - textSize.width);\n break;\n }\n y = (type === 'title') ? location.y + (textSize.height / 2) : ((location.y + location.height / 2) + textSize.height / 2);\n return new Point(x, y);\n}\n/**\n * To remove element by id\n */\nexport function removeElement(id) {\n var element = document.getElementById(id);\n return element ? remove(element) : null;\n}\n/**\n * @private\n */\nexport function getTranslate(mapObject, layer) {\n var zoomFactor = mapObject.zoomSettings.zoomFactor;\n var min = mapObject.baseMapRectBounds['min'];\n var max = mapObject.baseMapRectBounds['max'];\n var size = mapObject.mapAreaRect;\n var availSize = mapObject.availableSize;\n var x;\n var y;\n var mapWidth = Math.abs(max['x'] - min['x']);\n var mapHeight = Math.abs(min['y'] - max['y']);\n var factor = mapObject.zoomSettings.zoomFactor;\n var scaleFactor;\n var scaleX;\n var scaleY;\n if (!isNullOrUndefined(mapObject.centerPosition.longitude) && !isNullOrUndefined(mapObject.centerPosition.latitude)) {\n var leftPosition = ((mapWidth + Math.abs(mapObject.mapAreaRect.width - mapWidth)) / 2) / factor;\n var topPosition = ((mapHeight + Math.abs(mapObject.mapAreaRect.height - mapHeight)) / 2) / factor;\n var center = mapObject.centerPosition;\n var point = convertGeoToPoint(center.latitude, center.longitude, mapObject.mapLayerPanel.calculateFactor(layer), layer, mapObject);\n x = -point.x + leftPosition;\n y = -point.y + topPosition;\n scaleFactor = zoomFactor;\n }\n else {\n scaleFactor = parseFloat(Math.min(size.width / mapWidth, size.height / mapHeight).toFixed(2));\n mapWidth *= scaleFactor;\n mapHeight *= scaleFactor;\n x = size.x + ((-(min['x'])) + ((size.width / 2) - (mapWidth / 2)));\n y = size.y + ((-(min['y'])) + ((size.height / 2) - (mapHeight / 2)));\n }\n return { scale: scaleFactor, location: new Point(x, y) };\n}\n/**\n * To get the html element by specified id\n */\nexport function getElementByID(id) {\n return document.getElementById(id);\n}\n/**\n * To apply internalization\n */\nexport function Internalize(maps, value) {\n maps.formatFunction =\n maps.intl.getNumberFormat({ format: maps.format, useGrouping: maps.useGroupingSeparator });\n return maps.formatFunction(value);\n}\n/**\n * Function to compile the template function for maps.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/**\n * Function to get element from id.\n * @returns Element\n * @private\n */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * Function to get shape data using target id\n */\nexport function getShapeData(targetId, map) {\n var layerIndex = parseInt(targetId.split('_LayerIndex_')[1].split('_')[0], 10);\n var shapeIndex = parseInt(targetId.split('_ShapeIndex_')[1].split('_')[0], 10);\n var layer = map.layers[layerIndex];\n var shapeData = layer.layerData[shapeIndex]['property'];\n var data;\n if (layer.dataSource) {\n data = layer.dataSource[checkShapeDataFields(layer.dataSource, shapeData, layer.shapeDataPath, layer.shapePropertyPath)];\n }\n return { shapeData: shapeData, data: data };\n}\n/**\n * Function to trigger shapeSelected event\n * @private\n */\nexport function triggerShapeEvent(targetId, selection, maps, eventName) {\n var shape = getShapeData(targetId, maps);\n var eventArgs = {\n cancel: false,\n name: eventName,\n fill: selection.fill,\n opacity: selection.opacity,\n border: selection.border,\n shapeData: shape.shapeData,\n data: shape.data,\n target: targetId\n };\n maps.trigger(eventName, eventArgs);\n return eventArgs;\n}\n/**\n * Function to get elements using class name\n */\nexport function getElementsByClassName(className) {\n return document.getElementsByClassName(className);\n}\n/**\n * Function to get elements using querySelectorAll\n */\n// export function querySelectorAll(args: string, element: Element): NodeListOf {\n// return element.querySelectorAll('.' + args);\n// }\n/**\n * Function to get elements using querySelector\n */\nexport function querySelector(args, elementSelector) {\n return document.getElementById(elementSelector).querySelector('#' + args);\n}\n/**\n * Function to get the element for selection and highlight using public method\n */\nexport function getTargetElement(layerIndex, name, enable, map) {\n var shapeIndex;\n var targetId;\n var targetEle;\n var shapeData = map.layers[layerIndex].shapeData['features'];\n for (var i = 0; i < shapeData.length; i++) {\n if (shapeData[i]['properties'].name === name) {\n targetId = map.element.id + '_' + 'LayerIndex_' + layerIndex + '_ShapeIndex_' + i + '_dataIndex_undefined';\n break;\n }\n }\n targetEle = getElement(targetId);\n return targetEle;\n}\n/**\n * Function to create style element for highlight and selection\n */\nexport function createStyle(id, className, eventArgs) {\n return createElement('style', {\n id: id, innerHTML: '.' + className + '{fill:'\n + eventArgs.fill + ';' + 'opacity:' + eventArgs.opacity.toString() + ';' +\n '}'\n });\n}\n/**\n * Function to customize the style for highlight and selection\n */\nexport function customizeStyle(id, className, eventArgs) {\n var styleEle = getElement(id);\n styleEle.innerHTML = '.' + className + '{fill:'\n + eventArgs.fill + ';' + 'opacity:' + eventArgs.opacity.toString() + ';' +\n 'stroke-width:' + eventArgs.border.width.toString() +\n 'stroke-color:' + eventArgs.border.color + '}';\n}\n/**\n * Function to remove class from element\n */\nexport function removeClass(element) {\n element.removeAttribute('class');\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function elementAnimate(element, delay, duration, point, maps, ele, radius) {\n if (radius === void 0) { radius = 0; }\n var centerX = point.x;\n var centerY = point.y;\n var height = 0;\n var transform = element.getAttribute('transform') || '';\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n height = ((args.timeStamp - args.delay) / args.duration);\n element.setAttribute('transform', 'translate(' + (centerX - (radius * height)) + ' ' + (centerY - (radius * height)) +\n ') scale(' + height + ')');\n }\n },\n end: function (model) {\n element.setAttribute('transform', transform);\n if (!ele) {\n return;\n }\n var event = {\n cancel: false, name: animationComplete, element: ele, maps: maps\n };\n maps.trigger(animationComplete, event);\n }\n });\n}\n// /**\n// * \n// * @param touchList \n// * @param e \n// * @param touches \n// */\n// export function addTouchPointer(touchList: ITouches[], e: PointerEvent, touches: TouchList): ITouches[] {\n// if (touches) {\n// touchList = [];\n// for (let i: number = 0, length: number = touches.length; i < length; i++) {\n// touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n// }\n// } else {\n// touchList = touchList ? touchList : [];\n// if (touchList.length === 0) {\n// touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n// } else {\n// for (let i: number = 0, length: number = touchList.length; i < length; i++) {\n// if (touchList[i].pointerId === e.pointerId) {\n// touchList[i] = { pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId };\n// } else {\n// touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n// }\n// }\n// }\n// }\n// return touchList;\n// }\n/** @private */\nexport function createTooltip(id, text, top, left, fontSize) {\n var tooltip = getElement(id);\n var style = 'top:' + top.toString() + 'px;' +\n 'left:' + left.toString() + 'px;' +\n 'background:' + '#FFFFFF' + ';' +\n 'position:absolute;border:1px solid #707070;font-size:' + fontSize + ';border-radius:2px;';\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id, innerHTML: ' ' + text + ' ', styles: style\n });\n document.body.appendChild(tooltip);\n }\n else {\n tooltip.setAttribute('innerHTML', ' ' + text + ' ');\n tooltip.setAttribute('styles', style);\n }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options) {\n var functionName = 'Path';\n var renderer = new SvgRenderer('');\n var temp = calculateLegendShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n return htmlObject;\n}\n/** @private */\nexport function calculateLegendShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Star':\n path = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6)\n + ' L ' + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\n// export function markerTemplateAnimate(element: Element, delay: number, duration: number, point: MapLocation): void {\n// let delta: number = 0;\n// let top: string = (element as HTMLElement).style.top;\n// let y: number = parseInt(top, 10);\n// new Animation({}).animate(element, {\n// duration: duration,\n// delay: delay,\n// progress: (args: AnimationOptions): void => {\n// if (args.timeStamp > args.delay) {\n// delta = ((args.timeStamp - args.delay) / args.duration);\n// (element as HTMLElement).style.top = y - 100 + (delta * 100) + 'px';\n// }\n// },\n// end: (model: AnimationOptions) => {\n// (element as HTMLElement).style.top = top;\n// }\n// });\n// }\n// /**\n// * Animation Effect Calculation End\n// * @private\n// */\n// export function zoomAnimate(element: Element, delay: number, duration: number, point: MapLocation, scale: number, size: Size,\n// maps: Maps): void {\n// let delta: number = 0;\n// let previousLocation: MapLocation = maps.translatePoint;\n// let preScale: number = maps.scale;\n// let diffScale: number = scale - preScale;\n// let currentLocation: MapLocation = new MapLocation(0, 0);\n// let currentScale: number = 1;\n// if (scale === preScale) {\n// element.setAttribute('transform', 'scale( ' + (scale) + ' ) translate( ' + point.x + ' ' + point.y + ' )');\n// return;\n// }\n// new Animation({}).animate(element, {\n// duration: duration,\n// delay: delay,\n// timingFunction: '',\n// progress: (args: AnimationOptions): void => {\n// if (args.timeStamp > args.delay) {\n// delta = ((args.timeStamp - args.delay) / args.duration);\n// currentScale = preScale + (delta * diffScale);\n// currentLocation = getXY(previousLocation, size, preScale, currentScale);\n// element.setAttribute('transform', 'scale( ' + currentScale + ' ) ' +\n// 'translate( ' + currentLocation.x + ' ' + currentLocation.y + ' )');\n// }\n// },\n// end: (model: AnimationOptions) => {\n// element.setAttribute('transform', 'scale( ' + (scale) + ' ) translate( ' + point.x + ' ' + point.y + ' )');\n// }\n// });\n// }\n// /**\n// * To get translate point based on scale\n// */\n// export function getXY(translatePoint: MapLocation, size: Size, scale: number, zoomFactor: number): MapLocation {\n// let translatePointX: number = translatePoint.x - (((size.width / scale) - (size.width / zoomFactor)) / 2);\n// let translatePointY: number = translatePoint.y - (((size.height / scale) - (size.height / zoomFactor)) / 2);\n// return new MapLocation(translatePointX, translatePointY);\n// }\n/** @private */\nexport function getElementOffset(childElement, parentElement) {\n var width;\n var height;\n parentElement.appendChild(childElement);\n width = childElement.offsetWidth;\n height = childElement.offsetHeight;\n parentElement.removeChild(childElement);\n return new Size(width, height);\n}\n/** @private */\nexport function changeBorderWidth(element, index, scale, maps) {\n var childNode;\n for (var l = 0; l < element.childElementCount; l++) {\n childNode = element.childNodes[l];\n if (childNode.id.indexOf('_NavigationGroup') > -1) {\n changeNavaigationLineWidth(childNode, index, scale, maps);\n }\n else {\n var currentStroke = (maps.layersCollection[index].shapeSettings.border.width);\n childNode.setAttribute('stroke-width', (currentStroke / scale).toString());\n }\n }\n}\n/** @private */\nexport function changeNavaigationLineWidth(element, index, scale, maps) {\n var node;\n for (var m = 0; m < element.childElementCount; m++) {\n node = element.childNodes[m];\n if (node.tagName === 'path') {\n var currentStroke = (maps.layersCollection[index]\n .navigationLineSettings[parseFloat(node.id.split('_')[2])].width);\n node.setAttribute('stroke-width', (currentStroke / scale).toString());\n }\n }\n}\n// /** Pinch zoom helper methods */\n/** @private */\nexport function targetTouches(event) {\n var targetTouches = [];\n var touches = event.touches;\n for (var i = 0; i < touches.length; i++) {\n targetTouches.push({ pageX: touches[i].pageX, pageY: touches[i].pageY });\n }\n return targetTouches;\n}\n/** @private */\nexport function calculateScale(startTouches, endTouches) {\n var startDistance = getDistance(startTouches[0], startTouches[1]);\n var endDistance = getDistance(endTouches[0], endTouches[1]);\n return (endDistance / startDistance);\n}\n/** @private */\nexport function getDistance(a, b) {\n var x = a.pageX - b.pageX;\n var y = a.pageY - b.pageY;\n return Math.sqrt(x * x + y * y);\n}\n/** @private */\nexport function getTouches(touches, maps) {\n var rect = maps.element.getBoundingClientRect();\n var posTop = rect.top + document.defaultView.pageXOffset;\n var posLeft = rect.left + document.defaultView.pageYOffset;\n return Array.prototype.slice.call(touches).map(function (touch) {\n return {\n x: touch.pageX - posLeft,\n y: touch.pageY - posTop,\n };\n });\n}\n/** @private */\nexport function getTouchCenter(touches) {\n return {\n x: touches.map(function (e) { return e['x']; }).reduce(sum) / touches.length,\n y: touches.map(function (e) { return e['y']; }).reduce(sum) / touches.length\n };\n}\n/** @private */\nexport function sum(a, b) {\n return a + b;\n}\n","/**\n * Schedule common utilities\n */\nexport var WEEK_LENGTH = 7;\nexport var MS_PER_DAY = 86400000;\nexport var MS_PER_MINUTE = 60000;\nexport function getWeekFirstDate(date1, firstDayOfWeek) {\n var date = new Date(date1.getTime());\n firstDayOfWeek = (firstDayOfWeek - date.getDay() + 7 * (-1)) % 7;\n return new Date(date.setDate(date.getDate() + firstDayOfWeek));\n}\nexport function firstDateOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth());\n}\nexport function lastDateOfMonth(dt) {\n return new Date(dt.getFullYear(), dt.getMonth() + 1, 0);\n}\nexport function getWeekNumber(dt) {\n var currentDate = new Date('' + dt).valueOf();\n var date = new Date(dt.getFullYear(), 0, 1).valueOf();\n var a = (currentDate - date);\n return Math.ceil((((a) / MS_PER_DAY) + new Date(date).getDay() + 1) / 7);\n}\nexport function setTime(date, time) {\n var tzOffsetBefore = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(d.getTime() + tzOffsetDiff * MS_PER_DAY);\n return date;\n}\nexport function resetTime(date) {\n date.setHours(0, 0, 0, 0);\n return date;\n}\nexport function getDateInMs(date) {\n return date.getTime() - new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0).getTime();\n}\nexport function addDays(date, i) {\n date = new Date('' + date);\n return new Date(date.setDate(date.getDate() + i));\n}\nexport function addMonths(date, i) {\n date = new Date('' + date);\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, getMaxDays(date)));\n return date;\n}\nexport function addYears(date, i) {\n date = new Date('' + date);\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, getMaxDays(date)));\n return date;\n}\nexport function getStartEndHours(date, startHour, endHour) {\n var date1 = new Date(date.getTime());\n date1.setHours(startHour.getHours());\n date1.setMinutes(startHour.getMinutes());\n date1.setSeconds(startHour.getSeconds());\n var date2 = new Date(date.getTime());\n if (endHour.getHours() === 0) {\n date2 = addDays(date2, 1);\n }\n else {\n date2.setHours(endHour.getHours());\n date2.setMinutes(endHour.getMinutes());\n date2.setSeconds(endHour.getSeconds());\n }\n return { startHour: date1, endHour: date2 };\n}\nexport function getMaxDays(d) {\n var date = new Date(d.getFullYear(), d.getMonth() + 1, 0);\n return date.getDate();\n}\nexport function getDaysCount(startDate, endDate) {\n var strTime = resetTime(new Date(startDate));\n var endTime = resetTime(new Date(endDate));\n return (endTime.getTime() - strTime.getTime()) / MS_PER_DAY;\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","import { isNullOrUndefined, getDefaultDateObject, getValue, cldrData } from '@syncfusion/ej2-base';\nimport { MS_PER_DAY } from '../schedule/base/util';\n/**\n * Date Generator from Recurrence Rule\n */\nexport function generateSummary(rule, localeObject, locale) {\n var ruleObject = extractObjectFromRule(rule);\n var summary = localeObject.getConstant(EVERY) + ' ';\n var cldrObj;\n var cldrObj1;\n if (locale === 'en' || locale === 'en-US') {\n cldrObj1 = (getValue('months.stand-alone.abbreviated', getDefaultDateObject()));\n cldrObj = (getValue('days.stand-alone.abbreviated', getDefaultDateObject()));\n }\n else {\n cldrObj1 = (getValue('main.' + '' + locale + '.dates.calendars.gregorian.months.stand-alone.abbreviated', cldrData));\n cldrObj = (getValue('main.' + '' + locale + '.dates.calendars.gregorian.days.stand-alone.abbreviated', cldrData));\n }\n if (ruleObject.interval > 1) {\n summary += ruleObject.interval + ' ';\n }\n switch (ruleObject.freq) {\n case 'DAILY':\n summary += localeObject.getConstant(DAYS);\n break;\n case 'WEEKLY':\n summary += localeObject.getConstant(WEEKS) + ' ' + localeObject.getConstant(ON) + ' ';\n ruleObject.day.forEach(function (day, index) {\n summary += getValue(DAYINDEXOBJECT[day], cldrObj);\n summary += (((ruleObject.day.length - 1) === index) ? '' : ', ');\n });\n break;\n case 'MONTHLY':\n summary += localeObject.getConstant(MONTHS) + ' ' + localeObject.getConstant(ON) + ' ';\n summary += getMonthSummary(ruleObject, cldrObj, localeObject);\n break;\n case 'YEARLY':\n summary += localeObject.getConstant(YEARS) + ' ' + localeObject.getConstant(ON) + ' ';\n summary += getValue((ruleObject.month[0]).toString(), cldrObj1) + ' ';\n summary += getMonthSummary(ruleObject, cldrObj, localeObject);\n break;\n default:\n return '';\n }\n if (ruleObject.count) {\n summary += ', ' + (ruleObject.count) + ' ' + localeObject.getConstant(TIMES);\n }\n else if (ruleObject.until) {\n var tempDate = ruleObject.until;\n summary += ', ' + localeObject.getConstant(UNTIL)\n + ' ' + tempDate.getDate()\n + ' ' + getValue((tempDate.getMonth() + 1).toString(), cldrObj1)\n + ' ' + tempDate.getFullYear();\n }\n return summary;\n}\nfunction getMonthSummary(ruleObject, cldrObj, localeObj) {\n var summary = '';\n if (ruleObject.monthDay.length) {\n summary += ruleObject.monthDay[0];\n }\n else if (ruleObject.day) {\n var pos = ruleObject.setPosition - 1;\n summary += localeObj.getConstant(WEEKPOS[pos > -1 ? pos : (WEEKPOS.length - 1)])\n + ' ' + getValue(DAYINDEXOBJECT[ruleObject.day[0]], cldrObj);\n }\n return summary;\n}\nexport function generate(startDate, rule, excludeDate, startDayOfWeek, maximumCount, viewDate) {\n if (maximumCount === void 0) { maximumCount = MAXOCCURRENCE; }\n if (viewDate === void 0) { viewDate = null; }\n var ruleObject = extractObjectFromRule(rule);\n var cacheDate;\n var data = [];\n var modifiedDate = new Date(startDate.getTime());\n if (viewDate && viewDate > startDate && !ruleObject.count) {\n tempViewDate = new Date(viewDate.getTime());\n tempViewDate.setHours(startDate.getHours(), startDate.getMinutes(), startDate.getSeconds());\n }\n else {\n tempViewDate = null;\n }\n if (!ruleObject.until && tempViewDate) {\n cacheDate = new Date(tempViewDate.getTime());\n cacheDate.setDate(tempViewDate.getDate() + 42 * (ruleObject.interval));\n ruleObject.until = cacheDate;\n }\n if (ruleObject.until && startDate > ruleObject.until) {\n return data;\n }\n maxOccurrence = maximumCount;\n setFirstDayOfWeek(DAYINDEX[startDayOfWeek]);\n tempExcludeDate = [];\n var tempDate = isNullOrUndefined(excludeDate) ? [] : excludeDate.split(',');\n tempDate.forEach(function (content) {\n var parsedDate = getDateFromRecurrenceDateString(content);\n tempExcludeDate.push(new Date(parsedDate.getTime()).setHours(0, 0, 0, 0));\n });\n switch (ruleObject.freq) {\n case 'DAILY':\n dailyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'WEEKLY':\n weeklyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'MONTHLY':\n monthlyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'YEARLY':\n yearlyType(modifiedDate, ruleObject.until, data, ruleObject);\n }\n return data;\n}\nfunction getDateFromRecurrenceDateString(recDateString) {\n return new Date(recDateString.substr(0, 4) +\n '-' + recDateString.substr(4, 2) +\n '-' + recDateString.substr(6, 5) +\n ':' + recDateString.substr(11, 2) +\n ':' + recDateString.substr(13));\n}\nfunction excludeDateHandler(data, date) {\n var zeroIndex = new Date(date).setHours(0, 0, 0, 0);\n if (tempExcludeDate.indexOf(zeroIndex) === -1 && (!tempViewDate || zeroIndex >= tempViewDate.getTime())) {\n data.push(date);\n }\n}\nfunction dailyType(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var interval = ruleObject.interval;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n while (compareDates(tempDate, endDate)) {\n state = true;\n state = validateRules(tempDate, ruleObject);\n if (state) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n break;\n }\n }\n tempDate.setDate(tempDate.getDate() + interval);\n }\n}\nfunction weeklyType(startDate, endDate, data, ruleObject) {\n var tempDate = getStartDateForWeek(startDate, ruleObject.day);\n var interval = ruleObject.interval;\n var expectedDays = ruleObject.day;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var dayCycleData = processWeekDays(expectedDays);\n while (compareDates(tempDate, endDate)) {\n state = true;\n state = validateRules(tempDate, ruleObject);\n if (state) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n break;\n }\n }\n if (expectedDays.length > 1) {\n tempDate.setDate(tempDate.getDate()\n + dayCycleData[DAYINDEX[tempDate.getDay()]]\n + ((expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === expectedDays.length - 1) ?\n ((interval - 1) * 7) : 0));\n }\n else {\n tempDate.setDate(tempDate.getDate()\n + (interval * 7));\n }\n }\n}\nfunction monthlyType(startDate, endDate, data, ruleObject) {\n var ruleType = validateMonthlyRuleType(ruleObject);\n switch (ruleType) {\n case 'day':\n monthlyDayTypeProcess(startDate, endDate, data, ruleObject);\n break;\n case 'both':\n case 'date':\n monthlyDateTypeProcess(startDate, endDate, data, ruleObject);\n break;\n }\n}\nfunction yearlyType(startDate, endDate, data, ruleObject) {\n var typeValue = checkYearlyType(ruleObject);\n switch (typeValue) {\n case 'MONTH':\n monthlyType(startDate, endDate, data, ruleObject);\n break;\n case 'WEEKNO':\n processWeekNo(startDate, endDate, data, ruleObject);\n break;\n case 'YEARDAY':\n processYearDay(startDate, endDate, data, ruleObject);\n break;\n }\n}\nfunction processWeekNo(startDate, endDate, data, ruleObject) {\n var stDate = new Date(startDate.getFullYear(), 0, 0);\n var tempDate;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var startDay;\n var firstWeekSpan;\n var weekNos = ruleObject.weekNo;\n var weekNo;\n var maxDate;\n var minDate;\n while (compareDates(stDate, endDate)) {\n startDay = dayIndex.indexOf(DAYINDEX[stDate.getDay()]);\n firstWeekSpan = (6 - startDay) + 1;\n for (var index = 0; index < weekNos.length; index++) {\n weekNo = weekNos[index];\n weekNo = (weekNo > 0) ? weekNo : 53 + weekNo + 1;\n maxDate = (weekNo === 1) ? firstWeekSpan : firstWeekSpan + ((weekNo - 1) * 7);\n minDate = (weekNo === 1) ? firstWeekSpan - 7 : firstWeekSpan + ((weekNo - 2) * 7);\n while (minDate < maxDate) {\n tempDate = new Date(stDate.getTime() + (MS_PER_DAY * minDate));\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n minDate++;\n }\n }\n stDate = new Date(tempDate.getFullYear() + ruleObject.interval, 0, 0);\n }\n}\nfunction processYearDay(startDate, endDate, data, ruleObject) {\n var stDate = new Date(startDate.getFullYear(), 0, 0);\n var tempDate;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var date;\n while (compareDates(stDate, endDate)) {\n for (var index = 0; index < ruleObject.yearDay.length; index++) {\n date = ruleObject.yearDay[index];\n tempDate = new Date(stDate.getTime());\n if ((date === LEAPYEAR || date === -LEAPYEAR) && ((tempDate.getFullYear() + 1) % 4 !== 0)) {\n tempDate.setDate(tempDate.getDate() + 1);\n continue;\n }\n tempDate.setDate(tempDate.getDate() + ((date < 0) ? getMaxYearDay(tempDate.getFullYear() + 1) + 1 + date : date));\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n stDate = new Date(tempDate.getFullYear() + ruleObject.interval, 0, 0);\n }\n}\nfunction getMaxYearDay(date) {\n return (date % 4 === 0) ? LEAPYEAR : NORMALYEAR;\n}\nfunction checkYearlyType(ruleObject) {\n if (ruleObject.yearDay.length) {\n return 'YEARDAY';\n }\n else if (ruleObject.weekNo.length) {\n return 'WEEKNO';\n }\n return 'MONTH';\n}\nfunction monthlyDateTypeProcess(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var mainDate = new Date(startDate.getTime());\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var interval = ruleObject.interval;\n var monthInit = 0;\n var date;\n var state;\n tempDate.setDate(1);\n mainDate.setDate(1);\n if (ruleObject.month.length) {\n tempDate.setMonth(ruleObject.month[0] - 1);\n }\n while (compareDates(tempDate, endDate)) {\n for (var index = 0; index < ruleObject.monthDay.length; index++) {\n date = ruleObject.monthDay[index];\n var maxDate = (tempDate.getMonth() === 1) ?\n (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n date = date > 0 ? date : (maxDate + date + 1);\n if ((date > 0) && validateProperDate(tempDate, date, mainDate)) {\n tempDate.setDate(date);\n if (endDate && tempDate > endDate) {\n return;\n }\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, interval);\n }\n}\nfunction setNextValidDate(tempDate, ruleObject, monthInit, interval, beginDate) {\n if (beginDate === void 0) { beginDate = null; }\n var monthData = beginDate ? beginDate.getMonth() : 0;\n tempDate.setDate(1);\n if (ruleObject.month.length) {\n monthInit++;\n monthInit = monthInit % ruleObject.month.length;\n tempDate.setMonth(ruleObject.month[monthInit] - 1);\n if (monthInit === 0) {\n tempDate.setFullYear(tempDate.getFullYear() + interval);\n }\n }\n else {\n if (beginDate && (beginDate.getFullYear() < tempDate.getFullYear())) {\n monthData = tempDate.getMonth() - 1;\n }\n tempDate.setMonth((beginDate ?\n monthData :\n tempDate.getMonth()) + interval);\n }\n return monthInit;\n}\nfunction monthlyDayTypeProcess(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var expectedDays = ruleObject.day;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var dayCycleData = processWeekDays(expectedDays);\n var interval = ruleObject.interval;\n var state;\n var monthCollection = [];\n var weekCollection = [];\n var month;\n var index;\n var beginDate;\n var monthInit = 0;\n tempDate.setDate(1);\n if (ruleObject.month.length) {\n tempDate.setMonth(ruleObject.month[0] - 1);\n }\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n while (compareDates(tempDate, endDate)) {\n month = tempDate.getMonth();\n beginDate = new Date(tempDate.getTime());\n if (expectedDays.length > 1) {\n while (tempDate.getMonth() === month) {\n weekCollection.push(tempDate.getTime());\n if (DAYINDEX[tempDate.getDay()] === expectedDays[expectedDays.length - 1]) {\n monthCollection.push(weekCollection);\n weekCollection = [];\n }\n tempDate.setDate(tempDate.getDate()\n + dayCycleData[DAYINDEX[tempDate.getDay()]]);\n }\n }\n else {\n while (tempDate.getMonth() === month) {\n monthCollection.push([tempDate.getTime()]);\n tempDate.setDate(tempDate.getDate()\n + (7));\n }\n }\n index = ((ruleObject.setPosition < 1) ? (monthCollection.length + ruleObject.setPosition) : ruleObject.setPosition - 1);\n if (ruleObject.setPosition === null) {\n index = 0;\n var datas = [];\n for (var week = 0; week < monthCollection.length; week++) {\n for (var row = 0; row < monthCollection[week].length; row++) {\n datas.push(monthCollection[week][row]);\n }\n }\n monthCollection = [datas];\n }\n for (var week = 0; week < monthCollection[index].length; week++) {\n var dayData = monthCollection[index][week];\n var chDate = new Date(dayData);\n state = validateRules(chDate, ruleObject);\n if ((chDate >= startDate) && compareDates(chDate, endDate) && state) {\n excludeDateHandler(data, dayData);\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, interval, beginDate);\n monthCollection = [];\n weekCollection = [];\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n }\n}\nfunction compareDates(startDate, endDate) {\n return endDate ? (startDate <= endDate) : true;\n}\nfunction checkDayIndex(day, expectedDays) {\n return (expectedDays.indexOf(DAYINDEX[day]) === -1);\n}\nfunction getStartDateForWeek(startDate, expectedDays) {\n var tempDate = new Date(startDate.getTime());\n if (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === -1) {\n do {\n tempDate.setDate(tempDate.getDate() + 1);\n } while (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === -1);\n }\n return tempDate;\n}\nexport function extractObjectFromRule(rules) {\n var ruleObject = {\n freq: null,\n interval: 1,\n count: null,\n until: null,\n day: [],\n month: [],\n weekNo: [],\n monthDay: [],\n yearDay: [],\n setPosition: null,\n validRules: []\n };\n var rulesList = rules.split(';');\n var splitData = [];\n var temp;\n rulesList.forEach(function (data) {\n splitData = data.split('=');\n switch (splitData[0]) {\n case 'UNTIL':\n temp = splitData[1];\n ruleObject.until = getDateFromRecurrenceDateString(temp);\n break;\n case 'BYDAY':\n ruleObject.day = splitData[1].split(',');\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYMONTHDAY':\n ruleObject.monthDay = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYMONTH':\n ruleObject.month = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYYEARDAY':\n ruleObject.yearDay = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYWEEKNO':\n ruleObject.weekNo = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'INTERVAL':\n ruleObject.interval = parseInt(splitData[1], 10);\n break;\n case 'COUNT':\n ruleObject.count = parseInt(splitData[1], 10);\n break;\n case 'BYSETPOS':\n ruleObject.setPosition = parseInt(splitData[1], 10);\n break;\n case 'FREQ':\n ruleObject.freq = splitData[1];\n break;\n }\n });\n if ((ruleObject.freq === 'MONTHLY') && (ruleObject.monthDay.length === 0)) {\n var index = ruleObject.validRules.indexOf('BYDAY');\n ruleObject.validRules.splice(index, 1);\n }\n return ruleObject;\n}\nfunction validateProperDate(tempDate, data, startDate) {\n var maxDate = (tempDate.getMonth() === 1) ? (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n return (data <= maxDate) && (tempDate >= startDate);\n}\nfunction processWeekDays(expectedDays) {\n var dayCycle = {};\n expectedDays.forEach(function (element, index) {\n if (index === expectedDays.length - 1) {\n var startIndex = dayIndex.indexOf(element);\n var temp = startIndex;\n while (temp % 7 !== dayIndex.indexOf(expectedDays[0])) {\n temp++;\n }\n dayCycle[element] = temp - startIndex;\n }\n else {\n dayCycle[element] = dayIndex.indexOf(expectedDays[(index + 1)]) - dayIndex.indexOf(element);\n }\n });\n return dayCycle;\n}\nfunction checkMonth(tempDate, expectedMonth) {\n return (expectedMonth.indexOf(tempDate.getMonth() + 1) === -1);\n}\nfunction checkDate(tempDate, expectedDate) {\n var temp = expectedDate.slice(0);\n var data;\n var maxDate = (tempDate.getMonth() === 1) ?\n (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n data = temp.shift();\n while (data) {\n if (data < 0) {\n data = data + maxDate + 1;\n }\n if (data === tempDate.getDate()) {\n return false;\n }\n data = temp.shift();\n }\n return true;\n}\nfunction checkYear(tempDate, expectedyearDay) {\n var temp = expectedyearDay.slice(0);\n var data;\n var yearDay = getYearDay(tempDate);\n data = temp.shift();\n while (data) {\n if (data < 0) {\n data = data + getMaxYearDay(tempDate.getFullYear()) + 1;\n }\n if (data === yearDay) {\n return false;\n }\n data = temp.shift();\n }\n return true;\n}\nfunction getYearDay(currentDate) {\n if (!startDateCollection[currentDate.getFullYear()]) {\n startDateCollection[currentDate.getFullYear()] = new Date(currentDate.getFullYear(), 0, 0);\n }\n var tempDate = startDateCollection[currentDate.getFullYear()];\n var diff = currentDate.getTime() - tempDate.getTime();\n return Math.ceil(diff / MS_PER_DAY);\n}\nfunction validateMonthlyRuleType(ruleObject) {\n if (ruleObject.monthDay.length && !ruleObject.day.length) {\n return 'date';\n }\n else if (!ruleObject.monthDay.length && ruleObject.day.length) {\n return 'day';\n }\n return 'both';\n}\nfunction rotate(days) {\n var data = days.shift();\n days.push(data);\n}\nfunction setFirstDayOfWeek(day) {\n while (dayIndex[0] !== day) {\n rotate(dayIndex);\n }\n}\nfunction validateRules(tempDate, ruleObject) {\n var state = true;\n var expectedDays = ruleObject.day;\n var expectedMonth = ruleObject.month;\n var expectedDate = ruleObject.monthDay;\n var expectedyearDay = ruleObject.yearDay;\n ruleObject.validRules.forEach(function (rule) {\n switch (rule) {\n case 'BYDAY':\n if (checkDayIndex(tempDate.getDay(), expectedDays)) {\n state = false;\n }\n break;\n case 'BYMONTH':\n if (checkMonth(tempDate, expectedMonth)) {\n state = false;\n }\n break;\n case 'BYMONTHDAY':\n if (checkDate(tempDate, expectedDate)) {\n state = false;\n }\n break;\n case 'BYYEARDAY':\n if (checkYear(tempDate, expectedyearDay)) {\n state = false;\n }\n break;\n }\n });\n return state;\n}\nvar startDateCollection = {};\nvar propertyKeys = {\n FREQ: 'freq',\n BYDAY: 'day',\n BYSETPOS: 'setPos',\n UNTIL: 'until',\n INTERVAL: 'interval',\n COUNT: 'count',\n BYMONTH: 'month',\n BYWEEKNO: 'weekNo',\n BYMONTHDAY: 'monthDay',\n BYYEARDAY: 'yearDay'\n};\nvar tempExcludeDate;\nvar dayIndex = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nvar maxOccurrence;\nvar tempViewDate;\nvar monthDay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYINDEX = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nvar MAXOCCURRENCE = 43;\nvar LEAPYEAR = 366;\nvar NORMALYEAR = 365;\nvar WEEKPOS = ['first', 'second', 'third', 'fourth', 'last'];\nvar MONTHDATA = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];\nvar TIMES = 'summaryTimes';\nvar ON = 'summaryOn';\nvar REPEAT = 'summaryRepeat';\nvar EVERY = 'every';\nvar UNTIL = 'summaryUntil';\nvar DAYS = 'summaryDay';\nvar WEEKS = 'summaryWeek';\nvar MONTHS = 'summaryMonth';\nvar YEARS = 'summaryYear';\nvar DAYINDEXOBJECT = {\n SU: 'sun',\n MO: 'mon',\n TU: 'tue',\n WE: 'wed',\n TH: 'thu',\n FR: 'fri',\n SA: 'sat'\n};\nexport function getRecurrenceStringFromDate(date) {\n return [date.getUTCFullYear(),\n roundDateValues(date.getUTCMonth() + 1),\n roundDateValues(date.getUTCDate()),\n 'T',\n roundDateValues(date.getUTCHours()),\n roundDateValues(date.getUTCMinutes()),\n roundDateValues(date.getUTCSeconds()),\n 'Z'].join('');\n}\nfunction roundDateValues(date) {\n return ('0' + date).slice(-2);\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 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","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) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n * @default true\n */\n this.mode = 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 }\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 promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data)) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n _this.beforeSend();\n }\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\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 if (this.httpRequest.status === 200 || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\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.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 * @return {void}\n */\n Observer.prototype.on = function (property, handler, context) {\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 (!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 * @return {void}\n */\n Observer.prototype.off = function (property, handler) {\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 (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 } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\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 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-control', 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-control']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\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 };\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 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 /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { throwError, getValue, isNullOrUndefined, extend } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\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 IntlBase.formatRegex = /(^[ncpa]{1})([0-1]?[0-9]|20)?$/i;\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 },\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 }\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 };\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) {\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 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, isNumber) {\n var ret = {};\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.gregorian', 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] === '') {\n throwError('Given Format is not valid or Cldr data not loaded');\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);\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 if ((/(c|a)$/ig).test(options.format) && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n var dOptions = {};\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\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' && !parseOptions.isAccount) {\n actualPattern = '$ ' + actualPattern;\n }\n else if (parseOptions.type === 'currency' && parseOptions.isAccount) {\n actualPattern = '$ ' + actualPattern + ';($ ' + actualPattern + ')';\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})(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, setImmediate, 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 this.parentObj.finalUpdate = setImmediate(this.parentObj.dataBind.bind(this.parentObj));\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'];\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 (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 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 return curData.nlead + fValue + curData.nend;\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","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue } 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);\n var formatOptions = {};\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 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 = value.getMonth() + 1;\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 curval = value[timeSetter[char]]();\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += value.getFullYear();\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 ret += options.era[dec];\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 /**\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","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) {\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');\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);\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 inputObject.clearButton = createClearButton(args.element, inputObject.container);\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));\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) {\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');\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 = createElement('span', { className: CLASSNAMES.FLOATLINE });\n floatLabelElement = createElement('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 }\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);\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, container) {\n var button = createElement('span', { className: CLASSNAMES.CLEARICON });\n container.appendChild(button);\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);\n return button;\n }\n function wireClearBtnEvents(element, button) {\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) {\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = createElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = createElement(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);\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass);\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) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\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) {\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);\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 * 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) {\n var button = createElement('span', { className: iconClass });\n container.appendChild(button);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n button.addEventListener('mousedown', function () {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n this.classList.add('e-input-btn-ripple');\n }\n });\n button.addEventListener('mouseup', function () {\n var ele = this;\n setTimeout(function () { ele.classList.remove('e-input-btn-ripple'); }, 500);\n });\n return button;\n }\n Input.appendSpan = appendSpan;\n})(Input || (Input = {}));\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';\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);\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 = { 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 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 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 += '(.)?';\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 return _this.getDateObject(parsedDateParts);\n };\n };\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 value = this.internalNumberParser(flag ? val1 : val2, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\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 = 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 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, getUniqueID } 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';\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.needsID = false;\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);\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 this.localObserver.destroy();\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);\n if (this.enablePersistence) {\n this.setPersistData();\n }\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 component within the given HTML element\n * @param {string | HTMLElement} selector - Target element where component 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 this.isProtectedOnChange = false;\n if (this.enablePersistence) {\n this.mergePersistData();\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n if (this.needsID && !this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\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 window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n };\n Component.prototype.clearTemplate = function (templateName) {\n //No Code\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","var __extends = (this && this.__extends) || (function () {\n var 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 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.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 if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.touchStartEvent, this.initialize);\n }\n else {\n EventHandler.add(ele || this.element, Browser.touchStartEvent, this.initialize, this);\n }\n };\n Draggable.prototype.initialize = function (evt) {\n this.target = evt.currentTarget;\n if (this.preventDefault && !isUndefined(evt.changedTouches)) {\n evt.preventDefault();\n }\n if (this.abort) {\n if (!isNullOrUndefined(closest(evt.target, this.abort))) {\n return;\n }\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 EventHandler.add(document, Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDestroy, this);\n this.toggleEvents(true);\n document.body.classList.add('e-prevent-select');\n EventHandler.trigger(document.documentElement, Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\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) {\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({ top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px' });\n setStyleAttribute(dragTargetElement, {\n position: 'absolute', top: posValue.top, left: posValue.left\n });\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 document.body.classList.remove('e-prevent-select');\n }\n }\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.axis) {\n if (this.axis === 'x') {\n value.top = '0px';\n }\n else if (this.axis === 'y') {\n value.left = '0px';\n }\n }\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 eleObj.instance.intOver(evt, eleObj.target);\n /* tslint:disable no-any */\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\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 var dragValue = this.getProcessedPositionValue({ top: (top - iTop) + 'px', left: (left - iLeft) + 'px' });\n setStyleAttribute(helperElement, { left: dragValue.left, top: dragValue.top });\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\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 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.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 - this.relativeXPosition;\n var pageY = this.clone ? intCoord.pageY : intCoord.pageY - 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 __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 Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n var Draggable_1;\n}(Base));\nexport { Draggable };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 this.trigger('over', { event: event, target: element });\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 };\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 = 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 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 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 var KeyboardEvents_1;\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 = 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 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 }\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.endEvent = 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 var eSwipeArgs;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\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 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 else {\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 = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 10));\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 };\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 };\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 = 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 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, createElement, 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 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 = 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 }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left')) {\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 element = this.element;\n _super.prototype.destroy.call(this);\n removeClass([this.element], [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success',\n 'e-info', 'e-danger', 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round']);\n ['e-ripple', 'disabled'].forEach(function (value) {\n element.removeAttribute(value);\n });\n if (this.content) {\n element.innerHTML = element.innerHTML.replace(this.content, '');\n }\n span = element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\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 */\n Button.prototype.getPersistData = function () {\n return this.addOnPersist([]);\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 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 addClass([this.element], newProp.cssClass.split(' '));\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 Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, createElement, 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 if (this.element.id) {\n wrapper.setAttribute('id', this.element.id);\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 = createElement('div', {\n className: WRAPPER, attrs: { 'role': 'checkbox', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = createElement('label', { attrs: { for: this.element.id } });\n var frameSpan = 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 = 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 wrapper.classList.remove(oldProp.cssClass);\n }\n wrapper.classList.add(newProp.cssClass);\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('EJS-CHECKBOX', 'checkbox', element, WRAPPER);\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 = 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.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 };\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 };\n __decorate([\n Event()\n ], CheckBox.prototype, \"change\", 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 = 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 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, createElement, 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 };\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 if (this.element.id) {\n radioWrap.setAttribute('id', this.element.id);\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 = createElement('div', { className: WRAPPER });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = createElement('label', { attrs: { for: this.element.id } });\n wrapper.appendChild(this.element);\n wrapper.appendChild(label);\n if (isRippleEnabled) {\n rippleSpan = 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 addClass([label], newProp.cssClass.split(' '));\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('EJS-RADIOBUTTON', 'radio', element, WRAPPER);\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 = 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 __decorate([\n Event()\n ], RadioButton.prototype, \"change\", 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 var RadioButton_1;\n}(Component));\nexport { RadioButton };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, detach, attributes, prepend, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } 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';\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()\n ], ButtonProps.prototype, \"click\", void 0);\n return ButtonProps;\n}(ChildProperty));\nexport { ButtonProps };\n/**\n * Specifies Dialog open and close animation settings.\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';\n/**\n * Represents the Dialog component that displays information to the user, and used to get the user input.\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 };\n /**\n * Initialize the event handler\n * @private\n */\n Dialog.prototype.preRender = function () {\n var _this = this;\n this.headerContent = null;\n this.closeIconClickEventHandler = function (event) {\n _this.hide();\n _this.closedFrom = 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 };\n ;\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();\n this.closedFrom = 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 attributes(this.element, { role: 'dialog' });\n if (this.zIndex === 1000) {\n this.zIndex = getZindexPartial(this.element);\n }\n this.setTargetContent();\n if (this.header !== '') {\n this.setHeader();\n }\n if (this.showCloseIcon) {\n this.renderCloseIcon();\n }\n if (!isNullOrUndefined(this.content) && this.content !== '') {\n this.setContent();\n }\n else if (this.element.hasChildNodes()) {\n this.contentEle = this.element;\n }\n if (this.footerTemplate !== '') {\n this.setFooterTemplate();\n }\n if (!isNullOrUndefined(this.buttons[0].buttonModel) && this.footerTemplate === '') {\n this.setButton();\n }\n if (this.allowDragging && (!this.isModal) && (!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 () {\n _this.focusContent();\n _this.trigger('open');\n },\n close: function (event) {\n _this.unBindEvent(_this.element);\n if (_this.isModal) {\n _this.dlgContainer.style.display = 'none';\n }\n _this.trigger('close', _this.closedFrom);\n _this.closedFrom = {};\n if (!isNullOrUndefined(_this.storeActiveElement)) {\n _this.storeActiveElement.focus();\n }\n }\n });\n this.positionChange();\n this.setEnableRTL();\n addClass([this.element], DLG_HIDE);\n if (this.visible) {\n this.show();\n }\n else {\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n }\n }\n };\n Dialog.prototype.positionChange = function () {\n if (!this.isModal) {\n this.popupObj.setProperties({\n position: {\n X: this.position.X, Y: this.position.Y\n }\n });\n }\n else {\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\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 handle: handleContent,\n dragStart: function (event) {\n _this.trigger('dragStart', event);\n },\n dragStop: function (event) {\n _this.trigger('dragStop', event);\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 btn = createElement('button', { attrs: { type: 'button' } });\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 if (!this.btnObj[i].isPrimary) {\n this.btnObj[i].element.classList.add('e-flat');\n }\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 = createElement('div', { className: DLG_CONTENT, id: this.element.id + '_dialog-content' });\n typeof (this.content) === 'string' ? this.contentEle.innerHTML = this.content : this.contentEle.appendChild(this.content);\n !isNullOrUndefined(this.headerContent) ? this.element.insertBefore(this.contentEle, this.element.children[1]) :\n this.element.insertBefore(this.contentEle, this.element.children[0]);\n if (this.height === 'auto') {\n this.setMaxHeight();\n }\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)) ?\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 };\n Dialog.prototype.setTargetContent = function () {\n var isContent = this.element.innerHTML.replace(/\\s/g, '') !== '';\n if (this.element.children.length > 0 || isContent) {\n var contentDiv = document.createDocumentFragment();\n while (this.element.childNodes.length !== 0) {\n contentDiv.appendChild(this.element.childNodes[0]);\n }\n this.setProperties({ content: contentDiv }, true);\n }\n };\n Dialog.prototype.setHeader = function () {\n this.headerEle = createElement('div', { id: this.element.id + '_title', className: DLG_HEADER, innerHTML: this.header });\n attributes(this.element, { 'aria-labelledby': this.element.id + '_title' });\n this.createHeaderContent();\n this.headerContent.appendChild(this.headerEle);\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n };\n Dialog.prototype.setFooterTemplate = function () {\n this.ftrTemplateContent = createElement('div', {\n className: DLG_FOOTER_CONTENT,\n innerHTML: (this.footerTemplate !== '' ? this.footerTemplate : this.buttonContent.join(''))\n });\n this.element.appendChild(this.ftrTemplateContent);\n };\n Dialog.prototype.createHeaderContent = function () {\n if (isNullOrUndefined(this.headerContent)) {\n this.headerContent = createElement('div', { className: DLG_HEADER_CONTENT });\n }\n };\n Dialog.prototype.renderCloseIcon = function () {\n this.closeIcon = 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 = createElement('div', { className: DLG_CONTAINER });\n this.element.parentNode.insertBefore(this.dlgContainer, this.element);\n this.dlgContainer.appendChild(this.element);\n addClass([this.element], MODAL_DLG);\n this.dlgOverlay = 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 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 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 this.element.removeChild(this.contentEle);\n }\n break;\n case 'header':\n if (this.header === '') {\n detach(this.headerEle);\n }\n else {\n this.element.getElementsByClassName(DLG_HEADER).length > 0 ?\n this.element.getElementsByClassName(DLG_HEADER)[0].innerHTML = this.header\n : this.setHeader();\n }\n break;\n case 'footerTemplate':\n this.element.getElementsByClassName(DLG_FOOTER_CONTENT).length > 0 ?\n this.ftrTemplateContent.innerHTML = this.footerTemplate : this.setFooterTemplate();\n break;\n case 'showCloseIcon':\n if (this.element.getElementsByClassName(DLG_CLOSE_ICON).length > 0) {\n if (!this.showCloseIcon && this.header === '') {\n detach(this.headerContent);\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.element.setAttribute('aria-modal', this.isModal ? 'true' : 'false');\n if (this.isModal) {\n this.setIsModal();\n this.wireEvents();\n if (!isNullOrUndefined(this.targetEle)) {\n this.isModal ? this.targetEle.appendChild(this.dlgContainer) : this.targetEle.appendChild(this.element);\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 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 break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'animationSettings':\n this.show();\n break;\n case 'buttons':\n if (!isNullOrUndefined(this.buttons[0].buttonModel) && this.footerTemplate === '') {\n if (!isNullOrUndefined(this.ftrTemplateContent)) {\n detach(this.ftrTemplateContent);\n }\n this.setButton();\n }\n break;\n case 'allowDragging':\n if (this.allowDragging && (!this.isModal) && (!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 if (oldProp.position.X === this.position.X && oldProp.position.Y === this.position.Y) {\n break;\n }\n if (this.isModal) {\n this.dlgContainer.classList.remove('e-dlg-' + oldProp.position.X + '-' + oldProp.position.Y);\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\n }\n else {\n this.popupObj.position = this.position;\n break;\n }\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n }\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 * @private\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 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 }\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 * Specifies dialog offset x and y position changed dynamically or\n * change the header,footer height or width dynamically, reposition the dialog as per the new changes.\n * @return {void}\n */\n Dialog.prototype.refreshPosition = function () {\n this.popupObj.refreshPosition();\n };\n /**\n * To show the Dialog element on screen.\n * To enable the fullScreen Dialog pass 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(DLG_SHOW) || (!isNullOrUndefined(isFullScreen))) {\n if (!isNullOrUndefined(isFullScreen)) {\n this.fullScreen(isFullScreen);\n }\n var eventArgs = {\n cancel: false,\n container: this.isModal ? this.dlgContainer : this.element\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 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 this.animationSettings.effect === 'None' ? this.popupObj.show() : this.popupObj.show(openAnimation);\n this.dialogOpen = true;\n this.visible = true;\n }\n };\n /**\n * To hide the Dialog element on screen.\n * @return {void}\n */\n Dialog.prototype.hide = function () {\n var eventArgs = {\n cancel: false,\n container: this.isModal ? this.dlgContainer : this.element\n };\n this.trigger('beforeClose', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\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 this.visible = false;\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 && (!this.isModal) && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n }\n return args;\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('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 Dialog = __decorate([\n NotifyPropertyChanges\n ], Dialog);\n return Dialog;\n}(Component));\nexport { Dialog };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 } 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, createElement, 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 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 var _a, _b;\n };\n Tooltip.prototype.renderArrow = function () {\n this.setTipClass(this.position);\n var tip = createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(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 var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\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 if (typeof (this.content) === 'string') {\n tooltipContent.innerHTML = this.content;\n }\n else {\n while (tooltipContent.firstChild) {\n tooltipContent.removeChild(tooltipContent.firstChild);\n }\n tooltipContent.appendChild(this.content);\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 = 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 = 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(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);\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n this.popupObj.show(openAnimation);\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 /**\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 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) {\n this.tooltipEle.style.width = formatUnit(newProp.width);\n }\n break;\n case 'height':\n if (this.tooltipEle) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\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 var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n if (this.tooltipEle && target) {\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n this.reposition(target);\n }\n break;\n case 'tipPointerPosition':\n var trgt = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n if (this.tooltipEle && trgt) {\n this.reposition(trgt);\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","var __extends = (this && this.__extends) || (function () {\n var 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 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 { createElement, attributes, addClass, removeClass, setStyleAttribute, detach } 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 = '.';\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 this.angularTagName = null;\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = 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 this.element.parentNode.appendChild(input);\n this.element.parentNode.removeChild(this.element);\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 this.changeValue(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 customTag: this.angularTagName,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n enabled: this.enabled\n }\n });\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 = (createElement('input', { attrs: { type: 'hidden' } }));\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.element);\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);\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);\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.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, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\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, '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 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.keyDownHandler = function (event) {\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 if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n this.updateValue(this.instance.getNumberParser({ format: 'n' })(this.element.value));\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);\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 (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) {\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 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 = this.formatNumber();\n this.setElementValue(formatValue);\n if (!this.isPrevFocused) {\n this.element.setSelectionRange(0, formatValue.length);\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 };\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.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.changeValue(this.performAction(this.value, step, INCREMENT));\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.changeValue(this.performAction(this.value, step, DECREMENT));\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 '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, \"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 = 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 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 } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\nvar VALIDATE_EMAIL = new RegExp('^[A-Za-z0-9._%+-]{3,}@[a-zA-Z]{3,}([.]{1}[a-zA-Z]{2,5}' +\n '|[.]{1}[a-zA-Z]{2,4}[.]{1}[a-zA-Z]{2,4})$');\nvar VALIDATE_URL = new RegExp('^((ftp|http|https):\\/\\/)?www\\.([A-z]{2,})\\.([A-z]{2,})$');\nvar VALIDATE_DATE_ISO = new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$');\nvar VALIDATE_DIGITS = new RegExp('^[0-9]*$');\nvar VALIDATE_PHONE = new RegExp('^[+]?[0-9]{9,13}$');\nvar VALIDATE_CREDITCARD = new RegExp('^\\\\d{13,16}$');\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 /**\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 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 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 };\n /**\n * @private\n */\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n /**\n * @private\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\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', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits', 'pattern',\n '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 = ['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 this.getInputElement(name);\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 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.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 // 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] : 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 + '\"]');\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 // 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 VALIDATE_EMAIL.test(option.value);\n },\n url: function (option) {\n return VALIDATE_URL.test(option.value);\n },\n dateIso: function (option) {\n return VALIDATE_DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return VALIDATE_PHONE.test(option.value);\n },\n creditcard: function (option) {\n return VALIDATE_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 VALIDATE_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 // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\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('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 var FormValidator_1;\n}(Base));\nexport { FormValidator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, createElement } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nimport { regularExpressions, createMask, applyMask, wireEvents, unwireEvents, unstrippedValue, strippedValue } from '../base/index';\nimport { setMaskValue, setElementValue } from '../base/index';\nimport { maskInputBlurHandler } from '../base/mask-base';\nvar ROOT = 'e-widget e-control-wrapper e-mask';\nvar INPUT = 'e-input';\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 this.angularTagName = null;\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = 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 this.element.parentNode.appendChild(input);\n this.element.parentNode.removeChild(this.element);\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 this.isInitial = true;\n this.resetMaskedTextBox();\n this.isInitial = false;\n this.setMaskPlaceholder(true);\n this.setWidth(this.width);\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 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) {\n if (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 }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n this.inputObj = Input.createInput({\n element: this.element,\n customTag: this.angularTagName,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n enabled: this.enabled,\n placeholder: this.placeholder\n }\n });\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);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(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 '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, \"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 = 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 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 { createElement, 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 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 classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\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};\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 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.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 = createElement('div', { className: classNames.sliderContainer });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = 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.setHandler();\n this.createRangeBar();\n this.setOrientClass();\n this.hiddenInput = (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 this.setValue();\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 = (createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\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 if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString()\n });\n }\n else {\n var range = [[this.min.toString(), this.value[1].toString()],\n [this.value[0].toString(), this.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 = 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 = 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 = 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 = 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) {\n this.firstMaterialHandle.classList.add(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderTooltipStart);\n }\n }\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 var content_1 = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content_1;\n this.secondTooltipObj.content = content_1;\n }\n else {\n if (!isNullOrUndefined(this.handleVal1)) {\n var content_2 = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content_2;\n }\n }\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(this.handleVal2, formatInfo)\n .formatString + ' - ' + this.formatString(this.handleVal1, formatInfo).formatString) :\n (this.handleVal2.toString() + ' - ' + this.handleVal1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(this.handleVal1, formatInfo)\n .formatString + ' - ' + this.formatString(this.handleVal2, formatInfo).formatString) :\n (this.handleVal1.toString() + ' - ' + this.handleVal2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(this.handleVal1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(this.handleVal1, formatInfo).formatString : this.handleVal1.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(this.handleVal2, formatInfo).elementVal + ' - ' +\n this.formatString(this.handleVal1, formatInfo).elementVal) :\n (this.handleVal2.toString() + ' - ' + this.handleVal1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(this.handleVal1, formatInfo).elementVal + ' - ' +\n this.formatString(this.handleVal2, formatInfo).elementVal) :\n (this.handleVal1.toString() + ' - ' + this.handleVal2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(this.handleVal1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(this.handleVal1, formatInfo).elementVal : this.handleVal1.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 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 };\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 (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 };\n Slider.prototype.renderTooltip = function () {\n if (this.tooltip.showOn === 'Auto') {\n this.setProperties({ tooltip: { showOn: 'Hover' } }, true);\n }\n this.firstTooltipObj = new Tooltip({\n showTipPointer: false,\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: false,\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 = createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(createElement('span', { className: classNames.sliderButtonIcon }));\n this.firstBtn.tabIndex = -1;\n this.secondBtn = createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(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().style.transform = this.getHandle().style.transform.replace('scale(1.5)', 'scale(1)');\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 (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().style.transform.indexOf('scale(1.5') === -1) {\n this.getHandle().style.transform = 'scale(1.5)';\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.renderScale = function () {\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = 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 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 count = 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 tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0; i <= count; i++) {\n li = (createElement('li', {\n attrs: {\n class: classNames.tick, title: start.toString(), role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n var islargeTick = void 0;\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 && 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 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 {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\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 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 = 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 = this.formatTicksValue(li, 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.buttonClick = function (args) {\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 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.setValue = function () {\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 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 };\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 };\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 Slider.prototype.onResize = 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.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.renderScale();\n }\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 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 this.modifyZindex();\n }\n else {\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 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 proxy = this;\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') {\n this.handleVal1 = handleVal;\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\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 event.preventDefault();\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.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().style.transform = this.getHandle().style.transform.replace('scale(1.5)', 'scale(1)');\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 this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\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 (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\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.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.onResize.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 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.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 this.hiddenInput.focus();\n this.hiddenInput.blur();\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 }\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 this.createRangeBar();\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 };\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 if (!isNullOrUndefined(oldProp.value) && !isNullOrUndefined(newProp.value)) {\n if (oldProp.value.toString() !== newProp.value.toString()) {\n this.setValue();\n this.refreshTooltip();\n if (this.type === 'Range') {\n if (oldProp.value[0] === newProp.value[0]) {\n this.activeHandle = 2;\n }\n else {\n this.activeHandle = 1;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip();\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 '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.onResize();\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 }\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(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 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 = 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 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, createElement, detach, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex } from '@syncfusion/ej2-base';\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-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 CLEAR_ICON = 'e-file-remove-btn';\nvar REMOVE_ICON = 'e-file-delete-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 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 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 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 'showFileList':\n if (this.listParent) {\n this.listParent.style.display = this.showFileList ? 'block' : 'none';\n this.actionButtons.style.display = this.showFileList ? 'block' : 'none';\n }\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'template':\n case 'autoUpload':\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 if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n else {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.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.removeActionButtons();\n this.createFileList(this.filesData);\n this.renderActionButtons();\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: 'File failed to remove', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file'\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 if (!isNullOrUndefined(this.element.closest('form'))) {\n this.isForm = true;\n this.element.closest('form').setAttribute('enctype', 'multipart/form-data');\n this.element.closest('form').setAttribute('encoding', 'multipart/form-data');\n }\n }\n var ejInstance = getValue('ej2_instances', this.element);\n if (this.element.tagName === 'EJS-UPLOADER' || this.element.tagName === 'UPLOADERCOMPONENT') {\n var inputElement = 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 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.keyConfigs = {\n previous: 'shift+tab',\n enter: 'enter',\n next: 'tab'\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 /**\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 = createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\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 = createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = createElement('button', { className: UPLOAD_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.clearButton = 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.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.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.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = 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 = createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n this.uploadWrapper = 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: this.getFileNameOnly(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) {\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 }\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 this.upload(fileData);\n this.removeActionButtons();\n }\n else if (!this.actionButtons) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\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.element.closest('form'), '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 this.element.value = '';\n };\n Uploader.prototype.keyActionHandler = function (e) {\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 {\n this.removeFiles(e);\n this.browseButton.focus();\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\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.querySelector('span.e-icons');\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 this.upload(this.filesData);\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\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 }\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 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 fileData = this.filesData[index];\n this.remove(fileData);\n this.element.value = '';\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n if (customTemplate) {\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n detach(selectedElement);\n var index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (this.fileList.length === 0) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, custom) {\n var _this = this;\n var selectedFiles = file;\n var ajax = new XMLHttpRequest();\n var formData = new FormData();\n formData.append('_datas', selectedFiles.rawFile);\n ajax.addEventListener('load', function (e) { _this.removeCompleted(e, selectedFiles, custom); }, false);\n /* istanbul ignore next */\n ajax.addEventListener('error', function (e) { _this.removeFailed(e, selectedFiles, custom); }, false);\n ajax.open('POST', this.asyncSettings.removeUrl);\n ajax.send(formData);\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var args = {\n e: e, 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 args = {\n e: e, 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 };\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var fileData = [];\n var targetFiles;\n if (args.type === 'drop') {\n var files = args.dataTransfer.files;\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n }\n if (!this.multiple) {\n this.clearData();\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = targetFiles[i];\n var eventArgs_1 = {\n name: file.name,\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 eventArgs_1.status = eventArgs_1.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n eventArgs_1.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : eventArgs_1.status;\n if (eventArgs_1.validationMessages.minSize !== '' || eventArgs_1.validationMessages.maxSize !== '') {\n eventArgs_1.statusCode = '0';\n }\n fileData.push(eventArgs_1);\n }\n var eventArgs = {\n cancel: false,\n filesData: fileData,\n isModified: false,\n modifiedFilesData: [],\n progressInterval: ''\n };\n if (args.type === 'drop') {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n var dataFiles = this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n if (!this.isForm) {\n this.checkAutoUpload(dataFiles);\n }\n this.filesData = dataFiles;\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 Uploader.prototype.clearData = function () {\n if (!isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n }\n this.element.value = '';\n this.fileList = [];\n this.filesData = [];\n this.removeActionButtons();\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = 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.checkExtension = function (files) {\n var dropFiles = files;\n if (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 = createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n var length_2 = this.uploadTemplateFn(listItem).length;\n for (var i = 0; i < length_2; i++) {\n liElement.appendChild(this.uploadTemplateFn(listItem)[i]);\n }\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n }\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n this.listParent.style.display = this.showFileList ? 'block' : 'none';\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 = createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n var textContainer = createElement('span', { className: TEXT_CONTAINER });\n var textElement = createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = 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 = createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = createElement('span', { className: ' e-icons', attrs: { 'tabindex': '-1' } });\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(REMOVE_ICON);\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(REMOVE_ICON)) {\n iconElement.classList.add(CLEAR_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 liElements = [];\n var li;\n if (this.uploadWrapper) {\n liElements = this.uploadWrapper.querySelectorAll('.' + LIST_PARENT + '> li');\n for (var i = 0; i < liElements.length; i++) {\n if (liElements[i].getAttribute('data-file-name') === files.name) {\n li = liElements[i];\n }\n }\n }\n return li;\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = 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 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) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\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 }\n this.updateProgressbar(e, li);\n if (!isNullOrUndefined(li.querySelector('.e-icons'))) {\n li.querySelector('.e-icons').removeAttribute('title');\n EventHandler.remove(li.querySelector('.e-icons'), 'click', this.removeFiles);\n li.querySelector('.e-icons').classList.add(UPLOAD_INPROGRESS);\n }\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.uploadComplete = function (e, files, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status === 200) {\n var li = this.getLiElement(files);\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 if (!isNullOrUndefined(li.querySelector('.' + CLEAR_ICON))) {\n li.querySelector('.' + CLEAR_ICON).classList.add(REMOVE_ICON);\n li.querySelector('.' + CLEAR_ICON).setAttribute('title', this.localizedTexts('delete'));\n li.querySelector('.' + CLEAR_ICON).classList.remove(CLEAR_ICON);\n }\n if (!isNullOrUndefined(li.querySelector('.e-icons'))) {\n EventHandler.add(li.querySelector('.e-icons'), 'click', this.removeFiles, this);\n li.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n li.querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('uploadSuccessMessage'), '2') };\n this.trigger('success', args);\n this.uploadedFilesData.push(files);\n this.trigger('change', { files: this.uploadedFilesData });\n this.checkActionButtonStatus();\n }\n else {\n this.uploadFailed(e, files);\n }\n };\n Uploader.prototype.uploadFailed = function (e, files) {\n var li = this.getLiElement(files);\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('uploadFailedMessage'), '0') };\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_FAILED);\n this.removeProgressbar(li, 'failure');\n li.querySelector('.' + CLEAR_ICON).setAttribute('title', this.localizedTexts('remove'));\n EventHandler.add(li.querySelector('.e-icons'), 'click', this.removeFiles, this);\n li.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n }\n this.trigger('failure', args);\n this.checkActionButtonStatus();\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 detach(li.querySelector('.' + PROGRESS_WRAPPER));\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 /**\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 / 1000;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1000;\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_1 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_1 === 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[] } files - specifies the files data for upload.\n * @returns void\n */\n Uploader.prototype.upload = 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 _loop_1 = function (i) {\n var ajax = new XMLHttpRequest();\n var formData = new FormData();\n if (selectedFiles[i].statusCode === '1') {\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [{}],\n cancel: false\n };\n this_1.trigger('uploading', eventArgs);\n if (eventArgs.cancel) {\n return { value: void 0 };\n }\n var name_2 = this_1.element.getAttribute('name');\n formData.append(name_2, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (eventArgs.customFormData.length > 0) {\n var datas = eventArgs.customFormData;\n for (var i_1 = 0; i_1 < eventArgs.customFormData.length; i_1++) {\n var customData = eventArgs.customFormData[i_1];\n // tslint:disable-next-line\n formData.append(Object.keys(customData)[0], Object.values(customData)[0]);\n }\n }\n ajax.addEventListener('load', function (e) { _this.uploadComplete(e, selectedFiles[i], custom); }, false);\n /* istanbul ignore next */\n ajax.addEventListener('error', function (e) { _this.uploadFailed(e, selectedFiles[i]); }, false);\n ajax.upload.addEventListener('progress', function (e) { _this.uploadInProgress(e, selectedFiles[i], custom); }, false);\n ajax.open('POST', this_1.asyncSettings.saveUrl);\n ajax.send(formData);\n }\n };\n var this_1 = this;\n for (var i = 0; i < selectedFiles.length; i++) {\n var state_1 = _loop_1(i);\n if (typeof state_1 === \"object\")\n return state_1.value;\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 * @returns void\n */\n Uploader.prototype.remove = function (fileData, customTemplate) {\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 var eventArgs = {\n cancel: false,\n filesData: removeFiles\n };\n this.trigger('removing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\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' && validUrl) {\n this.removeUploadedFile(files, customTemplate);\n }\n else {\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 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 Uploader.prototype.getFilesData = function () {\n return this.filesData;\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", 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 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 Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\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 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 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 * 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 groupedArray;\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 (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 (!this.fnOperators.isnull(res)) {\n param1 = res;\n }\n }\n return param1;\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') {\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') {\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 };\n return DataUtil;\n}());\nexport { DataUtil };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 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 < changes.deletedRecords.length; 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)) {\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_1 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n for (var _i = 0, keys_2 = keys_1; _i < keys_2.length; _i++) {\n var prop = keys_2[_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_3 = keys; _a < keys_3.length; _a++) {\n var prop = keys_3[_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.expand) {\n req[options.expand] = query.expands;\n }\n req[options.select] = 'onSelect' in singles ?\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.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.addedRecords) {\n changes.addedRecords = data.addedRecords;\n return changes;\n }\n if (data.d) {\n data = data.d;\n }\n var args = {};\n if ('count' in data) {\n args.count = data.count;\n }\n args.result = data.result ? data.result : data;\n this.getAggregateResult(pvt, data, args, groupDs);\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) {\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({\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 /**\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) {\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 /**\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) {\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 /**\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) {\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 /**\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) {\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 pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs);\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 if (options.params.length) {\n req.params = {};\n }\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 req.params[tmp.key] = req[tmp.key];\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() {\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 });\n _this.getModuleName = getValue('getModulename', _this);\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 = '\\'' + 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 /**\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);\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 /**\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)\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 return {\n type: 'DELETE',\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + '(' + value + ')'\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) {\n return {\n type: 'PUT',\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + '(' + value[keyField] + ')',\n data: JSON.stringify(value),\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) {\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);\n req += this.generateUpdateRequest(changes.changedRecords, args);\n req += this.generateDeleteRequest(changes.deletedRecords, args);\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) {\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);\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) {\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);\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) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'PUT ',\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);\n return req;\n };\n ODataAdaptor.getField = function (prop) {\n return prop.replace(/\\./g, '/');\n };\n ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat) {\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 req += e.url + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n req += 'Accept: ' + this.options.accept + '\\n';\n req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n req += this.options.batchChangeSetContentType + '\\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 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() {\n var _this = _super !== null && _super.apply(this, arguments) || 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 });\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 * 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 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 = data.value;\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args);\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);\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 setValue('insert', UrlAdaptor.prototype.insert, _this);\n setValue('update', UrlAdaptor.prototype.update, _this);\n setValue('remove', UrlAdaptor.prototype.remove, _this);\n return _this;\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 var i;\n for (i = 0; i < changes.addedRecords.length; i++) {\n JsonAdaptor.prototype.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n JsonAdaptor.prototype.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < changes.deletedRecords.length; i++) {\n JsonAdaptor.prototype.remove(dm, e.key, changes.deletedRecords[i]);\n }\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) {\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 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) {\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);\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, [_this.adaptor.processResponse(data, _this, null, request.httpRequest, request, changes)]);\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) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.update(this, keyField, value, tableName, query);\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(_this, [{ record: record, dataManager: _this }]);\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 = 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 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 } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, createElement, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, KeyboardEvents } 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.\nvar 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 listItemText: 'e-list-text',\n grpListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\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 checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left'\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 var _this = _super.call(this, options, element) || this;\n _this.curDSLevel = [];\n _this.curViewDS = [];\n _this.keyConfigs = {\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n back: 'backspace',\n home: 'home',\n select: 'enter',\n end: 'end',\n tab: 'tab',\n space: 'space'\n };\n _this.animateOptions = {};\n _this.isNestedList = false;\n _this.currentLiElements = [];\n _this.resetList = false;\n _this.selectedData = [];\n _this.selectedId = [];\n _this.aniObj = new Animation(_this.animateOptions);\n return _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 this.reRender();\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false);\n }\n break;\n case 'showHeader':\n {\n this.header(this.headerTitle, false);\n }\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n this.setCheckbox();\n break;\n case 'dataSource':\n this.reRender();\n break;\n case 'sortOrder':\n case 'showIcon':\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\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(' '));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\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 = createElement('div', { className: classNames.header });\n var innerHeaderEle = createElement('span', { className: classNames.headerText, innerHTML: this.headerTitle });\n var textEle = createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = 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 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 (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 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 };\n ListView.prototype.renderCheckbox = function (args) {\n if (this.showCheckBox && this.isValidLI(args.item) && !this.isNestedList) {\n if (args.item.classList.contains(classNames.hasChild)) {\n this.checkboxRevert();\n }\n else {\n var checkboxElement = void 0;\n var fieldData = void 0;\n checkboxElement = createCheckBox(false, { checked: false, enableRtl: this.enableRtl });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add('e-checklist');\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string') {\n fieldData = getFieldValues(args.curData, this.listBaseOption.fields);\n if (!this.resetList && fieldData[this.listBaseOption.fields.isChecked]) {\n this.checkItem(args, checkboxElement);\n }\n else if (this.selectedData.indexOf(fieldData[this.listBaseOption.fields.text]) !== -1 &&\n this.selectedId.indexOf(fieldData[this.listBaseOption.fields.id]) !== -1) {\n this.checkItem(args, checkboxElement);\n }\n }\n else if (typeof this.dataSource[0] === 'string' && this.selectedData.indexOf(args.text) !== -1) {\n this.checkItem(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.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n }\n }\n };\n ListView.prototype.checkItem = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n ListView.prototype.checkboxRevert = function () {\n this.isNestedList = true;\n this.setProperties({ 'showCheckBox': false }, true);\n for (var i = 0; i < this.currentLiElements.length; i++) {\n if (this.currentLiElements[i].querySelector('.' + classNames.checkboxWrapper)) {\n this.currentLiElements[i].firstElementChild.classList.remove(classNames.checkbox);\n this.removeElement(this.currentLiElements[i].firstElementChild.firstElementChild);\n }\n }\n };\n ListView.prototype.setCheckbox = function () {\n var _this = this;\n if (this.showCheckBox && !this.curUL.querySelector('.' + classNames.hasChild)) {\n var args_1 = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n this.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 });\n }\n else {\n this.liCollection.forEach(function (element) {\n element.firstElementChild.classList.remove(classNames.checkbox);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n });\n }\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 this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n this.setCheckboxLI(li, e);\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 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 ListView.prototype.arrowKeyHandler = 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 };\n ListView.prototype.enterKeyHandler = function (e) {\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 this.setSelectLI(li, e);\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n if (this.enable && this.showCheckBox) {\n var li = this.curUL.querySelector('.' + classNames.focused);\n this.setCheckboxLI(li, e);\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n e.preventDefault();\n switch (e.action) {\n case 'home':\n this.homeKeyHandler(e);\n break;\n case 'end':\n this.homeKeyHandler(e, true);\n break;\n case 'moveDown':\n this.arrowKeyHandler(e);\n break;\n case 'moveUp':\n this.arrowKeyHandler(e, true);\n break;\n case 'select':\n this.enterKeyHandler(e);\n break;\n case 'back':\n this.back();\n break;\n case 'tab':\n this.tabFocus(e);\n break;\n case 'space':\n this.spaceKeyHandler(e);\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right') {\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n var activeElement = this.curUL.querySelector('[aria-selected = true]');\n if (focusedElement && !this.showCheckBox) {\n focusedElement.classList.remove(classNames.focused);\n if (activeElement) {\n activeElement.classList.add(classNames.selected);\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\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 EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n this.keyboardModule.destroy();\n this.touchModule.destroy();\n };\n ListView.prototype.tabFocus = function (e) {\n var selectedList = this.curUL.querySelector('.' + classNames.selected);\n if ((!selectedList && this.curUL) || this.showCheckBox) {\n var li = 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 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 () {\n var selectedLI = this.element.querySelectorAll('[aria-selected = true]');\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n ele.removeAttribute('aria-selected');\n if (ele.className !== '') {\n ele.classList.remove(classNames.selected);\n }\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.grpListItem)\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 }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\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) && typeof this.dataSource[0] === 'string') {\n selectedItem = { item: li, text: li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem = { item: li, text: 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.setSelectLI = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n this.removeSelect();\n li.classList.add(classNames.selected);\n li.setAttribute('aria-selected', 'true');\n this.removeHover();\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 ListView.prototype.hoverSiblingLI = function (prev) {\n var lastLi = this.curUL.querySelector('.' + classNames.hover);\n var siblingLI;\n if (!lastLi) {\n lastLi = this.curUL.querySelector('.' + classNames.selected);\n }\n if (lastLi) {\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), lastLi, prev);\n }\n else {\n if (prev) {\n var curLIs = this.curUL.querySelectorAll('.' + classNames.listItem);\n siblingLI = curLIs[curLIs.length - 1];\n }\n else {\n siblingLI = this.curUL.querySelector('.' + classNames.listItem);\n }\n }\n this.setHoverLI(siblingLI);\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 this.curDSJSON = this.findItemFromDS(ds, { id: key });\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 fields = this.getElementUID(li);\n var curDS = this.dataSource;\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.id || fields.text) &&\n (!fields.id || fieldData[_this.fields.id] === fields.id) &&\n (!fields.text || fieldData[_this.fields.text] === fields.text)) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields.id) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields.id + '\"]');\n if (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 this.curViewDS = ListBase.groupDataSource(dataSource, this.fields, this.sortOrder);\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.curUL = this.headerEle = 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.ulElement = this.curUL = ListBase.createList(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 ele = ListBase.createListFromJson(this.curViewDS, 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 var fieldData = getFieldValues(this.getSelectedItems().data, this.listBaseOption.fields);\n this.header((fieldData[this.listBaseOption.fields.text]), true);\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function () {\n this.setViewDataSource();\n this.createList();\n this.contentContainer = createElement('div', { className: classNames.content });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n 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, this.cssClass, classNames.disable, 'e-rtl',\n 'e-has-header'];\n removeClass([this.element], classAr);\n this.rippleFn();\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.removeSelect();\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} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (obj) {\n if (!isNullOrUndefined(obj)) {\n if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(obj));\n }\n else {\n this.setSelectLI(this.getLiFromObjOrElement(obj));\n }\n }\n };\n ListView.prototype.getLiFromObjOrElement = function (obj) {\n var li;\n if (!isNullOrUndefined(obj)) {\n if (typeof this.dataSource[0] === 'string') {\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 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 (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() === resultJSON.text) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\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 /**\n * It is used to get the currently\n * {@link http://ej2.syncfusion.com/documentation/list-view/api-selectedItem.html?lang=typescript selected}\n * item details from the list items.\n */\n ListView.prototype.getSelectedItems = function () {\n this.selectedId = [];\n if (this.showCheckBox) {\n var liCollection = this.element.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof this.dataSource[0] === 'string') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var fieldData = getFieldValues(this.getItemData(liCollection[i]), this.listBaseOption.fields);\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n liDataCollection.push(this.getItemData(liCollection[i]));\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n }\n if (typeof this.dataSource[0] === 'string') {\n return { item: liCollection, data: this.dataSource, 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 this.dataSource[0] === 'string') {\n return (!isNullOrUndefined(liElement)) ? {\n item: liElement, data: this.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 { text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement) };\n }\n }\n }\n };\n /**\n * It is used to find out an item details from the current list.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (fields) {\n return this.findItemFromDS(this.dataSource, fields);\n };\n /**\n * A function that used to enable the disabled list items based on passed element.\n * @param {Fields|HTMLElement} 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 };\n /**\n * It is used to disable the list items based on passed element.\n * @param {Fields|HTMLElement} 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 };\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} 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 };\n /**\n * It is used to hide an item from the ListView.\n * @param {Fields|HTMLElement} 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 };\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 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 this.dataSource = this.localData = ds.concat(data);\n this.setViewDataSource();\n }\n else {\n ds[this.fields.child] = child;\n }\n this.resetCurrentList();\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} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (obj) {\n this.removeItemFromList(obj, true);\n };\n ListView.prototype.removeItemFromList = function (obj, resetList) {\n var _this = this;\n var currentlySelectedItems = [];\n var selectedElements = [];\n var valid = false;\n if (typeof this.dataSource[0] === 'string') {\n if (typeof obj === 'object') {\n var liCollection_1 = [];\n var idx_1 = 0;\n this.liCollection.forEach(function (element) {\n if (element === obj) {\n valid = true;\n _this.removeElement(element);\n _this.dataSource.splice(idx_1, 1);\n _this.localData = _this.dataSource;\n }\n else {\n liCollection_1.push(element);\n }\n idx_1++;\n });\n this.liCollection = liCollection_1;\n }\n else if (typeof obj === 'string') {\n var liCollection_2 = [];\n var idx_2 = 0;\n var ds_1 = [];\n this.liCollection.forEach(function (element) {\n if (element.innerText.trim() === obj) {\n valid = true;\n _this.removeElement(element);\n }\n else {\n liCollection_2.push(element);\n ds_1.push(_this.dataSource[idx_2]);\n }\n idx_2++;\n });\n this.localData = this.curViewDS = this.dataSource = ds_1;\n this.liCollection = liCollection_2;\n }\n var values = this.getSelectedItems();\n this.selectedData = (!isNullOrUndefined(values)) ? values.text : undefined;\n selectedElements = undefined;\n if (resetList && valid) {\n this.resetList = true;\n this.resetCurrentList();\n if (!this.showCheckBox && this.selectedData && this.selectedData.length) {\n this.removeSelect();\n var index = this.dataSource.lastIndexOf(this.selectedData);\n this.liCollection[index].classList.add(classNames.selected);\n this.liCollection[index].setAttribute('aria-selected', 'true');\n }\n this.resetList = false;\n }\n }\n else {\n selectedElements = (!isNullOrUndefined(this.getSelectedItems())) ?\n this.getSelectedItems().data : undefined;\n var fields_1 = this.getElementUID(obj);\n var curAr_1;\n var curDS = this.findItemFromDS(this.dataSource, fields_1, true);\n if (curDS && obj) {\n var idx_3;\n curDS.some(function (data, index, arr) {\n var fieldData = getFieldValues(data, _this.listBaseOption.fields);\n if ((fields_1.id || fields_1.text) &&\n (!fields_1.id || fieldData[_this.fields.id] === fields_1.id) &&\n (!fields_1.text || fieldData[_this.fields.text] === fields_1.text)) {\n curAr_1 = arr;\n idx_3 = index;\n return true;\n }\n return false;\n });\n this.removeElement(this.getLiFromObjOrElement(curAr_1[idx_3]));\n curAr_1.splice(idx_3, 1);\n this.curViewDS = curAr_1;\n }\n var values = this.getSelectedItems();\n this.selectedData = (!isNullOrUndefined(values)) ? values.text : undefined;\n if (resetList && curAr_1) {\n this.resetList = true;\n this.resetCurrentList();\n if (!this.showCheckBox && !isNullOrUndefined(values)) {\n this.selectItem(values.item);\n }\n this.resetList = false;\n }\n }\n };\n /**\n * A function that removes multiple item from list view based on given input.\n * @param {Fields[] | HTMLElement[]} 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 (obj.length) {\n for (var i = 0; i < obj.length; i++) {\n (i === obj.length - 1) ? this.removeItemFromList(obj[i], true) : this.removeItemFromList(obj[i], false);\n }\n }\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\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({})\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, \"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","var __extends = (this && this.__extends) || (function () {\n var 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 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 { Event, cldrData, L10n, Component, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, setValue, 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 INPUTCONTAINER = 'e-input-group';\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 function createListItems(min, max, globalize, timeFormat, step) {\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(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 var ej2Instance = getValue('ej2_instances', this.element);\n this.angularTag = null;\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n var inputTag = createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputTag.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputTag.innerHTML = this.element.innerHTML;\n }\n this.element.parentNode.appendChild(inputTag);\n this.element.parentNode.removeChild(this.element);\n this.inputElement = inputTag;\n setValue('ej2_instances', ej2Instance, this.inputElement);\n }\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setValue(this.getFormattedValue(this.value));\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.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 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 (this.element.getAttribute('id')) {\n this.inputElement.id = this.element.getAttribute('id');\n }\n else {\n //for angular case\n this.inputElement.id = getUniqueID('ej2_timepicker');\n attributes(this.element, { 'id': this.inputElement.id });\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.inputElement.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 customTag: this.angularTag,\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 });\n this.inputWrapper.container.style.width = formatUnit(this.width);\n attributes(this.inputElement, {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.inputElement.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\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 this.inputWrapper.container.parentElement.appendChild(this.cloneElement);\n remove(this.inputWrapper.container);\n _super.prototype.destroy.call(this);\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 };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.inputElement.id + '_popup', 'style': 'visibility:hidden' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.classList.add(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.setWidth(),\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.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if (this.validateState(value)) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\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 () {\n var width = formatUnit(this.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 this.initValue = this.valueWithMinutes = null;\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.getDateObject(time);\n }\n }\n this.updateInput(true, this.initValue);\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 () {\n if (this.isPopupOpen()) {\n this.closePopup();\n }\n else {\n if (!Browser.isDevice) {\n this.inputElement.focus();\n }\n this.show();\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 break;\n case 'open':\n this.show();\n break;\n case 'escape':\n Input.setValue(this.objToString(this.value), this.inputElement, this.floatLabelType, false);\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 if (!Browser.isDevice) {\n addClass([this.inputWrapper.container], FOCUS);\n }\n }\n };\n TimePicker.prototype.closePopup = function (delay) {\n if (this.isPopupOpen() && this.popupObj) {\n var args = {\n popup: this.popupObj\n };\n this.trigger('close', args);\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, FOCUS]);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n this.initValue = this.valueWithMinutes = null;\n this.setProperties({ value: null }, true);\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.getDateObject(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, false);\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], 'click', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.focusOut, this);\n EventHandler.add(this.inputElement, 'focus', this.focusIn, this);\n this.bindClearEvent();\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 EventHandler.add(this.inputElement, 'click', this.mouseDownHandler, this);\n }\n };\n TimePicker.prototype.unBindEvents = function () {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n EventHandler.remove(this.inputElement, 'blur', this.focusOut);\n EventHandler.remove(this.inputElement, 'focus', this.focusIn);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler, this);\n }\n };\n TimePicker.prototype.clearHandler = function (e) {\n e.preventDefault();\n this.clear(e);\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.getSeparator = function () {\n var result = '';\n var formats = this.cldrTimeFormat().split(' ')[this.getTextFormat()];\n if (isNullOrUndefined(formats)) {\n if (this.cldrTimeFormat().indexOf('a') === 0) {\n formats = 'a ' + this.cldrTimeFormat().split('a')[1];\n }\n else if (this.cldrTimeFormat().indexOf('a') === this.cldrTimeFormat().length - 1) {\n formats = this.cldrTimeFormat().split('a')[0] + ' a';\n }\n }\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n for (var i = 0; i < formats.length; i++) {\n if (!regex.test(formats.charAt(i))) {\n result = formats.charAt(i);\n }\n }\n return result;\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, false);\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 Input.setValue(val.trim().length > 0 ? val : '', this.inputElement, this.floatLabelType, false);\n }\n else {\n Input.setValue(time, this.inputElement, this.floatLabelType, false);\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 (event) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n e: event,\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: isNullOrUndefined(event) ? false : true\n };\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 this.setProperties({ value: date }, true);\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 = 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(listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.inputElement.id + '_options' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n if (!Browser.isDevice) {\n event.preventDefault();\n }\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.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 /**\n * Focuses out the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusOut = function () {\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();\n this.inputElement.blur();\n this.trigger('blur');\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, null);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n /**\n * Focused the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusIn = function () {\n this.inputElement.focus();\n if (!this.readonly && !Browser.isDevice) {\n this.selectInputText();\n }\n this.trigger('focus');\n };\n /**\n * Hides the TimePicker popup.\n * @returns void\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100);\n };\n /**\n * Opens the popup to show the list items.\n * @returns void\n */\n TimePicker.prototype.show = function () {\n if (!this.isPopupOpen() && this.enabled && !this.readonly && !this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n this.popupCreation();\n var args = {\n popup: this.popupObj\n };\n this.trigger('open', args);\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n this.popupObj.refreshPosition(this.inputElement);\n this.popupObj.show(new Animation(openAnimation));\n addClass([this.inputWrapper.container], [ICONANIMATION, FOCUS]);\n this.setActiveDescendant();\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n EventHandler.add(document, 'mousedown touchstart', this.documentClickHandler, this);\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 addClass([this.inputWrapper.container], [newProp.cssClass]);\n if (this.popupWrapper) {\n addClass([this.popupWrapper], [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 '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 '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': formatUnit(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 newProp.value = this.checkDateValue(new Date('' + newProp.value));\n this.initValue = newProp.value;\n this.setProperties({ value: isNullOrUndefined(this.checkValue(newProp.value)) ? null : newProp.value }, true);\n this.checkValueChange(null, false);\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(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 });\n }\n }\n }\n };\n __decorate([\n Property('100%')\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(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(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 = 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 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, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { createElement, removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\n//class constant defination.\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 RIPPLESTYLE = 'e-ripple-style';\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 OTHERMONTH = 'e-other-month';\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 dayMilliSeconds = 86400000;\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 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 };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @returns void\n * @private\n */\n Calendar.prototype.render = function () {\n this.globalize = new Internationalization(this.locale);\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 = 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.processDate();\n this.header();\n this.content();\n this.wireEvents();\n };\n Calendar.prototype.processDate = function () {\n this.validateDate();\n this.minMaxUpdate();\n };\n Calendar.prototype.validateDate = function () {\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true); // persist the value propeerty.\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(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.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 (!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 if (this.min <= this.max && this.value && this.value <= this.max && this.value >= this.min) {\n this.currentDate = new Date('' + this.value);\n }\n else {\n if (this.min <= this.max && !this.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 Calendar.prototype.header = 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 = createElement('div', { className: HEADER });\n var iconContainer = createElement('div', { className: ICONCONTAINER });\n this.previousIcon = 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 = 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 = createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(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 Calendar.prototype.content = function () {\n this.previousDate = this.value;\n this.contentElement = createElement('div', { className: CONTENT });\n this.table = 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.contentHdr();\n this.contentBody();\n if (this.showTodayButton) {\n this.contentFooter();\n }\n };\n Calendar.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 Calendar.prototype.contentHdr = 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 = createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '';\n addClass([this.element], '' + WEEKNUMBER);\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 Calendar.prototype.contentBody = 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 Calendar.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n };\n Calendar.prototype.contentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(this.min.toDateString());\n var maximum = new Date(this.max.toDateString());\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 = createElement('button');\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT]);\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 = 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 Calendar.prototype.wireEvents = function () {\n EventHandler.add(this.headerTitleElement, 'click', this.navTitle, 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 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 }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0);\n }\n this.setProperties({ value: tempValue }, true);\n this.navigateTo('Month', new Date('' + this.value));\n this.effect = '';\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n var view = this.getViewNumber(this.currentView());\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\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();\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));\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));\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n this.renderMonths(e);\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate);\n detach(this.tableBodyElement);\n this.renderMonths(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 Calendar.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.isMinMaxRange(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.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\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 Calendar.prototype.preRender = function () {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n ;\n Calendar.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 Calendar.prototype.renderMonths = function (e) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles = this.renderDays(this.currentDate, e);\n this.contentHdr();\n this.renderTemplate(tdEles, numCells, MONTH, e);\n };\n Calendar.prototype.renderDays = function (currentDate, e) {\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.setTime(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = createElement('td', { className: CELL });\n var weekAnchor = 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 = 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.renderDaycellArg = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var args = this.renderDaycellArg;\n this.renderDayCellEvent(args);\n if (args.isDisabled) {\n if (this.value && +this.value === +args.date) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDaycellArg.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.renderDaycellArg.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 (!otherMnthBool && !disabledCls && this.getDateVal(localDate)) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (currentDate.getDate() === localDate.getDate() && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n else {\n if (currentDate >= this.max && parseInt(tdEle.id, 0) === +this.max && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n if (currentDate <= this.min && parseInt(tdEle.id, 0) === +this.min && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\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.renderDaycellArg.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n Calendar.prototype.renderYears = function (e) {\n this.removeTheadEle();\n var numCells = 4;\n var days;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(this.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 = createElement('span');\n var localMonth = (this.value && (this.value).getMonth() === localDate.getMonth());\n var select = (this.value && (this.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);\n };\n Calendar.prototype.renderDecades = function (e) {\n this.removeTheadEle();\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 = 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(this.value) && localDate.getFullYear() === (this.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);\n };\n Calendar.prototype.dayCell = function (localDate) {\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime' };\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 createElement('td', attrs);\n };\n Calendar.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 Calendar.prototype.lastDay = function (date) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\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 ;\n Calendar.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n Calendar.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 Calendar.prototype.removeTheadEle = 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 Calendar.prototype.renderTemplate = function (elements, numCells, classNm, e) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = 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 = numCells;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / numCells; ++dayCell) {\n trEle = 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 && 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 + numCells;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n this.iconHandler();\n this.changedArgs = { value: this.value };\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActivedescendant();\n this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n e.preventDefault();\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.value = this.getIdValue(e, null);\n this.contentClick(e, 0, null);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null);\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);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n Calendar.prototype.contentClick = function (e, view, ele) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, ele);\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 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 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 this.currentDate.setFullYear(d.getFullYear());\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n Calendar.prototype.switchView = function (view, e) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e);\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 Calendar.prototype.getModuleName = function () {\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 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 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 this.setProperties({ value: new Date('' + newProp.value) }, true);\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.validateDate();\n this.minMaxUpdate();\n this.setvalue();\n break;\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 'start':\n case 'weekNumber':\n case 'firstDayOfWeek':\n this.contentHdr();\n this.contentBody();\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 this.contentBody();\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n this.todayElement.remove();\n this.footer.remove();\n this.todayElement = this.footer = undefined;\n this.contentFooter();\n }\n else {\n if (this.todayElement.classList.contains('e-disabled') && (this.footer) && (this.todayElement)) {\n removeClass([this.todayElement], DISABLED);\n }\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.contentHdr();\n this.contentBody();\n this.l10.setLocale(this.locale);\n this.updateFooter();\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.contentFooter();\n }\n else {\n this.todayElement.remove();\n this.footer.remove();\n this.todayElement = this.footer = undefined;\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n Calendar.prototype.setvalue = function () {\n this.tableBodyElement.remove();\n this.setProperties({ start: this.currentView() }, true);\n this.contentBody();\n };\n Calendar.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM' });\n break;\n case 'months':\n this.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', skeleton: 'y' });\n }\n };\n Calendar.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 title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full' });\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 Calendar.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 Calendar.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.navTitle);\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 }\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n Calendar.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n Calendar.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 Calendar.prototype.navTitle = function (e) {\n e.preventDefault();\n this.title(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n Calendar.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 Calendar.prototype.navigatePrevious = function (e) {\n e.preventDefault();\n this.previous();\n this.triggerNavigate(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n Calendar.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 Calendar.prototype.navigateNext = function (eve) {\n eve.preventDefault();\n this.next();\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 Calendar.prototype.navigateTo = function (view, date) {\n this.minMaxUpdate();\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 this.switchView(this.getViewNumber(view));\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n */\n Calendar.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 Calendar.prototype.getDateVal = function (date) {\n return (!isNullOrUndefined(this.value) && date.getDate() === (this.value).getDate()\n && date.getMonth() === (this.value).getMonth() && date.getFullYear() === (this.value).getFullYear());\n };\n Calendar.prototype.getCultureObjects = function (ld, c) {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.short', ld);\n };\n ;\n Calendar.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 Calendar.prototype.setTime = function (date, time) {\n var d = new Date(date.getTime() + time);\n if (!isNullOrUndefined(this.value) &&\n (this.value.getHours() !== 0 || this.value.getSeconds() !== 0 || this.value.getMinutes() !== 0)) {\n date.setTime(d.getTime());\n }\n else {\n date = new Date(date.setTime(d.getTime()));\n }\n };\n Calendar.prototype.addMonths = function (date, i) {\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 Calendar.prototype.addYears = function (date, i) {\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 Calendar.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\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 Calendar.prototype.selectDate = function (e, date, element) {\n var ele = element || 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 this.setProperties({ value: new Date('' + date) }, true);\n this.currentDate = new Date('' + date);\n }\n var tableBodyElement = closest(ele, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n addClass([ele], SELECTED);\n this.changedArgs = { value: this.value };\n this.changeHandler(e);\n };\n Calendar.prototype.setAriaActivedescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n Calendar.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 Calendar.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDaycellArg, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n Calendar.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n Calendar.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n Calendar.prototype.changeEvent = function (e) {\n this.trigger('change', this.changedArgs);\n };\n Calendar.prototype.triggerChange = function (e) {\n this.changedArgs.event = e;\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n if (+this.value !== Number.NaN && +this.value !== +this.previousDate) {\n this.changeEvent(e);\n }\n this.previousDate = this.value;\n };\n Calendar.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 Calendar.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 Calendar.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n Calendar.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n Calendar.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n Calendar.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n Calendar.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 Calendar.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 = this.renderDays(value, null);\n collection = tdEles.filter(function (ele) {\n return ele.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 Calendar.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 Calendar.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date('' + date) }, true);\n };\n ;\n Calendar.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('' + this.value);\n };\n Calendar.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(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], Calendar.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], Calendar.prototype, \"max\", void 0);\n __decorate([\n Property(0)\n ], Calendar.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Month')\n ], Calendar.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], Calendar.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], Calendar.prototype, \"showTodayButton\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"renderDayCell\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(Component));\nexport { Calendar };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { createElement, detach, addClass, removeClass, closest, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, setValue, getUniqueID, merge } 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.previousEleValue = '';\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.initialize = function () {\n this.createInput();\n this.updateInput();\n this.previousEleValue = this.inputElement.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.inputElement.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\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 customTag: this.ngTag,\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 });\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.inputElement.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function () {\n if (this.value && !this.isCalendar()) {\n this.disabledDates();\n }\n if (+new Date('' + this.value)) {\n if (typeof this.value === 'string') {\n this.value = this.checkDateValue(new Date('' + this.value));\n var dateOptions = void 0;\n if (this.getModuleName() === 'datetimepicker') {\n dateOptions = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n var dateString = this.globalize.formatDate(this.value, dateOptions);\n this.setProperties({ value: this.globalize.parseDate(dateString, dateOptions) }, true);\n }\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.processDate.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 dateString = this.globalize.formatDate(this.value, { format: tempFormat, type: 'dateTime', skeleton: 'yMd' });\n }\n else {\n dateString = this.globalize.formatDate(this.value, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\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 this.setProperties({ value: null }, true);\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.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 this.bindClearEvent();\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 }\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.bindClearEvent = function () {\n if (this.showClearButton) {\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.changeEvent(event);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide();\n }\n else {\n this.isDateIconClicked = true;\n this.show();\n if (!Browser.isDevice) {\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\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();\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show();\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();\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n this.isDateIconClicked = false;\n this.trigger('focus');\n };\n DatePicker.prototype.inputBlurHandler = function () {\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger();\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide();\n }\n this.inputElement.blur();\n this.trigger('blur');\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 (!Browser.isDevice) {\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();\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n switch (e.action) {\n case 'altUpArrow':\n this.hide();\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n if (this.getModuleName() === 'datepicker') {\n this.show();\n }\n break;\n case 'escape':\n this.hide();\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger();\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide();\n }\n break;\n case 'tab':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger();\n this.errorClass();\n this.hide();\n break;\n default:\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\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 dateOptions = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n var date = this.globalize.parseDate(this.inputElement.value, dateOptions);\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.previousEleValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousEleValue) {\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 = createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.classList.add(this.cssClass);\n }\n document.body.appendChild(this.popupWrapper);\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = 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 && !Browser.isDevice) {\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 (!Browser.isDevice) {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n }\n if (_this.value) {\n _this.disabledDates();\n }\n _this.popupObj.destroy();\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.setAriaAttributes();\n }\n });\n this.popupObj.element.classList.add(this.cssClass);\n this.setAriaAttributes();\n };\n DatePicker.prototype.modelHeader = function () {\n var modelHeader = createElement('div', { className: 'e-model-header' });\n var yearHeading = createElement('h5', { className: 'e-model-year' });\n var h2 = createElement('div');\n var daySpan = createElement('span', { className: 'e-model-day' });\n var monthSpan = createElement('span', { className: 'e-model-month' });\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'y', skeleton: 'dateTime' });\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'E', skeleton: 'dateTime' }) + ', ';\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'MMM d', skeleton: 'dateTime' });\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 () {\n if (this.inputElement.value !== this.previousEleValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.value = this.value;\n this.previousDate = this.value;\n this.trigger('change', this.changedArgs);\n this.previousEleValue = this.inputElement.value;\n }\n }\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.changeEvent = function (e) {\n this.selectCalendar(e);\n this.changedArgs.event = e;\n this.trigger('change', this.changedArgs);\n this.previousDate = this.value;\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\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 date = this.globalize.formatDate(this.changedArgs.value, { format: tempFormat, type: 'dateTime', skeleton: 'yMd' });\n }\n else {\n date = this.globalize.formatDate(this.changedArgs.value, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\n }\n }\n if (!isNullOrUndefined(date)) {\n Input.setValue(date, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.hide();\n this.previousEleValue = this.inputElement.value;\n this.errorClass();\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' || typeof width === 'string') {\n this.inputWrapper.container.style.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 () {\n var prevent = true;\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.createCalendar();\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent = false;\n }\n };\n var args = {\n popup: this.popupObj\n };\n merge(args, this.preventArgs);\n this.trigger('open', args);\n if (prevent) {\n addClass(this.inputWrapper.buttons, ACTIVE);\n document.body.appendChild(this.popupObj.element);\n this.popupObj.refreshPosition(this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION,\n };\n this.popupObj.show(new Animation(openAnimation));\n this.setAriaAttributes();\n }\n else {\n detach(this.popupWrapper);\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n };\n /**\n * Hide the Calendar.\n * @returns void\n */\n DatePicker.prototype.hide = function () {\n var args = {\n popup: this.popupObj\n };\n this.preventArgs = {\n preventDefault: function () {\n prevent = false;\n }\n };\n var prevent = true;\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n merge(args, this.preventArgs);\n this.trigger('close', args);\n if (this.isCalendar() && prevent) {\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.previousEleValue = 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 /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DatePicker.prototype.focusIn = function (triggerEvent) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.trigger('focus');\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 this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.trigger('blur');\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 * This method used to navigate to the month/year/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',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.inputElement.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (this.isCalendar()) {\n detach(this.popupWrapper);\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputEleCopy);\n removeClass([this.inputElement], [ROOT, RTL, INPUTROOT]);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n detach(this.inputWrapper.container);\n };\n /**\n * Initialize the event handler\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputEleCopy = this.element;\n this.inputElement = this.element;\n this.index = this.showClearButton ? 2 : 1;\n var ej2Instance = getValue('ej2_instances', this.element);\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n var inputElement = 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.parentNode.appendChild(inputElement);\n this.element.parentNode.removeChild(this.element);\n this.inputElement = inputElement;\n setValue('ej2_instances', ej2Instance, this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n this.inputElement.id = this.element.getAttribute('id');\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.id = getUniqueID('ej2-datetimepicker');\n attributes(this.element, { 'id': this.inputElement.id });\n }\n else {\n this.inputElement.id = getUniqueID('ej2-datepicker');\n attributes(this.element, { 'id': this.inputElement.id });\n }\n }\n this.checkHtmlAttributes();\n _super.prototype.preRender.call(this);\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 options = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\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 if (!enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\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 = 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 _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 this.setProperties({ 'value': valueCopy }, true);\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.setProperties({ 'value': null }, true);\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n inputVal = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n inputVal = this.globalize.formatDate(valueCopy, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\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 if (isNullOrUndefined(this.value) && !this.strictMode && this.inputElement.value !== '') {\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.globalize.parseDate(newProp.value, options);\n }\n this.setProperties({ value: newProp.value }, true);\n this.previousEleValue = 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();\n break;\n case 'format':\n this.updateInput();\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 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 addClass([this.popupWrapper], [newProp.cssClass]);\n }\n break;\n case 'strictMode':\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n default:\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n this.hide();\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(true)\n ], DatePicker.prototype, \"showClearButton\", 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","var __extends = (this && this.__extends) || (function () {\n var 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 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 } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Event, L10n, Browser, 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, getValue, merge, extend } from '@syncfusion/ej2-base';\nimport { Calendar } 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 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 HIDE = 'e-hide';\nvar OVERFLOW = 'e-range-overflow';\nvar OFFSETVALUE = 4;\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.isTab = false;\n _this.isKeyPopup = false;\n _this.dateDisabled = false;\n _this.isRangeIconClicked = false;\n _this.isMaxDaysClicked = false;\n _this.disabledDays = [];\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 };\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 };\n this.keyInputConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n tab: 'tab',\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 var ej2Instance = getValue('ej2_instances', this.element);\n this.angularTag = null;\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.angularTag = this.element.tagName;\n var inputEle = createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputEle.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputEle.innerHTML = this.element.innerHTML;\n }\n this.element.parentNode.appendChild(inputEle);\n this.element.parentNode.removeChild(this.element);\n this.inputElement = inputEle;\n setValue('ej2_instances', ej2Instance, this.inputElement);\n }\n this.cloneElement = this.element.cloneNode(true);\n this.initProperty();\n _super.prototype.preRender.call(this);\n this.navNextFunction = this.navNextMonth.bind(this);\n this.navPrevFunction = this.navPreviousMonth.bind(this);\n this.deviceNavNextFunction = this.deviceNavNext.bind(this);\n this.deviceNavPrevFunction = this.deviceNavPrevious.bind(this);\n };\n ;\n DateRangePicker.prototype.initProperty = function () {\n this.value = null;\n this.start = this.depth = 'Month';\n };\n DateRangePicker.prototype.initialize = function () {\n merge(this.keyConfigs, { shiftTab: 'shift+tab' });\n this.setProperties({ startDate: this.checkDateValue(new Date('' + this.startDate)) }, true); // persis the value propeerty.\n this.setProperties({ endDate: this.checkDateValue(new Date('' + this.endDate)) }, true);\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.checkHtmlAttributes();\n this.globalize = new Internationalization(this.locale);\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.bindEvents();\n };\n DateRangePicker.prototype.processPresets = function () {\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 this.presetsItem.push({ id: id, text: range.label, start: range.start, end: range.end });\n }\n this.validateDates();\n var startDate = isNullOrUndefined(this.startDate) ? null : new Date(+this.startDate);\n var endDate = isNullOrUndefined(this.endDate) ? null : new Date(+this.endDate);\n this.presetsItem.push({ id: 'custom_range', text: this.l10n.getConstant('customRange'), start: startDate, end: endDate });\n if (!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) {\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], 'click', this.rangeIconHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n this.bindClearEvent();\n if (!this.isMobile) {\n EventHandler.add(this.inputWrapper.buttons[0], 'blur', this.iconBlurHandler, this);\n this.inputKeyboardModule = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown', keyAction: this.inputHandler.bind(this), keyConfigs: this.keyInputConfigs\n });\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'click', this.rangeIconHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n if (!this.isMobile) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'blur', this.iconBlurHandler);\n if (!isNullOrUndefined(this.inputKeyboardModule)) {\n this.inputKeyboardModule.destroy();\n }\n }\n }\n };\n DateRangePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DateRangePicker.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear();\n };\n DateRangePicker.prototype.clear = function () {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n Input.setValue('', this.inputElement);\n this.changeTrigger();\n };\n DateRangePicker.prototype.rangeIconHandler = function (e) {\n this.targetElement = null;\n if (this.isPopupOpen()) {\n this.applyFunction();\n }\n else {\n this.isRangeIconClicked = true;\n this.show();\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.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'endDate':\n if (isNullOrUndefined(this.endDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\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 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.startDate && this.endDate) {\n if ((+startDate.setMilliseconds(0) === +this.startDate.setMilliseconds(0)) &&\n (+endDate.setMilliseconds(0) === +this.endDate.setMilliseconds(0))) {\n this.activeIndex = i;\n this.isCustomRange = false;\n }\n }\n }\n this.popupWrapper = createElement('div', { id: this.inputElement.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 document.body.appendChild(this.popupWrapper);\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.endDate) && !isNullOrUndefined(this.startDate)) {\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 EventHandler.clearEvents(this.headerTitleElement);\n };\n DateRangePicker.prototype.updateNavIcons = function () {\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 EventHandler.clearEvents(this.headerTitleElement);\n this.headerTitleElement = this.popupObj.element.querySelector('.' + LEFTCALENDER + ' .' + HEADER + ' .' + TITLE);\n EventHandler.clearEvents(this.headerTitleElement);\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 EventHandler.clearEvents(this.headerTitleElement);\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.startDate)) {\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.startDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.removeClassDisabled();\n }\n else if (!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) {\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.endDate);\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.inputBlurHandler = function () {\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.setProperties({ startDate: startDate }, true);\n this.setProperties({ endDate: endDate }, true);\n this.refreshControl();\n this.changeTrigger();\n return;\n }\n }\n }\n if (!this.strictMode) {\n this.clearRange();\n }\n else {\n this.inputElement.value = '';\n this.updateInput();\n }\n this.errorClass();\n this.changeTrigger();\n };\n DateRangePicker.prototype.clearRange = function () {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\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.endDate) && isNullOrUndefined(this.startDate) && inputStr !== '') {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\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 date;\n var min = this.min;\n var max;\n if (!isNullOrUndefined(this.maxDays) && this.isMaxDaysClicked) {\n max = new Date(new Date(+this.startDate).setDate(this.startDate.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, 0, 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 && +date === +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-1, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveUp':\n date = new Date(+this.currentDate);\n this.addDay(date, -7, e, max, min);\n if (!isLeftCalendar && +date <= +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-7, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveDown':\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, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.keyNavigation(ele, e);\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.keyNavigation(ele, e);\n break;\n }\n };\n DateRangePicker.prototype.keyInputHandler = function (e) {\n var date;\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 focusedDate = ele.querySelector('tr td.' + FOCUSDATE);\n var startDate = ele.querySelector('tr td.' + STARTDATE);\n var endDate = ele.querySelector('tr td.' + ENDDATE);\n if (!isNullOrUndefined(focusedDate)) {\n this.currentDate = this.currentDate;\n }\n else if (!isNullOrUndefined(endDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.endDate);\n }\n else if (!isNullOrUndefined(startDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.startDate);\n }\n else if (!this.dateDisabled) {\n this.currentDate.setDate(1);\n }\n switch (e.action) {\n case 'select':\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : startDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n this.selectRange(e, (element));\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 '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 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 'altUpArrow':\n if (this.isPopupOpen()) {\n this.hide();\n }\n break;\n case 'altDownArrow':\n if (!this.isPopupOpen()) {\n this.show();\n this.isKeyPopup = true;\n this.isRangeIconClicked = false;\n }\n break;\n case 'escape':\n if (this.isPopupOpen()) {\n this.hide();\n }\n break;\n case 'enter':\n if (document.activeElement === this.inputElement) {\n this.inputBlurHandler();\n this.hide();\n }\n break;\n case 'tab':\n if (document.activeElement === this.inputElement && this.isPopupOpen()) {\n this.hide();\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 EventHandler.add(cell, 'mousedown', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(cell, 'mouseover', this.hoverSelection, this);\n }\n }\n }\n };\n DateRangePicker.prototype.removeFocusedDate = function () {\n var isDate = !isNullOrUndefined(this.startDate) || !isNullOrUndefined(this.endDate);\n var focusedDate;\n focusedDate = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' .' + FOCUSDATE);\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 DateRangePicker.prototype.hoverSelection = function (event, element) {\n var currentElement = element || event.currentTarget;\n var currentDate = this.getIdValue(null, currentElement);\n if (!isNullOrUndefined(this.startDate) && isNullOrUndefined(this.endDate)) {\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 if (+eleDate >= +this.startDate && +eleDate <= +currentDate) {\n addClass([ele], RANGEHOVER);\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n }\n }\n }\n };\n DateRangePicker.prototype.updateRange = function (elementCollection) {\n if (!isNullOrUndefined(this.startDate)) {\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 if (!isNullOrUndefined(this.endDate)) {\n if (+eleDate >= +this.startDate && +eleDate <= +this.endDate && +this.startDate !== +this.endDate) {\n addClass([ele], RANGEHOVER);\n }\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n if (!ele.classList.contains(OTHERMONTH)) {\n if (+eleDate === +this.startDate) {\n addClass([ele], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startDate, true);\n }\n if (!isNullOrUndefined(this.endDate) && +eleDate === +this.endDate) {\n addClass([ele], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.endDate, false);\n }\n if (+eleDate === +this.startDate && !isNullOrUndefined(this.endDate) && +eleDate === +this.endDate) {\n this.addSelectedAttributes(ele, this.endDate, 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 () {\n var inputValue;\n var range;\n var startDate = !isNullOrUndefined(this.startDate) ?\n this.globalize.formatDate(this.startDate, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n var endDate = !isNullOrUndefined(this.endDate) ?\n this.globalize.formatDate(this.endDate, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n inputValue = startDate + ' ' + this.separator + ' ' + endDate;\n range = (Math.round(Math.abs((this.startDate.getTime() - this.endDate.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n }\n else {\n inputValue = '';\n range = 0;\n }\n var args = {\n value: inputValue,\n startDate: this.startDate,\n endDate: this.endDate,\n daySpan: range\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.element.querySelector(dateIdString);\n if (!isNullOrUndefined(tdCell)) {\n if (isStartDate) {\n addClass([tdCell], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.startDate, true);\n }\n else {\n addClass([tdCell], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.endDate, true);\n }\n if (sameDate) {\n this.addSelectedAttributes(ele, this.endDate, false, true);\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.selectRange = function (event, element) {\n var date;\n date = event instanceof MouseEvent ? this.getIdValue(event, null) : this.getIdValue(null, element);\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\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.startDate)) {\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.setProperties({ startDate: new Date('' + date) }, true);\n this.setProperties({ endDate: null }, true);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startDate, 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());\n }\n else {\n if (+date === +this.startDate || +date > +this.startDate) {\n if (+date === +this.startDate && !isNullOrUndefined(this.minDays) && this.minDays > 1) {\n return;\n }\n this.setProperties({ endDate: null }, true);\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.setProperties({ endDate: new Date('' + date) }, true);\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.startDate, true);\n removeClass([ele_1], [ENDDATE]);\n }\n }\n }\n addClass([ele], ENDDATE);\n if (+this.endDate === +this.startDate) {\n this.addSelectedAttributes(ele, this.endDate, false, true);\n }\n else {\n this.addSelectedAttributes(ele, this.endDate, false);\n }\n if (ele.classList.contains(OTHERMONTH)) {\n if (+this.endDate === +this.startDate) {\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());\n }\n else if (+date < +this.startDate) {\n this.removeClassDisabled();\n this.setProperties({ startDate: new Date('' + date) }, true);\n this.removeSelectedAttributes();\n removeClass(this.popupObj.element.querySelectorAll('.' + STARTDATE), [STARTDATE, SELECTED]);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startDate, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n }\n }\n addClass([ele], SELECTED);\n this.updateHeader();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.selectableDates = function () {\n if (!isNullOrUndefined(this.startDate)) {\n var tdCells = this.calendarElement.querySelectorAll('.' + CALENDAR + ' td');\n var isStartDate = false;\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.startDate) {\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 };\n DateRangePicker.prototype.updateMinMaxDays = function (calendar) {\n if (!isNullOrUndefined(this.startDate) && (isNullOrUndefined(this.endDate) || this.isMobile)) {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n var minDate = new Date(new Date(+this.startDate).setDate(this.startDate.getDate() + (this.minDays - 1)));\n var maxDate = new Date(new Date(+this.startDate).setDate(this.startDate.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_5 = tdCells; _i < tdCells_5.length; _i++) {\n var ele = tdCells_5[_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.startDate) {\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_6 = tdCells; _i < tdCells_6.length; _i++) {\n var ele = tdCells_6[_i];\n if (ele.classList.contains(DATEDISABLED)) {\n removeClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.add(ele, 'mousedown', 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.endDate) && !isNullOrUndefined(this.startDate)) {\n var range = (Math.round(Math.abs((this.startDate.getTime() - this.endDate.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.endDate) && !isNullOrUndefined(this.startDate)) {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.globalize.formatDate(this.endDate, format);\n }\n else {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n if (!isNullOrUndefined(this.startDate)) {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.globalize.formatDate(this.startDate, format);\n }\n else {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n }\n }\n else {\n if (!isNullOrUndefined(this.startDate)) {\n this.startButton.element.textContent = this.globalize.formatDate(this.startDate, format);\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n }\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n this.endButton.element.textContent = this.globalize.formatDate(this.endDate, format);\n }\n else {\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n }\n }\n };\n DateRangePicker.prototype.removeSelection = function () {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.removeSelectedAttributes();\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 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 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 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.navPreviousMonth = function (event) {\n var ele = closest(event.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(event.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigatePrevious(event);\n if (!isNullOrUndefined(this.startDate) && isNullOrUndefined(this.endDate)) {\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.endDate) && 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 this.bindCalendarCellEvents();\n this.removeFocusedDate();\n this.popupObj.refreshPosition(this.inputElement);\n this.popupObj.show();\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 this.bindCalendarCellEvents();\n this.removeFocusedDate();\n this.updateRange([calendar]);\n this.presetHeight();\n if (!(this.isMobile || this.enableRtl)) {\n this.popupObj.offsetX = -this.popupWrapper.getBoundingClientRect().width;\n this.popupObj.show();\n }\n };\n DateRangePicker.prototype.navNextMonth = function (event) {\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.startDate) && isNullOrUndefined(this.endDate)) {\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 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.createHeader = function () {\n var labelContainer = createElement('div', { className: STARTENDCONTAINER });\n if (!this.isMobile) {\n var startLabel = createElement('a', { className: STARTLABEL });\n var endLabel = createElement('a', { className: ENDLABEL });\n var changeIcon = 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 = createElement('button', { className: ENDBUTTON });\n var startBtn = 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.setProperties({ startDate: this.previousStartValue }, true);\n this.setProperties({ endDate: this.previousEndValue }, true);\n this.updateInput();\n }\n }\n else {\n this.updateInput();\n this.clearRange();\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.validateDates = function () {\n this.setProperties({ value: null }, true);\n this.startDate = isNullOrUndefined(this.startDate) || isNaN(+this.startDate) ? null : (this.startDate);\n this.endDate = isNullOrUndefined(this.endDate) || isNaN(+this.endDate) ? null : (this.endDate);\n };\n DateRangePicker.prototype.validateRangeStrict = function () {\n if (!isNullOrUndefined(this.startDate)) {\n if (+this.startDate < +this.min) {\n this.setProperties({ startDate: this.min }, true);\n }\n else if (+this.startDate > +this.max) {\n this.setProperties({ startDate: this.max }, true);\n }\n }\n if (!isNullOrUndefined(this.endDate)) {\n if (+this.endDate > +this.max) {\n this.setProperties({ endDate: this.max }, true);\n }\n else if (+this.endDate < +this.min) {\n this.setProperties({ endDate: this.min }, true);\n }\n }\n if ((!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) && +this.startDate > +this.endDate) {\n this.setProperties({ endDate: this.max }, true);\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateRange = function () {\n if (!isNullOrUndefined(this.startDate) && +this.startDate < +this.min) {\n this.setProperties({ endDate: null }, true);\n this.setProperties({ startDate: null }, true);\n }\n if (!isNullOrUndefined(this.endDate) && +this.endDate > +this.max) {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n }\n if ((!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) && +this.startDate > +this.endDate) {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateMinMaxDays = function () {\n if (!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) {\n var range = (Math.round(Math.abs((this.startDate.getTime() - this.endDate.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.startDate);\n date.setDate(date.getDate() + (this.minDays - 1));\n if (+date > +this.max) {\n this.setProperties({ endDate: this.max }, true);\n }\n else {\n this.setProperties({ endDate: date }, true);\n }\n }\n else {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n }\n }\n if ((!isNullOrUndefined(this.maxDays) && this.maxDays > 0) && !(range <= this.maxDays)) {\n if (this.strictMode) {\n this.endDate = new Date(+this.startDate);\n this.endDate.setDate(this.endDate.getDate() + (this.maxDays - 1));\n this.setProperties({ endDate: this.endDate }, true);\n }\n else {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n }\n }\n }\n };\n DateRangePicker.prototype.renderCalendar = function () {\n this.calendarElement = 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.header.call(this);\n _super.prototype.content.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.selectNextMonth = function () {\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate) && !this.isSameMonth(this.endDate, this.currentDate)) {\n this.currentDate = new Date(+this.endDate);\n }\n else {\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n }\n };\n DateRangePicker.prototype.selectStartMonth = function () {\n if (!isNullOrUndefined(this.startDate)) {\n if (!isNullOrUndefined(this.max) && this.isSameMonth(this.startDate, 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 {\n this.currentDate = new Date(+this.startDate);\n }\n }\n else {\n this.currentDate = new Date();\n if (this.currentDate > this.max || this.isSameMonth(this.min, 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 };\n DateRangePicker.prototype.createCalendar = function () {\n var calendarContainer = 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 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 = createElement('div', { className: LEFTCONTAINER });\n var rightContainer = createElement('div', { className: RIGHTCONTAINER });\n leftContainer.appendChild(this.leftCalendar);\n calendarContainer.appendChild(leftContainer);\n this.selectNextMonth();\n this.renderCalendar();\n this.rightCalCurrentDate = new Date(+this.currentDate);\n addClass([this.calendarElement], RIGHTCALENDER);\n this.rightCalendar = this.calendarElement;\n this.rightCalPrevIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + PREVICON);\n this.rightCalNextIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + NEXTICON);\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 }\n else {\n if (!isNullOrUndefined(this.startDate)) {\n this.currentDate = new Date(+this.startDate);\n }\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.createControl = function () {\n var controlContainer = createElement('div', { className: RANGECONTAINER });\n var headerContainer = createElement('div', { className: RANGEHEADER });\n var labelContainer = this.createHeader();\n headerContainer.appendChild(labelContainer);\n var daySpan = 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 = createElement('div', { className: SEPARATOR });\n var calendarContainer = this.createCalendar();\n controlContainer.appendChild(headerContainer);\n controlContainer.appendChild(separator);\n controlContainer.appendChild(calendarContainer);\n var footerSection = createElement('div', { className: FOOTER });\n var cancelBtn = createElement('button', { className: CANCEL + ' e-flat' });\n var applyBtn = createElement('button', { className: APPLY + ' e-flat e-primary' });\n footerSection.appendChild(applyBtn);\n footerSection.appendChild(cancelBtn);\n var enable = !isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate);\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 document.body.appendChild(this.popupWrapper);\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 (!this.isMobile && this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.hide();\n };\n DateRangePicker.prototype.deviceHeaderUpdate = function () {\n if (isNullOrUndefined(this.startDate) && isNullOrUndefined(this.endDate)) {\n this.endButton.element.setAttribute('disabled', '');\n this.startButton.element.classList.add(ACTIVE);\n }\n else if (!isNullOrUndefined(this.startDate)) {\n this.startButton.element.classList.add(ACTIVE);\n }\n };\n DateRangePicker.prototype.applyFunction = function (eve) {\n if (!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) {\n this.previousStartValue = new Date(+this.startDate);\n this.previousEndValue = new Date(+this.endDate);\n this.previousEleValue = this.inputElement.value;\n this.inputElement.value = this.rangeArgs().value;\n this.changeTrigger();\n this.hide();\n this.errorClass();\n }\n else {\n this.hide();\n }\n if (!this.isMobile) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n if (this.isRangeIconClicked) {\n this.addIconTabindex();\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 var target = item || event.target;\n var li = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.setListSelection(li, event);\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.applyPresetRange = function (values) {\n this.hide();\n this.presetsItem[this.presetsItem.length - 1].start = null;\n this.presetsItem[this.presetsItem.length - 1].end = null;\n this.setProperties({ startDate: values.start }, true);\n this.setProperties({ endDate: values.end }, true);\n this.refreshControl();\n this.trigger('select', this.rangeArgs());\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.renderCustomPopup = function () {\n this.isCustomWindow = true;\n this.popupObj.hide();\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.renderControl();\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 = createElement('div', { className: PRESETS, attrs: { 'tabindex': '0' } });\n var listTag = ListBase.createList(this.presetsItem, null, true);\n attributes(listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.inputElement.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.startDate && this.endDate) {\n this.activeIndex = this.presetsItem.length - 1;\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.renderCustomPopup();\n return;\n }\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', 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 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.classList.add(this.cssClass);\n }\n if (this.isMobile && this.isCustomWindow) {\n this.modal = 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' },\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.hide.bind(_this),\n keyConfigs: { tab: 'tab' }\n });\n }\n if (!isNullOrUndefined(_this.leftCalendar)) {\n _this.calendarFocus();\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 if (isNullOrUndefined(_this.leftCalendar)) {\n _this.presetElement.focus();\n }\n else {\n _this.presetElement.setAttribute('tabindex', '-1');\n }\n }\n _this.popupKeyBoardHandler();\n }\n },\n close: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.isRangeIconClicked) {\n _this.addIconTabindex();\n _this.inputWrapper.container.children[1].focus();\n }\n else {\n _this.iconBlurHandler();\n }\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 remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupObj = null;\n }\n }\n });\n document.body.appendChild(this.popupObj.element);\n if (this.isMobile) {\n this.popupObj.element.classList.add(DEVICE);\n if (!Browser.isDevice) {\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 this.presetHeight();\n if (!(this.isMobile || this.enableRtl)) {\n this.popupObj.offsetX = -this.popupWrapper.getBoundingClientRect().width;\n }\n this.popupObj.refreshPosition(this.inputElement);\n this.popupObj.show();\n EventHandler.add(document, 'click touchstart', this.documentHandler, this);\n };\n DateRangePicker.prototype.calendarFocus = function () {\n var startDate = this.popupObj.element.querySelector('.' + STARTDATE);\n if (startDate) {\n var ele = closest(startDate, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n ele.children[1].firstElementChild.focus();\n addClass([startDate], FOCUSDATE);\n }\n else {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n };\n DateRangePicker.prototype.presetHeight = function () {\n var presets = this.popupObj.element.querySelector('.' + PRESETS);\n var rangeContainer = 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();\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 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();\n }\n else {\n this.inputWrapper.container.children[1].blur();\n this.iconBlurHandler();\n }\n break;\n case 'enter':\n if (!this.isPopupOpen()) {\n this.show();\n }\n else {\n this.addIconTabindex();\n this.inputWrapper.container.children[1].focus();\n }\n break;\n case 'tab':\n this.hide();\n }\n };\n DateRangePicker.prototype.iconBlurHandler = function () {\n if (!isNullOrUndefined(this.inputWrapper.container.children[1])) {\n this.removeIconTabindex();\n }\n if (!isNullOrUndefined(this.popupKeyboardModule)) {\n this.popupKeyboardModule.destroy();\n }\n };\n DateRangePicker.prototype.removeIconTabindex = function () {\n this.inputWrapper.container.children[1].removeAttribute('tabindex');\n };\n DateRangePicker.prototype.addIconTabindex = function () {\n attributes(this.inputWrapper.container.children[1], {\n 'tabindex': '0'\n });\n };\n DateRangePicker.prototype.documentHandler = function (e) {\n if (isNullOrUndefined(this.popupObj)) {\n return;\n }\n var target = e.target;\n if (!(closest(target, '#' + this.popupObj.element.id))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (isNullOrUndefined(this.targetElement) ||\n (!isNullOrUndefined(this.targetElement) && !(target === this.targetElement)))) {\n if (this.isPopupOpen()) {\n if (!this.isMobile) {\n this.isRangeIconClicked = false;\n }\n this.applyFunction();\n }\n }\n };\n DateRangePicker.prototype.createInput = function () {\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n customTag: this.angularTag,\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 });\n attributes(this.inputElement, {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '1', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.inputElement.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false'\n });\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n if (!isNullOrUndefined(this.placeholder) && this.placeholder.trim() !== '') {\n Input.addAttributes({ 'aria-labelledby': this.placeholder }, this.inputElement);\n }\n this.inputWrapper.container.style.width = formatUnit(this.width);\n addClass([this.inputWrapper.container], DATERANGEWRAPPER);\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.inputElement.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.refreshControl = function () {\n this.validateMinMax();\n this.validateDates();\n if (this.strictMode) {\n this.validateRangeStrict();\n }\n var isDisabled = this.disabledDates();\n if (this.strictMode && (isDisabled)) {\n this.setProperties({ startDate: this.previousStartValue }, true);\n this.setProperties({ endDate: this.previousEndValue }, true);\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.endDate) && !isNullOrUndefined(this.startDate) && !isDisabled) {\n this.disabledDateRender();\n }\n this.errorClass();\n this.previousStartValue = isNullOrUndefined(this.startDate) || isNaN(+this.startDate) ? null : new Date(+this.startDate);\n this.previousEndValue = isNullOrUndefined(this.endDate) || isNaN(+this.endDate) ? null : new Date(+this.endDate);\n };\n DateRangePicker.prototype.updateInput = function () {\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n var startDate = this.globalize.formatDate(this.startDate, { format: this.format, type: 'date', skeleton: 'yMd' });\n var endDate = this.globalize.formatDate(this.endDate, { format: this.format, type: 'date', skeleton: 'yMd' });\n this.inputElement.value = startDate + ' ' + this.separator + ' ' + endDate;\n this.previousStartValue = new Date(+this.startDate);\n this.previousEndValue = new Date(+this.endDate);\n }\n };\n DateRangePicker.prototype.isDateDisabled = function (date) {\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.startDate);\n var count = 0;\n while (+localDate <= +this.endDate) {\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.startDate && +localDate < +this.endDate) {\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.endDate) && !isNullOrUndefined(this.startDate)) {\n this.value = null;\n isStartDisabled = this.isDateDisabled(this.startDate);\n isEndDisabled = this.isDateDisabled(this.endDate);\n this.currentDate = null;\n this.value = null;\n }\n return (isStartDisabled || isEndDisabled);\n };\n DateRangePicker.prototype.changeTrigger = function () {\n if (this.previousEleValue !== this.inputElement.value) {\n this.trigger('change', this.rangeArgs());\n }\n this.previousEleValue = this.inputElement.value;\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 * To destroy the widget.\n * @returns void\n */\n DateRangePicker.prototype.destroy = function () {\n this.hide();\n removeClass([this.inputElement], [ROOT]);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'click', this.rangeIconHandler);\n this.inputWrapper.container.parentElement.appendChild(this.cloneElement);\n remove(this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputKeyboardModule) && !this.isMobile) {\n this.inputKeyboardModule.destroy();\n }\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n if (!this.isMobile) {\n this.clearCalendarEvents();\n }\n _super.prototype.destroy.call(this);\n }\n this.inputWrapper = this.popupWrapper = this.popupObj = this.cloneElement = this.presetElement = null;\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'];\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.startDate) && !isNullOrUndefined(this.endDate)) {\n range = (Math.round(Math.abs((this.startDate.getTime() - this.endDate.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.startDate, endDate: this.endDate, daySpan: range };\n };\n /**\n * To open the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.show = function (element) {\n if (element) {\n this.targetElement = element;\n }\n this.createPopup();\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 if (this.isPopupOpen()) {\n var args = {\n date: this.inputElement.value,\n model: this,\n popup: this.popupObj\n };\n this.trigger('open', args);\n if (!this.isMobile) {\n this.addIconTabindex();\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.calendarFocus();\n }\n }\n }\n };\n /**\n * To close the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.hide = function () {\n if (isNullOrUndefined(this.previousEndValue) && isNullOrUndefined(this.previousStartValue)) {\n this.clearRange();\n }\n else {\n if (!isNullOrUndefined(this.previousStartValue)) {\n this.setProperties({ startDate: new Date('' + this.previousStartValue) }, true);\n this.currentDate = new Date('' + this.startDate);\n }\n else {\n this.setProperties({ startDate: null }, true);\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n this.setProperties({ endDate: new Date('' + this.previousEndValue) }, true);\n }\n else {\n this.setProperties({ endDate: null }, true);\n }\n }\n if (this.isPopupOpen()) {\n var args = {\n date: this.inputElement.value,\n model: this,\n popup: this.popupObj\n };\n this.trigger('close', args);\n if (this.isMobile) {\n if (!isNullOrUndefined(this.startButton) && !isNullOrUndefined(this.endButton)) {\n EventHandler.remove(this.startButton.element, 'click', this.deviceHeaderClick);\n EventHandler.remove(this.endButton.element, 'click', this.deviceHeaderClick);\n }\n }\n this.popupObj.hide();\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 }\n removeClass([document.body], OVERFLOW);\n EventHandler.remove(document, 'click 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 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 /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\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();\n switch (prop) {\n case 'width':\n this.setProperties({ width: newProp.width }, true);\n this.inputWrapper.container.style.width = formatUnit(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 addClass([this.popupWrapper], [newProp.cssClass]);\n }\n addClass([this.inputWrapper.container], [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 '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.setProperties({ locale: newProp.locale }, true);\n this.setLocale();\n break;\n case 'startDate':\n if (typeof newProp.startDate === 'string') {\n newProp.value = this.globalize.parseDate(newProp.startDate, format);\n }\n this.setProperties({ startDate: newProp.startDate }, true);\n this.inputElement.value = '';\n this.refreshControl();\n this.changeTrigger();\n break;\n case 'endDate':\n if (typeof newProp.endDate === 'string') {\n newProp.value = this.globalize.parseDate(newProp.endDate, format);\n }\n this.setProperties({ endDate: this.checkDateValue(new Date('' + newProp.endDate)) }, true);\n this.inputElement.value = '';\n this.refreshControl();\n this.changeTrigger();\n break;\n case 'minDays':\n this.setProperties({ minDays: newProp.minDays }, true);\n this.refreshControl();\n this.changeTrigger();\n break;\n case 'maxDays':\n this.setProperties({ maxDays: newProp.maxDays }, true);\n this.refreshControl();\n this.changeTrigger();\n break;\n case 'min':\n this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true);\n this.previousEleValue = this.inputElement.value;\n this.refreshControl();\n this.changeTrigger();\n break;\n case 'max':\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.refreshControl();\n this.changeTrigger();\n break;\n case 'strictMode':\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.refreshControl();\n this.changeTrigger();\n break;\n case 'presets':\n this.setProperties({ presets: newProp.presets }, true);\n this.processPresets();\n break;\n }\n }\n };\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('')\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('')\n ], DateRangePicker.prototype, \"placeholder\", 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(null)\n ], DateRangePicker.prototype, \"value\", 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, \"open\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"close\", 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, \"select\", void 0);\n DateRangePicker = __decorate([\n NotifyPropertyChanges\n ], DateRangePicker);\n return DateRangePicker;\n}(Calendar));\nexport { DateRangePicker };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateTimePicker.prototype.focusIn = function () {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.trigger('focus');\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 (this.isTimePopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n this.closePopup();\n this.trigger('blur');\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',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.inputElement.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.isCalendar()) {\n detach(this.popupWrapper);\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n this.inputWrapper.container.parentElement.appendChild(this.cloneElement);\n removeClass([this.inputElement], [ROOT, RTL]);\n removeClass([this.cloneElement], [ROOT, 'e-control']);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n remove(this.inputWrapper.container);\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.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 };\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 this.inputElement.value = this.getFormattedValue(value);\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 if (!isNullOrUndefined(value)) {\n var dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\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 touchstart', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.focusOut, this);\n EventHandler.add(this.inputElement, 'focus', this.focusIn, 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 EventHandler.remove(this.inputElement, 'blur', this.focusOut);\n EventHandler.remove(this.inputElement, 'focus', this.focusIn);\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 return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n _super.prototype.hide.call(this);\n if (this.isTimePopupOpen()) {\n this.closePopup();\n }\n else {\n if (!Browser.isDevice) {\n this.inputElement.focus();\n }\n this.popupCreation('time');\n }\n }\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (this.getModuleName() === 'datetimepicker') {\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n }\n if (this.enabled && !this.readonly) {\n this.closePopup();\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date');\n }\n }\n };\n DateTimePicker.prototype.show = function (type) {\n if (type === 'time') {\n if (this.isDatePopupOpen()) {\n this.hide();\n }\n this.popupCreation('time');\n }\n else {\n if (this.isTimePopupOpen()) {\n this.hide();\n }\n _super.prototype.show.call(this);\n this.popupCreation('date');\n }\n this.trigger('open');\n };\n DateTimePicker.prototype.toggle = function () {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this);\n this.popupCreation('time');\n }\n else if (this.isTimePopupOpen()) {\n this.hide();\n _super.prototype.show.call(this);\n this.popupCreation('date');\n }\n else {\n this.show();\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n this.globalize.parseDate(this.inputElement.value, { format: this.cldrDateTimeFormat(), type: 'datetime' }) :\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(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.inputElement.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) {\n if (type === 'date') {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.inputElement.id + '_datepopup' });\n this.trigger('open', this.popupWrapper);\n }\n else {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.inputElement.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.classList.add(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();\n this.popupObject.refreshPosition(this.inputElement);\n }\n };\n DateTimePicker.prototype.openPopup = function () {\n this.trigger('open');\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n this.popupObject.show(new Animation(openAnimation));\n addClass([this.inputWrapper.container], [ICONANIMATION, INPUTFOCUS]);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n EventHandler.add(document, 'mousedown touchstart', this.documentClickHandler, this);\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\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();\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 = null;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }\n });\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = formatUnit(isNullOrUndefined(this.width) ? '100%' : 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 () {\n if (+this.previousDateTime !== +this.value) {\n _super.prototype.changeEvent.call(this);\n if (!Browser.isDevice) {\n this.inputElement.focus();\n }\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n }\n };\n DateTimePicker.prototype.updateValue = function () {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\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.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n this.inputElement.value = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\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();\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();\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 () {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup();\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 this.trigger('close');\n };\n DateTimePicker.prototype.closePopup = function () {\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 if (Browser.isDevice) {\n removeClass([this.inputWrapper.container], INPUTFOCUS);\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 case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\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.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\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 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 var dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.format) ? this.format : this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd'\n });\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, false);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, false);\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.updateValue();\n }\n else {\n this.updateValue();\n }\n this.hide();\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n break;\n case 'escape':\n this.hide();\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();\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 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'value':\n newProp.value = this.validateValue(newProp.value);\n this.inputElement.value = this.getFormattedValue(newProp.value);\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\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 addClass([this.dateTimeWrapper], [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 default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n this.hide();\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, \"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","/**\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 { 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 arrLiteralCodes = new Int16Array(286);\nvar arrLiteralLengths = new Uint8Array(286);\nvar arrDistanceCodes = new Int16Array(30);\nvar arrDistanceLengths = 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 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] * arrLiteralLengths[i];\n }\n for (var i = 0; i < 30; i++) {\n static_len += this.treeDistances.codeFrequencies[i] * arrDistanceLengths[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(arrLiteralCodes, arrLiteralLengths);\n this.treeDistances.setStaticCodes(arrDistanceCodes, arrDistanceLengths);\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 * 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 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/**\n * Huffman Tree literal calculation\n */\n(function () {\n var i = 0;\n while (i < 144) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x030 + i) << 8);\n arrLiteralLengths[i++] = 8;\n }\n while (i < 256) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x190 - 144 + i) << 7);\n arrLiteralLengths[i++] = 9;\n }\n while (i < 280) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x000 - 256 + i) << 9);\n arrLiteralLengths[i++] = 7;\n }\n while (i < 286) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x0c0 - 280 + i) << 8);\n arrLiteralLengths[i++] = 8;\n }\n for (i = 0; i < 30; i++) {\n arrDistanceCodes[i] = CompressorHuffmanTree.bitReverse(i << 11);\n arrDistanceLengths[i] = 5;\n }\n})();\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 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 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/**\n * construct cyclic redundancy code table\n */\n(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","/**\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 * `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 //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 writer.write(PdfString.stringMark[0] + this.value + PdfString.stringMark[1]);\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 //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 * `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 }\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 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 '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.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 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 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 = 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 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 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, \"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 this.remove(this.dictionaryProperties.filter);\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 * `Compresses the content` if it's required.\n * @private\n */\n PdfStream.prototype.compressContent = function (data, writer) {\n if (this.bCompress) {\n var sw = new CompressedStreamWriter();\n // data = 'Hello World!!!';\n sw.write(data, 0, data.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 var data = '';\n for (var i = 0; i < this.data.length; i++) {\n data = data + this.data[i];\n }\n if (data.length > 1) {\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 };\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","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 = 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 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 * 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 * `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 = 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 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 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, \"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.Empty) {\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 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 while (word != null) {\n curLine = curLine + word;\n var curLineWidth = this.getLineWidth(curLine.toString()) + curIndent /*)*/;\n if (curLineWidth > maxWidth) {\n if (this.getWrapType() == PdfWordWrapType.None)\n break;\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 }\n else {\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 = curLine + builder.toString();\n word = reader.peek().toString();\n }\n continue;\n }\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 for (var i = 0, len = lineResult.lines.length; i < len; i++) {\n var expHeight = height + lineResult.lineHeight;\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_1 = result.actualSize;\n size_1.width = Math.max(size_1.width, info.width);\n result.size = size_1;\n height = expHeight;\n }\n var size = result.actualSize;\n size.height = height;\n result.size = size;\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 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 // let trimStartSpaces : boolean = ((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 lineWidth += this.getLineIndent(firstLine);\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, \"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 return ch;\n }\n else {\n var num = 0;\n var builder = '';\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 return ch;\n };\n /**\n * Closes a reader.\n * @private\n */\n StringTokenizer.prototype.close = function () {\n this.text = null;\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 = 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 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 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 * 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.value);\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 = 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 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 * 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';\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, 0), 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 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 this.drawAsciiLine(lineInfo, layoutRectangle, font, format);\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 * `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 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 = 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 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","/**\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 = 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 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","var __extends = (this && this.__extends) || (function () {\n var 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 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 = 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 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 = 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 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.createNewGroup();\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 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 = 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 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.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 return PdfDocument;\n}(PdfDocumentBase));\nexport { PdfDocument };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * 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 = 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 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 = 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 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 = 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 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 = 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 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';\nimport { PdfLayoutType, PdfLayoutBreakType } from './../enum';\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 ElementLayouter.prototype.layout = function (param, isBoundsChanged) {\n if (typeof isBoundsChanged === 'boolean' && isBoundsChanged === true) {\n return this.layoutInternal(param, true);\n }\n else {\n return this.layoutInternal(param);\n }\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","/**\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","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 PdfLayoutElement.prototype.drawHelper = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg3 === '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 = 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 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","var __extends = (this && this.__extends) || (function () {\n var 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 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 = 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 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 = 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 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 = 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 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 = 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 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 = 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 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 = 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 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 = 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 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","/**\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 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.bottom = this.topPad = 0.5;\n }\n else {\n this.leftPad = left;\n this.rightPad = right;\n this.topPad = top;\n this.bottomPad = bottom;\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 },\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 },\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 },\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 },\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 },\n enumerable: true,\n configurable: true\n });\n return PdfPaddings;\n}());\nexport { PdfPaddings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 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 // 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 /**\n * Determine the value of the border is changed or not.\n * @private\n */\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 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 { 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';\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 * 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 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, \"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 },\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 }\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 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(0, 0), 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 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 width += (this.row.grid.style.cellPadding.left + this.row.grid.style.cellPadding.right);\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 if (backgroundBrush != null) {\n graphics.drawRectangle(backgroundBrush, 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 (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.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\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 if (this.rowSpan === 1) {\n returnBounds.width -= (this.style.borders.left.width);\n }\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 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 var result = null;\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 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 = this.adjustContentLayoutArea(bounds);\n this.drawCellBackground(graphics, bounds);\n if (typeof this.objectValue === 'string' || typeof this.remaining === 'string') {\n var temp = void 0;\n temp = this.remaining === '' ? this.remaining : this.objectValue;\n graphics.drawString(temp, font, textPen, textBrush, innerLayoutArea.x, innerLayoutArea.y, innerLayoutArea.width, innerLayoutArea.height, strFormat);\n result = graphics.stringLayoutResult;\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 if (this.style.borders != null) {\n this.drawCellBorders(graphics, bounds);\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 /**\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) {\n var span = this.columnSpan;\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 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 }\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 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.remainingString === 'string') {\n var currentValue = this.objectValue;\n /* tslint:disable */\n var slr = layouter.layout(currentValue, this.getTextFont(), this.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n height += slr.actualSize.height;\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 }\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n //Add padding top and bottom value to height\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 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 columnSpan = this.columnSpan;\n var width = 0;\n for (var i = 0; i < columnSpan; i++) {\n width += this.row.grid.columns.getColumn(cellIndex + i).width;\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","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.m_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 * Check whether the row height `is set explicitly`.\n * @default false\n * @private\n */\n this.isRowHeightSet = false;\n /**\n * Check weather the row merge `is completed` or not.\n * @default true\n * @private\n */\n this.isRowMergeComplete = true;\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.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 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, \"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 // } 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 // if (!cell.IsRowMergeContinue)\n this.rowMergeComplete = false;\n if (cell.rowSpan > 1) {\n if (maxHeight < cell.height) {\n maxHeight = cell.height;\n }\n continue;\n }\n rowHeight = Math.max(rowHeight, cell.height);\n }\n if (rowHeight === 0) {\n rowHeight = maxHeight;\n }\n else if (rowSpanRemainingHeight > 0) {\n rowHeight += rowSpanRemainingHeight;\n }\n return rowHeight;\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 = 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 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 { PdfLayoutResult, PdfLayoutFormat } from './../../graphics/figures/base/element-layouter';\nimport { PdfBorders } from './styles/pdf-borders';\nimport { PdfGridStyle } from './styles/style';\nimport { PdfLayoutType } from './../../graphics/figures/enum';\nimport { PdfHorizontalOverflowType } from './styles/style';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\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 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 * @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 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, \"raiseBeginPageLayout\", {\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(PdfGrid.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 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.pageWidth;\n },\n set: function (value) {\n this.pageWidth = 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.childGrid;\n },\n set: function (value) {\n this.childGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"size\", {\n /**\n * Gets the `size`.\n * @private\n */\n get: function () {\n if (this.gridSize.width === 0 && this.gridSize.height === 0) {\n this.gridSize = this.measure();\n return this.gridSize;\n }\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 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.layout = function (param, isGridLayouter) {\n if (typeof isGridLayouter === 'undefined') {\n this.setSpan();\n this.layoutFormat = param.format;\n this.gridLocation = param.bounds;\n var result = this.layout(param, true);\n return result;\n }\n else {\n return this.layoutInternal(param);\n }\n };\n PdfGrid.prototype.setSpan = function () {\n var colSpan;\n var rowSpan = 1;\n var currentCellIndex;\n var currentRowIndex = 0;\n var rowCount = this.headers.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.headers.getHeader(i);\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\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 }\n };\n /**\n * Gets the `format`.\n * @private\n */\n PdfGrid.prototype.getFormat = function (format) {\n var f = format;\n return f;\n };\n /**\n * `Layouts` the element.\n * @private\n */\n PdfGrid.prototype.layoutInternal = function (param) {\n this.initialWidth = param.bounds.width;\n var format = 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 this.currentPageBounds = this.currentPage.getClientSize();\n }\n else {\n throw Error('Can not set page as null');\n }\n this.currentGraphics = this.currentPage.graphics;\n var index = 0;\n index = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n this.listOfNavigatePages.push(index);\n this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), this.currentGraphics.clientSize);\n if (this.rows.count !== 0) {\n this.currentBounds.width = (param.bounds.width > 0) ? param.bounds.width :\n (this.currentBounds.width - this.rows.getRow(0).cells.getCell(0).style.borders.left.width / 2);\n }\n else if (this.headers.count !== 0) {\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 (param.bounds.height > 0 && !this.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n this.hType = this.style.horizontalOverflowType;\n if (!this.style.allowHorizontalOverflow) {\n this.measureColumnsWidth(this.currentBounds);\n this.columnRanges.push([0, this.columns.count - 1]);\n }\n else {\n this.measureColumnsWidth();\n this.determineColumnDrawRanges();\n }\n var result = this.layoutOnPage(param);\n return result;\n };\n PdfGrid.prototype.measureColumnsWidth = function (bounds) {\n if (typeof bounds !== 'undefined') {\n var widths = this.columns.getDefaultWidths(bounds.width);\n var tempWidth = this.columns.getColumn(0).width;\n for (var i = 0, count = this.columns.count; i < count; i++) {\n this.columns.getColumn(i).width = widths[i];\n }\n }\n else {\n var widths = [];\n var cellWidth = 0;\n var cellWidths = 0;\n if (this.headers.count > 0) {\n var colCount = this.headers.getHeader(0).cells.count;\n var rowCount = this.headers.count;\n for (var i = 0; i < colCount; 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 var colCount = this.rows.getRow(0).cells.count;\n var rowCount = this.rows.count;\n for (var i = 0; i < colCount; i++) {\n cellWidth = 0;\n for (var j = 0; j < rowCount; j++) {\n var rowWidth = 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 = this.columns.count; i < colCount; 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).value !== null || this.rows.getRow(j).cells.getCell(i).rowSpan >= 1) {\n if (this.rows.getRow(j).cells.getCell(i).value !== null &&\n !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 + this.gridLocation.x;\n this.rows.getRow(j).cells.getCell(i).value.initialWidth = this.initialWidth - value;\n }\n var rowWidth = 0;\n var internalWidth = 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 var internalHeight = 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 var isCorrectWidth = (internalWidth + this.gridLocation.x) > this.currentGraphics.clientSize.width;\n var isCorrectHeight = (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 widths[i] = cellWidth;\n cellWidth = 0;\n }\n for (var i = 0, count = this.columns.count; i < count; i++) {\n this.columns.getColumn(i).width = widths[i];\n }\n }\n };\n /* tslint:enable */\n /**\n * `Determines the column draw ranges`.\n * @private\n */\n PdfGrid.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.columns.count; i++) {\n cellWidths += this.columns.getColumn(i).width;\n if (cellWidths >= availableWidth) {\n var subWidths = 0;\n for (var j = startColumn; j <= i; j++) {\n subWidths += this.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.columns.getColumn(i).width : 0;\n }\n }\n // if (startColumn !== this.columns.Count) {\n this.columnRanges.push([startColumn, this.columns.count - 1]);\n // }\n };\n /**\n * `Layouts the on page`.\n * @private\n */\n PdfGrid.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.headers.count; i_1++) {\n var row = this.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.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.rows.count; j++) {\n var row = this.rows.getRow(j);\n i++;\n this.currentRowIndex = i - 1;\n var originalHeight = this.currentBounds.y;\n startPage = this.currentPage;\n PdfGrid.repeatRowIndex = -1;\n var rowResult = this.drawRow(row);\n cellBounds.push(rowResult.bounds.width);\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 PdfGrid.repeatRowIndex = this.rows.rowCollection.indexOf(row);\n }\n else {\n repeatRow = false;\n PdfGrid.repeatRowIndex = -1;\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.getNextPage(format);\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.height > 0 && !this.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.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.repeatHeader) {\n for (var i_2 = 0; i_2 < this.headers.count; i_2++) {\n var header = this.headers.getHeader(i_2);\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 }\n var isPdfGrid = false;\n var maximumCellBoundsWidth = 0;\n if (cellBounds.length > 0) {\n maximumCellBoundsWidth = cellBounds[0];\n }\n var largeNavigatePage = [[0, 0]];\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.length - 1 !== index && this.columnRanges.length > 1 && format.layout !== PdfLayoutType.OnePage) {\n this.currentPage = this.getNextPage(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.style.allowHorizontalOverflow && this.style.horizontalOverflowType == PdfHorizontalOverflowType.NextPage) {\n this.reArrangePages(layoutedPages);\n }\n this.raisePageLayouted(result);\n return result;\n }; /* tslint:enable */\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGrid.prototype.getNextPage = 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 /**\n * Gets the `layout result`.\n * @private\n */\n PdfGrid.prototype.getLayoutResult = function () {\n var bounds;\n /* tslint:disable */\n bounds = new RectangleF(this.startLocation, new SizeF(this.currentBounds.width, this.currentBounds.y - this.startLocation.y));\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 PdfGrid.prototype.ReCalculateHeight = function (row, height) {\n var newHeight = 0.0;\n // for (let i : number = 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 PdfGrid.prototype.raiseBeforePageLayout = function (currentPage, currentBounds, currentRow) {\n var cancel = false;\n if (this.raiseBeginPageLayout) {\n var args = new PdfGridBeginPageLayoutEventArgs(currentBounds, currentPage, currentRow);\n this.beginPageLayout(this, 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 PdfGrid.prototype.raisePageLayouted = function (result) {\n var args = new PdfGridEndPageLayoutEventArgs(result);\n if (this.raiseEndPageLayout) {\n this.endPageLayout(this, args);\n }\n return args;\n };\n PdfGrid.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_1 = 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.rows.rowCollection.indexOf(row);\n if (currRowIndex === -1) {\n currRowIndex = this.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.headers.getHeader(i).height : this.rows.getRow(i).height);\n }\n var rowMaxHeight = rowHeightWithSpan;\n for (var i = 0; i < row.cells.count; i++) {\n rowMaxHeight = rowMaxHeight > row.cells.getCell(i).height ? rowMaxHeight : row.cells.getCell(i).height;\n }\n var nextRow = this.headers.getHeader(this.headers.indexOf(row) + 1);\n var flag = true;\n for (var i = 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.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 (PdfGrid.repeatRowIndex > -1 && PdfGrid.repeatRowIndex === row.RowIndex) {\n // if (this.AllowRowBreakAcrossPages) {\n // result.IsFinish = true;\n // // this.DrawRowWithBreak(ref result, row, height);\n // } else {\n // result.IsFinish = false;\n // this.drawRow(row, result, height);\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 }\n return result_1;\n }\n else {\n var skipcell = false;\n var location_2 = new PointF(this.currentBounds.x, this.currentBounds.y);\n result.bounds = new RectangleF(location_2, 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.columns.getColumn(i).width, height);\n // if (size.width > this.currentGraphics.ClientSize.width) {\n // size.width = this.currentGraphics.ClientSize.width;\n // }\n // if (this.IsChildGrid && this.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.columns.getColumn(i).format) &&\n this.CheckIfDefaultFormat(row.cells.getCell(i).stringFormat)) {\n row.cells.getCell(i).stringFormat = this.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_2, size), tempValue, cellstyle);\n // if (!skipcell) {\n // let stringResult : PdfStringLayoutResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location, size), cancelSpans);\n var stringResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location_2, size), cancelSpans);\n if (row.grid.style.allowHorizontalOverflow && (row.cells.getCell(i).columnSpan > this.cellEndIndex || 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 > this.cellEndIndex || i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1)) && row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1 > 0) {\n row.cells.getCell(row.rowOverflowIndex + 1).value = stringResult !== null ? (stringResult.remainder !== undefined) ? 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 this.RaiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_2, size), tempValue, row.cells.getCell(i).style);\n location_2.x += this.columns.getColumn(i).width;\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_2.x, location_2.y));\n }\n };\n /**\n * Checks if the given format `is default format` or not.\n * @private\n */\n PdfGrid.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 PdfGrid.prototype.RaiseBeforeCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, style) {\n var args = null;\n if (this.raiseBeginCellDraw) {\n args = new PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style);\n this.beginCellDraw(this, args);\n style = args.style;\n }\n return style;\n };\n /**\n * `Raises AfterCellDraw event`.\n * @private\n */\n PdfGrid.prototype.RaiseAfterCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, cellstyle) {\n var args = null;\n if (this.raiseEndCellDraw) {\n args = new PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, cellstyle);\n this.endCellDraw(this, args);\n }\n };\n /**\n * `Rearranges the pages`.\n * @private\n */\n PdfGrid.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 * @hidden\n * @private\n */\n PdfGrid.repeatRowIndex = -1;\n return PdfGrid;\n}(PdfLayoutElement));\nexport { PdfGrid };\n/**\n * `GridCellEventArgs` class is alternate for grid events.\n */\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 };\n/**\n * `PdfGridBeginCellDrawEventArgs` class is alternate for begin cell draw events.\n */\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 };\n/**\n * `PdfGridEndCellDrawEventArgs` class is alternate for end cell draw events.\n */\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 };\n/**\n * `PdfGridCancelEventArgs` class is alternate for cancel events.\n */\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 };\n/**\n * `BeginPageLayoutEventArgs` class is alternate for begin page layout events.\n */\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 };\n/**\n * `RowLayoutResult` class to store layout result of rows.\n */\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/**\n * `PdfGridLayoutResult` class represents the results of the PdfGrid including bounds and resultant page.\n */\nvar PdfGridLayoutResult = /** @class */ (function (_super) {\n __extends(PdfGridLayoutResult, _super);\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridLayoutResult` class with the current page and bounds.\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","var __extends = (this && this.__extends) || (function () {\n var 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 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';\nimport { Theme } from '../model/theme';\n/**\n * Defines the appearance of the connectors\n */\nvar Connector = /** @class */ (function (_super) {\n __extends(Connector, _super);\n function Connector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Line')\n ], Connector.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Connector.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"length\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"dashArray\", void 0);\n return Connector;\n}(ChildProperty));\nexport { Connector };\n/**\n * Configures the fonts in charts.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n __decorate([\n Property('Center')\n ], Font.prototype, \"textAlignment\", void 0);\n __decorate([\n Property('Trim')\n ], Font.prototype, \"textOverflow\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the borders in the chart.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the chart area.\n */\nvar ChartArea = /** @class */ (function (_super) {\n __extends(ChartArea, _super);\n function ChartArea() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Border)\n ], ChartArea.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], ChartArea.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], ChartArea.prototype, \"opacity\", void 0);\n return ChartArea;\n}(ChildProperty));\nexport { ChartArea };\n/**\n * Configures the chart margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the animation behavior for chart series.\n */\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(true)\n ], Animation.prototype, \"enable\", void 0);\n __decorate([\n Property(1000)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/** @private */\nvar Indexes = /** @class */ (function (_super) {\n __extends(Indexes, _super);\n function Indexes() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Indexes.prototype, \"series\", void 0);\n __decorate([\n Property(0)\n ], Indexes.prototype, \"point\", void 0);\n return Indexes;\n}(ChildProperty));\nexport { Indexes };\n/**\n * Column series rounded corner options\n */\nvar CornerRadius = /** @class */ (function (_super) {\n __extends(CornerRadius, _super);\n function CornerRadius() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"topLeft\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"topRight\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"bottomLeft\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"bottomRight\", void 0);\n return CornerRadius;\n}(ChildProperty));\nexport { CornerRadius };\n/**\n * @private\n */\nvar Index = /** @class */ (function () {\n function Index(seriesIndex, pointIndex) {\n this.series = seriesIndex;\n this.point = pointIndex;\n }\n return Index;\n}());\nexport { Index };\n/**\n * Configures the Empty Points of series\n */\nvar EmptyPointSettings = /** @class */ (function (_super) {\n __extends(EmptyPointSettings, _super);\n function EmptyPointSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], EmptyPointSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], EmptyPointSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Gap')\n ], EmptyPointSettings.prototype, \"mode\", void 0);\n return EmptyPointSettings;\n}(ChildProperty));\nexport { EmptyPointSettings };\n/**\n * Configures the ToolTips in the chart.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"shared\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], TooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex(Theme.tooltipLabelFont, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","/**\n * Numeric Range.\n * @private\n */\nvar DoubleRange = /** @class */ (function () {\n function DoubleRange(start, end) {\n /*\n if (!isNaN(start) && !isNaN(end)) {\n this.mIsEmpty = true;\n } else {\n this.mIsEmpty = false;\n }*/\n if (start < end) {\n this.mStart = start;\n this.mEnd = end;\n }\n else {\n this.mStart = end;\n this.mEnd = start;\n }\n }\n Object.defineProperty(DoubleRange.prototype, \"start\", {\n //private mIsEmpty: boolean;\n /** @private */\n get: function () {\n return this.mStart;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"end\", {\n /** @private */\n get: function () {\n return this.mEnd;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"delta\", {\n /*\n get isEmpty(): boolean {\n return this.mIsEmpty;\n }*/\n /** @private */\n get: function () {\n return (this.mEnd - this.mStart);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"median\", {\n /** @private */\n get: function () {\n return this.mStart + (this.mEnd - this.mStart) / 2;\n },\n enumerable: true,\n configurable: true\n });\n return DoubleRange;\n}());\nexport { DoubleRange };\n","import { getMinPointsDelta } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, logBase } from '../../common/utils/helper';\n/**\n * Numeric module is used to render numeric axis.\n */\nvar Double = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function Double(chart) {\n this.chart = chart;\n }\n /**\n * Numeric Nice Interval for the axis.\n * @private\n */\n Double.prototype.calculateNumericNiceInterval = function (axis, delta, size) {\n var actualDesiredIntervalsCount = axis.getActualDesiredIntervalsCount(size);\n var niceInterval = delta / actualDesiredIntervalsCount;\n if (axis.desiredIntervals != null) {\n return niceInterval;\n }\n var minInterval = Math.pow(10, Math.floor(logBase(niceInterval, 10)));\n for (var _i = 0, _a = axis.intervalDivs; _i < _a.length; _i++) {\n var interval = _a[_i];\n var currentInterval = minInterval * interval;\n if (actualDesiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n Double.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n axis.actualRange.interval = axis.interval || this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n };\n /**\n * Range for the axis.\n * @private\n */\n Double.prototype.initializeDoubleRange = function (axis) {\n //Axis Min\n if (axis.minimum !== null) {\n this.min = axis.minimum;\n }\n else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n this.min = 0;\n }\n // Axis Max\n if (axis.maximum !== null) {\n this.max = axis.maximum;\n }\n else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n this.max = 5;\n }\n if (this.min === this.max) {\n this.max = axis.valueType.indexOf('Category') > -1 ? this.max : this.min + 1;\n }\n axis.doubleRange = new DoubleRange(this.min, this.max);\n axis.actualRange = {};\n };\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n * @private\n */\n Double.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Calculate Range for the axis.\n * @private\n */\n Double.prototype.calculateRange = function (axis, size) {\n /*! Generate axis range */\n var series;\n this.min = null;\n this.max = null;\n if (!axis.setRange()) {\n for (var _i = 0, _a = axis.series; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (!series_1.visible) {\n continue;\n }\n this.paddingInterval = 0;\n if ((series_1.type.indexOf('Column') > -1 && axis.orientation === 'Horizontal')\n || (series_1.type.indexOf('Bar') > -1 && axis.orientation === 'Vertical')) {\n if ((series_1.xAxis.valueType === 'Double' || series_1.xAxis.valueType === 'DateTime')\n && series_1.xAxis.rangePadding === 'Auto') {\n this.paddingInterval = getMinPointsDelta(series_1.xAxis, axis.series) / 2;\n }\n }\n //For xRange\n if (axis.orientation === 'Horizontal') {\n if (this.chart.requireInvertedAxis) {\n this.findMinMax(series_1.yMin, series_1.yMax);\n }\n else {\n this.findMinMax(series_1.xMin - this.paddingInterval, series_1.xMax + this.paddingInterval);\n }\n }\n // For yRange\n if (axis.orientation === 'Vertical') {\n if (this.chart.requireInvertedAxis) {\n this.findMinMax(series_1.xMin - this.paddingInterval, series_1.xMax + this.paddingInterval);\n }\n else {\n this.findMinMax(series_1.yMin, series_1.yMax);\n }\n }\n }\n }\n };\n Double.prototype.findMinMax = function (min, max) {\n if (this.min === null || this.min > min) {\n this.min = min;\n }\n if (this.max === null || this.max < max) {\n this.max = max;\n }\n };\n /**\n * Apply padding for the range.\n * @private\n */\n Double.prototype.applyRangePadding = function (axis, size) {\n var range;\n var start = axis.actualRange.min;\n var end = axis.actualRange.max;\n if (!axis.setRange()) {\n var interval = axis.actualRange.interval;\n var padding = axis.getRangePadding(this.chart);\n if (padding === 'Additional' || padding === 'Round') {\n this.findAdditional(axis, start, end, interval);\n }\n else if (padding === 'Normal') {\n this.findNormal(axis, start, end, interval, size);\n }\n else {\n this.updateActualRange(axis, start, end, interval);\n }\n }\n axis.actualRange.delta = axis.actualRange.max - axis.actualRange.min;\n this.calculateVisibleRange(size, axis);\n };\n Double.prototype.updateActualRange = function (axis, minimum, maximum, interval) {\n axis.actualRange.min = axis.minimum != null ? axis.minimum : minimum;\n axis.actualRange.max = axis.maximum != null ? axis.maximum : maximum;\n axis.actualRange.interval = axis.interval != null ? axis.interval : interval;\n };\n Double.prototype.findAdditional = function (axis, start, end, interval) {\n var minimum;\n var maximum;\n minimum = Math.floor(start / interval) * interval;\n maximum = Math.ceil(end / interval) * interval;\n if (axis.rangePadding === 'Additional') {\n minimum -= interval;\n maximum += interval;\n }\n this.updateActualRange(axis, minimum, maximum, interval);\n };\n Double.prototype.findNormal = function (axis, start, end, interval, size) {\n var remaining;\n var minimum;\n var maximum;\n var startValue = start;\n if (start < 0) {\n startValue = 0;\n minimum = start + (start / 20);\n remaining = interval + (minimum % interval);\n if ((0.365 * interval) >= remaining) {\n minimum -= interval;\n }\n if (minimum % interval < 0) {\n minimum = (minimum - interval) - (minimum % interval);\n }\n }\n else {\n minimum = start < ((5.0 / 6.0) * end) ? 0 : (start - (end - start) / 2);\n if (minimum % interval > 0) {\n minimum -= (minimum % interval);\n }\n }\n maximum = (end > 0) ? (end + (end - startValue) / 20) : (end - (end - startValue) / 20);\n remaining = interval - (maximum % interval);\n if ((0.365 * interval) >= remaining) {\n maximum += interval;\n }\n if (maximum % interval > 0) {\n maximum = (maximum + interval) - (maximum % interval);\n }\n axis.doubleRange = new DoubleRange(minimum, maximum);\n if (minimum === 0) {\n interval = this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n maximum = Math.ceil(maximum / interval) * interval;\n }\n this.updateActualRange(axis, minimum, maximum, interval);\n };\n /**\n * Calculate visible range for axis.\n * @private\n */\n Double.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n max: axis.actualRange.max, min: axis.actualRange.min,\n delta: axis.actualRange.delta, interval: axis.actualRange.interval\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming && axis.valueType !== 'Category') ?\n this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size)\n : axis.visibleRange.interval;\n }\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n Double.prototype.calculateVisibleLabels = function (axis, chart) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0 || this.paddingInterval) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var format = this.getFormat(axis);\n var isCustom = format.match('{value}') !== null;\n axis.format = chart.intl.getNumberFormat({\n format: isCustom ? '' : format,\n useGrouping: chart.useGroupingSeparator\n });\n axis.startLabel = axis.format(axis.visibleRange.min);\n axis.endLabel = axis.format(axis.visibleRange.max);\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n if (withIn(tempInterval, axis.visibleRange)) {\n axis.triggerLabelRender(chart, tempInterval, this.formatValue(axis, isCustom, format, tempInterval), axis.labelStyle);\n }\n }\n axis.getMaxLabelWidth(chart);\n };\n /**\n * Format of the axis label.\n * @private\n */\n Double.prototype.getFormat = function (axis) {\n if (axis.labelFormat) {\n return axis.labelFormat;\n }\n return axis.isStack100 ? '{value}%' : '';\n };\n /**\n * Formatted the axis label.\n * @private\n */\n Double.prototype.formatValue = function (axis, isCustom, format, tempInterval) {\n return isCustom ? format.replace('{value}', axis.format(tempInterval))\n : axis.format(tempInterval);\n };\n return Double;\n}());\nexport { Double };\n","/**\n * Specifies the chart constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var legendRender = 'legendRender';\n/** @private */\nexport var textRender = 'textRender';\n/** @private */\nexport var pointRender = 'pointRender';\n/** @private */\nexport var seriesRender = 'seriesRender';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var axisRangeCalculated = 'axisRangeCalculated';\n/** @private */\nexport var axisMultiLabelRender = 'axisMultiLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var chartMouseMove = 'chartMouseMove';\n/** @private */\nexport var chartMouseClick = 'chartMouseClick';\n/** @private */\nexport var pointClick = 'pointClick';\n/** @private */\nexport var pointMove = 'pointMove';\n/** @private */\nexport var chartMouseLeave = 'chartMouseLeave';\n/** @private */\nexport var chartMouseDown = 'chartMouseDown';\n/** @private */\nexport var chartMouseUp = 'chartMouseUp';\n/** @private */\nexport var zoomComplete = 'zoomComplete';\n/** @private */\nexport var dragComplete = 'dragComplete';\n/** @private */\nexport var resized = 'resized';\n/** @private */\nexport var beforePrint = 'beforePrint';\n/** @private */\nexport var annotationRender = 'annotationRender';\n","var __extends = (this && this.__extends) || (function () {\n var 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 function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Theme } from '../../common/model/theme';\nimport { Font, Border } from '../../common/model/base';\n/**\n * Configures the Annotation for chart.\n */\nvar ChartAnnotationSettings = /** @class */ (function (_super) {\n __extends(ChartAnnotationSettings, _super);\n function ChartAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('Center')\n ], ChartAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Pixel')\n ], ChartAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], ChartAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], ChartAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"yAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"description\", void 0);\n return ChartAnnotationSettings;\n}(ChildProperty));\nexport { ChartAnnotationSettings };\n/**\n * label border properties.\n */\nvar LabelBorder = /** @class */ (function (_super) {\n __extends(LabelBorder, _super);\n function LabelBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], LabelBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], LabelBorder.prototype, \"width\", void 0);\n __decorate([\n Property('Rectangle')\n ], LabelBorder.prototype, \"type\", void 0);\n return LabelBorder;\n}(ChildProperty));\nexport { LabelBorder };\n/**\n * categories for multi level labels\n */\nvar MultiLevelCategories = /** @class */ (function (_super) {\n __extends(MultiLevelCategories, _super);\n function MultiLevelCategories() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"end\", void 0);\n __decorate([\n Property('')\n ], MultiLevelCategories.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"maximumTextWidth\", void 0);\n return MultiLevelCategories;\n}(ChildProperty));\nexport { MultiLevelCategories };\n/**\n * Strip line properties\n */\nvar StripLineSettings = /** @class */ (function (_super) {\n __extends(StripLineSettings, _super);\n function StripLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], StripLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"startFromAxis\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"size\", void 0);\n __decorate([\n Property('#808080')\n ], StripLineSettings.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], StripLineSettings.prototype, \"border\", void 0);\n __decorate([\n Property('')\n ], StripLineSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"rotation\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex(Theme.stripLineLabelFont, Font)\n ], StripLineSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Behind')\n ], StripLineSettings.prototype, \"zIndex\", void 0);\n __decorate([\n Property(1)\n ], StripLineSettings.prototype, \"opacity\", void 0);\n return StripLineSettings;\n}(ChildProperty));\nexport { StripLineSettings };\n/**\n * MultiLevelLabels properties\n */\nvar MultiLevelLabels = /** @class */ (function (_super) {\n __extends(MultiLevelLabels, _super);\n function MultiLevelLabels() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Center')\n ], MultiLevelLabels.prototype, \"alignment\", void 0);\n __decorate([\n Property('Wrap')\n ], MultiLevelLabels.prototype, \"overflow\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], MultiLevelLabels.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({ color: null, width: 1, type: 'Rectangle' }, LabelBorder)\n ], MultiLevelLabels.prototype, \"border\", void 0);\n __decorate([\n Collection([], MultiLevelCategories)\n ], MultiLevelLabels.prototype, \"categories\", void 0);\n return MultiLevelLabels;\n}(ChildProperty));\nexport { MultiLevelLabels };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, Complex, ChildProperty, Collection, extend } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../../common/model/base';\nimport { Size, Rect, measureText, rotateTextSize, firstToLowerCase, valueToCoefficient, inside } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { Double } from '../axis/double-axis';\nimport { Theme } from '../../common/model/theme';\nimport { axisLabelRender, axisRangeCalculated } from '../../common/model/constants';\nimport { StripLineSettings, MultiLevelLabels, LabelBorder } from '../model/chart-base';\nimport { textWrap } from '../../common/utils/helper';\nvar axisPadding = 10;\n/**\n * Configures the `rows` of the chart.\n */\nvar Row = /** @class */ (function (_super) {\n __extends(Row, _super);\n function Row() {\n /**\n * The height of the row as a string accept input both as '100px' and '100%'.\n * If specified as '100%, row renders to the full height of its chart.\n * @default '100%'\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.axes = [];\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n return _this;\n }\n /**\n * Measure the row size\n * @return {void}\n * @private\n */\n Row.prototype.computeSize = function (axis, clipRect) {\n var width = 0;\n var innerPadding = 5;\n if (axis.visible) {\n width += (axis.findTickSize(axis.crossInAxis) +\n axis.findLabelSize(axis.crossInAxis, innerPadding) + axis.lineStyle.width / 2);\n }\n if (axis.opposedPosition) {\n this.farSizes.push(width);\n }\n else {\n this.nearSizes.push(width);\n }\n };\n __decorate([\n Property('100%')\n ], Row.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Border)\n ], Row.prototype, \"border\", void 0);\n return Row;\n}(ChildProperty));\nexport { Row };\n/**\n * Configures the `columns` of the chart.\n */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n /**\n * The width of the column as a string accepts input both as like '100px' or '100%'.\n * If specified as '100%, column renders to the full width of its chart.\n * @default '100%'\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.axes = [];\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n /** @private */\n _this.padding = 0;\n return _this;\n }\n /**\n * Measure the column size\n * @return {void}\n * @private\n */\n Column.prototype.computeSize = function (axis, clipRect) {\n var height = 0;\n var innerPadding = 5;\n if (axis.visible) {\n height += (axis.findTickSize(axis.crossInAxis) +\n axis.findLabelSize(axis.crossInAxis, innerPadding) + axis.lineStyle.width / 2);\n }\n if (axis.opposedPosition) {\n this.farSizes.push(height);\n }\n else {\n this.nearSizes.push(height);\n }\n };\n __decorate([\n Property('100%')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Complex({}, Border)\n ], Column.prototype, \"border\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n/**\n * Configures the major grid lines in the `axis`.\n */\nvar MajorGridLines = /** @class */ (function (_super) {\n __extends(MajorGridLines, _super);\n function MajorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], MajorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], MajorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], MajorGridLines.prototype, \"color\", void 0);\n return MajorGridLines;\n}(ChildProperty));\nexport { MajorGridLines };\n/**\n * Configures the minor grid lines in the `axis`.\n */\nvar MinorGridLines = /** @class */ (function (_super) {\n __extends(MinorGridLines, _super);\n function MinorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.7)\n ], MinorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], MinorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], MinorGridLines.prototype, \"color\", void 0);\n return MinorGridLines;\n}(ChildProperty));\nexport { MinorGridLines };\n/**\n * Configures the axis line of a chart.\n */\nvar AxisLine = /** @class */ (function (_super) {\n __extends(AxisLine, _super);\n function AxisLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], AxisLine.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], AxisLine.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], AxisLine.prototype, \"color\", void 0);\n return AxisLine;\n}(ChildProperty));\nexport { AxisLine };\n/**\n * Configures the major tick lines.\n */\nvar MajorTickLines = /** @class */ (function (_super) {\n __extends(MajorTickLines, _super);\n function MajorTickLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], MajorTickLines.prototype, \"width\", void 0);\n __decorate([\n Property(5)\n ], MajorTickLines.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], MajorTickLines.prototype, \"color\", void 0);\n return MajorTickLines;\n}(ChildProperty));\nexport { MajorTickLines };\n/**\n * Configures the minor tick lines.\n */\nvar MinorTickLines = /** @class */ (function (_super) {\n __extends(MinorTickLines, _super);\n function MinorTickLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.7)\n ], MinorTickLines.prototype, \"width\", void 0);\n __decorate([\n Property(5)\n ], MinorTickLines.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], MinorTickLines.prototype, \"color\", void 0);\n return MinorTickLines;\n}(ChildProperty));\nexport { MinorTickLines };\n/**\n * Configures the crosshair ToolTip.\n */\nvar CrosshairTooltip = /** @class */ (function (_super) {\n __extends(CrosshairTooltip, _super);\n function CrosshairTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], CrosshairTooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], CrosshairTooltip.prototype, \"fill\", void 0);\n __decorate([\n Complex(Theme.crosshairLabelFont, Font)\n ], CrosshairTooltip.prototype, \"textStyle\", void 0);\n return CrosshairTooltip;\n}(ChildProperty));\nexport { CrosshairTooltip };\n/**\n * Configures the axes in the chart.\n */\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Options to customize the axis label.\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n /** @private */\n _this.series = [];\n /** @private */\n _this.rect = new Rect(undefined, undefined, 0, 0);\n /** @private */\n _this.axisBottomLine = null;\n /** @private */\n _this.intervalDivs = [10, 5, 2, 1];\n /** @private */\n _this.angle = _this.labelRotation;\n /** @private */\n _this.isStack100 = false;\n /** @private */\n _this.crossAt = null;\n /** @private */\n _this.updatedRect = null;\n /** @private */\n _this.multiLevelLabelHeight = 0;\n return _this;\n }\n /**\n * The function used to find tick size.\n * @return {number}\n * @private\n */\n Axis.prototype.findTickSize = function (crossAxis) {\n if (this.tickPosition === 'Inside') {\n return 0;\n }\n if (crossAxis && (!crossAxis.visibleRange || this.isInside(crossAxis.visibleRange))) {\n return 0;\n }\n return this.majorTickLines.height;\n };\n /**\n * The function used to find axis position.\n * @return {number}\n * @private\n */\n Axis.prototype.isInside = function (range) {\n return (inside(this.crossAt, range) ||\n (!this.opposedPosition && this.crossAt >= range.max) || (this.opposedPosition && this.crossAt <= range.min));\n };\n /**\n * The function used to find label Size.\n * @return {number}\n * @private\n */\n Axis.prototype.findLabelSize = function (crossAxis, innerPadding) {\n var titleSize = 0;\n if (this.title) {\n titleSize = measureText(this.title, this.titleStyle).height + innerPadding;\n }\n if (this.labelPosition === 'Inside') {\n return titleSize + innerPadding;\n }\n var diff;\n var value;\n var labelSize = titleSize + innerPadding + axisPadding +\n ((this.orientation === 'Vertical') ? this.maxLabelSize.width : this.maxLabelSize.height) + this.multiLevelLabelHeight;\n if (crossAxis && this.placeNextToAxisLine) {\n var range = crossAxis.visibleRange;\n var size = (crossAxis.orientation === 'Horizontal') ? crossAxis.rect.width : crossAxis.rect.height;\n if (!range || !size) {\n return 0;\n }\n else if (this.isInside(range)) {\n value = this.findDifference(crossAxis);\n diff = (value) * (size / range.delta);\n diff = (value) * ((size - (diff < labelSize ? (labelSize - diff) : 0)) / range.delta);\n labelSize = (diff < labelSize) ? (labelSize - diff) : 0;\n }\n }\n return labelSize;\n };\n /**\n * The function used to find axis position.\n * @return {number}\n * @private\n */\n Axis.prototype.updateCrossValue = function (chart) {\n var value = this.crossAt;\n if (value === null || !this.isInside(this.crossInAxis.visibleRange)) {\n this.updatedRect = this.rect;\n return null;\n }\n var range = this.crossInAxis.visibleRange;\n if (!this.opposedPosition) {\n if (this.crossAt > range.max) {\n value = range.max;\n }\n }\n else {\n if (this.crossAt < range.min) {\n value = range.min;\n }\n }\n this.updatedRect = extend({}, this.rect, null, true);\n if (this.orientation === 'Horizontal') {\n value = this.crossInAxis.rect.height - (valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.height);\n this.updatedRect.y = this.crossInAxis.rect.y + value;\n }\n else {\n value = valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.width;\n this.updatedRect.x = this.crossInAxis.rect.x + value;\n }\n };\n Axis.prototype.findDifference = function (crossAxis) {\n var value = 0;\n if (this.opposedPosition) {\n value = crossAxis.isInversed ? crossAxis.visibleRange.min : crossAxis.visibleRange.max;\n }\n else {\n value = crossAxis.isInversed ? crossAxis.visibleRange.max : crossAxis.visibleRange.min;\n }\n return Math.abs(this.crossAt - value);\n };\n /**\n * The function used to find whether the range is set.\n * @return {boolean}\n * @private\n */\n Axis.prototype.setRange = function () {\n if (this.minimum != null && this.maximum != null) {\n return true;\n }\n return false;\n };\n /**\n * Calculate visible range for axis.\n * @return {void}\n * @private\n */\n Axis.prototype.calculateVisibleRange = function (size) {\n if (this.zoomFactor < 1 || this.zoomPosition > 0) {\n var baseRange = this.actualRange;\n var start = void 0;\n var end = void 0;\n if (!this.isInversed) {\n start = this.actualRange.min + this.zoomPosition * this.actualRange.delta;\n end = start + this.zoomFactor * this.actualRange.delta;\n }\n else {\n start = this.actualRange.max - (this.zoomPosition * this.actualRange.delta);\n end = start - (this.zoomFactor * this.actualRange.delta);\n }\n if (start < baseRange.min) {\n end = end + (baseRange.min - start);\n start = baseRange.min;\n }\n if (end > baseRange.max) {\n start = start - (end - baseRange.max);\n end = baseRange.max;\n }\n this.doubleRange = new DoubleRange(start, end);\n this.visibleRange.min = this.doubleRange.start;\n this.visibleRange.max = this.doubleRange.end;\n this.visibleRange.delta = this.doubleRange.delta;\n }\n };\n /**\n * Calculate desired interval for the axis.\n * @return {void}\n * @private\n */\n Axis.prototype.getActualDesiredIntervalsCount = function (availableSize) {\n var size = this.orientation === 'Horizontal' ? availableSize.width : availableSize.height;\n if (this.desiredIntervals === null) {\n var desiredIntervalsCount = (this.orientation === 'Horizontal' ? 0.533 : 1) * this.maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n }\n else {\n return this.desiredIntervals;\n }\n };\n /**\n * Triggers the event.\n * @return {void}\n * @private\n */\n Axis.prototype.triggerLabelRender = function (chart, tempInterval, text, labelStyle) {\n var argsData;\n argsData = {\n cancel: false, name: axisLabelRender, axis: this,\n text: text, value: tempInterval, labelStyle: labelStyle\n };\n chart.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n this.visibleLabels.push(new VisibleLabels(argsData.text, argsData.value, argsData.labelStyle));\n }\n };\n /**\n * Triggers the event.\n * @return {void}\n * @private\n */\n Axis.prototype.triggerRangeRender = function (chart, minimum, maximum, interval) {\n var argsData;\n argsData = {\n cancel: false, name: axisRangeCalculated, axis: this,\n minimum: minimum, maximum: maximum, interval: interval\n };\n chart.trigger(axisRangeCalculated, argsData);\n if (!argsData.cancel) {\n this.visibleRange.min = argsData.minimum;\n this.visibleRange.max = argsData.maximum;\n this.visibleRange.interval = argsData.interval;\n this.visibleRange.delta = argsData.maximum - argsData.minimum;\n }\n };\n /**\n * Calculate padding for the axis.\n * @return {string}\n * @private\n */\n Axis.prototype.getRangePadding = function (chart) {\n var padding = this.rangePadding;\n if (padding !== 'Auto') {\n return padding;\n }\n switch (this.orientation) {\n case 'Horizontal':\n if (chart.requireInvertedAxis) {\n padding = (this.isStack100 ? 'Round' : 'Normal');\n }\n else {\n padding = 'None';\n }\n break;\n case 'Vertical':\n if (!chart.requireInvertedAxis) {\n padding = (this.isStack100 ? 'Round' : 'Normal');\n }\n else {\n padding = 'None';\n }\n break;\n }\n return padding;\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n * @private\n */\n Axis.prototype.getMaxLabelWidth = function (chart) {\n var prevSize = new Size(0, 0);\n var rotatedLabel;\n var pointX;\n var previousEnd = 0;\n var isIntersect = false;\n this.angle = this.labelRotation;\n this.maxLabelSize = new Size(0, 0);\n var action = this.labelIntersectAction;\n var label;\n for (var i = 0; i < this.visibleLabels.length; i++) {\n label = this.visibleLabels[i];\n label.size = measureText(label.text, this.labelStyle);\n if (label.size.width > this.maxLabelSize.width) {\n this.maxLabelSize.width = label.size.width;\n this.rotatedLabel = label.text;\n }\n if (label.size.height > this.maxLabelSize.height) {\n this.maxLabelSize.height = label.size.height;\n }\n if (action === 'None' || action === 'Hide' || action === 'Trim') {\n continue;\n }\n if ((action !== 'None' || this.angle % 360 === 0) && this.orientation === 'Horizontal' &&\n this.rect.width > 0 && !isIntersect) {\n pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n pointX -= label.size.width / 2;\n if (this.edgeLabelPlacement === 'Shift') {\n if (i === 0 && pointX < this.rect.x) {\n pointX = this.rect.x;\n }\n if (i === this.visibleLabels.length - 1 && ((pointX + label.size.width) > (this.rect.x + this.rect.width))) {\n pointX = this.rect.x + this.rect.width - label.size.width;\n }\n }\n switch (action) {\n case 'MultipleRows':\n if (i > 0) {\n this.findMultiRows(i, pointX, label);\n }\n break;\n case 'Rotate45':\n case 'Rotate90':\n if (i > 0 && (!this.isInversed ? pointX <= previousEnd : pointX + label.size.width >= previousEnd)) {\n this.angle = (action === 'Rotate45') ? 45 : 90;\n isIntersect = true;\n }\n break;\n default:\n label.text = textWrap(label.text, this.rect.width / this.visibleLabels.length, this.labelStyle);\n var height = (label.size.height * label.text.length);\n if (height > this.maxLabelSize.height) {\n this.maxLabelSize.height = height;\n }\n break;\n }\n previousEnd = this.isInversed ? pointX : pointX + label.size.width;\n }\n }\n if (this.angle !== 0 && this.orientation === 'Horizontal') {\n this.maxLabelSize = rotateTextSize(this.labelStyle, this.rotatedLabel, this.angle, chart);\n }\n if (chart.multiLevelLabelModule && this.multiLevelLabels.length > 0) {\n chart.multiLevelLabelModule.getMultilevelLabelsHeight(this);\n }\n };\n /**\n * Finds the multiple rows for axis.\n * @return {void}\n */\n Axis.prototype.findMultiRows = function (length, currentX, currentLabel) {\n var label;\n var pointX;\n var store = [];\n var isMultiRows;\n for (var i = length - 1; i >= 0; i--) {\n label = this.visibleLabels[i];\n pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n isMultiRows = !this.isInversed ? currentX < (pointX + label.size.width / 2) :\n currentX + currentLabel.size.width > (pointX - label.size.width / 2);\n if (isMultiRows) {\n store.push(label.index);\n currentLabel.index = (currentLabel.index > label.index) ? currentLabel.index : label.index + 1;\n }\n else {\n currentLabel.index = store.indexOf(label.index) > -1 ? currentLabel.index : label.index;\n }\n }\n var height = (currentLabel.size.height * currentLabel.index) + (5 * (currentLabel.index - 1));\n if (height > this.maxLabelSize.height) {\n this.maxLabelSize.height = height;\n }\n };\n /**\n * Finds the default module for axis.\n * @return {void}\n * @private\n */\n Axis.prototype.getModule = function (chart) {\n if (this.valueType === 'Double') {\n this.baseModule = new Double(chart);\n }\n else {\n this.baseModule = chart[firstToLowerCase(this.valueType) + 'Module'];\n }\n };\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Axis.prototype, \"labelStyle\", void 0);\n __decorate([\n Complex({}, CrosshairTooltip)\n ], Axis.prototype, \"crosshairTooltip\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"title\", void 0);\n __decorate([\n Complex(Theme.axisTitleFont, Font)\n ], Axis.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"skeleton\", void 0);\n __decorate([\n Property('DateTime')\n ], Axis.prototype, \"skeletonType\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"plotOffset\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isIndexed\", void 0);\n __decorate([\n Property(10)\n ], Axis.prototype, \"logBase\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"columnIndex\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"rowIndex\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"span\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"desiredIntervals\", void 0);\n __decorate([\n Property(3)\n ], Axis.prototype, \"maximumLabels\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"zoomPosition\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"enableAutoIntervalOnZooming\", void 0);\n __decorate([\n Property('Auto')\n ], Axis.prototype, \"rangePadding\", void 0);\n __decorate([\n Property('Double')\n ], Axis.prototype, \"valueType\", void 0);\n __decorate([\n Property('None')\n ], Axis.prototype, \"edgeLabelPlacement\", void 0);\n __decorate([\n Property('Auto')\n ], Axis.prototype, \"intervalType\", void 0);\n __decorate([\n Property('BetweenTicks')\n ], Axis.prototype, \"labelPlacement\", void 0);\n __decorate([\n Property('Outside')\n ], Axis.prototype, \"tickPosition\", void 0);\n __decorate([\n Property('Outside')\n ], Axis.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"name\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"visible\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"minorTicksPerInterval\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"labelRotation\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"crossesAt\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"placeNextToAxisLine\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"crossesInAxis\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"interval\", void 0);\n __decorate([\n Complex({}, MajorTickLines)\n ], Axis.prototype, \"majorTickLines\", void 0);\n __decorate([\n Complex({}, MinorTickLines)\n ], Axis.prototype, \"minorTickLines\", void 0);\n __decorate([\n Complex({}, MajorGridLines)\n ], Axis.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, MinorGridLines)\n ], Axis.prototype, \"minorGridLines\", void 0);\n __decorate([\n Complex({}, AxisLine)\n ], Axis.prototype, \"lineStyle\", void 0);\n __decorate([\n Property('Trim')\n ], Axis.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property(100)\n ], Axis.prototype, \"coefficient\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"startAngle\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"description\", void 0);\n __decorate([\n Property(2)\n ], Axis.prototype, \"tabIndex\", void 0);\n __decorate([\n Collection([], StripLineSettings)\n ], Axis.prototype, \"stripLines\", void 0);\n __decorate([\n Collection([], MultiLevelLabels)\n ], Axis.prototype, \"multiLevelLabels\", void 0);\n __decorate([\n Complex({ color: null, width: 0, type: 'Rectangle' }, LabelBorder)\n ], Axis.prototype, \"border\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, labelStyle, size, index) {\n if (size === void 0) { size = new Size(0, 0); }\n if (index === void 0) { index = 1; }\n this.text = text;\n this.originalText = text;\n this.value = value;\n this.labelStyle = labelStyle;\n this.size = size;\n this.index = 1;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n","import { DataUtil } from '@syncfusion/ej2-data';\nimport { subtractThickness, valueToCoefficient, sum, subArray, TextOption, inside, measureText } from '../../common/utils/helper';\nimport { Size, Rect, Thickness, PathOption, logBase, createZoomingLabels, getElement, rotateTextSize } from '../../common/utils/helper';\nimport { textElement, textTrim } from '../../common/utils/helper';\n/**\n * Specifies the Cartesian Axis Layout.\n */\nvar axisPadding = 10;\nvar CartesianAxisLayoutPanel = /** @class */ (function () {\n /** @private */\n function CartesianAxisLayoutPanel(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * Measure the axis size.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.crossAt(chart);\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n this.initialClipRect = rect;\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with initial Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n this.calculateAxisSize(this.initialClipRect);\n }\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with series Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n chart.refreshAxis();\n this.calculateAxisSize(this.seriesClipRect);\n }\n };\n CartesianAxisLayoutPanel.prototype.measureRowAxis = function (chart, rect) {\n var row;\n this.calculateRowSize(rect);\n for (var _i = 0, _a = chart.rows; _i < _a.length; _i++) {\n var item = _a[_i];\n row = item;\n row.nearSizes = [];\n row.farSizes = [];\n this.arrangeAxis(row);\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight), rect);\n if (this.leftSize < sum(row.nearSizes)) {\n this.leftSize = sum(row.nearSizes);\n }\n if (this.rightSize < sum(row.farSizes)) {\n this.rightSize = sum(row.farSizes);\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.measureColumnAxis = function (chart, rect) {\n var column;\n this.calculateColumnSize(rect);\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var item = _a[_i];\n column = item;\n column.farSizes = [];\n column.nearSizes = [];\n this.arrangeAxis(column);\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height), rect);\n if (this.bottomSize < sum(column.nearSizes)) {\n this.bottomSize = sum(column.nearSizes);\n }\n if (this.topSize < sum(column.farSizes)) {\n this.topSize = sum(column.farSizes);\n }\n }\n };\n /**\n * Measure the column and row in chart.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureDefinition = function (definition, chart, size, clipRect) {\n var axis;\n var axisType;\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis_1 = _a[_i];\n axis_1.getModule(chart);\n axis_1.baseModule.calculateRangeAndInterval(size, axis_1);\n definition.computeSize(axis_1, clipRect);\n }\n if (definition.farSizes.length > 0) {\n definition.farSizes[definition.farSizes.length - 1] -= axisPadding;\n }\n if (definition.nearSizes.length > 0) {\n definition.nearSizes[definition.nearSizes.length - 1] -= axisPadding;\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.calculateAxisSize = function (rect) {\n var chart = this.chart;\n var row;\n var column;\n var definition;\n var axis;\n var nearCount = 0;\n var farCount = 0;\n var size = 0;\n var x;\n var y;\n this.calculateRowSize(rect);\n for (var i = 0, len = chart.rows.length; i < len; i++) {\n row = chart.rows[i];\n nearCount = 0;\n farCount = 0;\n for (var j = 0, len_1 = row.axes.length; j < len_1; j++) {\n axis = row.axes[j];\n if (axis.rect.height === 0) {\n axis.rect.height = row.computedHeight;\n size = 0;\n for (var k = i + 1, len_2 = i + axis.span; k < len_2; k++) {\n definition = chart.rows[k];\n size += definition.computedHeight;\n }\n axis.rect.y = (row.computedTop - size) + axis.plotOffset;\n axis.rect.height = (axis.rect.height + size) - (2 * axis.plotOffset);\n axis.rect.width = 0;\n }\n if (axis.opposedPosition) {\n x = rect.x + rect.width + sum(subArray(row.farSizes, farCount));\n axis.rect.x = axis.rect.x >= x ? axis.rect.x : x;\n farCount++;\n }\n else {\n x = rect.x - sum(subArray(row.nearSizes, nearCount));\n axis.rect.x = axis.rect.x <= x ? axis.rect.x : x;\n nearCount++;\n }\n }\n }\n this.calculateColumnSize(rect);\n for (var i = 0, len = chart.columns.length; i < len; i++) {\n column = chart.columns[i];\n nearCount = 0;\n farCount = 0;\n for (var j = 0, len_3 = column.axes.length; j < len_3; j++) {\n axis = column.axes[j];\n if (axis.rect.width === 0) {\n for (var k = i, len_4 = (i + axis.span); k < len_4; k++) {\n definition = chart.columns[k];\n axis.rect.width += definition.computedWidth;\n }\n axis.rect.x = column.computedLeft + axis.plotOffset;\n axis.rect.width -= (2 * axis.plotOffset);\n axis.rect.height = 0;\n }\n if (axis.opposedPosition) {\n y = rect.y - sum(subArray(column.farSizes, farCount));\n axis.rect.y = axis.rect.y <= y ? axis.rect.y : y;\n farCount++;\n }\n else {\n y = rect.y + rect.height + sum(subArray(column.nearSizes, nearCount));\n axis.rect.y = axis.rect.y >= y ? axis.rect.y : y;\n nearCount++;\n }\n }\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measure = function () {\n var chart = this.chart;\n var row;\n var column;\n var definition;\n var axis;\n var actualIndex;\n var span;\n var axisLength;\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis_2 = _a[_i];\n //definition.Axes = axis;\n if (axis_2.orientation === 'Vertical') {\n chart.verticalAxes.push(axis_2);\n actualIndex = this.getActualRow(axis_2);\n row = chart.rows[actualIndex];\n this.pushAxis(row, axis_2);\n span = ((actualIndex + axis_2.span) > chart.rows.length ? chart.rows.length : (actualIndex + axis_2.span));\n for (var j = actualIndex + 1; j < span; j++) {\n definition = chart.rows[j];\n definition.axes[row.axes.length - 1] = axis_2;\n chart.rows[j] = definition;\n }\n chart.rows[actualIndex] = row;\n }\n else {\n chart.horizontalAxes.push(axis_2);\n actualIndex = this.getActualColumn(axis_2);\n column = chart.columns[actualIndex];\n this.pushAxis(column, axis_2);\n span = ((actualIndex + axis_2.span) > chart.columns.length ? chart.columns.length : (actualIndex + axis_2.span));\n for (var j = actualIndex + 1; j < span; j++) {\n definition = chart.columns[j];\n definition.axes[column.axes.length - 1] = axis_2;\n chart.columns[j] = definition;\n }\n chart.columns[actualIndex] = column;\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.crossAt = function (chart) {\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n if (axis.crossesAt === null) {\n continue;\n }\n var isTransposed = chart.isTransposed;\n if (!axis.crossesInAxis) {\n if (chart.requireInvertedAxis) {\n axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryXAxis : chart.primaryYAxis;\n }\n else {\n axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryYAxis : chart.primaryXAxis;\n }\n axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n continue;\n }\n else {\n for (var i = 2, len = chart.axisCollections.length; i < len; i++) {\n if (axis.crossesInAxis === chart.axisCollections[i].name) {\n axis.crossInAxis = chart.axisCollections[i];\n axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n continue;\n }\n }\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.updateCrossAt = function (axis, crossAt) {\n switch (axis.valueType) {\n case 'DateTime':\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n return Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: crossAt }).val))));\n case 'Category':\n return parseFloat(crossAt) ? parseFloat(crossAt) : axis.labels.indexOf(crossAt);\n case 'Logarithmic':\n return logBase(crossAt, axis.logBase);\n default:\n return crossAt;\n }\n };\n CartesianAxisLayoutPanel.prototype.pushAxis = function (definition, axis) {\n for (var i = 0, len = definition.axes.length; i <= len; i++) {\n if (!definition.axes[i]) {\n definition.axes[i] = axis;\n break;\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.arrangeAxis = function (definition) {\n var axisCollection = [];\n for (var i = 0, len = definition.axes.length; i <= len; i++) {\n if (definition.axes[i]) {\n axisCollection.push(definition.axes[i]);\n }\n }\n definition.axes = axisCollection;\n };\n CartesianAxisLayoutPanel.prototype.getActualColumn = function (axis) {\n var actualLength = this.chart.columns.length;\n var pos = axis.columnIndex;\n var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n return result;\n };\n CartesianAxisLayoutPanel.prototype.getActualRow = function (axis) {\n var actualLength = this.chart.rows.length;\n var pos = axis.rowIndex;\n var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n return result;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n CartesianAxisLayoutPanel.prototype.calculateRowSize = function (rect) {\n /*! Calculate row size */\n var chart = this.chart;\n var row;\n var rowTop = rect.y + rect.height;\n var height = 0;\n var remainingHeight = Math.max(0, rect.height);\n for (var i = 0, len = chart.rows.length; i < len; i++) {\n row = chart.rows[i];\n if (row.height.indexOf('%') !== -1) {\n height = Math.min(remainingHeight, (rect.height * parseInt(row.height, 10) / 100));\n }\n else {\n height = Math.min(remainingHeight, parseInt(row.height, 10));\n }\n height = (i !== (len - 1)) ? height : remainingHeight;\n row.computedHeight = height;\n rowTop -= height;\n row.computedTop = rowTop;\n remainingHeight -= height;\n }\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n CartesianAxisLayoutPanel.prototype.calculateColumnSize = function (rect) {\n /*! Calculate column size */\n var chart = this.chart;\n var column;\n var columnLeft = rect.x;\n var width = 0;\n var remainingWidth = Math.max(0, rect.width);\n for (var i = 0, len = chart.columns.length; i < len; i++) {\n column = chart.columns[i];\n if (column.width.indexOf('%') !== -1) {\n width = Math.min(remainingWidth, (rect.width * parseInt(column.width, 10) / 100));\n }\n else {\n width = Math.min(remainingWidth, parseInt(column.width, 10));\n }\n width = (i !== (len - 1)) ? width : remainingWidth;\n column.computedWidth = width;\n column.computedLeft = columnLeft;\n columnLeft += width;\n remainingWidth -= width;\n }\n };\n /**\n * To render the axis element.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.renderAxes = function () {\n var chart = this.chart;\n var axis;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisInsideCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n var outsideElement;\n var isInside;\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n axis = chart.axisCollections[i];\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Inside' });\n outsideElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Outside' });\n isInside = this.findAxisPosition(axis);\n if (axis.orientation === 'Horizontal') {\n axis.updateCrossValue(chart);\n if (axis.visible && axis.lineStyle.width > 0) {\n this.drawAxisLine(axis, i, axis.plotOffset, 0, isInside ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawXAxisGridLine(axis, i, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.visible) {\n this.drawXAxisLabels(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawXAxisBorder(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawXAxisTitle(axis, i, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n }\n else {\n axis.updateCrossValue(chart);\n if (axis.visible && axis.lineStyle.width > 0) {\n this.drawAxisLine(axis, i, 0, axis.plotOffset, isInside ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawYAxisGridLine(axis, i, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.visible) {\n this.drawYAxisLabels(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawYAxisBorder(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawYAxisTitle(axis, i, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n }\n axisElement.appendChild(this.element);\n if (outsideElement && outsideElement.childNodes.length > 0) {\n axisLineElement.appendChild(outsideElement);\n }\n }\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'DefinitionLine' });\n for (var j = 0, len = chart.rows.length; j < len; j++) {\n var row = chart.rows[j];\n if (row.border.color) {\n this.drawBottomLine(row, j, true);\n }\n }\n for (var j = 0, len = chart.columns.length; j < len; j++) {\n var column = chart.columns[j];\n if (column.border.color) {\n this.drawBottomLine(column, j, false);\n }\n }\n axisElement.appendChild(this.element);\n chart.svgObject.appendChild(axisElement);\n return axisLineElement;\n };\n CartesianAxisLayoutPanel.prototype.findAxisPosition = function (axis) {\n return axis.crossAt !== null && axis.isInside(axis.crossInAxis.visibleRange);\n };\n CartesianAxisLayoutPanel.prototype.drawBottomLine = function (definition, index, isRow) {\n var chart = this.chart;\n var optionsLine = {};\n var x1;\n var x2;\n var y1;\n var y2;\n var definitionName;\n if (isRow) {\n definition = definition;\n y1 = y2 = definition.computedTop + definition.computedHeight;\n x1 = this.seriesClipRect.x;\n x2 = x1 + this.seriesClipRect.width;\n definitionName = 'Row';\n }\n else {\n definition = definition;\n x1 = x2 = definition.computedLeft;\n y1 = this.seriesClipRect.y;\n y2 = y1 + this.seriesClipRect.height;\n definitionName = 'Column';\n }\n optionsLine = {\n 'id': chart.element.id + '_AxisBottom_' + definitionName + index,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n 'stroke-width': definition.border.width,\n 'stroke': definition.border.color,\n };\n this.htmlObject = chart.renderer.drawLine(optionsLine);\n this.element.appendChild(this.htmlObject);\n };\n CartesianAxisLayoutPanel.prototype.drawAxisLine = function (axis, index, plotX, plotY, parent, rect) {\n var chart = this.chart;\n var optionsLine = {};\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n x1: rect.x - plotX,\n y1: rect.y - plotY,\n x2: rect.x + rect.width + plotX,\n y2: rect.y + rect.height + plotY,\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n this.htmlObject = chart.renderer.drawLine(optionsLine);\n parent.appendChild(this.htmlObject);\n };\n CartesianAxisLayoutPanel.prototype.drawYAxisGridLine = function (axis, index, parent, rect) {\n var chart = this.chart;\n var tempInterval;\n var pointY = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorGird = '';\n var minorTick = '';\n var minorDirection;\n var tickSize = axis.opposedPosition ? axis.majorTickLines.height : -axis.majorTickLines.height;\n var axisLineSize = (axis.opposedPosition) ? axis.lineStyle.width / 2 : -axis.lineStyle.width / 2;\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ?\n 0.5 : 0;\n var ticks = axis.tickPosition === 'Inside' ? (rect.x - tickSize - axisLineSize) : (rect.x + tickSize + axisLineSize);\n var length = axis.visibleLabels.length;\n if (axis.valueType.indexOf('Category') && axis.labelPlacement === 'BetweenTicks' && length > 0) {\n length += 1;\n }\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = !axis.visibleLabels[i] ? (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel\n : axis.visibleLabels[i].value - ticksbwtLabel;\n pointY = valueToCoefficient(tempInterval, axis) * rect.height;\n pointY = (pointY * -1) + (rect.y + rect.height);\n if (pointY >= rect.y && (rect.y + rect.height) >= pointY) {\n if ((inside(tempInterval, axis.visibleRange)) || this.isBorder(axis, i, pointY)) {\n majorGrid = majorGrid.concat('M ' + this.seriesClipRect.x + ' ' + (pointY) +\n ' L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + pointY + ' ');\n }\n majorTick = majorTick.concat('M ' + (rect.x + axisLineSize) + ' ' + pointY +\n ' L ' + (ticks) + ' ' + pointY + ' ');\n }\n if ((axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0) && axis.minorTicksPerInterval > 0) {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGird, minorTick, rect, i);\n minorGird = minorDirection[0];\n minorTick = minorDirection[1];\n }\n }\n this.renderGridLine(axis, index, majorGrid, minorGird);\n this.renderTickLine(axis, index, majorTick, minorTick, parent);\n };\n CartesianAxisLayoutPanel.prototype.isBorder = function (axis, index, value) {\n var chart = this.chart;\n var border = chart.chartArea.border;\n var rect = this.seriesClipRect;\n var orientation = axis.orientation;\n var start = (orientation === 'Horizontal') ? rect.x : rect.y;\n var size = (orientation === 'Horizontal') ? rect.width : rect.height;\n var startIndex = (orientation === 'Horizontal') ? 0 : axis.visibleLabels.length - 1;\n var endIndex = (orientation === 'Horizontal') ? axis.visibleLabels.length - 1 : 0;\n if (axis.plotOffset > 0) {\n return true;\n }\n else if ((value === start || value === (start + size)) && (border.width <= 0 || border.color === 'transparent')) {\n return true;\n }\n else if ((value !== start && index === startIndex) || (value !== (start + size) && index === endIndex)) {\n return true;\n }\n return false;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var elementSize;\n var options;\n var isLabelInside = axis.labelPosition === 'Inside';\n var isTickInside = axis.tickPosition === 'Inside';\n var isOpposed = axis.opposedPosition;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var padding = tickSpace + this.padding + axis.lineStyle.width / 2;\n padding = (axis.opposedPosition) ? padding : -padding;\n var anchor = ((isOpposed && isLabelInside) || (!isOpposed && !isLabelInside)) ? 'end' : 'start';\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n pointX = isLabelInside ? (rect.x - padding) : (rect.x + padding);\n elementSize = axis.visibleLabels[i].size;\n pointY = valueToCoefficient(axis.visibleLabels[i].value, axis) * rect.height;\n pointY = Math.floor((pointY * -1) + (rect.y + rect.height));\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY + (elementSize.height / 4), anchor, axis.visibleLabels[i].text);\n if (axis.edgeLabelPlacement) {\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (axis.isInversed && i === len - 1)) && options.y > rect.y + rect.height) ||\n (((i === len - 1) || (axis.isInversed && i === 0)) && options.y - elementSize.height / 2 < rect.y)) {\n options.text = '';\n }\n break;\n case 'Shift':\n if ((i === 0 || (axis.isInversed && i === len - 1)) && options.y > rect.y + rect.height) {\n options.y = pointY = rect.y + rect.height;\n }\n else if (((i === len - 1) || (axis.isInversed && i === 0)) && (options.y - elementSize.height / 2 < rect.y)) {\n options.y = pointY = rect.y + elementSize.height / 2;\n }\n break;\n }\n }\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n if (!chart.delayRedraw) {\n parent.appendChild(labelElement);\n }\n else if (axis.visible) {\n this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n }\n };\n /**\n * To render the axis label border.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisBorder = function (axis, index, parent, rect) {\n if (axis.border.width > 0) {\n var startY = void 0;\n var pointY = void 0;\n var gap = (rect.height / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n : axis.visibleRange.interval);\n var endY = void 0;\n var length_1 = axis.maxLabelSize.width + 10 + ((axis.tickPosition === axis.labelPosition) ?\n axis.majorTickLines.height : 0);\n var labelBorder = '';\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n var endX = ((axis.opposedPosition && axis.labelPosition === 'Inside') ||\n (!axis.opposedPosition && axis.labelPosition === 'Outside')) ? rect.x - length_1 : rect.x + length_1;\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n pointY = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n pointY = (axis.isInversed ? (1 - pointY) : pointY) * rect.height;\n if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n startY = Math.floor((pointY * -1) + (rect.y + rect.height));\n endY = Math.floor((pointY * -1) - (gap) + (rect.y + rect.height));\n }\n else {\n startY = Math.floor((pointY * -1) + gap / 2 + (rect.y + rect.height));\n endY = Math.floor((pointY * -1) - gap / 2 + (rect.y + rect.height));\n }\n switch (axis.border.type) {\n case 'Rectangle':\n case 'WithoutTopBorder':\n if (startY > (rect.y + rect.height)) {\n labelBorder += ('M' + ' ' + endX + ' ' + (rect.y + rect.height) + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n }\n else if (Math.floor(rect.y) > (endY)) {\n labelBorder += ('M' + ' ' + rect.x + ' ' + startY + ' ' + 'L' + ' ' + endX\n + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + (rect.y) + ' ');\n }\n else {\n labelBorder += ('M' + ' ' + rect.x + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + rect.x + ' ' + endY + ' ' + 'L' + ' ' +\n endX + ' ' + endY + ' ');\n }\n }\n break;\n case 'WithoutTopandBottomBorder':\n if (!(startY > rect.y + rect.height) && !((endY) < Math.floor(rect.y))) {\n labelBorder += ('M' + ' ' + rect.x + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'M' + ' ' + endX + ' ' + endY + ' ' +\n 'L' + ' ' + rect.x + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle') ? ('M' + ' ' + rect.x + ' ' + rect.y + ' ' + 'L' + ' ' +\n rect.x + ' ' + (rect.y + rect.height) + ' ') : '';\n if (labelBorder !== '') {\n this.createAxisBorderElement(axis, index, labelBorder, parent);\n }\n }\n if (axis.multiLevelLabels.length > 0 && this.chart.multiLevelLabelModule) {\n this.chart.multiLevelLabelModule.renderYAxisMultiLevelLabels(axis, index, parent, rect);\n }\n };\n CartesianAxisLayoutPanel.prototype.drawYAxisTitle = function (axis, index, parent, rect) {\n var chart = this.chart;\n var labelRotation = (axis.opposedPosition) ? 90 : -90;\n var elementSize = measureText(axis.title, axis.titleStyle);\n var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + this.padding) +\n (axis.labelPosition === 'Inside' ? 0 :\n (axis.maxLabelSize.width + axis.multiLevelLabelHeight + this.padding));\n padding = axis.opposedPosition ? padding : -padding;\n var x = rect.x + padding;\n var y = rect.y + rect.height / 2;\n var options = new TextOption(chart.element.id + '_AxisTitle_' + index, x, y - this.padding, 'middle', axis.title, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')');\n var element = textElement(options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitle, parent);\n element.setAttribute('aria-label', axis.description || axis.title);\n element.setAttribute('tabindex', axis.tabIndex.toString());\n };\n CartesianAxisLayoutPanel.prototype.drawXAxisGridLine = function (axis, index, parent, rect) {\n var chart = this.chart;\n var tempInterval;\n var pointX = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorGird = '';\n var minorTick = '';\n var minorDirection;\n var tickSize = (axis.opposedPosition) ? -axis.majorTickLines.height : axis.majorTickLines.height;\n var axisLineSize = (axis.opposedPosition) ? -axis.lineStyle.width / 2 : axis.lineStyle.width / 2;\n var ticksbwtLabel = (axis.valueType.indexOf('Category') > -1 && axis.labelPlacement === 'BetweenTicks') ?\n 0.5 : 0;\n var length = axis.visibleLabels.length;\n var ticks = axis.tickPosition === 'Inside' ? (rect.y - tickSize - axisLineSize) : (rect.y + tickSize + axisLineSize);\n if (axis.valueType.indexOf('Category') > -1 && length > 0 && axis.labelPlacement === 'BetweenTicks') {\n length += 1;\n }\n //Gridlines\n for (var i = 0; i < length; i++) {\n if (axis.valueType !== 'DateTimeCategory') {\n tempInterval = axis.visibleLabels[i] ? axis.visibleLabels[i].value - ticksbwtLabel\n : (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel;\n }\n else {\n tempInterval = axis.visibleLabels[i] ?\n axis.visibleLabels[i].value - ticksbwtLabel : axis.visibleRange.max;\n }\n pointX = (valueToCoefficient(tempInterval, axis) * rect.width) + rect.x;\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n if (inside(tempInterval, axis.visibleRange) || this.isBorder(axis, i, pointX)) {\n majorGrid = majorGrid.concat('M ' + pointX + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height) +\n ' L ' + pointX + ' ' + this.seriesClipRect.y + ' ');\n }\n majorTick = majorTick.concat('M ' + (pointX) + ' ' + (rect.y + axisLineSize) +\n ' L ' + (pointX) + ' ' + ticks + ' ');\n }\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)) {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGird, minorTick, rect, i);\n minorGird = minorDirection[0];\n minorTick = minorDirection[1];\n }\n }\n this.renderGridLine(axis, index, majorGrid, minorGird);\n this.renderTickLine(axis, index, majorTick, minorTick, parent);\n };\n CartesianAxisLayoutPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick, rect, labelIndex) {\n var value = tempInterval;\n var coor = 0;\n var position = 0;\n var range = axis.visibleRange;\n var isTickInside = axis.tickPosition === 'Inside';\n var direction = [];\n var tickSize = axis.opposedPosition ? -axis.minorTickLines.height : axis.minorTickLines.height;\n var logStart;\n var logEnd;\n var logInterval = 1;\n var logPosition = 1;\n var ticksX = isTickInside ? (rect.y - tickSize) : (rect.y + tickSize);\n var ticksY = isTickInside ? (rect.x + tickSize) : (rect.x - tickSize);\n if (axis.valueType === 'Logarithmic') {\n logStart = Math.pow(axis.logBase, value - range.interval);\n logEnd = Math.pow(axis.logBase, value);\n logInterval = (logEnd - logStart) / (axis.minorTicksPerInterval + 1);\n logPosition = logStart + logInterval;\n }\n if (axis.orientation === 'Horizontal') {\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, logInterval, value, labelIndex);\n logPosition += logInterval;\n if (inside(value, range)) {\n position = ((value - range.min) / (range.max - range.min));\n position = Math.ceil((axis.isInversed ? (1 - position) : position) * rect.width);\n coor = (Math.floor(position + rect.x));\n minorGird = minorGird.concat('M' + ' ' + coor + ' ' + (this.seriesClipRect.y)\n + 'L ' + coor + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height));\n coor = (Math.floor(position + rect.x));\n minorTick = minorTick.concat('M' + ' ' + coor + ' ' + (rect.y)\n + 'L ' + coor + ' ' + ticksX);\n }\n }\n }\n else {\n tickSize = axis.opposedPosition ? axis.minorTickLines.height : -axis.minorTickLines.height;\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, logInterval, value, labelIndex);\n if (inside(value, range)) {\n position = Math.ceil(((value - range.min) / (range.max - range.min)) * rect.height) * -1;\n coor = (Math.floor(position + rect.y + rect.height));\n minorGird = minorGird.concat('M' + ' ' + (this.seriesClipRect.x) + ' ' + coor\n + 'L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + coor);\n coor = (Math.floor(position + rect.y + rect.height));\n minorTick = minorTick.concat('M' + ' ' + rect.x + ' ' + coor + 'L ' + ticksY + ' ' + coor);\n }\n logPosition += logInterval;\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n CartesianAxisLayoutPanel.prototype.findLogNumeric = function (axis, logPosition, logInterval, value, labelIndex) {\n var range = axis.visibleRange;\n if (axis.valueType === 'Logarithmic') {\n value = logBase(logPosition, axis.logBase);\n }\n else if (axis.valueType === 'DateTime') {\n value += axis.dateTimeInterval / (axis.minorTicksPerInterval + 1);\n }\n else if (axis.valueType === 'DateTimeCategory') {\n var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n value += ((axis.visibleLabels[labelIndex + 1] ?\n axis.visibleLabels[labelIndex + 1].value - padding : axis.visibleRange.max) -\n (axis.visibleLabels[labelIndex] ?\n axis.visibleLabels[labelIndex].value - padding : axis.visibleRange.min)) /\n (axis.minorTicksPerInterval + 1);\n }\n else {\n value += range.interval / (axis.minorTicksPerInterval + 1);\n }\n return value;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var elementSize;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var labelPosition = axis.labelPosition;\n var islabelInside = axis.labelPosition === 'Inside';\n var isTickInside = axis.tickPosition === 'Inside';\n var isOpposed = axis.opposedPosition;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var labelPadding;\n var padding = tickSpace + this.padding + axis.lineStyle.width / 2;\n var rotateSize;\n var diffHeight;\n var angle;\n var anglePadding = ((axis.angle === 90 || axis.angle === -90)) ? -2 : 0;\n var options;\n var yLocation;\n var previousEnd = axis.isInversed ? (rect.x + rect.width) : rect.x;\n var width = 0;\n var length = axis.visibleLabels.length;\n var intervalLength;\n var label;\n for (var i = 0, len = length; i < len; i++) {\n label = axis.visibleLabels[i];\n pointX = (valueToCoefficient(label.value, axis) * rect.width) + rect.x;\n elementSize = label.size;\n intervalLength = rect.width / length;\n width = ((axis.labelIntersectAction === 'Trim' || axis.labelIntersectAction === 'Wrap')\n && elementSize.width > intervalLength) ? intervalLength : elementSize.width;\n pointX -= width / 2;\n if (islabelInside && axis.angle) {\n pointY = isOpposed ? (rect.y + padding) : (rect.y - padding);\n }\n else {\n labelPadding = (isOpposed && !islabelInside) || (!isOpposed && islabelInside) ?\n -(padding + (axis.angle ? (3 * (elementSize.height / 4) + (2 * axis.maxLabelSize.height / 5)) :\n (label.index > 1 ? (2 * (elementSize.height / 4)) : 0)))\n : padding + (axis.angle ? (3 * (elementSize.height / 4)) + (2 * axis.maxLabelSize.height / 5)\n : (3 * (elementSize.height / 4)));\n pointY = (rect.y + (labelPadding * label.index));\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, '');\n if (axis.edgeLabelPlacement) {\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (axis.isInversed && i === len - 1)) && options.x < rect.x) ||\n ((i === len - 1 || (axis.isInversed && i === 0)) && (options.x + width > rect.x + rect.width))) {\n continue;\n }\n break;\n case 'Shift':\n if ((i === 0 || (axis.isInversed && i === len - 1)) && options.x < rect.x) {\n intervalLength -= (rect.x - options.x);\n options.x = pointX = rect.x;\n }\n else if ((i === len - 1 || (axis.isInversed && i === 0)) && ((options.x + width) > rect.x + rect.width)) {\n if (elementSize.width > intervalLength && axis.labelIntersectAction === 'Trim') {\n intervalLength -= (options.x + width - (rect.x + rect.width));\n }\n else {\n intervalLength = width;\n }\n options.x = pointX = rect.x + rect.width - intervalLength;\n }\n break;\n }\n }\n options.text = this.findAxisLabel(axis, label.text, intervalLength);\n if (axis.angle % 360 === 0 && axis.labelIntersectAction === 'Hide' && i !== 0 &&\n (!axis.isInversed ? options.x <= previousEnd : options.x + width >= previousEnd)) {\n continue;\n }\n previousEnd = axis.isInversed ? options.x : options.x + width;\n if (axis.angle !== 0) {\n angle = (axis.angle > 360) ? axis.angle % 360 : axis.angle;\n rotateSize = rotateTextSize(axis.labelStyle, label.text, angle, chart);\n diffHeight = islabelInside ? rotateSize.height :\n axis.maxLabelSize.height - Math.ceil(rotateSize.height - elementSize.height);\n yLocation = axis.opposedPosition ? diffHeight / 2 : -diffHeight / 2;\n options.transform = 'rotate(' + angle + ',' + (pointX + width / 2 + anglePadding) + ','\n + (pointY + yLocation) + ')';\n options.y += yLocation;\n }\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement, (axis.opposedPosition !== (axis.labelPosition === 'Inside'))).setAttribute('style', 'cursor: default');\n }\n if (!chart.delayRedraw) {\n parent.appendChild(labelElement);\n }\n else if (axis.visible) {\n this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n }\n };\n /**\n * To render the axis label border.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisBorder = function (axis, index, parent, axisRect) {\n if (axis.border.width > 0) {\n var startX = void 0;\n var startY = axisRect.y;\n var padding = 10;\n var pointX = void 0;\n var gap = (axisRect.width / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n : axis.visibleRange.interval);\n var endX = void 0;\n var length_2 = axis.maxLabelSize.height +\n ((axis.tickPosition === axis.labelPosition) ? axis.majorTickLines.height : 0);\n var labelBorder = '';\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n var endY = ((axis.opposedPosition && axis.labelPosition === 'Inside') ||\n (!axis.opposedPosition && axis.labelPosition === 'Outside')) ?\n (axisRect.y + length_2 + padding) : (axisRect.y - length_2 - padding);\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n pointX = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n pointX = (axis.isInversed ? (1 - pointX) : pointX) * axisRect.width;\n if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n startX = pointX + axisRect.x;\n endX = pointX + (gap) + axisRect.x;\n }\n else {\n startX = pointX - gap / 2 + axisRect.x;\n endX = pointX + gap / 2 + axisRect.x;\n }\n switch (axis.border.type) {\n case 'Rectangle':\n case 'WithoutTopBorder':\n if (startX < axisRect.x) {\n labelBorder += ('M' + ' ' + axisRect.x + ' ' + endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n }\n else if (Math.floor(endX) > axisRect.width + axisRect.x) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'L' + ' ' + (axisRect.width + axisRect.x) + ' ' + endY + ' ');\n }\n else {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' +\n endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + endX + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ' +\n 'M ' + endX + ' ' + endY + ' L ' + (axisRect.width + axisRect.x) + ' ' + endY);\n }\n }\n break;\n case 'WithoutTopandBottomBorder':\n if (!(startX < axisRect.x) && !(Math.floor(endX) > axisRect.width + axisRect.x)) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'M ' + endX + ' ' + startY + ' L ' + endX + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle' ? ('M ' + ' ' + axisRect.x + ' ' + startY + 'L' + ' ' +\n (axisRect.x + axisRect.width) + ' ' + startY) : '');\n if (labelBorder !== '') {\n this.createAxisBorderElement(axis, index, labelBorder, parent);\n }\n }\n if (this.chart.multiLevelLabelModule && axis.multiLevelLabels.length > 0) {\n this.chart.multiLevelLabelModule.renderXAxisMultiLevelLabels(axis, index, parent, axisRect);\n }\n };\n /**\n * To create border element for axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.createAxisBorderElement = function (axis, index, labelBorder, parent) {\n var borderElement = this.chart.renderer.drawPath(new PathOption(this.chart.element.id + '_BorderLine_' + index, 'transparent', axis.border.width, axis.border.color || this.chart.themeStyle.axisLine, 1, '', labelBorder));\n borderElement.setAttribute('style', 'pointer-events: none');\n parent.appendChild(borderElement);\n };\n CartesianAxisLayoutPanel.prototype.findAxisLabel = function (axis, label, width) {\n switch (axis.labelIntersectAction) {\n case 'Trim':\n return textTrim(width, label, axis.labelStyle);\n default:\n return label;\n }\n };\n CartesianAxisLayoutPanel.prototype.drawXAxisTitle = function (axis, index, parent, rect) {\n var chart = this.chart;\n var elementSize = measureText(axis.title, axis.titleStyle);\n var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + this.padding) +\n (axis.labelPosition === 'Inside' ? 0 :\n axis.maxLabelSize.height + axis.multiLevelLabelHeight + this.padding);\n padding = axis.opposedPosition ? -(padding + elementSize.height / 4) : (padding + (3 * elementSize.height / 4));\n var options = new TextOption(chart.element.id + '_AxisTitle_' + index, rect.x + rect.width / 2, rect.y + padding, 'middle', axis.title);\n var element = textElement(options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitle, parent);\n element.setAttribute('aria-label', axis.description || axis.title);\n element.setAttribute('tabindex', axis.tabIndex.toString());\n };\n CartesianAxisLayoutPanel.prototype.renderTickLine = function (axis, index, majorTick, minorTick, parent) {\n var options;\n var chart = this.chart;\n if (axis.majorTickLines.width > 0 && axis.visible) {\n options = new PathOption(chart.element.id + '_MajorTickLine_' + index, 'transparent', axis.majorTickLines.width, axis.majorTickLines.color || chart.themeStyle.majorTickLine, null, null, majorTick);\n this.htmlObject = chart.renderer.drawPath(options);\n parent.appendChild(this.htmlObject);\n }\n if (axis.minorTickLines.width > 0 && axis.visible) {\n options = new PathOption(chart.element.id + '_MinorTickLine_' + index, 'transparent', axis.minorTickLines.width, axis.minorTickLines.color || chart.themeStyle.minorTickLine, null, null, minorTick);\n this.htmlObject = chart.renderer.drawPath(options);\n parent.appendChild(this.htmlObject);\n }\n };\n CartesianAxisLayoutPanel.prototype.renderGridLine = function (axis, index, majorGrid, minorGird) {\n var chart = this.chart;\n var options;\n if (axis.majorGridLines.width > 0) {\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, axis.majorGridLines.dashArray, majorGrid);\n this.htmlObject = chart.renderer.drawPath(options);\n this.element.appendChild(this.htmlObject);\n }\n if (axis.minorGridLines.width > 0) {\n options = new PathOption(chart.element.id + '_MinorGridLine_' + index, 'transparent', axis.minorGridLines.width, axis.minorGridLines.color || chart.themeStyle.minorGridLine, null, axis.minorGridLines.dashArray, minorGird);\n this.htmlObject = chart.renderer.drawPath(options);\n this.element.appendChild(this.htmlObject);\n }\n };\n CartesianAxisLayoutPanel.prototype.findParentNode = function (chart, label, axis, index) {\n if (axis.crossAt === null) {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside');\n }\n if (document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside').contains(document.getElementById(label.id))) {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside');\n }\n else {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Outside');\n }\n };\n CartesianAxisLayoutPanel.prototype.createZoomingLabel = function (chart, labelElement, axis, index, rect) {\n var parentNode = this.findParentNode(chart, labelElement, axis, index);\n labelElement.setAttribute('opacity', '0.3');\n var zoomElement = chart.renderer.createGroup({\n id: chart.element.id + 'AxisLabels_Zoom' + index\n });\n zoomElement = createZoomingLabels(chart, axis, zoomElement, index, axis.orientation === 'Vertical', rect);\n parentNode.replaceChild(labelElement, document.getElementById(labelElement.id));\n if (getElement(chart.element.id + 'AxisLabels_Zoom' + index)) {\n parentNode.replaceChild(zoomElement, document.getElementById(zoomElement.id));\n }\n else {\n parentNode.appendChild(zoomElement);\n }\n };\n return CartesianAxisLayoutPanel;\n}());\nexport { CartesianAxisLayoutPanel };\n","import { withInBounds, PointData, Rect, getValueXByPoint, getValueYByPoint } from '../../common/utils/helper';\n/**\n * To get the data on mouse move.\n * @private\n */\nvar ChartData = /** @class */ (function () {\n /**\n * Constructor for the data.\n * @private\n */\n function ChartData(chart) {\n /** @private */\n this.currentPoints = [];\n /** @private */\n this.previousPoints = [];\n this.chart = chart;\n this.lierIndex = 0;\n }\n /**\n * Method to get the Data.\n * @private\n */\n ChartData.prototype.getData = function () {\n var chart = this.chart;\n var point = null;\n var series = null;\n var width;\n var height;\n for (var len = chart.visibleSeries.length, i = len - 1; i >= 0; i--) {\n series = chart.visibleSeries[i];\n width = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))\n ? (series.marker.height + 5) / 2 : 0;\n height = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))\n ? (series.marker.width + 5) / 2 : 0;\n if (series.visible && withInBounds(chart.mouseX, chart.mouseY, series.clipRect, width, height)) {\n point = this.getRectPoint(series, series.clipRect, chart.mouseX, chart.mouseY);\n }\n if (point) {\n return new PointData(point, series);\n }\n }\n return new PointData(point, series);\n };\n ChartData.prototype.isSelected = function (chart) {\n return (chart.selectionMode.indexOf('Drag') > -1 && chart.selectionModule && chart.selectionModule.rectPoints !== null);\n };\n ChartData.prototype.getRectPoint = function (series, rect, x, y) {\n var currentRect;\n var fromCenterX;\n var fromCenterY;\n var clickAngle;\n var arcAngle = 0;\n var startAngle;\n var endAngle;\n var distanceFromCenter;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.regionData) {\n if (!point.regions || !point.regions.length) {\n continue;\n }\n }\n if (point.regionData && this.chart.chartAreaType === 'PolarRadar' && series.drawType.indexOf('Column') > -1) {\n fromCenterX = x - (series.clipRect.width / 2 + series.clipRect.x);\n fromCenterY = y - (series.clipRect.height / 2 + series.clipRect.y);\n arcAngle = 2 * Math.PI * (point.regionData.currentXPosition < 0 ? 1 + point.regionData.currentXPosition\n : point.regionData.currentXPosition);\n clickAngle = (Math.atan2(fromCenterY, fromCenterX) + 0.5 * Math.PI - arcAngle) % (2 * Math.PI);\n clickAngle = clickAngle < 0 ? 2 * Math.PI + clickAngle : clickAngle;\n clickAngle = clickAngle + 2 * Math.PI * series.chart.primaryXAxis.startAngle;\n startAngle = point.regionData.startAngle;\n startAngle -= arcAngle;\n startAngle = startAngle < 0 ? 2 * Math.PI + startAngle : startAngle;\n endAngle = point.regionData.endAngle;\n endAngle -= arcAngle;\n endAngle = endAngle < 0 ? 2 * Math.PI + endAngle : endAngle;\n distanceFromCenter = Math.sqrt(Math.pow(Math.abs(fromCenterX), 2) + Math.pow(Math.abs(fromCenterY), 2));\n if (clickAngle >= startAngle && clickAngle <= endAngle &&\n (((distanceFromCenter >= point.regionData.innerRadius && distanceFromCenter <= point.regionData.radius) ||\n (distanceFromCenter <= point.regionData.innerRadius && distanceFromCenter >= point.regionData.radius))\n && distanceFromCenter <= series.chart.radius)) {\n return point;\n }\n }\n else if (this.checkRegionContainsPoint(point.regions, rect, x, y)) {\n return point;\n }\n }\n return null;\n };\n /**\n * Checks whether the region contains a point\n */\n ChartData.prototype.checkRegionContainsPoint = function (regionRect, rect, x, y) {\n var _this = this;\n return regionRect.some(function (region, index) {\n _this.lierIndex = index;\n return withInBounds(x, y, new Rect((_this.chart.chartAreaType === 'Cartesian' ? rect.x : 0) + region.x, (_this.chart.chartAreaType === 'Cartesian' ? rect.y : 0) + region.y, region.width, region.height));\n });\n };\n ChartData.prototype.getClosest = function (series, value) {\n var xData = series.xData;\n var closest;\n if (value >= series.xMin - 0.5 && value <= series.xMax + 0.5) {\n for (var _i = 0, xData_1 = xData; _i < xData_1.length; _i++) {\n var data = xData_1[_i];\n if (closest == null || Math.abs(data - value) < Math.abs(closest - value)) {\n closest = data;\n }\n }\n }\n return closest;\n };\n ChartData.prototype.getClosestX = function (chart, series) {\n var value;\n var rect = series.clipRect;\n if (!chart.requireInvertedAxis) {\n value = getValueXByPoint(chart.mouseX - rect.x, rect.width, series.xAxis);\n }\n else {\n value = getValueYByPoint(chart.mouseY - rect.y, rect.height, series.xAxis);\n }\n var closest = this.getClosest(series, value);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (closest === point.xValue && point.visible) {\n return new PointData(point, series);\n }\n }\n return null;\n };\n return ChartData;\n}());\nexport { ChartData };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { StackValues, RectOption } from '../../common/utils/helper';\nimport { firstToLowerCase, Rect, logBase, CircleOption } from '../../common/utils/helper';\nimport { Border, Font, Margin, Animation, EmptyPointSettings, CornerRadius, Connector } from '../../common/model/base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { seriesRender } from '../../common/model/constants';\n/**\n * Configures the data label in the series.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n __extends(DataLabelSettings, _super);\n function DataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], DataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], DataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('Auto')\n ], DataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Property('Center')\n ], DataLabelSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], DataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ left: 5, right: 5, top: 5, bottom: 5 }, Margin)\n ], DataLabelSettings.prototype, \"margin\", void 0);\n __decorate([\n Complex({ size: '11px', color: null }, Font)\n ], DataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"template\", void 0);\n return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n * Configures the marker in the series.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n __extends(MarkerSettings, _super);\n function MarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Circle')\n ], MarkerSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"height\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ width: 2, color: null }, Border)\n ], MarkerSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], MarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, DataLabelSettings)\n ], MarkerSettings.prototype, \"dataLabel\", void 0);\n return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n * Points model for the series.\n * @private\n */\nvar Points = /** @class */ (function () {\n function Points() {\n this.symbolLocations = null;\n this.regions = null;\n this.regionData = null;\n this.marker = {\n visible: true\n };\n }\n return Points;\n}());\nexport { Points };\n/**\n * Defines the behavior of the Trendlines\n */\nvar Trendline = /** @class */ (function (_super) {\n __extends(Trendline, _super);\n function Trendline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private */\n Trendline.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.points = series.points;\n }\n var type = firstToLowerCase(this.type);\n chart.trendLineModule.initDataSource(this, chart);\n chart.visibleSeriesCount++;\n };\n __decorate([\n Property('')\n ], Trendline.prototype, \"name\", void 0);\n __decorate([\n Property('Linear')\n ], Trendline.prototype, \"type\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"period\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"polynomialOrder\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"backwardForecast\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"forwardForecast\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Trendline.prototype, \"animation\", void 0);\n __decorate([\n Complex({}, MarkerSettings)\n ], Trendline.prototype, \"marker\", void 0);\n __decorate([\n Property(true)\n ], Trendline.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(null)\n ], Trendline.prototype, \"intercept\", void 0);\n __decorate([\n Property('')\n ], Trendline.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], Trendline.prototype, \"width\", void 0);\n __decorate([\n Property('SeriesType')\n ], Trendline.prototype, \"legendShape\", void 0);\n return Trendline;\n}(ChildProperty));\nexport { Trendline };\n/**\n * Configures Error bar in series.\n */\nvar ErrorBarCapSettings = /** @class */ (function (_super) {\n __extends(ErrorBarCapSettings, _super);\n function ErrorBarCapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], ErrorBarCapSettings.prototype, \"length\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarCapSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"opacity\", void 0);\n return ErrorBarCapSettings;\n}(ChildProperty));\nexport { ErrorBarCapSettings };\nvar ChartSegment = /** @class */ (function (_super) {\n __extends(ChartSegment, _super);\n function ChartSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"color\", void 0);\n __decorate([\n Property('0')\n ], ChartSegment.prototype, \"dashArray\", void 0);\n return ChartSegment;\n}(ChildProperty));\nexport { ChartSegment };\nvar ErrorBarSettings = /** @class */ (function (_super) {\n __extends(ErrorBarSettings, _super);\n function ErrorBarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ErrorBarSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Fixed')\n ], ErrorBarSettings.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ErrorBarSettings.prototype, \"direction\", void 0);\n __decorate([\n Property('Vertical')\n ], ErrorBarSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"verticalError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalPositiveError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalNegativeError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalPositiveError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalNegativeError\", void 0);\n __decorate([\n Complex(null, ErrorBarCapSettings)\n ], ErrorBarSettings.prototype, \"errorBarCap\", void 0);\n return ErrorBarSettings;\n}(ChildProperty));\nexport { ErrorBarSettings };\n/**\n * Defines the common behavior of Series and Technical Indicators\n */\nvar SeriesBase = /** @class */ (function (_super) {\n __extends(SeriesBase, _super);\n function SeriesBase() {\n /**\n * The DataSource field that contains the x value.\n * It is applicable for series and technical indicators\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.currentViewData = [];\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @private */\n _this.seriesType = 'XY';\n return _this;\n }\n /**\n * Process data for the series.\n * @hidden\n */\n SeriesBase.prototype.processJsonData = function () {\n var i = 0;\n var len = Object.keys(this.currentViewData).length;\n var point = new Points();\n var textMappingName = this instanceof Series && this.marker.dataLabel.name ?\n this.marker.dataLabel.name : '';\n if (this instanceof Series && this.type === 'Waterfall') {\n this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n processWaterfallData(this.currentViewData, this);\n }\n this.points = [];\n this.xMin = Infinity;\n this.xMax = -Infinity;\n this.yMin = Infinity;\n this.yMax = -Infinity;\n this.sizeMax = -Infinity;\n this.getSeriesType();\n if (this.xAxis.valueType === 'Category') {\n while (i < len) {\n point = this.dataPoint(i, textMappingName);\n this.pushCategoryData(point, i, point.x);\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n else if (this.xAxis.valueType.indexOf('DateTime') > -1) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n while (i < len) {\n point = this.dataPoint(i, textMappingName);\n point.x = new Date(DataUtil.parse.parseJson({ val: point.x }).val);\n if (this.xAxis.valueType === 'DateTime') {\n point.xValue = Date.parse(dateParser(dateFormatter(point.x)));\n }\n else {\n this.pushCategoryData(point, i, Date.parse(dateParser(dateFormatter(point.x))).toString());\n }\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n else {\n while (i < len) {\n point = this.dataPoint(i, textMappingName);\n point.xValue = point.x;\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n if (this instanceof Series) {\n if (this.type.indexOf('Spline') > -1 || (this.drawType.indexOf('Spline') > -1 && this.chart.chartAreaType === 'PolarRadar')) {\n var isArea = (this.type.indexOf('Area') > -1 || this.drawType === 'Area');\n this.chart['spline' + (isArea ? 'Area' : '') + 'SeriesModule'].findSplinePoint(this);\n }\n }\n };\n SeriesBase.prototype.pushData = function (point, i) {\n point.index = i;\n point.yValue = point.y;\n // To find the min, max for the axis range.\n this.xMin = Math.min(this.xMin, point.xValue);\n this.xMax = Math.max(this.xMax, point.xValue);\n this.xData.push(point.xValue);\n };\n /** @private */\n SeriesBase.prototype.dataPoint = function (i, textMappingName) {\n var point;\n this.points[i] = new Points();\n point = this.points[i];\n var currentViewData = this.currentViewData;\n point.x = getValue(this.xName, currentViewData[i]);\n point.high = getValue(this.high, currentViewData[i]);\n point.low = getValue(this.low, currentViewData[i]);\n point.open = getValue(this.open, currentViewData[i]);\n point.close = getValue(this.close, currentViewData[i]);\n point.volume = getValue(this.volume, currentViewData[i]);\n point.interior = getValue(this.pointColorMapping, currentViewData[i]);\n if (this instanceof Series) {\n point.y = getValue(this.yName, currentViewData[i]);\n point.size = getValue(this.size, currentViewData[i]);\n point.text = getValue(textMappingName, currentViewData[i]);\n }\n return point;\n };\n /**\n * To set empty point value based on empty point mode\n * @private\n */\n SeriesBase.prototype.setEmptyPoint = function (point, i) {\n if (!this.findVisibility(point)) {\n point.visible = true;\n return null;\n }\n point.isEmpty = true;\n var mode = this instanceof Series ? this.emptyPointSettings.mode : 'Drop';\n switch (mode) {\n case 'Zero':\n point.visible = true;\n if (this instanceof Series && this.seriesType.indexOf('HighLow') > -1) {\n point.high = point.low = 0;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = point.close = 0;\n }\n }\n else {\n point.y = point.yValue = this.yData[i] = 0;\n }\n break;\n case 'Average':\n if (this instanceof Series) {\n if (this.seriesType.indexOf('HighLow') > -1) {\n point.high = isNullOrUndefined(point.high) ? this.getAverage(this.high, i) : point.high;\n point.low = isNullOrUndefined(point.low) ? this.getAverage(this.low, i) : point.low;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = isNullOrUndefined(point.open) ? this.getAverage(this.open, i) : point.open;\n point.close = isNullOrUndefined(point.close) ? this.getAverage(this.close, i) :\n point.close;\n }\n }\n else {\n point.y = point.yValue = this.yData[i] = this.getAverage(this.yName, i);\n }\n }\n point.visible = true;\n break;\n case 'Drop':\n case 'Gap':\n this.yData[i] = null;\n point.visible = false;\n break;\n }\n };\n SeriesBase.prototype.findVisibility = function (point) {\n var type = this instanceof Series ? this.seriesType : 'HighLowOpenClose';\n var yValues;\n switch (type) {\n case 'XY':\n this.setXYMinMax(point.yValue);\n this.yData.push(point.yValue);\n if (this instanceof Series && this.type === 'Bubble') {\n this.sizeMax = Math.max(this.sizeMax, isNullOrUndefined(point.size) ? this.sizeMax : point.size);\n }\n return isNullOrUndefined(point.x) || isNullOrUndefined(point.y);\n case 'HighLow':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || isNullOrUndefined(point.low) || isNullOrUndefined(point.high);\n case 'HighLowOpenClose':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || isNullOrUndefined(point.low) ||\n isNullOrUndefined(point.open) || isNullOrUndefined(point.close)\n || isNullOrUndefined(point.high);\n case 'BoxPlot':\n yValues = (point.y || [null]).filter(function (value) {\n return !isNullOrUndefined(value);\n }).sort(function (a, b) {\n return a - b;\n });\n point.y = yValues;\n this.yMin = Math.min(this.yMin, Math.min.apply(Math, yValues));\n this.yMax = Math.max(this.yMax, Math.max.apply(Math, yValues));\n return !yValues.length;\n }\n };\n /**\n * To get Y min max for the provided point seriesType XY\n */\n SeriesBase.prototype.setXYMinMax = function (yValue) {\n this.yMin = Math.min(this.yMin, isNullOrUndefined(yValue) ? this.yMin : yValue);\n this.yMax = Math.max(this.yMax, isNullOrUndefined(yValue) ? this.yMax : yValue);\n };\n /**\n * To get Y min max for the provided point seriesType XY\n */\n SeriesBase.prototype.setHiloMinMax = function (high, low) {\n this.yMin = Math.min(this.yMin, Math.min(isNullOrUndefined(low) ? this.yMin : low, isNullOrUndefined(high) ? this.yMin : high));\n this.yMax = Math.max(this.yMax, Math.max(isNullOrUndefined(low) ? this.yMax : low, isNullOrUndefined(high) ? this.yMax : high));\n };\n /**\n * Finds the type of the series\n * @private\n */\n SeriesBase.prototype.getSeriesType = function () {\n var type;\n if (this instanceof Series) {\n var seriesType = this.chart.chartAreaType === 'PolarRadar' ? this.drawType : this.type;\n if (seriesType) {\n switch (seriesType) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'Hilo':\n type = 'HighLow';\n break;\n case 'HiloOpenClose':\n case 'Candle':\n type = 'HighLowOpenClose';\n break;\n case 'BoxAndWhisker':\n type = 'BoxPlot';\n break;\n default:\n type = 'XY';\n }\n }\n }\n this.seriesType = type;\n };\n /** @private */\n SeriesBase.prototype.pushCategoryData = function (point, index, pointX) {\n if (!this.xAxis.isIndexed) {\n if (this.xAxis.labels.indexOf(pointX) < 0) {\n this.xAxis.labels.push(pointX);\n }\n point.xValue = this.xAxis.labels.indexOf(pointX);\n }\n else {\n this.xAxis.labels[index] ? this.xAxis.labels[index] += ', ' + pointX :\n this.xAxis.labels.push(pointX);\n point.xValue = index;\n }\n };\n /**\n * To find average of given property\n */\n SeriesBase.prototype.getAverage = function (member, i, data) {\n if (data === void 0) { data = this.currentViewData; }\n var previous = data[i - 1] ? (data[i - 1][member] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][member] || 0) : 0;\n return (previous + next) / 2;\n };\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SeriesBase.prototype.refreshDataManager = function (chart) {\n var _this = this;\n this.chart = chart;\n if (isNullOrUndefined(this.query) && !isNullOrUndefined(this.dataSource)) {\n this.dataManagerSuccess({ result: this.dataSource, count: this.dataSource.length }, chart, false);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, chart); });\n };\n SeriesBase.prototype.dataManagerSuccess = function (e, chart, isRemoteData) {\n if (isRemoteData === void 0) { isRemoteData = true; }\n this.currentViewData = e.result !== '' ? e.result : [];\n if (this instanceof Series) {\n var argsData = {\n name: seriesRender, series: this, data: this.currentViewData, fill: this.interior\n };\n this.chart.trigger(seriesRender, argsData);\n this.interior = argsData.fill;\n this.currentViewData = argsData.data;\n }\n this.processJsonData();\n this.recordsCount = e.count;\n this.refreshChart(isRemoteData);\n };\n SeriesBase.prototype.refreshChart = function (isRemoteData) {\n var chart = this.chart;\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 1 : 0;\n }\n chart.refreshTechnicalIndicator(this);\n if (this instanceof Series && this.category !== 'TrendLine') {\n for (var _i = 0, _a = this.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n trendline.setDataSource(this, chart);\n }\n }\n //if (chart.visibleSeries.length === (chart.visibleSeriesCount - chart.indicators.length)) {\n if (chart.visibleSeries.length === (chart.visibleSeriesCount)) {\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart });\n }\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 0 : 1;\n }\n };\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"high\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"low\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"open\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"close\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"volume\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"yAxisName\", void 0);\n __decorate([\n Complex(null, Animation)\n ], SeriesBase.prototype, \"animation\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesBase.prototype, \"width\", void 0);\n __decorate([\n Property('0')\n ], SeriesBase.prototype, \"dashArray\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], SeriesBase.prototype, \"query\", void 0);\n __decorate([\n Collection([], ChartSegment)\n ], SeriesBase.prototype, \"segments\", void 0);\n __decorate([\n Property('X')\n ], SeriesBase.prototype, \"segmentAxis\", void 0);\n return SeriesBase;\n}(ChildProperty));\nexport { SeriesBase };\n/**\n * Configures the series in charts.\n */\nvar Series = /** @class */ (function (_super) {\n __extends(Series, _super);\n // tslint:disable-next-line:no-any\n function Series(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n _this.visibleSeriesCount = 0;\n /** @private */\n _this.category = 'Series';\n /** @private */\n _this.isRectSeries = false;\n /** @private */\n _this.drawPoints = [];\n /** @private */\n _this.delayedAnimation = false;\n return _this;\n }\n /**\n * Refresh the axis label.\n * @return {boolean}\n * @private\n */\n Series.prototype.refreshAxisLabel = function () {\n if (this.xAxis.valueType !== 'Category') {\n return null;\n }\n this.xAxis.labels = [];\n for (var _i = 0, _a = this.xAxis.series; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible) {\n item.xMin = Infinity;\n item.xMax = -Infinity;\n for (var _b = 0, _c = item.points; _b < _c.length; _b++) {\n var point = _c[_b];\n item.pushCategoryData(point, point.index, point.x);\n item.xMin = Math.min(item.xMin, point.xValue);\n item.xMax = Math.max(item.xMax, point.xValue);\n }\n }\n }\n };\n /**\n * To get the series collection.\n * @return {void}\n * @private\n */\n Series.prototype.findSeriesCollection = function (column, row, isStack) {\n var seriesCollection = [];\n for (var _i = 0, _a = row.axes; _i < _a.length; _i++) {\n var rowAxis = _a[_i];\n for (var _b = 0, _c = rowAxis.series; _b < _c.length; _b++) {\n var rowSeries = _c[_b];\n for (var _d = 0, _e = column.axes; _d < _e.length; _d++) {\n var axis = _e[_d];\n for (var _f = 0, _g = axis.series; _f < _g.length; _f++) {\n var series = _g[_f];\n if (series === rowSeries && series.visible && this.rectSeriesInChart(series, isStack)) {\n seriesCollection.push(series);\n }\n }\n }\n }\n }\n return seriesCollection;\n };\n /**\n * To get the column type series.\n * @return {void}\n * @private\n */\n Series.prototype.rectSeriesInChart = function (series, isStack) {\n var type = (series.type).toLowerCase();\n return (type.indexOf('column') !== -1 || type.indexOf('bar') !== -1 ||\n type.indexOf('hiloopenclose') !== -1 || type.indexOf('candle') !== -1 ||\n type.indexOf('hilo') !== -1 || series.drawType.indexOf('Column') !== -1 ||\n type.indexOf('waterfall') !== -1 || type.indexOf('boxandwhisker') !== -1 || isStack);\n };\n /**\n * To calculate the stacked values.\n * @return {void}\n * @private\n */\n Series.prototype.calculateStackedValue = function (isStacking100, chart) {\n var axisSeries;\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.calculateStackingValues(this.findSeriesCollection(columnItem, item, true), isStacking100);\n }\n }\n };\n Series.prototype.calculateStackingValues = function (seriesCollection, isStacking100) {\n var startValues;\n var endValues;\n var yValues = [];\n var lastPositive = [];\n var lastNegative = [];\n var stackingGroup;\n var lastValue;\n var value;\n var frequencies = [];\n if (isStacking100) {\n frequencies = this.findFrequencies(seriesCollection);\n }\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n if (series.type.indexOf('Stacking') !== -1 || (series.drawType.indexOf('Stacking') !== -1 &&\n (series.chart.chartAreaType === 'PolarRadar'))) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' : series.stackingGroup;\n if (!lastPositive[stackingGroup]) {\n lastPositive[stackingGroup] = [];\n lastNegative[stackingGroup] = [];\n }\n yValues = series.yData;\n startValues = [];\n endValues = [];\n for (var j = 0, pointsLength = series.points.length; j < pointsLength; j++) {\n lastValue = 0;\n value = yValues[j];\n if (lastPositive[stackingGroup][series.points[j].xValue] === undefined) {\n lastPositive[stackingGroup][series.points[j].xValue] = 0;\n }\n if (lastNegative[stackingGroup][series.points[j].xValue] === undefined) {\n lastNegative[stackingGroup][series.points[j].xValue] = 0;\n }\n if (isStacking100) {\n value = value / frequencies[stackingGroup][series.points[j].xValue] * 100;\n value = !isNaN(value) ? value : 0;\n series.points[j].percent = value.toFixed(2);\n }\n if (value >= 0) {\n lastValue = lastPositive[stackingGroup][series.points[j].xValue];\n lastPositive[stackingGroup][series.points[j].xValue] += value;\n }\n else {\n lastValue = lastNegative[stackingGroup][series.points[j].xValue];\n lastNegative[stackingGroup][series.points[j].xValue] += value;\n }\n startValues.push(lastValue);\n endValues.push(value + lastValue);\n if (isStacking100 && (endValues[j] > 100)) {\n endValues[j] = 100;\n }\n }\n series.stackedValues = new StackValues(startValues, endValues);\n series.yMin = Math.min.apply(0, startValues);\n series.yMax = Math.max.apply(0, endValues);\n if (series.yMin > Math.min.apply(0, endValues)) {\n series.yMin = (isStacking100) ? -100 : Math.min.apply(0, endValues);\n }\n if (series.yMax < Math.max.apply(0, startValues)) {\n series.yMax = 0;\n }\n }\n }\n };\n Series.prototype.findFrequencies = function (seriesCollection) {\n var frequencies = [];\n var stackingGroup;\n for (var _i = 0, seriesCollection_2 = seriesCollection; _i < seriesCollection_2.length; _i++) {\n var series = seriesCollection_2[_i];\n series.yAxis.isStack100 = series.type.indexOf('100') !== -1 ? true : false;\n if (series.type.indexOf('Stacking') !== -1) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' : series.stackingGroup;\n if (!frequencies[stackingGroup]) {\n frequencies[stackingGroup] = [];\n }\n for (var j = 0, pointsLength = series.points.length; j < pointsLength; j++) {\n if (frequencies[stackingGroup][series.points[j].xValue] === undefined) {\n frequencies[stackingGroup][series.points[j].xValue] = 0;\n }\n if (series.yData[j] > 0) {\n frequencies[stackingGroup][series.points[j].xValue] += series.yData[j];\n }\n else {\n frequencies[stackingGroup][series.points[j].xValue] -= series.yData[j];\n }\n }\n }\n }\n return frequencies;\n };\n /**\n * To find the log values.\n * @return {void}\n * @private\n */\n Series.prototype.logWithIn = function (value, axis) {\n if (axis.valueType === 'Logarithmic') {\n value = logBase(value, axis.logBase);\n }\n else {\n value = value;\n }\n return value;\n };\n /* private dataManagerFailure(e: { result: Object[] }): void {\n this.currentViewData = [];\n this.refreshChart();\n }*/\n /** @private */\n Series.prototype.renderSeries = function (chart, index) {\n var seriesType = firstToLowerCase(this.type);\n if (seriesType.indexOf('100') !== -1) {\n seriesType = seriesType.replace('100', '');\n }\n if (chart[seriesType + 'SeriesModule']) {\n if (this.category !== 'Indicator' && this.category !== 'TrendLine') {\n this.createSeriesElements(chart);\n }\n chart[seriesType + 'SeriesModule'].render(this, this.xAxis, this.yAxis, chart.requireInvertedAxis);\n if (this.category !== 'Indicator') {\n if (this.errorBar.visible) {\n this.chart.errorBarModule.render(this);\n }\n if (this.marker.dataLabel.visible) {\n chart.dataLabelModule.render(this, this.chart, this.marker.dataLabel);\n }\n this.appendSeriesElement(chart.seriesElements, chart);\n }\n this.performAnimation(chart, seriesType, this.errorBar, this.marker, this.marker.dataLabel);\n }\n };\n /**\n * To create seris element.\n * @return {void}\n * @private\n */\n Series.prototype.createSeriesElements = function (chart) {\n if (this.category !== 'Indicator') {\n var elementId = chart.element.id;\n var xAxisRect = this.xAxis.rect;\n // 8 for extend border value 5 for extend size value\n var explodeValue = this.marker.border.width + 8 + 5;\n var yAxisRect = this.yAxis.rect;\n var marker = this.marker;\n var render = chart.renderer;\n var index = this.index;\n var markerHeight = (this.type === 'Scatter') ? (this.marker.height + explodeValue) / 2 : 0;\n var markerWidth = (this.type === 'Scatter') ? (this.marker.width + explodeValue) / 2 : 0;\n if (chart.chartAreaType === 'PolarRadar') {\n this.clipRectElement = render.drawCircularClipPath(new CircleOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, this.clipRect.width / 2 + this.clipRect.x, this.clipRect.height / 2 + this.clipRect.y, chart.radius));\n }\n else {\n this.clipRectElement = render.drawClipPath(new RectOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: this.clipRect.width + markerWidth * 2,\n height: this.clipRect.height + markerHeight * 2\n }));\n }\n var transform = void 0;\n transform = chart.chartAreaType === 'Cartesian' ? 'translate(' + this.clipRect.x + ',' + (this.clipRect.y) + ')' : '';\n this.symbolElement = null;\n this.seriesElement = render.createGroup({\n 'id': elementId + 'SeriesGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + elementId + '_ChartSeriesClipRect_' + index + ')'\n });\n this.seriesElement.appendChild(this.clipRectElement);\n }\n };\n /**\n * To append the series.\n * @return {void}\n * @private\n */\n Series.prototype.appendSeriesElement = function (element, chart) {\n var marker = this.marker;\n var dataLabel = marker.dataLabel;\n if (this.category !== 'TrendLine') {\n chart.seriesElements.appendChild(this.seriesElement);\n var errorBar = this.errorBar;\n if (errorBar.visible) {\n if (chart.chartAreaType === 'PolarRadar') {\n chart.seriesElements.appendChild(this.seriesElement);\n }\n else {\n chart.seriesElements.appendChild(this.errorBarElement);\n }\n }\n if (this.type === 'Scatter' || this.type === 'Bubble') {\n chart.seriesElements.appendChild(this.seriesElement);\n }\n }\n if (marker.visible && ((chart.chartAreaType === 'Cartesian' && (!this.isRectSeries || this.type === 'BoxAndWhisker'))\n || ((this.drawType !== 'Scatter' && !this.isRectSeries) && chart.chartAreaType === 'PolarRadar')) &&\n this.type !== 'Scatter' && this.type !== 'Bubble') {\n chart.seriesElements.appendChild(this.symbolElement);\n }\n if (dataLabel.visible) {\n chart.dataLabelElements.appendChild(this.shapeElement);\n chart.dataLabelElements.appendChild(this.textElement);\n }\n if (chart.dataLabelElements.hasChildNodes()) {\n chart.seriesElements.appendChild(chart.dataLabelElements);\n }\n };\n /**\n * To perform animation for chart series.\n * @return {void}\n * @private\n */\n Series.prototype.performAnimation = function (chart, type, errorBar, marker, dataLabel) {\n if (this.animation.enable && chart.animateSeries) {\n chart[type + 'SeriesModule'].doAnimation(this);\n if (errorBar.visible) {\n chart.errorBarModule.doErrorBarAnimation(this);\n }\n if (marker.visible) {\n chart.markerRender.doMarkerAnimation(this);\n }\n if (dataLabel.visible) {\n chart.dataLabelModule.doDataLabelAnimation(this);\n }\n }\n };\n /**\n * To set border color for empty point\n * @private\n */\n Series.prototype.setPointColor = function (point, color) {\n color = point.interior || color;\n return point.isEmpty ? (this.emptyPointSettings.fill || color) : color;\n };\n /**\n * To set border color for empty point\n * @private\n */\n Series.prototype.setBorderColor = function (point, border) {\n border.width = point.isEmpty ? (this.emptyPointSettings.border.width || border.width) : border.width;\n border.color = point.isEmpty ? (this.emptyPointSettings.border.color || border.color) : border.color;\n return border;\n };\n __decorate([\n Property('')\n ], Series.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"yName\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"drawType\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"isClosed\", void 0);\n __decorate([\n Property('#2ecd71')\n ], Series.prototype, \"bearFillColor\", void 0);\n __decorate([\n Property('#e74c3d')\n ], Series.prototype, \"bullFillColor\", void 0);\n __decorate([\n Property(false)\n ], Series.prototype, \"enableSolidCandles\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"stackingGroup\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"visible\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], Series.prototype, \"border\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"opacity\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"type\", void 0);\n __decorate([\n Complex(null, ErrorBarSettings)\n ], Series.prototype, \"errorBar\", void 0);\n __decorate([\n Complex(null, MarkerSettings)\n ], Series.prototype, \"marker\", void 0);\n __decorate([\n Collection([], Trendline)\n ], Series.prototype, \"trendlines\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property('SeriesType')\n ], Series.prototype, \"legendShape\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"minRadius\", void 0);\n __decorate([\n Property(3)\n ], Series.prototype, \"maxRadius\", void 0);\n __decorate([\n Property('Natural')\n ], Series.prototype, \"splineType\", void 0);\n __decorate([\n Property(0.5)\n ], Series.prototype, \"cardinalSplineTension\", void 0);\n __decorate([\n Complex(null, EmptyPointSettings)\n ], Series.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"showMean\", void 0);\n __decorate([\n Property('Normal')\n ], Series.prototype, \"boxPlotMode\", void 0);\n __decorate([\n Property(0.7)\n ], Series.prototype, \"columnWidth\", void 0);\n __decorate([\n Property(0)\n ], Series.prototype, \"columnSpacing\", void 0);\n __decorate([\n Property('#C64E4A')\n ], Series.prototype, \"negativeFillColor\", void 0);\n __decorate([\n Property('#4E81BC')\n ], Series.prototype, \"summaryFillColor\", void 0);\n __decorate([\n Property()\n ], Series.prototype, \"intermediateSumIndexes\", void 0);\n __decorate([\n Property()\n ], Series.prototype, \"sumIndexes\", void 0);\n __decorate([\n Complex({ color: 'black', width: 2 }, Connector)\n ], Series.prototype, \"connector\", void 0);\n __decorate([\n Complex(null, CornerRadius)\n ], Series.prototype, \"cornerRadius\", void 0);\n return Series;\n}(SeriesBase));\nexport { Series };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and dataSource\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n * @private\n */\n function Data(dataSource, query) {\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n * @return {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from chart model\n * @return {void}\n * @private\n */\n Data.prototype.generateQuery = function () {\n var query = this.query.clone();\n return query;\n };\n /**\n * The function used to get dataSource by executing given Query\n * @param {Query} query - A Query that specifies to generate dataSource\n * @return {void}\n * @private\n */\n Data.prototype.getData = function (query) {\n return this.dataManager.executeQuery(query);\n };\n return Data;\n}());\nexport { Data };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { drawSymbol, PathOption, Size } from '../../common/utils/helper';\nimport { Browser, extend, remove } from '@syncfusion/ej2-base';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { withInBounds, PointData, stopTimer } from '../../common/utils/helper';\nimport { colorNameToHex, convertHexToColor } from '../../common/utils/helper';\n/**\n * Marker Module used to render the marker for line type series.\n */\nvar MarkerExplode = /** @class */ (function (_super) {\n __extends(MarkerExplode, _super);\n /**\n * Constructor for the marker module.\n * @private\n */\n function MarkerExplode(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n _this.elementId = chart.element.id;\n return _this;\n }\n /**\n * @hidden\n */\n MarkerExplode.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * @hidden\n */\n /* public removeEventListener(): void {\n if (this.chart.isDestroyed) { return; }\n this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n }*/\n /**\n * @hidden\n */\n MarkerExplode.prototype.mouseUpHandler = function () {\n var chart = this.chart;\n if (chart.isTouch && !chart.crosshair.enable && !this.isSelected(chart)) {\n this.markerMove(true);\n }\n };\n /**\n * @hidden\n */\n MarkerExplode.prototype.mouseMoveHandler = function () {\n var chart = this.chart;\n if ((!chart.crosshair.enable || (chart.tooltip.enable)) && (!chart.isTouch || chart.startMove) && !this.isSelected(chart)) {\n this.markerMove(false);\n }\n };\n MarkerExplode.prototype.markerMove = function (remove) {\n var _this = this;\n var chart = this.chart;\n this.currentPoints = [];\n var data;\n var previous;\n var explodeSeries;\n if (!chart.tooltip.shared || !chart.tooltip.enable) {\n data = this.getData();\n previous = this.previousPoints[0];\n explodeSeries = data.series && (data.series.type === 'BoxAndWhisker' || data.series.type === 'Bubble' || data.series.drawType === 'Scatter'\n || data.series.type === 'Scatter' || (!data.series.isRectSeries && data.series.marker.visible));\n data.lierIndex = this.lierIndex;\n if (data.point && explodeSeries && ((!previous || (previous.point !== data.point)) ||\n (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex))) {\n this.currentPoints.push(data);\n }\n }\n else {\n if (!withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n return null;\n }\n if (chart.tooltip.enable) {\n var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var chartSeries = _a[_i];\n if (!chartSeries.enableTooltip || chartSeries.category === 'Indicator') {\n continue;\n }\n if (chart.chartAreaType === 'Cartesian' && chartSeries.visible) {\n data = this.getClosestX(chart, chartSeries);\n }\n else if (chart.chartAreaType === 'PolarRadar' && chartSeries.visible && pointData.point !== null) {\n data = new PointData(chartSeries.points[pointData.point.index], chartSeries);\n }\n if (data) {\n this.currentPoints.push(data);\n data = null;\n }\n }\n }\n }\n var length = this.previousPoints.length;\n if (this.currentPoints.length > 0) {\n if (length === 0 || (length > 0 && this.previousPoints[0].point !== this.currentPoints[0].point)) {\n if (this.previousPoints.length > 0) {\n this.removeHighlightedMarker();\n }\n var _loop_1 = function (data_1) {\n if (data_1 && data_1.point &&\n (!data_1.series.isRectSeries || data_1.series.type === 'BoxAndWhisker')) {\n stopTimer(this_1.markerExplode);\n this_1.isRemove = true;\n data_1.point.symbolLocations.map(function (location, index) {\n if (data_1.point.marker.visible) {\n _this.drawTrackBall(data_1.series, data_1.point, location, index);\n }\n });\n }\n };\n var this_1 = this;\n for (var _b = 0, _c = this.currentPoints; _b < _c.length; _b++) {\n var data_1 = _c[_b];\n _loop_1(data_1);\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n }\n }\n if (!chart.tooltip.enable && ((this.currentPoints.length === 0 && this.isRemove) || (remove && this.isRemove) ||\n !withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect))) {\n this.isRemove = false;\n this.markerExplode = setTimeout(function () {\n _this.removeHighlightedMarker();\n }, 2000);\n }\n this.currentPoints = [];\n };\n MarkerExplode.prototype.drawTrackBall = function (series, point, location, index) {\n var marker = point.marker;\n var seriesMarker = series.marker;\n var shape = marker.shape || seriesMarker.shape;\n var element = series.symbolElement || series.seriesElement;\n var symbolId = this.elementId + '_Series_' + series.index + '_Point_' + point.index + '_Trackball' +\n (index ? index : '');\n var size = new Size((marker.width || seriesMarker.width) + 5, (marker.height || seriesMarker.height) + 5);\n var border = (marker.border || series.border);\n var explodeSeries = (series.type === 'BoxAndWhisker' || series.type === 'Bubble' || series.type === 'Scatter');\n var borderColor = (border.color && border.color !== 'transparent') ? border.color :\n marker.fill || point.interior || (explodeSeries ? point.color : series.interior);\n var colorValue = convertHexToColor(colorNameToHex(borderColor));\n var borderWidth = marker.border ? marker.border.width : seriesMarker.border.width;\n var markerShadow = series.chart.themeStyle.markerShadow ||\n 'rgba(' + colorValue.r + ',' + colorValue.g + ',' + colorValue.b + ',0.2)';\n for (var i = 0; i < 2; i++) {\n var options = new PathOption(symbolId + '_' + i, i ? (marker.fill || point.color || (explodeSeries ? series.interior : '#ffffff')) : 'transparent', borderWidth + (i ? 0 : 8), i ? borderColor : markerShadow, (marker.opacity || seriesMarker.opacity), null, null);\n var symbol = drawSymbol(location, shape, size, seriesMarker.imageUrl, options, '');\n symbol.setAttribute('style', 'pointer-events:none');\n symbol.setAttribute('class', 'EJ2-Trackball');\n element.appendChild(symbol);\n }\n };\n /**\n * @hidden\n */\n MarkerExplode.prototype.removeHighlightedMarker = function () {\n var elements = document.getElementsByClassName('EJ2-Trackball');\n for (var i = 0, len = elements.length; i < len; i++) {\n remove(elements[0]);\n }\n this.previousPoints = [];\n };\n return MarkerExplode;\n}(ChartData));\nexport { MarkerExplode };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { drawSymbol, PathOption, Size, markerAnimate, CircleOption, RectOption } from '../../common/utils/helper';\nimport { findlElement } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointRender } from '../../common/model/constants';\nimport { MarkerExplode } from './marker-explode';\nimport { getSaturationColor } from '../../common/utils/helper';\n/**\n * Marker module used to render the marker for line type series.\n */\nvar Marker = /** @class */ (function (_super) {\n __extends(Marker, _super);\n /**\n * Constructor for the marker module.\n * @private\n */\n function Marker(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Render the marker for series.\n * @return {void}\n * @private\n */\n Marker.prototype.render = function (series) {\n var _this = this;\n this.createElement(series);\n var _loop_1 = function (point) {\n if (point.visible && point.symbolLocations.length) {\n point.symbolLocations.map(function (location, index) {\n _this.renderMarker(series, point, location, index);\n });\n }\n };\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n _loop_1(point);\n }\n };\n Marker.prototype.renderMarker = function (series, point, location, index) {\n var seriesIndex = series.index;\n var marker = series.marker;\n var border = {\n color: marker.border.color,\n width: marker.border.width\n };\n var borderColor = marker.border.color;\n var symbolId;\n var shapeOption;\n var isBoxPlot = series.type === 'BoxAndWhisker';\n var fill = marker.fill || (isBoxPlot ? point.interior || series.interior : '#ffffff');\n var argsData;\n var parentElement = isBoxPlot ?\n findlElement(series.seriesElement.childNodes, 'Series_' + series.index + '_Point_' + point.index)\n : series.symbolElement;\n border.color = borderColor || series.setPointColor(point, series.interior);\n symbolId = this.elementId + '_Series_' + seriesIndex + '_Point_' + point.index + '_Symbol' +\n (index ? index : '');\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: point.isEmpty ? (series.emptyPointSettings.fill || fill) : fill,\n border: {\n color: series.type === 'BoxAndWhisker' ?\n (!isNullOrUndefined(borderColor) && borderColor !== 'transparent') ? borderColor :\n getSaturationColor(fill, -0.6)\n : border.color,\n width: border.width\n },\n height: marker.height,\n width: marker.width,\n shape: marker.shape\n };\n argsData.border = series.setBorderColor(point, { width: argsData.border.width, color: argsData.border.color });\n this.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n if (!argsData.cancel) {\n var y = void 0;\n if (series.type === 'RangeArea') {\n y = index ? point.low : point.high;\n }\n else if (isBoxPlot) {\n y = point.outliers[index];\n }\n else {\n y = point.y;\n }\n shapeOption = new PathOption(symbolId, argsData.fill, argsData.border.width, argsData.border.color, marker.opacity, null);\n if (parentElement !== undefined && parentElement !== null) {\n parentElement.appendChild(drawSymbol(location, argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + y.toString()));\n }\n point.marker = {\n border: argsData.border,\n fill: argsData.fill,\n height: argsData.height,\n visible: true,\n shape: argsData.shape,\n width: argsData.width\n };\n }\n else {\n location = null;\n point.marker = {\n visible: false\n };\n }\n };\n Marker.prototype.createElement = function (series) {\n var markerClipRect;\n var marker = series.marker;\n // 8 for extend border value 5 for extend size value\n var explodeValue = marker.border.width + 8 + 5;\n var render = series.chart.renderer;\n var transform;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.visible) {\n var markerHeight = (marker.height + explodeValue) / 2;\n var markerWidth = (marker.width + explodeValue) / 2;\n if (series.chart.chartAreaType === 'Cartesian') {\n markerClipRect = render.drawClipPath(new RectOption(this.elementId + '_ChartMarkerClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2,\n height: series.clipRect.height + markerHeight * 2\n }));\n }\n else {\n markerClipRect = render.drawCircularClipPath(new CircleOption(this.elementId + '_ChartMarkerClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, series.clipRect.width / 2 + series.clipRect.x, series.clipRect.height / 2 + series.clipRect.y, series.chart.radius + Math.max(markerHeight, markerWidth)));\n }\n series.symbolElement = render.createGroup({\n 'id': this.elementId + 'SymbolGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.elementId + '_ChartMarkerClipRect_' + series.index + ')'\n });\n series.symbolElement.appendChild(markerClipRect);\n }\n };\n Marker.prototype.getRangeLowPoint = function (region, series) {\n var x = region.x;\n var y = region.y;\n if (series.chart.requireInvertedAxis) {\n y += region.height / 2;\n x += series.yAxis.isInversed ? region.width : 0;\n }\n else {\n y += series.yAxis.isInversed ? 0 : region.height;\n x += region.width / 2;\n }\n return { x: x, y: y };\n };\n /**\n * Animates the marker.\n * @return {void}.\n * @private\n */\n Marker.prototype.doMarkerAnimation = function (series) {\n if (!(series.isRectSeries || series.type === 'Scatter' || series.type === 'Bubble' ||\n (series.chart.chartAreaType === 'PolarRadar' && (series.drawType === 'Scatter' || series.drawType.indexOf('Column') > -1)))) {\n var markerElements = series.symbolElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var j = 1;\n var incFactor = series.type === 'RangeArea' ? 2 : 1;\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations.length) {\n continue;\n }\n markerAnimate(markerElements[j], delay, 200, series, i, series.points[i].symbolLocations[0], false);\n if (incFactor === 2) {\n var lowPoint = this.getRangeLowPoint(series.points[i].regions[0], series);\n markerAnimate(markerElements[j + 1], delay, 200, series, i, lowPoint, false);\n }\n j += incFactor;\n }\n }\n };\n return Marker;\n}(MarkerExplode));\nexport { Marker };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\nimport { Theme } from '../model/theme';\nimport { Size, Rect, subtractThickness, Thickness, drawSymbol, measureText, ChartLocation, PathOption } from '../utils/helper';\nimport { RectOption, TextOption, textElement, stringToNumber, removeElement, showTooltip, getElement } from '../utils/helper';\n/**\n * Configures the location for the legend.\n */\nvar Location = /** @class */ (function (_super) {\n __extends(Location, _super);\n function Location() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Location.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Location.prototype, \"y\", void 0);\n return Location;\n}(ChildProperty));\nexport { Location };\n/**\n * Configures the legends in charts.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Location)\n ], LegendSettings.prototype, \"location\", void 0);\n __decorate([\n Property('Auto')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property(8)\n ], LegendSettings.prototype, \"padding\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Complex({}, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Property(5)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], LegendSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"description\", void 0);\n __decorate([\n Property(3)\n ], LegendSettings.prototype, \"tabIndex\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Legend base class for Chart and Accumulation chart.\n * @private\n */\nvar BaseLegend = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function BaseLegend(chart) {\n this.rowCount = 0; // legend row counts per page \n this.columnCount = 0; // legend column counts per page \n this.pageButtonSize = 8;\n this.pageXCollections = []; // pages of x locations\n this.maxColumns = 0;\n this.isTrimmed = false;\n this.maxWidth = 0;\n this.currentPage = 1;\n this.chart = chart;\n this.legend = chart.legendSettings;\n this.legendID = chart.element.id + '_chart_legend';\n this.isChartControl = (chart.getModuleName() === 'chart');\n }\n /**\n * Calculate the bounds for the legends.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.calculateLegendBounds = function (rect, availableSize) {\n var legend = this.legend;\n this.getPosition(legend.position, availableSize);\n this.legendBounds = new Rect(rect.x, rect.y, 0, 0);\n this.isVertical = (this.position === 'Left' || this.position === 'Right');\n if (this.isVertical) {\n this.legendBounds.height = stringToNumber(legend.height, availableSize.height - (rect.y - this.chart.margin.top)) || rect.height;\n this.legendBounds.width = stringToNumber(legend.width || '20%', availableSize.width);\n }\n else {\n this.legendBounds.width = stringToNumber(legend.width, availableSize.width) || rect.width;\n this.legendBounds.height = stringToNumber(legend.height || '20%', availableSize.height);\n }\n this.library.getLegendBounds(availableSize, this.legendBounds, legend);\n this.getLocation(this.position, legend.alignment, this.legendBounds, rect, availableSize);\n };\n /**\n * To find legend position based on available size for chart and accumulation chart\n */\n BaseLegend.prototype.getPosition = function (position, availableSize) {\n if (this.isChartControl) {\n this.position = (position !== 'Auto') ? position : 'Bottom';\n }\n else {\n if (position === 'Auto' && this.chart.visibleSeries &&\n (this.chart.visibleSeries[0].type === 'Funnel' || this.chart.visibleSeries[0].type === 'Pyramid')) {\n position = 'Top';\n }\n this.position = (position !== 'Auto') ? position :\n (availableSize.width > availableSize.height ? 'Right' : 'Bottom');\n }\n };\n /**\n * To set bounds for chart and accumulation chart\n */\n BaseLegend.prototype.setBounds = function (computedWidth, computedHeight, legend, legendBounds) {\n computedWidth = computedWidth < legendBounds.width ? computedWidth : legendBounds.width;\n computedHeight = computedHeight < legendBounds.height ? computedHeight : legendBounds.height;\n legendBounds.width = !legend.width ? computedWidth : legendBounds.width;\n legendBounds.height = !legend.height ? computedHeight : legendBounds.height;\n this.rowCount = Math.max(1, Math.ceil((legendBounds.height - legend.padding) / (this.maxItemHeight + legend.padding)));\n };\n /**\n * To find legend location based on position, alignment for chart and accumulation chart\n */\n BaseLegend.prototype.getLocation = function (position, alignment, legendBounds, rect, availableSize) {\n var padding = this.legend.border.width;\n var legendHeight = legendBounds.height + padding;\n var legendWidth = legendBounds.width + padding;\n var marginBottom = this.chart.margin.bottom;\n if (position === 'Bottom') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + (rect.height - legendHeight) + padding;\n subtractThickness(rect, new Thickness(0, 0, 0, legendHeight));\n }\n else if (position === 'Top') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + padding;\n subtractThickness(rect, new Thickness(0, 0, legendHeight, 0));\n }\n else if (position === 'Right') {\n legendBounds.x = rect.x + (rect.width - legendBounds.width);\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n subtractThickness(rect, new Thickness(0, legendWidth, 0, 0));\n }\n else if (position === 'Left') {\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n subtractThickness(rect, new Thickness(legendWidth, 0, 0, 0));\n }\n else {\n legendBounds.x = this.legend.location.x;\n legendBounds.y = this.legend.location.y;\n subtractThickness(rect, new Thickness(0, 0, 0, 0));\n }\n };\n /**\n * To find legend alignment for chart and accumulation chart\n */\n BaseLegend.prototype.alignLegend = function (start, size, legendSize, alignment) {\n switch (alignment) {\n case 'Far':\n start = (size - legendSize) - start;\n break;\n case 'Center':\n start = ((size - legendSize) / 2);\n break;\n }\n return start;\n };\n /**\n * Renders the legend.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.renderLegend = function (chart, legend, legendBounds) {\n var firstLegend = this.findFirstLegendPosition(this.legendCollections);\n var padding = legend.padding;\n this.maxItemHeight = Math.max(this.legendCollections[0].textSize.height, legend.shapeHeight);\n var legendGroup = chart.renderer.createGroup({ id: this.legendID + '_g' });\n var legendTranslateGroup = this.createLegendElements(chart, legendBounds, legendGroup, legend, this.legendID);\n if (firstLegend !== this.legendCollections.length) {\n var legendSeriesGroup = void 0; // legendItem group for each series group element\n var start = void 0; // starting shape center x,y position && to resolve lint error used new line for declaration\n start = new ChartLocation(legendBounds.x + padding + (legend.shapeWidth / 2), legendBounds.y + padding + this.maxItemHeight / 2);\n var textOptions = new TextOption('', start.x, start.y, 'start');\n // initialization for totalPages legend click totalpage again calculate\n this.totalPages = this.isChartControl ? this.totalPages : 0;\n var textPadding = legend.shapePadding + padding + legend.shapeWidth;\n var count = 0;\n this.pageXCollections = [];\n this.legendCollections[firstLegend].location = start;\n var previousLegend = this.legendCollections[firstLegend];\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n if (legendOption.render && legendOption.text !== '') {\n legendSeriesGroup = chart.renderer.createGroup({\n id: this.legendID + this.generateId(legendOption, '_g_', count)\n });\n legendSeriesGroup.setAttribute('tabindex', legend.tabIndex.toString());\n legendSeriesGroup.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + legendOption.text + ' series');\n this.library.getRenderPoint(legendOption, start, textPadding, previousLegend, legendBounds, count, firstLegend);\n this.renderSymbol(legendOption, legendSeriesGroup, count);\n this.renderText(chart, legendOption, legendSeriesGroup, textOptions, count);\n legendSeriesGroup.setAttribute('style', 'cursor: ' + ((!legend.toggleVisibility && chart.selectionMode === 'None') ? 'auto' : 'pointer'));\n legendTranslateGroup.appendChild(legendSeriesGroup);\n previousLegend = legendOption;\n }\n count++;\n }\n if (this.isPaging) {\n this.renderPagingElements(chart, legendBounds, textOptions, legendGroup);\n }\n }\n chart.svgObject.appendChild(legendGroup);\n };\n /**\n * To find first valid legend text index for chart and accumulation chart\n */\n BaseLegend.prototype.findFirstLegendPosition = function (legendCollection) {\n var count = 0;\n for (var _i = 0, legendCollection_1 = legendCollection; _i < legendCollection_1.length; _i++) {\n var legend = legendCollection_1[_i];\n if (legend.render && legend.text !== '') {\n break;\n }\n count++;\n }\n return count;\n };\n /**\n * To create legend rendering elements for chart and accumulation chart\n */\n BaseLegend.prototype.createLegendElements = function (chart, legendBounds, legendGroup, legend, id) {\n var padding = legend.padding;\n var options = new RectOption(id + '_element', legend.background, legend.border, legend.opacity, legendBounds);\n legendGroup.appendChild(chart.renderer.drawRectangle(options));\n var legendItemsGroup = chart.renderer.createGroup({ id: id + '_collections' });\n legendGroup.appendChild(legendItemsGroup);\n this.legendTranslateGroup = chart.renderer.createGroup({ id: id + '_translate_g' });\n legendItemsGroup.appendChild(this.legendTranslateGroup);\n var clippath = chart.renderer.createClipPath({ id: id + '_clipPath' });\n options.y += padding;\n options.id += '_clipPath_rect';\n options.width = (!this.isChartControl && this.isVertical) ? this.maxWidth - padding : legendBounds.width;\n this.clipRect = chart.renderer.drawRectangle(options);\n clippath.appendChild(this.clipRect);\n chart.svgObject.appendChild(clippath);\n legendItemsGroup.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n return this.legendTranslateGroup;\n };\n /**\n * To render legend symbols for chart and accumulation chart\n */\n BaseLegend.prototype.renderSymbol = function (legendOption, group, i) {\n var symbolColor = legendOption.visible ? legendOption.fill : '#D3D3D3';\n var shape = (legendOption.shape === 'SeriesType') ? legendOption.type : legendOption.shape;\n shape = shape === 'Scatter' ? legendOption.markerShape : shape;\n var symbolOption = new PathOption(this.legendID + this.generateId(legendOption, '_shape_', i), symbolColor, 1, symbolColor, 1, '', '');\n group.appendChild(drawSymbol(legendOption.location, shape, new Size(this.legend.shapeWidth, this.legend.shapeHeight), '', symbolOption, 'Click to show or hide the ' + legendOption.text + ' series'));\n if (shape === 'Line' && legendOption.markerVisibility && legendOption.markerShape !== 'Image' ||\n legendOption.type === 'Doughnut') {\n symbolOption.id = this.legendID + this.generateId(legendOption, '_shape_marker_', i);\n shape = legendOption.type === 'Doughnut' ? 'Circle' : legendOption.markerShape;\n symbolOption.fill = legendOption.type === 'Doughnut' ? '#FFFFFF' : symbolOption.fill;\n group.appendChild(drawSymbol(legendOption.location, shape, new Size(this.legend.shapeWidth / 2, this.legend.shapeHeight / 2), '', symbolOption, 'Click to show or hide the ' + legendOption.text + ' series'));\n }\n };\n /**\n * To render legend text for chart and accumulation chart\n */\n BaseLegend.prototype.renderText = function (chart, legendOption, group, textOptions, i) {\n var legend = chart.legendSettings;\n var hiddenColor = '#D3D3D3';\n textOptions.id = this.legendID + this.generateId(legendOption, '_text_', i);\n var fontcolor = legendOption.visible ? legend.textStyle.color || chart.themeStyle.legendLabel : hiddenColor;\n textOptions.text = legendOption.text;\n textOptions.x = legendOption.location.x + (legend.shapeWidth / 2) + legend.shapePadding;\n textOptions.y = legendOption.location.y + this.maxItemHeight / 4;\n var element = textElement(textOptions, legend.textStyle, fontcolor, group);\n element.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + legendOption.text + ' series');\n };\n /**\n * To render legend paging elements for chart and accumulation chart\n */\n BaseLegend.prototype.renderPagingElements = function (chart, bounds, textOption, legendGroup) {\n var paginggroup = chart.renderer.createGroup({ id: this.legendID + '_navigation' });\n legendGroup.appendChild(paginggroup);\n var grayColor = '#545454';\n var legend = chart.legendSettings; // to solve parameter lint error, legend declaration is here\n var padding = 8; // const padding for paging elements\n if (this.isChartControl || !this.isVertical) {\n this.totalPages = Math.ceil(this.totalPages / Math.max(1, this.rowCount - 1));\n }\n else {\n this.totalPages = Math.ceil(this.totalPages / this.maxColumns);\n }\n var symbolOption = new PathOption(this.legendID + '_pageup', 'transparent', 5, grayColor, 1, '', '');\n var iconSize = this.pageButtonSize;\n paginggroup.setAttribute('style', 'cursor: pointer');\n // Page left arrow drawing calculation started here\n this.clipPathHeight = (this.rowCount - 1) * (this.maxItemHeight + legend.padding);\n this.clipRect.setAttribute('height', this.clipPathHeight.toString());\n var x = bounds.x + iconSize / 2;\n var y = bounds.y + this.clipPathHeight + ((bounds.height - this.clipPathHeight) / 2);\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'LeftArrow', new Size(iconSize, iconSize), '', symbolOption, 'LeftArrow'));\n // Page numbering rendering calculation started here\n textOption.x = x + (iconSize / 2) + padding;\n var size = measureText(this.totalPages + '/' + this.totalPages, legend.textStyle);\n textOption.y = y + (size.height / 4);\n textOption.id = this.legendID + '_pagenumber';\n textOption.text = '1/' + this.totalPages;\n var pageTextElement = textElement(textOption, legend.textStyle, legend.textStyle.color, paginggroup);\n // Page right arrow rendering calculation started here\n x = (textOption.x + padding + (iconSize / 2) + size.width);\n symbolOption.id = this.legendID + '_pagedown';\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'RightArrow', new Size(iconSize, iconSize), '', symbolOption, 'RightArrow'));\n // placing the navigation buttons and page numbering in legend right corner\n paginggroup.setAttribute('transform', 'translate(' + (bounds.width - (2 * (iconSize + padding) +\n padding + size.width)) + ', ' + 0 + ')');\n this.translatePage(pageTextElement, this.currentPage - 1, this.currentPage);\n };\n /**\n * To translate legend pages for chart and accumulation chart\n */\n BaseLegend.prototype.translatePage = function (pagingText, page, pageNumber) {\n var size = (this.clipPathHeight) * page;\n var translate = 'translate(0,-' + size + ')';\n if (!this.isChartControl && this.isVertical) {\n var pageLength = page * this.maxColumns;\n size = this.pageXCollections[page * this.maxColumns] - this.legendBounds.x;\n size = size < 0 ? 0 : size; // to avoid small pixel variation\n translate = 'translate(-' + size + ',0)';\n }\n this.legendTranslateGroup.setAttribute('transform', translate);\n pagingText.textContent = (pageNumber) + '/' + this.totalPages;\n this.currentPage = pageNumber;\n };\n /**\n * To change legend pages for chart and accumulation chart\n */\n BaseLegend.prototype.changePage = function (event, pageUp) {\n var pageText = document.getElementById(this.legendID + '_pagenumber');\n var page = parseInt(pageText.textContent.split('/')[0], 10);\n if (pageUp && page > 1) {\n this.translatePage(pageText, (page - 2), (page - 1));\n }\n else if (!pageUp && page < this.totalPages) {\n this.translatePage(pageText, page, (page + 1));\n }\n };\n /**\n * To find legend elements id based on chart or accumulation chart\n * @private\n */\n BaseLegend.prototype.generateId = function (option, prefix, count) {\n if (this.isChartControl) {\n return prefix + count;\n }\n else {\n return prefix + option.pointIndex;\n }\n };\n /**\n * To show or hide trimmed text tooltip for legend.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.move = function (event) {\n var _this = this;\n var x = this.chart.mouseX;\n var y = this.chart.mouseY;\n if (event.target.textContent.indexOf('...') > -1) {\n var targetId = event.target.id.split(this.legendID + '_text_');\n if (targetId.length === 2) {\n var index = parseInt(targetId[1], 10);\n var element = this.chart.element;\n if (!isNaN(index)) {\n if (this.chart.isTouch) {\n removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n }\n if (this.isChartControl) {\n showTooltip(this.chart.series[index].name, x, y, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n }\n else {\n showTooltip(this.chart.visibleSeries[0].points[index].x.toString(), x + 10, y + 10, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n }\n }\n }\n }\n else {\n removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n }\n if (this.chart.isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(function () { removeElement(_this.chart.element.id + '_EJ2_Legend_Tooltip'); }, 1000);\n }\n };\n return BaseLegend;\n}());\nexport { BaseLegend };\n/**\n * Class for legend options\n * @private\n */\nvar LegendOptions = /** @class */ (function () {\n function LegendOptions(text, fill, shape, visible, type, markerShape, markerVisibility, pointIndex, seriesIndex) {\n this.location = { x: 0, y: 0 };\n this.text = text;\n this.fill = fill;\n this.shape = shape;\n this.visible = visible;\n this.type = type;\n this.markerVisibility = markerVisibility;\n this.markerShape = markerShape;\n this.pointIndex = pointIndex;\n this.seriesIndex = seriesIndex;\n }\n return LegendOptions;\n}());\nexport { LegendOptions };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, Complex } from '@syncfusion/ej2-base';\nimport { Connector } from '../../common/model/base';\nimport { SeriesBase } from '../series/chart-series';\nimport { Rect, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Defines how to represent the market trend using technical indicators\n */\nvar TechnicalIndicator = /** @class */ (function (_super) {\n __extends(TechnicalIndicator, _super);\n function TechnicalIndicator() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private */\n TechnicalIndicator.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.xData = series.xData;\n this.yData = series.yData;\n this.points = series.points;\n }\n var type = firstToLowerCase(this.type);\n chart[type + 'IndicatorModule'].initDataSource(this, chart);\n chart.visibleSeriesCount += this.targetSeries.length;\n };\n __decorate([\n Property('Sma')\n ], TechnicalIndicator.prototype, \"type\", void 0);\n __decorate([\n Property(14)\n ], TechnicalIndicator.prototype, \"period\", void 0);\n __decorate([\n Property(14)\n ], TechnicalIndicator.prototype, \"kPeriod\", void 0);\n __decorate([\n Property(3)\n ], TechnicalIndicator.prototype, \"dPeriod\", void 0);\n __decorate([\n Property(80)\n ], TechnicalIndicator.prototype, \"overBought\", void 0);\n __decorate([\n Property(20)\n ], TechnicalIndicator.prototype, \"overSold\", void 0);\n __decorate([\n Property(2)\n ], TechnicalIndicator.prototype, \"standardDeviation\", void 0);\n __decorate([\n Property('Close')\n ], TechnicalIndicator.prototype, \"field\", void 0);\n __decorate([\n Property(12)\n ], TechnicalIndicator.prototype, \"slowPeriod\", void 0);\n __decorate([\n Property(26)\n ], TechnicalIndicator.prototype, \"fastPeriod\", void 0);\n __decorate([\n Property(true)\n ], TechnicalIndicator.prototype, \"showZones\", void 0);\n __decorate([\n Complex({ color: '#ff9933', width: 2 }, Connector)\n ], TechnicalIndicator.prototype, \"macdLine\", void 0);\n __decorate([\n Property('Both')\n ], TechnicalIndicator.prototype, \"macdType\", void 0);\n __decorate([\n Property('#2ecd71')\n ], TechnicalIndicator.prototype, \"macdPositiveColor\", void 0);\n __decorate([\n Property('#e74c3d')\n ], TechnicalIndicator.prototype, \"macdNegativeColor\", void 0);\n __decorate([\n Property('rgba(211,211,211,0.25)')\n ], TechnicalIndicator.prototype, \"bandColor\", void 0);\n __decorate([\n Complex({ color: '#ffb735', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"upperLine\", void 0);\n __decorate([\n Complex({ color: '#f2ec2f', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"lowerLine\", void 0);\n __decorate([\n Complex({ color: '#f2ec2f', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"periodLine\", void 0);\n __decorate([\n Property('')\n ], TechnicalIndicator.prototype, \"seriesName\", void 0);\n return TechnicalIndicator;\n}(SeriesBase));\nexport { TechnicalIndicator };\n","import { print as printWindow, createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\n/**\n * Annotation Module handles the Annotation for chart and accumulation series.\n */\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the accumulation and chart elements\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWindow.moveTo(0, 0);\n this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n };\n this.control.trigger(beforePrint, argsData);\n if (!argsData.cancel) {\n printWindow(argsData.htmlContent, this.printWindow);\n }\n };\n /**\n * To get the html string of the chart and accumulation\n * @param elements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (elements) {\n var div = createElement('div');\n if (elements) {\n if (elements instanceof Array) {\n elements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (elements instanceof Element) {\n div.appendChild(elements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(elements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (type, fileName, orientation) {\n var _this = this;\n var element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': this.control.availableSize.width.toString(),\n 'height': this.control.availableSize.height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n this.control.svgObject.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(this.control.svgObject)], { type: 'image/svg+xml' }));\n if (type === 'SVG') {\n this.triggerDownload(fileName, type, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = element.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (type === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = element.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, _this.control.availableSize.width, _this.control.availableSize.height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n if (window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(element.msToBlob(), fileName + '.' + type.toLocaleLowerCase());\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, type, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + type.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { L10n, createElement } from '@syncfusion/ej2-base';\nimport { ChildProperty } from '@syncfusion/ej2-base';\nimport { remove, extend } from '@syncfusion/ej2-base';\nimport { Browser, Touch } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection } from '@syncfusion/ej2-base';\nimport { findClipRect, measureText, TextOption, showTooltip, removeElement } from '../common/utils/helper';\nimport { textElement, RectOption, createSvg, firstToLowerCase, titlePositionX } from '../common/utils/helper';\nimport { getSeriesColor, Theme, getThemeColor } from '../common/model/theme';\nimport { Margin, Border, ChartArea, Font, Indexes, TooltipSettings } from '../common/model/base';\nimport { Row, Column, Axis } from './axis/axis';\nimport { CartesianAxisLayoutPanel } from './axis/cartesian-panel';\nimport { Rect } from '../common/utils/helper';\nimport { ChartData } from './utils/get-data';\nimport { Series } from './series/chart-series';\nimport { Data } from '../common/model/data';\nimport { Marker } from './series/marker';\nimport { LegendSettings } from '../common/legend/legend';\nimport { TechnicalIndicator } from './technical-indicators/technical-indicator';\nimport { chartMouseClick, pointClick, pointMove, chartMouseLeave } from '../common/model/constants';\nimport { chartMouseDown, chartMouseMove, chartMouseUp, load } from '../common/model/constants';\nimport { ExportUtils } from '../common/utils/export';\nimport { ChartAnnotationSettings } from './model/chart-base';\nimport { getElement, getTitle } from '../common/utils/helper';\n/**\n * Configures the crosshair in the chart.\n */\nvar CrosshairSettings = /** @class */ (function (_super) {\n __extends(CrosshairSettings, _super);\n function CrosshairSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], CrosshairSettings.prototype, \"enable\", void 0);\n __decorate([\n Complex({ color: null, width: 1 }, Border)\n ], CrosshairSettings.prototype, \"line\", void 0);\n __decorate([\n Property('Both')\n ], CrosshairSettings.prototype, \"lineType\", void 0);\n return CrosshairSettings;\n}(ChildProperty));\nexport { CrosshairSettings };\n/**\n * Configures the zooming behavior for the chart.\n */\nvar ZoomSettings = /** @class */ (function (_super) {\n __extends(ZoomSettings, _super);\n function ZoomSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableSelectionZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enablePinchZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableMouseWheelZooming\", void 0);\n __decorate([\n Property(true)\n ], ZoomSettings.prototype, \"enableDeferredZooming\", void 0);\n __decorate([\n Property('XY')\n ], ZoomSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(['Zoom', 'ZoomIn', 'ZoomOut', 'Pan', 'Reset'])\n ], ZoomSettings.prototype, \"toolbarItems\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enablePan\", void 0);\n return ZoomSettings;\n}(ChildProperty));\nexport { ZoomSettings };\n/**\n * Represents the Chart control.\n * ```html\n *
\n * \n * ```\n */\nvar Chart = /** @class */ (function (_super) {\n __extends(Chart, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Chart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.chartAreaType = 'Cartesian';\n return _this;\n }\n /**\n * Initialize the event handler.\n */\n Chart.prototype.preRender = function () {\n this.unWireEvents();\n this.initPrivateVariable();\n this.setCulture();\n this.wireEvents();\n };\n Chart.prototype.initPrivateVariable = function () {\n this.animateSeries = true;\n this.horizontalAxes = [];\n this.verticalAxes = [];\n this.refreshAxis();\n this.refreshDefinition(this.rows);\n this.refreshDefinition(this.columns);\n if (this.tooltipModule) {\n this.tooltipModule.previousPoints = [];\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Chart.prototype.render = function () {\n this.trigger(load, { chart: this });\n this.createChartSvg();\n this.setTheme();\n this.markerRender = new Marker(this);\n this.calculateAreaType();\n this.calculateVisibleSeries();\n this.initTechnicalIndicators();\n this.initTrendLines();\n this.calculateVisibleAxis();\n this.processData();\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Chart.prototype.getLocalizedLabel = function (key) {\n return this.localeObject.getConstant(key);\n };\n /**\n * Refresh the chart bounds.\n * @private\n */\n Chart.prototype.refreshBound = function () {\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.getLegendOptions(this.visibleSeries, this);\n }\n var isCalculateStacking = false;\n var series;\n for (var i = 0, len = this.visibleSeries.length; i < len; i++) {\n series = this.visibleSeries[i];\n series.position = series.rectCount = undefined;\n if (((series.type.indexOf('Stacking') !== -1) || (series.drawType.indexOf('Stacking') !== -1\n && this.chartAreaType === 'PolarRadar')) && !isCalculateStacking) {\n series.calculateStackedValue(series.type.indexOf('100') > -1, this);\n isCalculateStacking = true;\n }\n }\n this.calculateBounds();\n this.renderElements();\n };\n Chart.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.renderAreaBorder();\n var axisElement = this.renderAxes();\n this.renderSeriesElements(axisElement);\n this.renderLegend();\n this.applyZoomkit();\n this.performSelection();\n this.setSecondaryElementPosition();\n this.renderAnnotation();\n };\n /**\n * To render the legend\n */\n Chart.prototype.renderAxes = function () {\n this.yAxisElements = this.renderer.createGroup({ id: this.element.id + 'yAxisCollection' });\n var axisElement;\n if (this.rows.length > 0 && this.columns.length > 0) {\n axisElement = this.chartAxisLayoutPanel.renderAxes();\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Behind', this.axisCollections);\n }\n return axisElement;\n };\n /**\n * To render the legend\n */\n Chart.prototype.renderLegend = function () {\n if (this.legendModule && this.legendModule.legendCollections.length) {\n this.legendModule.renderLegend(this, this.legendSettings, this.legendModule.legendBounds);\n }\n this.element.appendChild(this.svgObject);\n };\n /**\n * To set the left and top position for data label template for center aligned chart\n */\n Chart.prototype.setSecondaryElementPosition = function () {\n var element = getElement(this.element.id + '_Secondary_Element');\n if (!element) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n element.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n element.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n Chart.prototype.initializeModuleElements = function () {\n this.dataLabelCollections = [];\n this.seriesElements = this.renderer.createGroup({ id: this.element.id + 'SeriesCollection' });\n if (this.indicators.length) {\n this.indicatorElements = this.renderer.createGroup({ id: this.element.id + 'IndicatorCollection' });\n }\n if (this.hasTrendlines()) {\n this.trendLineElements = this.renderer.createGroup({ id: this.element.id + 'TrendLineCollection' });\n }\n this.dataLabelElements = this.renderer.createGroup({ id: this.element.id + 'DataLabelCollection' });\n };\n Chart.prototype.hasTrendlines = function () {\n var isTrendline;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n isTrendline = series.trendlines.length ? true : false;\n if (isTrendline) {\n break;\n }\n }\n return isTrendline;\n };\n Chart.prototype.renderSeriesElements = function (axisElement) {\n // Initialize the series elements values\n this.initializeModuleElements();\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n // For userInteraction\n if (this.tooltip.enable) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }));\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.initializeIndicator();\n this.initializeTrendLine();\n this.renderSeries();\n this.appendElementsAfterSeries(axisElement);\n }\n };\n Chart.prototype.renderSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible) {\n findClipRect(item);\n item.renderSeries(this, item.index);\n }\n }\n var clipRect = this.renderer.drawClipPath({\n 'id': this.element.id + '_ChartAreaClipRect_',\n 'x': this.chartAxisLayoutPanel.seriesClipRect.x,\n 'y': this.chartAxisLayoutPanel.seriesClipRect.y,\n 'width': this.chartAxisLayoutPanel.seriesClipRect.width,\n 'height': this.chartAxisLayoutPanel.seriesClipRect.height,\n 'fill': 'transparent',\n 'stroke-width': 1,\n 'stroke': 'Gray'\n });\n this.seriesElements.appendChild(clipRect);\n this.svgObject.appendChild(this.seriesElements);\n };\n Chart.prototype.initializeIndicator = function () {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (this[firstToLowerCase(indicator.type) + 'IndicatorModule']) {\n this[firstToLowerCase(indicator.type) + 'IndicatorModule'].createIndicatorElements(this, indicator, indicator.index);\n }\n }\n if (this.indicatorElements) {\n this.svgObject.appendChild(this.indicatorElements);\n }\n };\n Chart.prototype.initializeTrendLine = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.trendlines.length) {\n this.trendLineModule.getTrendLineElements(series, this);\n }\n }\n if (this.trendLineElements) {\n this.svgObject.appendChild(this.trendLineElements);\n }\n };\n Chart.prototype.appendElementsAfterSeries = function (axisElement) {\n if (this.chartAreaType === 'PolarRadar') {\n this.svgObject.appendChild(this.yAxisElements);\n }\n this.svgObject.appendChild(axisElement);\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Over', this.axisCollections);\n }\n if (!this.tooltip.enable) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }));\n }\n };\n Chart.prototype.applyZoomkit = function () {\n if (this.zoomModule && this.zoomModule.isZoomed && (!this.zoomSettings.enablePan || this.zoomModule.performedUI)) {\n this.zoomModule.applyZoomToolkit(this, this.axisCollections);\n }\n };\n Chart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n Chart.prototype.performSelection = function () {\n var selectedDataIndexes = [];\n if (this.selectionModule) {\n selectedDataIndexes = extend([], this.selectionModule.selectedDataIndexes, null, true);\n this.selectionModule.invokeSelection(this);\n }\n if (selectedDataIndexes.length > 0) {\n this.selectionModule.selectedDataIndexes = selectedDataIndexes;\n this.selectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n Chart.prototype.processData = function () {\n var series;\n this.visibleSeriesCount = 0;\n var check = true;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (!series_1.visible && !this.legendSettings.visible) {\n this.visibleSeriesCount++;\n continue;\n }\n if (series_1.category !== 'Indicator' && series_1.category !== 'TrendLine') {\n this.initializeDataModule(series_1);\n }\n }\n for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n var indicator = _c[_b];\n if (indicator.dataSource) {\n var techIndicator = indicator;\n this.initializeDataModule(techIndicator);\n check = false;\n }\n }\n if (!this.visibleSeries.length || this.visibleSeriesCount === this.visibleSeries.length && check) {\n this.refreshBound();\n this.trigger('loaded', { chart: this });\n }\n };\n Chart.prototype.initializeDataModule = function (series) {\n series.xData = [];\n series.yData = [];\n series.dataModule = new Data(series.dataSource, series.query);\n series.points = [];\n series.refreshDataManager(this);\n };\n Chart.prototype.calculateBounds = function () {\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n var padding = 15;\n var left = margin.left;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n this.titleCollection = [];\n if (this.title) {\n this.titleCollection = getTitle(this.title, this.titleStyle, width);\n titleHeight = (measureText(this.title, this.titleStyle).height * this.titleCollection.length) + padding;\n }\n var top = margin.top + titleHeight + this.chartArea.border.width / 2;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n this.initialClipRect = new Rect(left, top, width, height);\n if (this.legendModule) {\n this.legendModule.calculateLegendBounds(this.initialClipRect, this.availableSize);\n }\n this.chartAxisLayoutPanel.measureAxis(this.initialClipRect);\n };\n /**\n * Handles the print method for chart control.\n */\n Chart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n Chart.prototype.export = function (type, fileName, orientation) {\n var exportChart = new ExportUtils(this);\n exportChart.export(type, fileName, orientation);\n };\n /**\n * Defines the trendline initialization\n */\n Chart.prototype.initTrendLines = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n var trendIndex = 0;\n for (var _b = 0, _c = series.trendlines; _b < _c.length; _b++) {\n var trendline = _c[_b];\n var trendLine = trendline;\n var type = firstToLowerCase(trendLine.type);\n if (this.trendLineModule) {\n trendLine.index = trendIndex;\n trendLine.sourceIndex = series.index;\n this.trendLineModule.initSeriesCollection(trendLine, this);\n if (trendLine.targetSeries) {\n trendLine.targetSeries.xAxisName = series.xAxisName;\n trendLine.targetSeries.yAxisName = series.yAxisName;\n this.visibleSeries.push(trendLine.targetSeries);\n }\n }\n trendIndex++;\n }\n }\n };\n Chart.prototype.calculateAreaType = function () {\n var series = this.series[0];\n if (series) {\n this.requireInvertedAxis = ((series.type.indexOf('Bar') !== -1) && !this.isTransposed) ||\n ((series.type.indexOf('Bar') === -1) && this.isTransposed && this.chartAreaType !== 'PolarRadar');\n }\n this.chartAxisLayoutPanel = this.chartAreaType === 'PolarRadar' ? (this.polarSeriesModule || this.radarSeriesModule)\n : new CartesianAxisLayoutPanel(this);\n };\n Chart.prototype.calculateVisibleAxis = function () {\n var axis;\n var series;\n var axes = [this.primaryXAxis, this.primaryYAxis];\n axes = this.chartAreaType === 'Cartesian' ? axes.concat(this.axes) : axes;\n this.axisCollections = [];\n if (this.zoomModule) {\n this.zoomModule.isPanning = this.zoomModule.isAxisZoomed(axes) && this.zoomSettings.enablePan;\n this.svgObject.setAttribute('cursor', this.zoomModule.isPanning ? 'pointer' : 'auto');\n }\n for (var i = 0, len = axes.length; i < len; i++) {\n axis = axes[i];\n axis.series = [];\n axis.labels = [];\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series_2 = _a[_i];\n this.initAxis(series_2, axis, true);\n }\n for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n var indicator = _c[_b];\n this.initAxis(indicator, axis, false);\n }\n if (axis.orientation != null) {\n this.axisCollections.push(axis);\n }\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.chartAxisLayoutPanel.measure();\n }\n };\n Chart.prototype.initAxis = function (series, axis, isSeries) {\n if (series.xAxisName === axis.name || (series.xAxisName == null && axis.name === 'primaryXAxis')) {\n axis.orientation = this.requireInvertedAxis ? 'Vertical' : 'Horizontal';\n series.xAxis = axis;\n if (isSeries) {\n axis.series.push(series);\n }\n }\n else if (series.yAxisName === axis.name || (series.yAxisName == null && axis.name === 'primaryYAxis')) {\n axis.orientation = this.requireInvertedAxis ? 'Horizontal' : 'Vertical';\n series.yAxis = axis;\n if (isSeries) {\n axis.series.push(series);\n }\n }\n };\n Chart.prototype.initTechnicalIndicators = function () {\n var i = 0;\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n var techIndicator = indicator;\n var type = firstToLowerCase(techIndicator.type);\n if (this[type + 'IndicatorModule']) {\n techIndicator.index = i;\n this[type + 'IndicatorModule'].initSeriesCollection(techIndicator, this);\n for (var _b = 0, _c = techIndicator.targetSeries; _b < _c.length; _b++) {\n var targetSeries = _c[_b];\n if (indicator.seriesName || indicator.dataSource) {\n this.visibleSeries.push(targetSeries);\n }\n }\n }\n i++;\n }\n };\n /** @private */\n Chart.prototype.refreshTechnicalIndicator = function (series) {\n if (this.indicators.length) {\n var targetIndicator = null;\n if (series instanceof Series && series.category !== 'Indicator') {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (indicator.seriesName === series.name && !indicator.dataSource) {\n targetIndicator = indicator;\n targetIndicator.setDataSource(series, this);\n }\n }\n }\n else if (series instanceof TechnicalIndicator) {\n targetIndicator = series;\n targetIndicator.setDataSource(series instanceof Series ? series : null, this);\n }\n }\n };\n Chart.prototype.calculateVisibleSeries = function () {\n var series;\n this.visibleSeries = [];\n var colors = this.palettes.length ? this.palettes : getSeriesColor(this.theme);\n var count = colors.length;\n for (var i = 0, len = this.series.length; i < len; i++) {\n series = this.series[i];\n series.index = i;\n series.interior = series.fill || colors[i % count];\n switch (series.type) {\n case 'Bar':\n case 'StackingBar':\n case 'StackingBar100':\n if (this.series[0].type.indexOf('Bar') === -1) {\n continue;\n }\n break;\n case 'Polar':\n case 'Radar':\n if (this.chartAreaType !== 'PolarRadar') {\n continue;\n }\n if (this.chartAreaType === 'PolarRadar' && ((series.xAxisName === null && series.yAxisName !== null) ||\n (series.xAxisName !== null && series.yAxisName === null) ||\n (series.xAxisName !== null && series.yAxisName !== null))) {\n continue;\n }\n break;\n default:\n if (this.chartAreaType === 'PolarRadar' || this.series[0].type.indexOf('Bar') > -1) {\n continue;\n }\n break;\n }\n this.visibleSeries.push(series);\n this.series[i] = series;\n }\n };\n Chart.prototype.renderTitle = function () {\n if (this.title) {\n var anchor = this.titleStyle.textAlignment === 'Near' ? 'start' :\n this.titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n this.elementSize = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_ChartTitle', titlePositionX(this.availableSize, this.margin.left, this.margin.right, this.titleStyle), this.margin.top + ((this.elementSize.height) * 3 / 4), anchor, this.titleCollection, '', 'auto');\n var element = textElement(options, this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n };\n Chart.prototype.renderBorder = function () {\n var width = this.border.width;\n var rect = new RectOption(this.element.id + '_ChartBorder', this.background || this.themeStyle.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.htmlObject = this.renderer.drawRectangle(rect);\n this.svgObject.appendChild(this.htmlObject);\n };\n Chart.prototype.renderAreaBorder = function () {\n if (this.chartAreaType === 'PolarRadar') {\n return null;\n }\n else {\n var rect = new RectOption(this.element.id + '_ChartAreaBorder', this.chartArea.background, { width: this.chartArea.border.width, color: this.chartArea.border.color || this.themeStyle.areaBorder }, this.chartArea.opacity, this.chartAxisLayoutPanel.seriesClipRect);\n this.htmlObject = this.renderer.drawRectangle(rect);\n this.svgObject.appendChild(this.htmlObject);\n }\n };\n /**\n * To add series for the chart\n * @param {SeriesModel[]} seriesCollection - Defines the series collection to be added in chart.\n * @return {void}.\n */\n Chart.prototype.addSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series = new Series(this, 'series', series);\n this.series.push(series);\n }\n this.refresh();\n };\n /**\n * To Remove series for the chart\n * @param index - Defines the series index to be remove in chart series\n * @return {void}\n */\n Chart.prototype.removeSeries = function (index) {\n this.series.splice(index);\n this.refresh();\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of Chart\n */\n Chart.prototype.destroy = function () {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-chart');\n };\n /**\n * Get component name\n */\n Chart.prototype.getModuleName = function () {\n return 'chart';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Chart.prototype.getPersistData = function () {\n var keyEntity = ['loaded', 'animationComplete'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Method to create SVG element.\n */\n Chart.prototype.createChartSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * Method to bind events for chart\n */\n Chart.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var startEvent = Browser.touchStartEvent;\n var moveEvent = Browser.touchMoveEvent;\n var stopEvent = Browser.touchEndEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, startEvent, this.chartOnMouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'click', this.chartOnMouseClick);\n EventHandler.remove(this.element, 'contextmenu', this.chartRightClick);\n EventHandler.remove(this.element, cancelEvent, this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.chartResize);\n };\n Chart.prototype.wireEvents = function () {\n /*! Find the Events type */\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.chartOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'click', this.chartOnMouseClick, this);\n EventHandler.add(this.element, 'contextmenu', this.chartRightClick, this);\n EventHandler.add(this.element, cancelEvent, this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.chartResize.bind(this));\n this.longPress = this.longPress.bind(this);\n new Touch(this.element, { tapHold: this.longPress, tapHoldThreshold: 500 });\n /*! Apply the style for chart */\n this.setStyle(this.element);\n };\n Chart.prototype.chartRightClick = function (event) {\n if (this.crosshair.enable && this.crosshairModule &&\n (event.buttons === 2 || event.which === 0 || event.pointerType === 'touch')) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n Chart.prototype.setStyle = function (element) {\n var zooming = this.zoomSettings;\n var disableScroll = zooming.enableSelectionZooming || zooming.enableMouseWheelZooming || zooming.enablePinchZooming ||\n this.selectionMode !== 'None' || this.crosshair.enable;\n element.style.touchAction = disableScroll ? 'none' : 'element';\n element.style.msTouchAction = disableScroll ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n element.style.display = 'block';\n };\n /**\n * Finds the orientation.\n * @return {boolean}\n * @private\n */\n Chart.prototype.isOrientation = function () {\n return ('orientation' in window && 'onorientationchange' in window);\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.longPress = function (e) {\n this.mouseX = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientX) : 0;\n this.mouseY = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientY) : 0;\n this.startMove = true;\n this.setMouseXY(this.mouseX, this.mouseY);\n this.notify('tapHold', e);\n return false;\n };\n /**\n * To find mouse x, y for aligned chart element svg position\n */\n Chart.prototype.setMouseXY = function (pageX, pageY) {\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n };\n /**\n * Handles the chart resize.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n _this.createChartSvg();\n _this.refreshAxis();\n _this.refreshBound();\n _this.trigger('loaded', { chart: _this });\n }, 500);\n return false;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseMove = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type === 'touchmove') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2' || this.isTouch;\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseMove(e);\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseLeave = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type === 'touchleave') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseLeave(e);\n return false;\n };\n /**\n * Handles the mouse leave on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseLeave = function (e) {\n var element = e.target;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.trigger(chartMouseLeave, { target: element.id, x: this.mouseX, y: this.mouseY });\n this.isChartDrag = false;\n this.notify(cancelEvent, e);\n return false;\n };\n /**\n * Handles the mouse click on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseClick = function (e) {\n var element = e.target;\n this.trigger(chartMouseClick, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (this.pointClick) {\n this.triggerPointEvent(pointClick);\n }\n this.notify('click', e);\n return false;\n };\n Chart.prototype.triggerPointEvent = function (event) {\n var data = new ChartData(this);\n var pointData = data.getData();\n if (pointData.series && pointData.point) {\n this.trigger(event, { series: pointData.series,\n point: pointData.point,\n seriesIndex: pointData.series.index, pointIndex: pointData.point.index,\n x: this.mouseX, y: this.mouseY });\n }\n };\n /**\n * Handles the mouse move on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseMove = function (e) {\n var element = e.target;\n this.trigger(chartMouseMove, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (this.pointMove) {\n this.triggerPointEvent(pointMove);\n }\n // Tooltip for chart series.\n if (!this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY);\n this.axisTooltip(e, this.mouseX, this.mouseY);\n }\n this.notify(Browser.touchMoveEvent, e);\n this.isTouch = false;\n return false;\n };\n Chart.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId === (this.element.id + '_ChartTitle')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n Chart.prototype.axisTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if (((targetId.indexOf('AxisLabel') > -1) || targetId.indexOf('Axis_MultiLevelLabel') > -1) &&\n (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.findAxisLabel(targetId), x, y, this.element.offsetWidth, this.element.id + '_EJ2_AxisLabel_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_AxisLabel_Tooltip');\n }\n };\n Chart.prototype.findAxisLabel = function (text) {\n var texts;\n if (text.indexOf('AxisLabel') > -1) {\n texts = ((text.replace(this.element.id, '')).replace('AxisLabel_', '')).split('_');\n return this.axisCollections[parseInt(texts[0], 10)].visibleLabels[parseInt(texts[1], 10)].originalText;\n }\n else {\n texts = ((text.replace(this.element.id, '')).replace('Axis_MultiLevelLabel_Level_', '').replace('Text_', '')).split('_');\n return (this.axisCollections[parseInt(texts[0], 10)].multiLevelLabels[parseInt(texts[1], 10)]\n .categories[parseInt(texts[2], 10)].text);\n }\n };\n /**\n * Handles the mouse down on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var offset = Browser.isDevice ? 20 : 30;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n this.trigger(chartMouseDown, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.clientX;\n pageY = e.clientY;\n target = e.target;\n }\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseDownX = this.previousMouseMoveX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseDownY = this.previousMouseMoveY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n if (this.isTouch) {\n this.isDoubleTap = (new Date().getTime() < this.threshold && target.id.indexOf(this.element.id + '_Zooming_') === -1 &&\n (this.mouseDownX - offset >= this.mouseX || this.mouseDownX + offset >= this.mouseX) &&\n (this.mouseDownY - offset >= this.mouseY || this.mouseDownY + offset >= this.mouseY) &&\n (this.mouseX - offset >= this.mouseDownX || this.mouseX + offset >= this.mouseDownX) &&\n (this.mouseY - offset >= this.mouseDownY || this.mouseY + offset >= this.mouseDownY));\n }\n this.notify(Browser.touchStartEvent, e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseEnd = function (e) {\n var pageY;\n var pageX;\n var touchArg;\n if (e.type === 'touchend') {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n this.isTouch = true;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n pageY = e.clientY;\n pageX = e.clientX;\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseUp(e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseUp = function (e) {\n var element = e.target;\n this.trigger(chartMouseUp, { target: element.id, x: this.mouseX, y: this.mouseY });\n this.isChartDrag = false;\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.axisTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.threshold = new Date().getTime() + 300;\n }\n this.seriesElements.removeAttribute('clip-path');\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n * Method to set culture for chart\n */\n Chart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.setLocaleConstants();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * Method to set the annotation content dynamically for chart.\n */\n Chart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n var annotation = this.annotations[annotationIndex];\n var element;\n if (content !== null) {\n annotation.content = content;\n if (parentNode) {\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n element = createElement('div');\n this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n parentNode.appendChild(element.children[0]);\n }\n else {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n }\n };\n /**\n * Method to set locale constants\n */\n Chart.prototype.setLocaleConstants = function () {\n this.defaultLocalConstants = {\n ZoomIn: 'ZoomIn',\n Zoom: 'Zoom',\n ZoomOut: 'ZoomOut',\n Pan: 'Pan',\n Reset: 'Reset',\n ResetZoom: 'Reset Zoom'\n };\n };\n /**\n * Theming for chart\n */\n Chart.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getThemeColor(this.theme);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Chart.prototype.requiredModules = function () {\n var _this = this;\n var modules = [];\n var series = this.series;\n var enableAnnotation = false;\n var moduleName;\n var errorBarVisible = false;\n var dataLabelEnable = false;\n var zooming = this.zoomSettings;\n this.chartAreaType = (series.length > 0 && (series[0].type === 'Polar' || series[0].type === 'Radar')) ? 'PolarRadar' : 'Cartesian';\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this]\n });\n }\n series.map(function (value) {\n _this.isLegend = (_this.legendSettings.visible && ((value.name !== '') || !!_this.isLegend));\n moduleName = value.type.indexOf('100') !== -1 ? value.type.replace('100', '') + 'Series' : value.type + 'Series';\n errorBarVisible = value.errorBar.visible || errorBarVisible;\n dataLabelEnable = value.marker.dataLabel.visible || dataLabelEnable;\n if (!modules.some(function (currentModule) {\n return currentModule.member === moduleName;\n })) {\n modules.push({\n member: moduleName,\n args: [_this, series]\n });\n }\n if (_this.chartAreaType === 'PolarRadar') {\n modules.push({\n member: value.drawType + 'Series',\n args: [_this, series]\n });\n }\n });\n this.findIndicatorModules(modules);\n this.findTrendLineModules(modules);\n modules = this.findAxisModule(modules);\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (errorBarVisible) {\n modules.push({\n member: 'ErrorBar',\n args: [this, series]\n });\n }\n if (this.isLegend) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.chartAreaType !== 'PolarRadar' && (zooming.enableSelectionZooming\n || zooming.enableMouseWheelZooming || zooming.enablePinchZooming || zooming.enablePan)) {\n modules.push({\n member: 'Zoom',\n args: [this, this.zoomSettings]\n });\n }\n if (this.selectionMode !== 'None' && !(this.chartAreaType === 'PolarRadar' &&\n this.selectionMode.indexOf('Drag') > -1)) {\n modules.push({\n member: 'Selection',\n args: [this]\n });\n }\n if (dataLabelEnable) {\n modules.push({\n member: 'DataLabel',\n args: [this, series]\n });\n }\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this, this.annotations]\n });\n }\n if (this.chartAreaType !== 'PolarRadar' && this.crosshair.enable) {\n modules.push({\n member: 'Crosshair',\n args: [this]\n });\n }\n return modules;\n };\n Chart.prototype.findAxisModule = function (modules) {\n var axisCollections = [];\n axisCollections.push(this.primaryXAxis);\n axisCollections.push(this.primaryYAxis);\n axisCollections = axisCollections.concat(this.axes);\n var datetimeEnabled = false;\n var categoryEnabled = false;\n var logarithmicEnabled = false;\n var striplineEnabled = false;\n var dateTimeCategoryEnabled = false;\n var multiLevelEnabled = false;\n for (var _i = 0, axisCollections_1 = axisCollections; _i < axisCollections_1.length; _i++) {\n var axis = axisCollections_1[_i];\n datetimeEnabled = axis.valueType === 'DateTime' || datetimeEnabled;\n categoryEnabled = axis.valueType === 'Category' || categoryEnabled;\n logarithmicEnabled = axis.valueType === 'Logarithmic' || logarithmicEnabled;\n dateTimeCategoryEnabled = axis.valueType === 'DateTimeCategory' || dateTimeCategoryEnabled;\n striplineEnabled = this.findStriplineVisibility(axis.stripLines) || striplineEnabled;\n multiLevelEnabled = axis.multiLevelLabels.length > 0 || multiLevelEnabled;\n }\n if (datetimeEnabled) {\n modules.push({\n member: 'DateTime',\n args: [this]\n });\n }\n if (categoryEnabled) {\n modules.push({\n member: 'Category',\n args: [this]\n });\n }\n if (logarithmicEnabled) {\n modules.push({\n member: 'Logarithmic',\n args: [this]\n });\n }\n if (striplineEnabled) {\n modules.push({\n member: 'StripLine',\n args: [this]\n });\n }\n if (multiLevelEnabled) {\n modules.push({\n member: 'MultiLevelLabel',\n args: [this]\n });\n }\n if (dateTimeCategoryEnabled) {\n modules.push({\n member: 'DateTimeCategory',\n args: [this]\n });\n }\n return modules;\n };\n Chart.prototype.findIndicatorModules = function (modules) {\n var macdEnable;\n var bandEnable;\n var indicators = this.indicators;\n if (this.indicators.length) {\n modules.push({\n member: 'LineSeries',\n args: [this]\n });\n indicators.map(function (indicator) {\n macdEnable = macdEnable || indicator.type === 'Macd';\n bandEnable = bandEnable || indicator.type === 'BollingerBands';\n });\n if (macdEnable) {\n modules.push({\n member: 'ColumnSeries',\n args: [this]\n });\n }\n if (bandEnable) {\n modules.push({\n member: 'RangeAreaSeries',\n args: [this]\n });\n }\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n modules.push({\n member: indicator.type + 'Indicator',\n args: [this]\n });\n }\n }\n };\n Chart.prototype.findTrendLineModules = function (modules) {\n var isLine;\n var isSpline;\n var _loop_1 = function (series) {\n var markerEnable;\n series.trendlines.map(function (trendline) {\n markerEnable = markerEnable || trendline.marker.visible;\n isLine = isLine || (trendline.type === 'Linear' || trendline.type === 'MovingAverage') ? true : false;\n isSpline = isSpline || !isLine ? true : false;\n });\n if (markerEnable) {\n modules.push({\n member: 'Marker',\n args: [this_1, series]\n });\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n _loop_1(series);\n }\n if (isLine || isSpline) {\n modules.push({\n member: 'TrendLine',\n args: [this]\n });\n }\n if (isLine) {\n modules.push({\n member: 'LineSeries',\n args: [this]\n });\n }\n if (isSpline) {\n modules.push({\n member: 'SplineSeries',\n args: [this]\n });\n }\n };\n Chart.prototype.findStriplineVisibility = function (striplines) {\n var visible = false;\n for (var _i = 0, striplines_1 = striplines; _i < striplines_1.length; _i++) {\n var stripline = striplines_1[_i];\n if (stripline.visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n Chart.prototype.removeSvg = function () {\n if (document.getElementById(this.element.id + '_Secondary_Element')) {\n remove(document.getElementById(this.element.id + '_Secondary_Element'));\n }\n var removeLength = 0;\n if (this.zoomModule && this.zoomModule.pinchTarget) {\n this.zoomModule.pinchTarget.id = '';\n this.zoomModule.pinchTarget.setAttribute('opacity', '0');\n this.svgObject.appendChild(this.zoomModule.pinchTarget);\n removeLength = 1;\n }\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > removeLength) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n Chart.prototype.refreshDefinition = function (definitions) {\n for (var _i = 0, definitions_1 = definitions; _i < definitions_1.length; _i++) {\n var item = definitions_1[_i];\n item.axes = [];\n }\n };\n /**\n * Refresh the axis default value.\n * @return {boolean}\n * @private\n */\n Chart.prototype.refreshAxis = function () {\n var axis = this.primaryXAxis;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis = this.primaryYAxis;\n axis.isStack100 = false;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var item = _a[_i];\n axis = item;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis.isStack100 = false;\n }\n };\n Chart.prototype.axisChange = function (axis) {\n if (!axis.name && !axis.valueType) {\n return false;\n }\n this.refreshDefinition(this.columns);\n this.refreshDefinition(this.rows);\n this.calculateVisibleAxis();\n this.processData();\n return true;\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n Chart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n if (Object.keys(newProp).length === 1 && Object.keys(newProp)[0] === 'indicators') {\n //add valid check, it should happen only when property change is triggered for target series\n return;\n }\n this.animateSeries = false;\n if (!this.delayRedraw) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'primaryXAxis':\n refreshBounds = this.axisChange(newProp.primaryXAxis);\n if (newProp.primaryXAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryXAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n break;\n case 'primaryYAxis':\n refreshBounds = this.axisChange(newProp.primaryYAxis);\n if (newProp.primaryYAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryYAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n break;\n case 'height':\n case 'width':\n this.createChartSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'zoomSettings':\n case 'background':\n renderer = true;\n break;\n case 'chartArea':\n if (newProp.chartArea.border && newProp.chartArea.border.width) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'legendSettings':\n if (!newProp.legendSettings.background || !newProp.legendSettings.opacity) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'palettes':\n this.calculateVisibleSeries();\n renderer = true;\n break;\n case 'selectedDataIndexes':\n case 'selectionMode':\n if (this.selectionModule && newProp.selectionMode && newProp.selectionMode.indexOf('Drag') === -1) {\n this.selectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n break;\n case 'isMultiSelect':\n if (this.selectionModule && !newProp.isMultiSelect && this.selectionModule.selectedDataIndexes.length > 1) {\n this.selectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n break;\n case 'theme':\n this.animateSeries = true;\n break;\n case 'locale':\n case 'currencyCode':\n _super.prototype.refresh.call(this);\n break;\n case 'tooltip':\n this.tooltipModule.previousPoints = [];\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderElements();\n this.trigger('loaded', { chart: this });\n }\n if (refreshBounds) {\n this.removeSvg();\n this.refreshAxis();\n this.refreshBound();\n this.trigger('loaded', { chart: this });\n }\n }\n };\n __decorate([\n Property(null)\n ], Chart.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"title\", void 0);\n __decorate([\n Complex(Theme.chartTitleFont, Font)\n ], Chart.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Chart.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Chart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"background\", void 0);\n __decorate([\n Complex({ border: { color: null, width: 0.5 }, background: 'transparent' }, ChartArea)\n ], Chart.prototype, \"chartArea\", void 0);\n __decorate([\n Complex({ name: 'primaryXAxis' }, Axis)\n ], Chart.prototype, \"primaryXAxis\", void 0);\n __decorate([\n Complex({ name: 'primaryYAxis' }, Axis)\n ], Chart.prototype, \"primaryYAxis\", void 0);\n __decorate([\n Collection([{}], Row)\n ], Chart.prototype, \"rows\", void 0);\n __decorate([\n Collection([{}], Column)\n ], Chart.prototype, \"columns\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], Chart.prototype, \"axes\", void 0);\n __decorate([\n Collection([{}], Series)\n ], Chart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], ChartAnnotationSettings)\n ], Chart.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], Chart.prototype, \"palettes\", void 0);\n __decorate([\n Property('Material')\n ], Chart.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], Chart.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, CrosshairSettings)\n ], Chart.prototype, \"crosshair\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], Chart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, ZoomSettings)\n ], Chart.prototype, \"zoomSettings\", void 0);\n __decorate([\n Property('None')\n ], Chart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Collection([], Indexes)\n ], Chart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isTransposed\", void 0);\n __decorate([\n Collection([], TechnicalIndicator)\n ], Chart.prototype, \"indicators\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], Chart.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(true)\n ], Chart.prototype, \"enableSideBySidePlacement\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisRangeCalculated\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisMultiLabelRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"dragComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"zoomComplete\", void 0);\n __decorate([\n Property('USD')\n ], Chart.prototype, \"currencyCode\", void 0);\n Chart = __decorate([\n NotifyPropertyChanges\n ], Chart);\n return Chart;\n}(Component));\nexport { Chart };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { Double } from '../axis/double-axis';\n/**\n * Common axis classes\n * @private\n */\nvar NiceInterval = /** @class */ (function (_super) {\n __extends(NiceInterval, _super);\n function NiceInterval() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Method to calculate numeric datetime interval\n */\n NiceInterval.prototype.calculateDateTimeNiceInterval = function (axis, size, start, end) {\n var oneDay = 24 * 60 * 60 * 1000;\n var startDate = new Date(start);\n var endDate = new Date(end);\n //var axisInterval ;\n var totalDays = (Math.abs((startDate.getTime() - endDate.getTime()) / (oneDay)));\n var interval;\n axis.actualIntervalType = axis.intervalType;\n switch (axis.intervalType) {\n case 'Years':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n break;\n case 'Months':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n break;\n case 'Days':\n interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n break;\n case 'Hours':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n break;\n case 'Minutes':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n break;\n case 'Seconds':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n break;\n case 'Auto':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Years';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Months';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Days';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Hours';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Minutes';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n axis.actualIntervalType = 'Seconds';\n return interval;\n }\n return interval;\n };\n /**\n * To get the skeleton for the DateTime axis.\n * @return {string}\n * @private\n */\n NiceInterval.prototype.getSkeleton = function (axis) {\n var skeleton;\n if (axis.skeleton) {\n return axis.skeleton;\n }\n if (axis.actualIntervalType === 'Years') {\n skeleton = 'yMMM';\n }\n else if (axis.actualIntervalType === 'Months') {\n skeleton = 'MMMd';\n }\n else if (axis.actualIntervalType === 'Days') {\n skeleton = 'yMd';\n }\n else if (axis.actualIntervalType === 'Hours') {\n skeleton = 'EHm';\n }\n else if (axis.actualIntervalType === 'Minutes' || axis.actualIntervalType === 'Seconds') {\n skeleton = 'Hms';\n }\n else {\n skeleton = 'Hms';\n }\n return skeleton;\n };\n return NiceInterval;\n}(Double));\nexport { NiceInterval };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { DoubleRange } from '../utils/double-range';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { NiceInterval } from '../axis/axis-helper';\n/**\n * `DateTime` module is used to render datetime axis.\n */\nvar DateTime = /** @class */ (function (_super) {\n __extends(DateTime, _super);\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function DateTime(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n */\n DateTime.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n DateTime.prototype.getActualRange = function (axis, size) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n // Axis min\n if ((axis.minimum) !== null) {\n this.min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.minimum }).val))));\n }\n else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n this.min = Date.parse(dateParser(dateFormatter(new Date(1970, 1, 1))));\n }\n // Axis Max\n if ((axis.maximum) !== null) {\n this.max = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.maximum }).val))));\n }\n else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n this.max = Date.parse(dateParser(dateFormatter(new Date(1970, 5, 1))));\n }\n if (this.min === this.max) {\n this.max = this.max + 2592000000;\n this.min = this.min - 2592000000;\n }\n axis.actualRange = {};\n axis.doubleRange = new DoubleRange(this.min, this.max);\n var datetimeInterval = this.calculateDateTimeNiceInterval(axis, size, axis.doubleRange.start, axis.doubleRange.end);\n if (!axis.interval) {\n axis.actualRange.interval = datetimeInterval;\n }\n else {\n axis.actualRange.interval = axis.interval;\n }\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n };\n /**\n * Apply padding for the range.\n * @private\n */\n DateTime.prototype.applyRangePadding = function (axis, size) {\n this.start = (axis.actualRange.min);\n this.end = (axis.actualRange.max);\n var minimum;\n var maximum;\n var interval = axis.actualRange.interval;\n if (!axis.setRange()) {\n var rangePadding = axis.getRangePadding(this.chart);\n minimum = new Date(this.start);\n maximum = new Date(this.end);\n var intervalType = axis.actualIntervalType;\n if (rangePadding === 'None') {\n this.start = minimum.getTime();\n this.end = maximum.getTime();\n }\n else if (rangePadding === 'Additional' || rangePadding === 'Round') {\n switch (intervalType) {\n case 'Years':\n this.getYear(minimum, maximum, rangePadding, interval);\n break;\n case 'Months':\n this.getMonth(minimum, maximum, rangePadding, interval);\n break;\n case 'Days':\n this.getDay(minimum, maximum, rangePadding, interval);\n break;\n case 'Hours':\n this.getHour(minimum, maximum, rangePadding, interval);\n break;\n case 'Minutes':\n var minute = (minimum.getMinutes() / interval) * interval;\n var endMinute = maximum.getMinutes() + (minimum.getMinutes() - minute);\n if (rangePadding === 'Round') {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minute, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute, 59)).getTime();\n }\n else {\n this.start = (new Date(minimum.getFullYear(), maximum.getMonth(), minimum.getDate(), minimum.getHours(), minute + (-interval), 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute + (interval), 0)).getTime();\n }\n break;\n case 'Seconds':\n var second = (minimum.getSeconds() / interval) * interval;\n var endSecond = maximum.getSeconds() + (minimum.getSeconds() - second);\n if (rangePadding === 'Round') {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond, 0)).getTime();\n }\n else {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second + (-interval), 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond + (interval), 0)).getTime();\n }\n break;\n }\n }\n }\n axis.actualRange.min = (axis.minimum != null) ? this.min : this.start;\n axis.actualRange.max = (axis.maximum != null) ? this.max : this.end;\n axis.actualRange.delta = (axis.actualRange.max - axis.actualRange.min);\n axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n this.calculateVisibleRange(size, axis);\n };\n DateTime.prototype.getYear = function (minimum, maximum, rangePadding, interval) {\n var startYear = minimum.getFullYear();\n var endYear = maximum.getFullYear();\n if (rangePadding === 'Additional') {\n this.start = (new Date(startYear - interval, 1, 1, 0, 0, 0)).getTime();\n this.end = (new Date(endYear + interval, 1, 1, 0, 0, 0)).getTime();\n }\n else {\n this.start = new Date(startYear, 0, 0, 0, 0, 0).getTime();\n this.end = new Date(endYear, 11, 30, 23, 59, 59).getTime();\n }\n };\n DateTime.prototype.getMonth = function (minimum, maximum, rangePadding, interval) {\n var month = minimum.getMonth();\n var endMonth = maximum.getMonth();\n if (rangePadding === 'Round') {\n this.start = (new Date(minimum.getFullYear(), month, 0, 0, 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), endMonth, new Date(maximum.getFullYear(), maximum.getMonth(), 0).getDate(), 23, 59, 59)).getTime();\n }\n else {\n this.start = (new Date(minimum.getFullYear(), month + (-interval), 1, 0, 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), endMonth + (interval), endMonth === 2 ? 28 : 30, 0, 0, 0)).getTime();\n }\n };\n DateTime.prototype.getDay = function (minimum, maximum, rangePadding, interval) {\n var day = minimum.getDate();\n var endDay = maximum.getDate();\n if (rangePadding === 'Round') {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), day, 0, 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay, 23, 59, 59)).getTime();\n }\n else {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), day + (-interval), 0, 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay + (interval), 0, 0, 0)).getTime();\n }\n };\n DateTime.prototype.getHour = function (minimum, maximum, rangePadding, interval) {\n var hour = (minimum.getHours() / interval) * interval;\n var endHour = maximum.getHours() + (minimum.getHours() - hour);\n if (rangePadding === 'Round') {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour, 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour, 59, 59)).getTime();\n }\n else {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour + (-interval), 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour + (interval), 0, 0)).getTime();\n }\n };\n /**\n * Calculate visible range for axis.\n * @private\n */\n DateTime.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n min: axis.actualRange.min,\n max: axis.actualRange.max,\n interval: axis.actualRange.interval,\n delta: axis.actualRange.delta,\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n this.calculateDateTimeNiceInterval(axis, size, axis.visibleRange.min, axis.visibleRange.max)\n : axis.visibleRange.interval;\n }\n axis.dateTimeInterval = this.increaseDateTimeInterval(axis, axis.visibleRange.min, axis.visibleRange.interval).getTime()\n - axis.visibleRange.min;\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n };\n /**\n * Calculate visible labels for the axis.\n * @private\n */\n DateTime.prototype.calculateVisibleLabels = function (axis) {\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n if (!axis.setRange()) {\n tempInterval = this.alignRangeStart(axis, tempInterval, axis.visibleRange.interval, axis.actualIntervalType).getTime();\n }\n axis.format = this.chart.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis)\n });\n axis.startLabel = axis.format(new Date(axis.visibleRange.min));\n axis.endLabel = axis.format(new Date(axis.visibleRange.max));\n while (tempInterval <= axis.visibleRange.max) {\n if (withIn(tempInterval, axis.visibleRange)) {\n axis.triggerLabelRender(this.chart, tempInterval, axis.format(new Date(tempInterval)), axis.labelStyle);\n }\n tempInterval = this.increaseDateTimeInterval(axis, tempInterval, axis.visibleRange.interval).getTime();\n }\n axis.getMaxLabelWidth(this.chart);\n };\n /** @private */\n DateTime.prototype.increaseDateTimeInterval = function (axis, value, interval) {\n var result = new Date(value);\n interval = Math.ceil(interval);\n switch (axis.actualIntervalType) {\n case 'Years':\n result.setFullYear(result.getFullYear() + interval);\n return result;\n case 'Months':\n result.setMonth(result.getMonth() + interval);\n return result;\n case 'Days':\n result.setDate(result.getDate() + interval);\n return result;\n case 'Hours':\n result.setHours(result.getHours() + interval);\n return result;\n case 'Minutes':\n result.setMinutes(result.getMinutes() + interval);\n return result;\n case 'Seconds':\n result.setSeconds(result.getSeconds() + interval);\n return result;\n }\n return result;\n };\n DateTime.prototype.alignRangeStart = function (axis, sDate, intervalSize, intervalType) {\n var sResult = new Date(sDate);\n switch (axis.actualIntervalType) {\n case 'Years':\n var year = Math.floor(Math.floor(sResult.getFullYear() / intervalSize) * intervalSize);\n sResult = new Date(year, sResult.getMonth(), sResult.getDate(), 0, 0, 0);\n return sResult;\n case 'Months':\n var month = Math.floor(Math.floor((sResult.getMonth()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), month, sResult.getDate(), 0, 0, 0);\n return sResult;\n case 'Days':\n var day = Math.floor(Math.floor((sResult.getDate()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), day, 0, 0, 0);\n return sResult;\n case 'Hours':\n var hour = Math.floor(Math.floor((sResult.getHours()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), hour, 0, 0);\n return sResult;\n case 'Minutes':\n var minutes = Math.floor(Math.floor((sResult.getMinutes()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), minutes, 0, 0);\n return sResult;\n case 'Seconds':\n var seconds = Math.floor(Math.floor((sResult.getSeconds()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), sResult.getMinutes(), seconds, 0);\n return sResult;\n }\n return sResult;\n };\n /**\n * Get module name\n */\n DateTime.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DateTime';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n DateTime.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return DateTime;\n}(NiceInterval));\nexport { DateTime };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { DoubleRange } from '../utils/double-range';\nimport { withIn } from '../../common/utils/helper';\nimport { NiceInterval } from '../axis/axis-helper';\n/**\n * `Category` module is used to render category axis.\n */\nvar Category = /** @class */ (function (_super) {\n __extends(Category, _super);\n /**\n * Constructor for the category module.\n * @private\n */\n function Category(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n */\n Category.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n Category.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n // axis.doubleRange = new DoubleRange(this.min, this.max);\n axis.actualRange = {};\n if (!axis.interval) {\n axis.actualRange.interval = Math.max(1, Math.floor(axis.doubleRange.delta / axis.getActualDesiredIntervalsCount(size)));\n }\n else {\n axis.actualRange.interval = Math.ceil(axis.interval);\n }\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n axis.actualRange.delta = axis.doubleRange.delta;\n };\n /**\n * Padding for the axis.\n * @private\n */\n Category.prototype.applyRangePadding = function (axis, size) {\n var ticks = (axis.labelPlacement === 'BetweenTicks' && this.chart.chartAreaType !== 'PolarRadar') ? 0.5 : 0;\n if (ticks > 0) {\n axis.actualRange.min -= ticks;\n axis.actualRange.max += ticks;\n }\n else {\n axis.actualRange.max += axis.actualRange.max ? 0 : 0.5;\n }\n axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n axis.actualRange.delta = axis.doubleRange.delta;\n this.calculateVisibleRange(size, axis);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n Category.prototype.calculateVisibleLabels = function (axis) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var tempInterval = Math.ceil(axis.visibleRange.min);\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var position;\n axis.startLabel = axis.labels[Math.round(axis.visibleRange.min)];\n axis.endLabel = axis.labels[Math.floor(axis.visibleRange.max)];\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n if (withIn(tempInterval, axis.visibleRange) && axis.labels.length > 0) {\n position = Math.round(tempInterval);\n axis.triggerLabelRender(this.chart, position, axis.labels[position] ? axis.labels[position] : position.toString(), axis.labelStyle);\n }\n }\n axis.getMaxLabelWidth(this.chart);\n };\n /**\n * Get module name\n */\n Category.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Category';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n Category.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Category;\n}(NiceInterval));\nexport { Category };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { Double } from '../axis/double-axis';\nimport { logBase, withIn } from '../../common/utils/helper';\n/**\n * `Logarithmic` module is used to render log axis.\n */\nvar Logarithmic = /** @class */ (function (_super) {\n __extends(Logarithmic, _super);\n /**\n * Constructor for the logerithmic module.\n * @private\n */\n function Logarithmic(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The method to calculate the range and labels for the axis.\n * @return {void}\n */\n Logarithmic.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.calculateVisibleRange(size, axis);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Calculates actual range for the axis.\n * @private\n */\n Logarithmic.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n this.min = this.min < 0 ? 0 : this.min;\n var logStart = logBase(this.min, axis.logBase);\n logStart = isFinite(logStart) ? logStart : this.min;\n var logEnd = logBase(this.max, axis.logBase);\n logEnd = isFinite(logStart) ? logEnd : this.max;\n this.min = Math.floor(logStart / 1);\n this.max = Math.ceil(logEnd / 1);\n axis.actualRange.interval = axis.interval || this.calculateLogNiceInterval(this.max - this.min, size, axis);\n axis.actualRange.min = this.min;\n axis.actualRange.max = this.max;\n axis.actualRange.delta = this.max - this.min;\n };\n /**\n * Calculates visible range for the axis.\n * @private\n */\n Logarithmic.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n interval: axis.actualRange.interval, max: axis.actualRange.max,\n min: axis.actualRange.min, delta: axis.actualRange.delta\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n this.calculateLogNiceInterval(axis.doubleRange.delta, size, axis)\n : axis.visibleRange.interval;\n axis.visibleRange.interval = Math.floor(axis.visibleRange.interval) === 0 ? 1 : Math.floor(axis.visibleRange.interval);\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n }\n };\n /**\n * Calculates log iInteval for the axis.\n * @private\n */\n Logarithmic.prototype.calculateLogNiceInterval = function (delta, size, axis) {\n var actualDesiredIntervalsCount = axis.getActualDesiredIntervalsCount(size);\n var niceInterval = delta;\n var minInterval = Math.pow(10, Math.floor(logBase(niceInterval, 10)));\n for (var j = 0, len = axis.intervalDivs.length; j < len; j++) {\n var currentInterval = minInterval * axis.intervalDivs[j];\n if (actualDesiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Calculates labels for the axis.\n * @private\n */\n Logarithmic.prototype.calculateVisibleLabels = function (axis, chart) {\n /*! Generate axis labels */\n var tempInterval = axis.visibleRange.min;\n axis.visibleLabels = [];\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var axisFormat = this.getFormat(axis);\n var isCustomFormat = axisFormat.match('{value}') !== null;\n axis.format = chart.intl.getNumberFormat({\n format: isCustomFormat ? '' : axisFormat,\n useGrouping: chart.useGroupingSeparator\n });\n axis.startLabel = axis.format(Math.pow(axis.logBase, axis.visibleRange.min));\n axis.endLabel = axis.format(Math.pow(axis.logBase, axis.visibleRange.max));\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n if (withIn(tempInterval, axis.visibleRange)) {\n axis.triggerLabelRender(this.chart, tempInterval, this.formatValue(axis, isCustomFormat, axisFormat, Math.pow(axis.logBase, tempInterval)), axis.labelStyle);\n }\n }\n axis.getMaxLabelWidth(this.chart);\n };\n /**\n * Get module name\n */\n Logarithmic.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Logarithmic';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n Logarithmic.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Logarithmic;\n}(Double));\nexport { Logarithmic };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { Category } from '../axis/category-axis';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Category module is used to render category axis.\n */\nvar DateTimeCategory = /** @class */ (function (_super) {\n __extends(DateTimeCategory, _super);\n /**\n * Constructor for the category module.\n * @private\n */\n function DateTimeCategory(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n * @private\n */\n DateTimeCategory.prototype.calculateRangeAndInterval = function (size, axis) {\n this.axisSize = size;\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n DateTimeCategory.prototype.calculateVisibleLabels = function (axis) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n if (axis.intervalType === 'Auto') {\n this.calculateDateTimeNiceInterval(axis, this.axisSize, parseInt(axis.labels[0], 10), parseInt(axis.labels[axis.labels.length - 1], 10));\n }\n else {\n axis.actualIntervalType = axis.intervalType;\n }\n axis.format = this.chart.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis)\n });\n for (var i = 0; i < axis.labels.length; i++) {\n if (!this.sameInterval(axis.labels.map(Number)[i], axis.labels.map(Number)[i - 1], axis.actualIntervalType, i)) {\n if (withIn(i - padding, axis.visibleRange)) {\n axis.triggerLabelRender(this.chart, i, axis.format(new Date(axis.labels.map(Number)[i])), axis.labelStyle);\n }\n }\n }\n axis.getMaxLabelWidth(this.chart);\n };\n /**\n * get same interval\n */\n DateTimeCategory.prototype.sameInterval = function (currentDate, previousDate, type, index) {\n var sameValue;\n if (index === 0) {\n sameValue = false;\n }\n else {\n switch (type) {\n case 'Years':\n sameValue = new Date(currentDate).getFullYear() === new Date(previousDate).getFullYear();\n break;\n case 'Months':\n sameValue = new Date(currentDate).getFullYear() === new Date(previousDate).getFullYear() &&\n new Date(currentDate).getMonth() === new Date(previousDate).getMonth();\n break;\n case 'Days':\n sameValue = (Math.abs(currentDate - previousDate) < 24 * 60 * 60 * 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n case 'Hours':\n sameValue = (Math.abs(currentDate - previousDate) < 60 * 60 * 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n case 'Minutes':\n sameValue = (Math.abs(currentDate - previousDate) < 60 * 1000 &&\n new Date(currentDate).getMinutes() === new Date(previousDate).getMinutes());\n break;\n case 'Seconds':\n sameValue = (Math.abs(currentDate - previousDate) < 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n }\n }\n return sameValue;\n };\n /**\n * Get module name\n */\n DateTimeCategory.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DateTimeCategory';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n DateTimeCategory.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return DateTimeCategory;\n}(Category));\nexport { DateTimeCategory };\n","/**\n * StripLine src\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Rect, TextOption, measureText, valueToCoefficient, textElement, logBase, RectOption } from '../../common/utils/helper';\n/**\n * `StripLine` module is used to render the stripLine in chart.\n */\nvar StripLine = /** @class */ (function () {\n function StripLine() {\n }\n StripLine.prototype.measureStripLine = function (axis, stripline, seriesClipRect) {\n var actualStart;\n var actualEnd;\n if (axis.valueType === 'DateTimeCategory') {\n var start = stripline.start;\n var end = stripline.end;\n actualStart = start ? axis.labels.indexOf(start.getTime().toString()) : null;\n actualEnd = end ? axis.labels.indexOf(end.getTime().toString()) : null;\n }\n else {\n actualStart = stripline.start;\n actualEnd = stripline.end;\n }\n var rect = this.getFromTovalue(actualStart, actualEnd, stripline.size, stripline.startFromAxis, axis);\n var height = (axis.orientation === 'Vertical') ? (rect.to - rect.from) * axis.rect.height : seriesClipRect.height;\n var width = (axis.orientation === 'Horizontal') ? (rect.to - rect.from) * axis.rect.width : seriesClipRect.width;\n var x = (axis.orientation === 'Vertical') ? seriesClipRect.x : ((rect.from * axis.rect.width) + axis.rect.x);\n var y = (axis.orientation === 'Horizontal') ? seriesClipRect.y : (axis.rect.y + axis.rect.height -\n (rect.to * axis.rect.height));\n if (height !== 0 && width !== 0) {\n return new Rect(x, y, width, height);\n }\n return new Rect(0, 0, 0, 0);\n };\n /**\n * To get from to value from start, end, size, start from axis\n */\n StripLine.prototype.getFromTovalue = function (start, end, size, startFromAxis, axis) {\n var from = startFromAxis ? axis.visibleRange.min : this.findValue(Math.min(start, isNullOrUndefined(end) ? start : end), axis);\n var to = this.findValue(this.getToValue(Math.max(start, isNullOrUndefined(end) ? start : end), from, size, axis, end), axis);\n return { from: valueToCoefficient(axis.isInversed ? to : from, axis), to: valueToCoefficient(axis.isInversed ? from : to, axis) };\n };\n StripLine.prototype.getToValue = function (to, from, size, axis, end) {\n if (axis.valueType === 'DateTime') {\n return (isNullOrUndefined(end) ? new Date(new Date(from).getTime() + size) : to);\n }\n else {\n return isNullOrUndefined(end) ? (axis.valueType === 'Logarithmic' ? Math.pow(axis.logBase, from) : from) + size : to;\n }\n };\n StripLine.prototype.findValue = function (value, axis) {\n if (axis.valueType === 'Logarithmic') {\n value = logBase(value, axis.logBase);\n }\n if (value < axis.visibleRange.min) {\n value = axis.visibleRange.min;\n }\n else if (value > axis.visibleRange.max) {\n value = axis.visibleRange.max;\n }\n return value;\n };\n /**\n * To render striplines based start and end.\n * @private\n * @param chart\n * @param position\n * @param axes\n */\n StripLine.prototype.renderStripLine = function (chart, position, axes) {\n var id = chart.element.id + '_stripline_' + position + '_';\n var striplineGroup = chart.renderer.createGroup({ id: id + 'collections' });\n var seriesClipRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var rect;\n var count = 0;\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n for (var _a = 0, _b = axis.stripLines; _a < _b.length; _a++) {\n var stripline = _b[_a];\n if (stripline.visible && stripline.zIndex === position) {\n rect = this.measureStripLine(axis, stripline, seriesClipRect);\n this.renderRectangle(stripline, rect, id + 'rect_' + count, striplineGroup, chart);\n this.renderText(stripline, rect, id + 'text_' + count, striplineGroup, chart, axis);\n count++;\n }\n }\n }\n chart.svgObject.appendChild(striplineGroup);\n };\n StripLine.prototype.renderRectangle = function (stripline, rect, id, parent, chart) {\n parent.appendChild(chart.renderer.drawRectangle(new RectOption(id, stripline.color, stripline.border, stripline.opacity, rect, 0, 0, '', '')));\n };\n StripLine.prototype.renderText = function (stripline, rect, id, parent, chart, axis) {\n var textSize = measureText(stripline.text, stripline.textStyle);\n var textMid = 3 * (textSize.height / 8);\n var ty = rect.y + (rect.height / 2) + textMid;\n var rotation = (stripline.rotation === null) ? ((axis.orientation === 'Vertical') ? 0 : -90) : stripline.rotation;\n var tx = rect.x + (rect.width / 2);\n var alignment;\n var anchor;\n var padding = 5;\n if (axis.orientation === 'Horizontal') {\n tx = this.getTextStart(tx + (textMid * this.factor(stripline.horizontalAlignment)), rect.width, stripline.horizontalAlignment);\n ty = this.getTextStart(ty - textMid, rect.height, stripline.verticalAlignment);\n alignment = this.invertAlignment(stripline.verticalAlignment);\n }\n else {\n tx = this.getTextStart(tx, rect.width, stripline.horizontalAlignment);\n ty = this.getTextStart(ty + (textMid * this.factor(stripline.verticalAlignment)) - padding, rect.height, stripline.verticalAlignment);\n alignment = stripline.horizontalAlignment;\n }\n anchor = alignment;\n textElement(new TextOption(id, tx, ty, anchor, stripline.text, 'rotate(' + rotation + ' ' + tx + ',' + ty + ')', 'middle'), stripline.textStyle, stripline.textStyle.color, parent);\n };\n StripLine.prototype.invertAlignment = function (anchor) {\n switch (anchor) {\n case 'Start':\n anchor = 'End';\n break;\n case 'End':\n anchor = 'Start';\n break;\n }\n return anchor;\n };\n StripLine.prototype.factor = function (anchor) {\n var factor = 0;\n switch (anchor) {\n case 'Start':\n factor = 1;\n break;\n case 'End':\n factor = -1;\n break;\n }\n return factor;\n };\n StripLine.prototype.getTextStart = function (xy, size, textAlignment) {\n var padding = 5;\n switch (textAlignment) {\n case 'Start':\n xy = xy - (size / 2) + padding;\n break;\n case 'End':\n xy = xy + (size / 2) - padding;\n break;\n }\n return xy;\n };\n /**\n * To get the module name for `StripLine`.\n * @private\n */\n StripLine.prototype.getModuleName = function () {\n return 'StripLine';\n };\n /**\n * To destroy the `StripLine` module.\n * @private\n */\n StripLine.prototype.destroy = function () {\n // destroy peform here\n };\n return StripLine;\n}());\nexport { StripLine };\n","import { Rect, getAnimationFunction } from '../../common/utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * Base for line type series.\n */\nvar LineBase = /** @class */ (function () {\n /** @private */\n function LineBase(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * To improve the chart performance.\n * @return {void}\n * @private\n */\n LineBase.prototype.improveChartPerformance = function (series) {\n var tempPoints = [];\n var xVisibleRange = series.xAxis.visibleRange;\n var yVisibleRange = series.yAxis.visibleRange;\n var seriesPoints = series.points;\n var areaBounds = series.clipRect;\n var xTolerance = Math.abs(xVisibleRange.delta / areaBounds.width);\n var yTolerance = Math.abs(yVisibleRange.delta / areaBounds.height);\n var prevXValue = (seriesPoints[0] && seriesPoints[0].x > xTolerance) ? 0 : xTolerance;\n var prevYValue = (seriesPoints[0] && seriesPoints[0].y > yTolerance) ? 0 : yTolerance;\n var xVal = 0;\n var yVal = 0;\n var currentPoint;\n for (var _i = 0, seriesPoints_1 = seriesPoints; _i < seriesPoints_1.length; _i++) {\n var currentPoint_1 = seriesPoints_1[_i];\n currentPoint_1.symbolLocations = [];\n xVal = currentPoint_1.xValue ? currentPoint_1.xValue : xVisibleRange.min;\n yVal = currentPoint_1.yValue ? currentPoint_1.yValue : yVisibleRange.min;\n if (Math.abs(prevXValue - xVal) >= xTolerance || Math.abs(prevYValue - yVal) >= yTolerance) {\n tempPoints.push(currentPoint_1);\n prevXValue = xVal;\n prevYValue = yVal;\n }\n }\n return tempPoints;\n };\n /**\n * To generate the line path direction\n * @param firstPoint\n * @param secondPoint\n * @param series\n * @param isInverted\n * @param getPointLocation\n * @param startPoint\n */\n LineBase.prototype.getLineDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation, startPoint) {\n var direction = '';\n if (firstPoint != null) {\n var point1 = getPointLocation(firstPoint.xValue, firstPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n var point2 = getPointLocation(secondPoint.xValue, secondPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n direction = startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' +\n 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ';\n }\n return direction;\n };\n /**\n * To append the line path.\n * @return {void}\n * @private\n */\n LineBase.prototype.appendLinePath = function (options, series, clipRect) {\n var htmlObject = series.chart.renderer.drawPath(options);\n htmlObject.setAttribute('clip-path', clipRect);\n series.pathElement = htmlObject;\n series.seriesElement.appendChild(htmlObject);\n series.isRectSeries = false;\n };\n /**\n * To render the marker for the series.\n * @return {void}\n * @private\n */\n LineBase.prototype.renderMarker = function (series) {\n if (series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * To do the progressive animation.\n * @return {void}\n * @private\n */\n LineBase.prototype.doProgressiveAnimation = function (series, option) {\n var animation = new Animation({});\n var path = series.pathElement;\n var strokeDashArray = path.getAttribute('stroke-dasharray');\n var pathLength = series.pathElement.getTotalLength();\n var currentTime;\n path.style.visibility = 'hidden';\n animation.animate(path, {\n duration: option.duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n path.style.visibility = 'visible';\n currentTime = Math.abs(Math.round(((args.timeStamp - args.delay) * pathLength) / args.duration));\n path.setAttribute('stroke-dasharray', currentTime + ',' + pathLength);\n }\n },\n end: function (model) {\n path.setAttribute('stroke-dasharray', strokeDashArray);\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n /**\n * To store the symbol location and region\n * @param point\n * @param series\n * @param isInverted\n * @param getLocation\n */\n LineBase.prototype.storePointLocation = function (point, series, isInverted, getLocation) {\n point.symbolLocations.push(getLocation(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted, series));\n point.regions.push(new Rect(point.symbolLocations[0].x - series.marker.width, point.symbolLocations[0].y - series.marker.height, 2 * series.marker.width, 2 * series.marker.height));\n };\n /**\n * To do the linear animation.\n * @return {void}\n * @private\n */\n LineBase.prototype.doLinearAnimation = function (series, animation) {\n var clipRect = series.clipRectElement.childNodes[0].childNodes[0];\n var effect = getAnimationFunction('Linear');\n var elementHeight = +clipRect.getAttribute('height');\n var elementWidth = +clipRect.getAttribute('width');\n var xCenter = +clipRect.getAttribute('x');\n var yCenter = series.chart.requireInvertedAxis ? +clipRect.getAttribute('height') + +clipRect.getAttribute('y') :\n +clipRect.getAttribute('y');\n var value;\n clipRect.style.visibility = 'hidden';\n new Animation({}).animate(clipRect, {\n duration: animation.duration,\n delay: animation.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n clipRect.style.visibility = 'visible';\n if (series.chart.requireInvertedAxis) {\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n }\n else {\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n }\n }\n },\n end: function (model) {\n clipRect.setAttribute('transform', 'translate(0,0)');\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n return LineBase;\n}());\nexport { LineBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange, getPoint, PathOption, TransformToVisible } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `LineSeries` module used to render the line series.\n */\nvar LineSeries = /** @class */ (function (_super) {\n __extends(LineSeries, _super);\n function LineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Line Series.\n * @return {void}.\n * @private\n */\n LineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var point1;\n var point2;\n var direction = '';\n var prevPoint = null;\n var startPoint = 'M';\n var options;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var visiblePoints = this.improveChartPerformance(series);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction += this.getLineDirection(prevPoint, point, series, isInverted, getCoordinate, startPoint);\n startPoint = prevPoint ? 'L' : startPoint;\n prevPoint = point;\n this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n else {\n prevPoint = (series.emptyPointSettings.mode === 'Drop') ? prevPoint : null;\n startPoint = (series.emptyPointSettings.mode === 'Drop') ? startPoint : 'M';\n point.symbolLocations = [];\n }\n }\n if (series.chart.chartAreaType === 'PolarRadar') {\n if (series.isClosed) {\n point2 = getCoordinate(visiblePoints[visiblePoints.length - 1].xValue, visiblePoints[visiblePoints.length - 1].yValue, xAxis, yAxis, isInverted, series);\n point1 = getCoordinate(visiblePoints[0].xValue, visiblePoints[0].yValue, xAxis, yAxis, isInverted, series);\n direction = direction.concat(startPoint + ' ' + point2.x + ' ' + point2.y + ' ' + 'L' + ' ' + point1.x + ' ' + point1.y);\n }\n }\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + series.index;\n options = new PathOption(name, 'none', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n LineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doProgressiveAnimation(series, option);\n };\n /**\n * Get module name.\n */\n LineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'LineSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n LineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return LineSeries;\n}(LineBase));\nexport { LineSeries };\n","import { Animation } from '@syncfusion/ej2-base';\nimport { DoubleRange } from '../utils/double-range';\nimport { Rect, valueToCoefficient, getMinPointsDelta, PathOption } from '../../common/utils/helper';\nimport { getAnimationFunction, getPoint } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * Column Series Base\n */\nvar ColumnBase = /** @class */ (function () {\n function ColumnBase() {\n }\n /**\n * To get the position of the column series.\n * @return {DoubleRange}\n * @private\n */\n ColumnBase.prototype.getSideBySideInfo = function (series) {\n if (series.chart.enableSideBySidePlacement && !series.position) {\n this.getSideBySidePositions(series);\n }\n var position = !series.chart.enableSideBySidePlacement ? 0 : series.position;\n var rectCount = !series.chart.enableSideBySidePlacement ? 1 : series.rectCount;\n series.isRectSeries = true;\n var visibleSeries = series.chart.visibleSeries;\n var seriesSpacing = series.chart.enableSideBySidePlacement ? series.columnSpacing : 0; // Column Spacing\n var pointSpacing = series.columnWidth; // Column width\n var minimumPointDelta = getMinPointsDelta(series.xAxis, visibleSeries);\n var width = minimumPointDelta * pointSpacing;\n var radius;\n var location = (position) / rectCount - 0.5;\n var doubleRange = new DoubleRange(location, location + (1 / rectCount));\n if (!(isNaN(doubleRange.start) || isNaN(doubleRange.end))) {\n doubleRange = new DoubleRange(doubleRange.start * width, doubleRange.end * width);\n radius = seriesSpacing * doubleRange.delta;\n doubleRange = new DoubleRange(doubleRange.start + radius / 2, doubleRange.end - radius / 2);\n }\n return doubleRange;\n };\n /**\n * To get the rect values.\n * @return {Rect}\n * @private\n */\n ColumnBase.prototype.getRectangle = function (x1, y1, x2, y2, series) {\n var point1 = getPoint(x1, y1, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n var point2 = getPoint(x2, y2, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n return new Rect(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y), Math.abs(point2.x - point1.x), Math.abs(point2.y - point1.y));\n };\n /**\n * To get the position of each series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.getSideBySidePositions = function (series) {\n var chart = series.chart;\n var seriesCollection = [];\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.findRectPosition(series.findSeriesCollection(columnItem, item, false));\n }\n }\n };\n ColumnBase.prototype.findRectPosition = function (seriesCollection) {\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n seriesCollection.forEach(function (value) {\n if (value.type.indexOf('Stacking') !== -1) {\n if (value.stackingGroup) {\n if (stackingGroup[value.stackingGroup] === undefined) {\n value.position = vSeries.rectCount;\n stackingGroup[value.stackingGroup] = vSeries.rectCount++;\n }\n else {\n value.position = stackingGroup[value.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n value.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n value.position = vSeries.position;\n }\n }\n }\n else {\n value.position = vSeries.rectCount++;\n }\n });\n seriesCollection.forEach(function (value) {\n value.rectCount = vSeries.rectCount;\n });\n };\n /**\n * Updates the symbollocation for points\n * @return void\n * @private\n */\n ColumnBase.prototype.updateSymbolLocation = function (point, rect, series) {\n if (!series.chart.requireInvertedAxis) {\n this.updateXRegion(point, rect, series);\n }\n else {\n this.updateYRegion(point, rect, series);\n }\n };\n /**\n * Update the region for the point.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.updateXRegion = function (point, rect, series) {\n point.regions.push(rect);\n point.symbolLocations.push({\n x: rect.x + (rect.width) / 2,\n y: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isInversed)) ? rect.y : (rect.y + rect.height)\n });\n };\n /**\n * Update the region for the point in bar series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.updateYRegion = function (point, rect, series) {\n point.regions.push(rect);\n point.symbolLocations.push({\n x: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isInversed)) ? rect.x + rect.width : rect.x,\n y: rect.y + rect.height / 2\n });\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.triggerEvent = function (series, point, fill, border) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, fill),\n border: series.setBorderColor(point, border)\n };\n series.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /**\n * To draw the rectangle for points.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.drawRectangle = function (series, point, rect, argsData) {\n var check = series.chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var direction = this.calculateRoundedRectPath(rect, series.cornerRadius.topLeft, series.cornerRadius.topRight, series.cornerRadius.bottomLeft, series.cornerRadius.bottomRight);\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name +\n '_Point_' + point.index : series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n var options = new PathOption(name, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n switch (series.seriesType) {\n case 'XY':\n element.setAttribute('aria-label', point.x.toString() + ':' + point.yValue.toString());\n break;\n case 'HighLow':\n element.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString() + ':' + point.low.toString());\n break;\n }\n series.seriesElement.appendChild(element);\n };\n /**\n * To animate the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.animate = function (series) {\n var rectElements = series.seriesElement.childNodes;\n var count = series.category === 'Indicator' ? 0 : 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length && !(series.type === 'BoxAndWhisker' && point.regions.length)) {\n continue;\n }\n this.animateRect(rectElements[count], series, point);\n count++;\n }\n };\n /**\n * To animate the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.animateRect = function (element, series, point) {\n var option = series.animation;\n var effect = getAnimationFunction('Linear');\n var isPlot = point.yValue < 0;\n var x;\n var y;\n var elementHeight = +point.regions[0].height;\n var elementWidth = +point.regions[0].width;\n var centerX;\n var centerY;\n if (!series.chart.requireInvertedAxis) {\n x = +point.regions[0].x;\n if (series.type.indexOf('Stacking') > -1) {\n y = (1 - valueToCoefficient(0, series.yAxis)) * (series.yAxis.rect.height);\n centerX = x;\n centerY = y;\n }\n else {\n y = +point.regions[0].y;\n centerY = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? y + elementHeight / 2 :\n (isPlot !== series.yAxis.isInversed) ? y : y + elementHeight;\n centerX = isPlot ? x : x + elementWidth;\n }\n }\n else {\n y = +point.regions[0].y;\n if (series.type.indexOf('Stacking') > -1) {\n x = (valueToCoefficient(0, series.yAxis)) * series.yAxis.rect.width;\n centerX = x;\n centerY = y;\n }\n else {\n x = +point.regions[0].x;\n centerY = isPlot ? y : y + elementHeight;\n centerX = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? x + elementWidth / 2 :\n (isPlot !== series.yAxis.isInversed) ? x + elementWidth : x;\n }\n }\n var value;\n element.style.visibility = 'hidden';\n new Animation({}).animate(element, {\n duration: option.duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n element.style.visibility = 'visible';\n if (!series.chart.requireInvertedAxis) {\n elementHeight = elementHeight ? elementHeight : 1;\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n else {\n elementWidth = elementWidth ? elementWidth : 1;\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n }\n },\n end: function (model) {\n element.setAttribute('transform', 'translate(0,0)');\n var seriesElement = series.seriesElement;\n if (element === seriesElement.lastElementChild || point.index === series.points.length - 1 ||\n (series.type === 'Waterfall' && element === seriesElement.children[seriesElement.childElementCount - 2])) {\n series.chart.trigger('animationComplete', { series: series });\n if (series.type === 'Waterfall') {\n var rectElements = seriesElement.childNodes;\n for (var i = 0; i < rectElements.length; i++) {\n if (rectElements[i].id.indexOf('Connector') !== -1) {\n rectElements[i].style.visibility = 'visible';\n rectElements[i].setAttribute('transform', 'translate(0,0)');\n }\n }\n }\n }\n }\n });\n };\n /**\n * To get rounded rect path direction\n */\n ColumnBase.prototype.calculateRoundedRectPath = function (rect, topLeft, topRight, bottomLeft, bottomRight) {\n return 'M' + ' ' + rect.x + ' ' + (topLeft + rect.y) +\n ' Q ' + rect.x + ' ' + rect.y + ' ' + (rect.x + topLeft) + ' ' +\n rect.y + ' ' + 'L' + ' ' + (rect.x + rect.width - topRight) + ' ' + rect.y +\n ' Q ' + (rect.x + rect.width) + ' ' + rect.y + ' ' +\n (rect.x + rect.width) + ' ' + (rect.y + topRight) + ' ' + 'L ' +\n (rect.x + rect.width) + ' ' + (rect.y + rect.height - bottomRight)\n + ' Q ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height) + ' ' + (rect.x + rect.width - bottomRight) + ' ' +\n (rect.y + rect.height) + ' ' + 'L ' + (rect.x + bottomLeft) + ' ' + (rect.y + rect.height) + ' Q ' + rect.x + ' ' +\n (rect.y + rect.height) + ' ' + rect.x + ' ' + (rect.y + rect.height - bottomLeft) + ' ' + 'L' + ' ' + rect.x + ' ' +\n (topLeft + rect.y) + ' ' + 'Z';\n };\n return ColumnBase;\n}());\nexport { ColumnBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `ColumnSeries` Module used to render the column series.\n */\nvar ColumnSeries = /** @class */ (function (_super) {\n __extends(ColumnSeries, _super);\n function ColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Column series.\n * @return {void}\n * @private\n */\n ColumnSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointColumn = _a[_i];\n pointColumn.symbolLocations = [];\n pointColumn.regions = [];\n if (pointColumn.visible && withInRange(series.points[pointColumn.index - 1], pointColumn, series.points[pointColumn.index + 1], series)) {\n rect = this.getRectangle(pointColumn.xValue + sideBySideInfo.start, pointColumn.yValue, pointColumn.xValue + sideBySideInfo.end, origin, series);\n var color = series.category === 'Indicator' ? pointColumn.color : series.interior;\n argsData = this.triggerEvent(series, pointColumn, color, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointColumn, rect, series);\n this.drawRectangle(series, pointColumn, rect, argsData);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n ColumnSeries.prototype.getModuleName = function () {\n return 'ColumnSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the column series.\n * @return {void}\n * @private\n */\n ColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return ColumnSeries;\n}(ColumnBase));\nexport { ColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { getPoint } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\nimport { RectOption } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Base class for multi colored series\n */\nvar MultiColoredSeries = /** @class */ (function (_super) {\n __extends(MultiColoredSeries, _super);\n function MultiColoredSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To Generate the area path direction\n * @param xValue\n * @param yValue\n * @param series\n * @param isInverted\n * @param getPointLocation\n * @param startPoint\n * @param startPath\n */\n MultiColoredSeries.prototype.getAreaPathDirection = function (xValue, yValue, series, isInverted, getPointLocation, startPoint, startPath) {\n var direction = '';\n var firstPoint;\n if (startPoint === null) {\n firstPoint = getPointLocation(xValue, yValue, series.xAxis, series.yAxis, isInverted, series);\n direction += (startPath + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n }\n return direction;\n };\n /**\n * To Generate the empty point direction\n * @param firstPoint\n * @param secondPoint\n * @param series\n * @param isInverted\n * @param getPointLocation\n */\n MultiColoredSeries.prototype.getAreaEmptyDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation) {\n var direction = '';\n direction += this.getAreaPathDirection(firstPoint.x, firstPoint.y, series, isInverted, getPointLocation, null, 'L');\n direction += this.getAreaPathDirection(secondPoint.x, secondPoint.y, series, isInverted, getPointLocation, null, 'L');\n return direction;\n };\n /**\n * To set point color\n * @param points\n */\n MultiColoredSeries.prototype.setPointColor = function (currentPoint, previous, series, isXSegment, segments) {\n if (series.pointColorMapping === '') {\n var segment = void 0;\n var value = void 0;\n for (var i = 0; i < segments.length; i++) {\n segment = segments[i];\n value = isXSegment ? currentPoint.xValue : currentPoint.yValue;\n if (value <= this.getAxisValue(segment.value, isXSegment ? series.xAxis : series.yAxis, series.chart) || !segment.value) {\n currentPoint.interior = segment.color;\n break;\n }\n }\n if (currentPoint.interior == null) {\n currentPoint.interior = series.interior;\n }\n return false;\n }\n else {\n if (previous) {\n return series.setPointColor(currentPoint, series.interior) !== series.setPointColor(previous, series.interior);\n }\n else {\n return false;\n }\n }\n };\n MultiColoredSeries.prototype.sortSegments = function (series, chartSegments) {\n var axis = series.segmentAxis === 'X' ? series.xAxis : series.yAxis;\n var segments = [].concat(chartSegments);\n var access = this;\n return segments.sort(function (a, b) {\n return access.getAxisValue(a.value, axis, series.chart) - access.getAxisValue(b.value, axis, series.chart);\n });\n };\n /**\n * Segment calculation performed here\n * @param series\n * @param options\n * @param chartSegments\n */\n MultiColoredSeries.prototype.applySegmentAxis = function (series, options, segments) {\n var _this = this;\n if (series.pointColorMapping !== '') {\n options.map(function (option) {\n _this.appendLinePath(option, series, '');\n });\n return null;\n }\n var isXSegment = series.segmentAxis === 'X';\n var axis = isXSegment ? series.xAxis : series.yAxis;\n var chart = series.chart;\n var segment;\n this.includeSegment(segments, axis, series, segments.length);\n var length = segments.length;\n var value;\n var clipPath;\n var _loop_1 = function (index) {\n segment = segments[index];\n value = this_1.getAxisValue(segment.value, axis, series.chart);\n clipPath = this_1.createClipRect(index ? this_1.getAxisValue(segments[index - 1].value, axis, series.chart)\n : axis.visibleRange.min, value, series, index, isXSegment);\n if (clipPath) {\n options.map(function (option) {\n series.seriesElement.appendChild(chart.renderer.drawPath({\n 'clip-path': clipPath,\n 'stroke-dasharray': segment.dashArray,\n 'opacity': option.opacity,\n 'stroke': series.type.indexOf('Line') > -1 ? segment.color || series.interior : series.border.color,\n 'stroke-width': option['stroke-width'],\n 'fill': series.type.indexOf('Line') > -1 ? 'none' : segment.color || series.interior,\n 'id': option.id + '_Segment_' + index,\n 'd': option.d\n }));\n });\n }\n };\n var this_1 = this;\n for (var index = 0; index < length; index++) {\n _loop_1(index);\n }\n };\n MultiColoredSeries.prototype.includeSegment = function (segments, axis, series, length) {\n if (length <= 0) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n return null;\n }\n if (this.getAxisValue(segments[length - 1].value, axis, series.chart) < axis.visibleRange.max) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n }\n };\n /**\n * To create clip rect for segment axis\n * @param startValue\n * @param endValue\n * @param series\n * @param index\n * @param isX\n * @param chart\n */\n MultiColoredSeries.prototype.createClipRect = function (startValue, endValue, series, index, isX) {\n var isRequired = series.chart.requireInvertedAxis;\n var startPointLocation = getPoint(isX ? startValue : series.xAxis.visibleRange.min, isX ? series.yAxis.visibleRange.max : endValue, series.xAxis, series.yAxis, isRequired);\n var endPointLocation = getPoint(isX ? endValue : series.xAxis.visibleRange.max, isX ? series.yAxis.visibleRange.min : startValue, series.xAxis, series.yAxis, isRequired);\n endPointLocation = isRequired ?\n [startPointLocation, startPointLocation = endPointLocation][0] : endPointLocation;\n if ((endPointLocation.x - startPointLocation.x > 0) && (endPointLocation.y - startPointLocation.y > 0)) {\n series.seriesElement.appendChild(series.chart.renderer.drawClipPath(new RectOption(series.chart.element.id + '_ChartSegmentClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: startPointLocation.x,\n y: startPointLocation.y,\n width: endPointLocation.x - startPointLocation.x,\n height: endPointLocation.y - startPointLocation.y\n })));\n return 'url(#' + series.chart.element.id + '_ChartSegmentClipRect_' + index + ')';\n }\n return null;\n };\n /**\n * To get exact value from segment value\n * @param segmentValue\n * @param axis\n * @param chart\n */\n MultiColoredSeries.prototype.getAxisValue = function (segmentValue, axis, chart) {\n if (segmentValue === null) {\n segmentValue = axis.visibleRange.max;\n }\n if (axis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n return Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: segmentValue }).val))));\n }\n else if (axis.valueType.indexOf('Category') > -1) {\n var xValue = axis.valueType === 'DateTimeCategory' ?\n (segmentValue.getTime()).toString() :\n segmentValue;\n return (axis.labels.indexOf(xValue) < 0) ? +segmentValue : axis.labels.indexOf(xValue);\n }\n else {\n return +segmentValue;\n }\n };\n return MultiColoredSeries;\n}(LineBase));\nexport { MultiColoredSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { getPoint, withInRange, ChartLocation, PathOption, TransformToVisible } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `AreaSeries` module is used to render the area series.\n */\nvar AreaSeries = /** @class */ (function (_super) {\n __extends(AreaSeries, _super);\n function AreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Area series.\n * @return {void}\n * @private\n */\n AreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var _this = this;\n var startPoint = null;\n var direction = '';\n var origin = series.chart.chartAreaType === 'PolarRadar' ? series.points[0].yValue :\n Math.max(series.yAxis.visibleRange.min, 0);\n var currentXValue;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n series.points.map(function (point, i, seriesPoints) {\n currentXValue = point.xValue;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(seriesPoints[i - 1], point, seriesPoints[i + 1], series)) {\n direction += _this.getAreaPathDirection(currentXValue, origin, series, isInverted, getCoordinate, startPoint, 'M');\n startPoint = startPoint || new ChartLocation(currentXValue, origin);\n // First Point to draw the area path\n direction += _this.getAreaPathDirection(currentXValue, point.yValue, series, isInverted, getCoordinate, null, 'L');\n if (seriesPoints[i + 1] && !seriesPoints[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n direction += _this.getAreaEmptyDirection({ 'x': currentXValue, 'y': origin }, startPoint, series, isInverted, getCoordinate);\n startPoint = null;\n }\n _this.storePointLocation(point, series, isInverted, getPoint);\n }\n });\n this.appendLinePath(new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, (series.points.length > 1 ? (direction + this.getAreaPathDirection(series.points[series.points.length - 1].xValue, series.chart.chartAreaType === 'PolarRadar' ?\n series.points[series.points.length - 1].yValue : origin, series, isInverted, getCoordinate, null, 'L')) : '')), series, '');\n this.renderMarker(series);\n };\n /**\n * To destroy the area series.\n * @return {void}\n * @private\n */\n AreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name\n */\n AreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'AreaSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n AreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return AreaSeries;\n}(MultiColoredSeries));\nexport { AreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `BarSeries` module is used to render the bar series.\n */\nvar BarSeries = /** @class */ (function (_super) {\n __extends(BarSeries, _super);\n function BarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Bar series.\n * @return {void}\n * @private\n */\n BarSeries.prototype.render = function (series) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var rect;\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointBar = _a[_i];\n pointBar.symbolLocations = [];\n pointBar.regions = [];\n if (pointBar.visible && withInRange(series.points[pointBar.index - 1], pointBar, series.points[pointBar.index + 1], series)) {\n rect = this.getRectangle(pointBar.xValue + sideBySideInfo.start, pointBar.yValue, pointBar.xValue + sideBySideInfo.end, origin, series);\n argsData = this.triggerEvent(series, pointBar, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointBar, rect, series);\n this.drawRectangle(series, pointBar, rect, argsData);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the bar series.\n * @return {void}\n * @private\n */\n BarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name\n */\n BarSeries.prototype.getModuleName = function () {\n return 'BarSeries';\n };\n return BarSeries;\n}(ColumnBase));\nexport { BarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { valueToCoefficient, TextOption, inside, measureText } from '../../common/utils/helper';\nimport { Size, Rect, PathOption, CircleOption } from '../../common/utils/helper';\nimport { LineBase } from '../series/line-base';\nimport { textElement, valueToPolarCoefficient, CoefficientToVector } from '../../common/utils/helper';\n/**\n * Specifies the Polar Axis Layout.\n */\nvar axisPadding = 10;\nvar PolarRadarPanel = /** @class */ (function (_super) {\n __extends(PolarRadarPanel, _super);\n function PolarRadarPanel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Measure the polar radar axis size.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.initialClipRect = rect;\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n //Measure axis size calculation\n this.measureRowAxis(chart, this.initialClipRect);\n this.measureColumnAxis(chart, this.initialClipRect);\n this.calculateAxisSize();\n };\n PolarRadarPanel.prototype.measureRowAxis = function (chart, rect) {\n this.calculateRowSize(rect);\n var row = chart.rows[0];\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight), rect);\n };\n PolarRadarPanel.prototype.measureColumnAxis = function (chart, rect) {\n this.calculateColumnSize(rect);\n var column = chart.columns[0];\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height), rect);\n };\n /**\n * Measure the column and row in chart.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measureDefinition = function (definition, chart, size, clipRect) {\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.getModule(chart);\n axis.baseModule.calculateRangeAndInterval(size, axis);\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.calculateAxisSize = function () {\n var chart = this.chart;\n var axis;\n var padding = 5;\n this.centerX = this.initialClipRect.width * 0.5 + this.initialClipRect.x;\n this.centerY = this.initialClipRect.height * 0.5 + this.initialClipRect.y;\n chart.radius = Math.min(this.initialClipRect.width, this.initialClipRect.height) / 2 - padding -\n chart.primaryXAxis.majorTickLines.height - chart.primaryXAxis.maxLabelSize.height;\n chart.radius = (chart.primaryXAxis.coefficient * chart.radius) / 100;\n this.seriesClipRect.y = this.centerY - chart.radius;\n this.seriesClipRect.x = this.centerX - chart.radius;\n this.seriesClipRect.height = 2 * chart.radius;\n this.seriesClipRect.width = 2 * chart.radius;\n this.calculateRowSize(this.seriesClipRect);\n axis = chart.primaryYAxis;\n axis.rect = this.seriesClipRect;\n this.calculateColumnSize(this.seriesClipRect);\n axis = chart.primaryXAxis;\n axis.rect = this.seriesClipRect;\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measure = function () {\n var chart = this.chart;\n chart.verticalAxes.push(chart.primaryYAxis);\n var row = chart.rows[0];\n row.axes[0] = chart.primaryYAxis;\n chart.rows[0] = row;\n chart.horizontalAxes.push(chart.primaryXAxis);\n var column = chart.columns[0];\n column.axes[0] = chart.primaryXAxis;\n chart.columns[0] = column;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n PolarRadarPanel.prototype.calculateRowSize = function (rect) {\n /*! Calculate row size */\n var chart = this.chart;\n var row = chart.rows[0];\n row.computedHeight = rect.height / 2;\n row.computedTop = rect.y;\n chart.rows[0] = row;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n PolarRadarPanel.prototype.calculateColumnSize = function (rect) {\n /*! Calculate column size */\n var chart = this.chart;\n var column = chart.columns[0];\n column.computedLeft = rect.x;\n column.computedWidth = rect.width;\n chart.columns[0] = column;\n };\n /**\n * To render the axis element.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.renderAxes = function () {\n var axis;\n var chart = this.chart;\n this.startAngle = chart.primaryXAxis.startAngle;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i });\n axis = chart.axisCollections[i];\n if (axis.orientation === 'Horizontal') {\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawXAxisGridLine(axis, i);\n }\n if (axis.visible) {\n this.drawXAxisLabels(axis, i);\n }\n }\n else {\n this.drawYAxisGridLine(axis, i);\n if (axis.lineStyle.width > 0) {\n this.drawYAxisLine(axis, i, axis.plotOffset, 0);\n }\n if (axis.visible) {\n this.drawYAxisLabels(axis, i);\n }\n }\n axisElement.appendChild(this.element);\n }\n axisElement.appendChild(this.element);\n chart.svgObject.appendChild(axisElement);\n return axisLineElement;\n };\n PolarRadarPanel.prototype.drawYAxisLine = function (axis, index, plotX, plotY) {\n var chart = this.chart;\n var optionsLine = {};\n var vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n var axisLine = 'M ' + this.centerX + ' ' + this.centerY + 'L ' +\n (this.centerX + chart.radius * vector.x) + ' ' + (this.centerY + chart.radius * vector.y);\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n 'd': axisLine,\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n chart.yAxisElements.appendChild(chart.renderer.drawPath(optionsLine));\n };\n PolarRadarPanel.prototype.drawYAxisLabels = function (axis, index) {\n var chart = this.chart;\n var elementSize;\n var options;\n var pointX = 0;\n var pointY = 0;\n var vector;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var anchor = 'middle';\n var radius;\n var padding = 5;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n elementSize = axis.visibleLabels[i].size;\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n pointX = (this.centerX + radius * vector.x) + ((axis.majorTickLines.height + elementSize.width / 2 + padding / 2)\n * (Math.cos(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' ? 1 : -1));\n pointY = (this.centerY + radius * vector.y) + ((axis.majorTickLines.height + elementSize.height / 2)\n * (Math.sin(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' ? 1 : -1));\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY + (elementSize.height / 4), anchor, axis.visibleLabels[i].text);\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n chart.yAxisElements.appendChild(labelElement);\n };\n PolarRadarPanel.prototype.drawYAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var options;\n var radius;\n var majorTick = '';\n var majorGrid = '';\n var vector;\n var vector2;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var rect = axis.rect;\n var x1;\n var y1;\n var x2;\n var y2;\n var border = {\n color: axis.majorGridLines.color || chart.themeStyle.majorGridLine,\n width: axis.majorGridLines.width\n };\n if (axis.majorGridLines.width > 0) {\n if (chart.visibleSeries[0].type === 'Polar') {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n options = new CircleOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', border, axis.majorGridLines.width, this.centerX, this.centerY, radius);\n this.element.appendChild(chart.renderer.drawCircle(options));\n }\n }\n else {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n for (var i = 0, len = chart.primaryXAxis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i].value, chart.primaryXAxis), this.startAngle);\n if (i + 1 < len) {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i + 1].value, chart.primaryXAxis), this.startAngle);\n }\n else {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[0].value, chart.primaryXAxis), this.startAngle);\n }\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = this.centerX + radius * vector2.x;\n y2 = this.centerY + radius * vector2.y;\n majorGrid = majorGrid.concat('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ');\n }\n }\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, null, majorGrid);\n this.element.appendChild(chart.renderer.drawPath(options));\n }\n }\n if (axis.majorTickLines.width > 0) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = x1 + (axis.majorTickLines.height * (Math.cos(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' ? 1 : -1));\n y2 = y1 + (axis.majorTickLines.height * (Math.sin(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' ? 1 : -1));\n majorTick = majorTick.concat('M ' + x1 + ' ' + y1 +\n ' L ' + x2 + ' ' + y2 + ' ');\n }\n }\n this.renderTickLine(axis, index, majorTick, '');\n };\n PolarRadarPanel.prototype.drawXAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var tempInterval;\n var vector;\n var majorGrid = '';\n var majorTick = '';\n var minorGirdLine = '';\n var minorTickLine = '';\n var x1 = this.centerX;\n var x2;\n var y1 = this.centerY;\n var y2;\n var minorDirection;\n var tickSize = axis.majorTickLines.height;\n var rect = axis.rect;\n var length = axis.visibleLabels.length;\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = axis.visibleLabels[i].value;\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value, axis), this.startAngle);\n x2 = this.centerX + chart.radius * vector.x;\n y2 = this.centerY + chart.radius * vector.y;\n var xLoc = x2 + (axis.majorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var yLoc = y2 + (axis.majorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n majorGrid = majorGrid.concat('M ' + x1 + ' ' + y1 + ' ' + 'L' + x2 + ' ' + y2);\n majorTick = majorTick.concat('M ' + x2 + ' ' + y2 +\n ' L ' + xLoc + ' ' + yLoc + ' ');\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)\n && axis.valueType !== 'Category' && chart.visibleSeries[0].type !== 'Radar') {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGirdLine, minorTickLine);\n minorGirdLine = minorDirection[0];\n minorTickLine = minorDirection[1];\n }\n }\n this.renderTickLine(axis, index, majorTick, minorTickLine);\n this.renderGridLine(axis, index, majorGrid, minorGirdLine);\n };\n PolarRadarPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick) {\n var value = tempInterval;\n var x;\n var y;\n var vector;\n var range = axis.visibleRange;\n var direction = [];\n var tickSize = axis.minorTickLines.height;\n var rect = axis.rect;\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value += (axis.valueType === 'DateTime' ? axis.dateTimeInterval : axis.visibleRange.interval) /\n (axis.minorTicksPerInterval + 1);\n if (inside(value, range)) {\n vector = CoefficientToVector(valueToPolarCoefficient(value, axis), this.startAngle);\n x = this.centerX + this.chart.radius * vector.x;\n y = this.centerY + this.chart.radius * vector.y;\n var tickXSize = x + (axis.minorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var tickYSize = y + (axis.minorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n minorGird = minorGird.concat('M' + ' ' + this.centerX + ' ' + this.centerY\n + 'L ' + x + ' ' + y);\n minorTick = minorTick.concat('M' + ' ' + x + ' ' + y + 'L' + ' ' + (tickXSize) + ' ' +\n (tickYSize));\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.drawXAxisLabels = function (axis, index) {\n var chart = this.chart;\n var pointX = 0;\n var elementSize;\n var pointY = 0;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var options;\n var vector;\n var labelText;\n var firstLabelX;\n var islabelInside = axis.labelPosition === 'Inside';\n var padding = 5;\n var lastLabelX;\n var textAnchor = '';\n var ticksbwtLabel = axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks'\n && chart.visibleSeries[0].type !== 'Radar' ? 0.5 : 0;\n var radius = chart.radius + axis.majorTickLines.height;\n radius = (islabelInside) ? -radius : radius;\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis), this.startAngle);\n if (!isNaN(vector.x) && !isNaN(vector.y)) {\n pointX = this.centerX + (radius + axis.majorTickLines.height + padding) * vector.x;\n pointY = this.centerY + (radius + axis.majorTickLines.height + padding) * vector.y;\n textAnchor = parseFloat(pointX.toFixed(1)) === parseFloat(this.centerX.toFixed(1)) ? 'middle' :\n ((pointX < this.centerX && !islabelInside) || (pointX > this.centerX && islabelInside)) ? 'end' : 'start';\n }\n labelText = axis.visibleLabels[i].text;\n if (i === 0) {\n firstLabelX = pointX;\n }\n else if (i === axis.visibleLabels.length - 1 && axis.valueType !== 'Category') {\n lastLabelX = measureText(labelText, axis.labelStyle).height;\n lastLabelX += pointX;\n labelText = (lastLabelX > firstLabelX) ? '' : labelText;\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, textAnchor, labelText, '', 'central');\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n this.element.appendChild(labelElement);\n };\n PolarRadarPanel.prototype.renderTickLine = function (axis, index, majorTickLine, minorTickLine) {\n var tickOptions;\n var chart = this.chart;\n if (axis.majorTickLines.width > 0) {\n tickOptions = new PathOption(chart.element.id + '_MajorTickLine_' + index, 'transparent', axis.majorTickLines.width, axis.majorTickLines.color || chart.themeStyle.majorTickLine, null, null, majorTickLine);\n chart.yAxisElements.appendChild(chart.renderer.drawPath(tickOptions));\n }\n if (axis.minorTickLines.width > 0) {\n tickOptions = new PathOption(chart.element.id + '_MinorTickLine_' + index, 'transparent', axis.minorTickLines.width, axis.minorTickLines.color || chart.themeStyle.minorTickLine, null, null, minorTickLine);\n chart.yAxisElements.appendChild(chart.renderer.drawPath(tickOptions));\n }\n };\n PolarRadarPanel.prototype.renderGridLine = function (axis, index, majorGrid, minorGird) {\n var chart = this.chart;\n var gridOptions;\n if (axis.majorGridLines.width > 0) {\n gridOptions = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, axis.majorGridLines.dashArray, majorGrid);\n this.element.appendChild(chart.renderer.drawPath(gridOptions));\n }\n if (axis.minorGridLines.width > 0) {\n gridOptions = new PathOption(chart.element.id + '_MinorGridLine_' + index, 'transparent', axis.minorGridLines.width, axis.minorGridLines.color || chart.themeStyle.minorGridLine, null, axis.minorGridLines.dashArray, minorGird);\n this.element.appendChild(chart.renderer.drawPath(gridOptions));\n }\n };\n return PolarRadarPanel;\n}(LineBase));\nexport { PolarRadarPanel };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange, PathOption, logBase, markerAnimate, PolarArc, valueToCoefficient, firstToLowerCase } from '../../common/utils/helper';\nimport { PolarRadarPanel } from '../axis/polar-radar-panel';\nimport { pointRender } from '../../common/model/constants';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * `PolarSeries` module is used to render the polar series.\n */\nvar PolarSeries = /** @class */ (function (_super) {\n __extends(PolarSeries, _super);\n function PolarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Polar Series.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.render = function (series) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') > -1) {\n this.columnDrawTypeRender(series);\n }\n else {\n series.chart[seriesType + 'SeriesModule'].render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n }\n };\n /**\n * Render Column DrawType.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.columnDrawTypeRender = function (series) {\n var visiblePoints = series.points;\n var rect;\n var options;\n var argsData;\n var startAngle;\n var endAngle;\n var itemCurrentXPos;\n var radius;\n var pointStartAngle;\n var pointEndAngle;\n var x1;\n var x2;\n var y1;\n var y2;\n var startValue;\n var endValue;\n var innerRadius;\n var centerX = (series.clipRect.width / 2) + series.clipRect.x;\n var dStartX;\n var dStartY;\n var centerY = (series.clipRect.height / 2) + series.clipRect.y;\n var dEndX;\n var dEndY;\n var axisInversed = series.xAxis.isInversed ? 1 : 0;\n var direction = '';\n var sumofYValues = 0;\n var interval = (series.points[1] ? series.points[1].xValue : 2 * series.points[0].xValue) - series.points[0].xValue;\n var ticks = series.xAxis.valueType === 'Category' && series.xAxis.labelPlacement === 'BetweenTicks' ? 0 : interval / 2;\n var rangeInterval = series.xAxis.valueType === 'DateTime' ? series.xAxis.dateTimeInterval : 1;\n var min = series.xAxis.actualRange.min;\n var inversedValue;\n this.getSeriesPosition(series);\n var position = series.xAxis.isInversed ? (series.rectCount - 1 - series.position) : series.position;\n var ticksbwtLabel = series.xAxis.valueType === 'Category' && series.xAxis.labelPlacement === 'BetweenTicks' ? 0.5\n : 0.5 - (series.rectCount / 2);\n do {\n sumofYValues += rangeInterval;\n min += rangeInterval;\n } while (min <= series.xAxis.actualRange.max - (series.xAxis.valueType === 'Category' ? 0 : 1));\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n inversedValue = series.xAxis.isInversed ? (series.xAxis.visibleRange.max - point.xValue) :\n point.xValue - series.xAxis.visibleRange.min;\n itemCurrentXPos = (inversedValue) +\n ((interval / series.rectCount) * position - ticks) + (sumofYValues / 360 * series.xAxis.startAngle);\n itemCurrentXPos = (((itemCurrentXPos) / (sumofYValues)));\n startAngle = 2 * Math.PI * (itemCurrentXPos + series.xAxis.startAngle);\n endAngle = 2 * Math.PI * ((itemCurrentXPos + series.xAxis.startAngle) + (interval / series.rectCount) / (sumofYValues));\n pointStartAngle = startAngle;\n pointEndAngle = endAngle;\n startAngle = (startAngle - 0.5 * Math.PI);\n endAngle = (endAngle - 0.5 * Math.PI) - 0.000001;\n if (series.drawType === 'StackingColumn' || series.drawType === 'RangeColumn') {\n startValue = series.drawType === 'RangeColumn' ? point.low : series.stackedValues.startValues[point.index];\n endValue = series.drawType === 'RangeColumn' ? point.high : series.stackedValues.endValues[point.index];\n endValue = (series.yAxis.valueType === 'Logarithmic' ?\n logBase(endValue === 0 ? 1 : endValue, series.yAxis.logBase) : endValue);\n endValue = endValue > series.yAxis.actualRange.max ? series.yAxis.actualRange.max : endValue;\n radius = startValue === endValue ? 0 : series.chart.radius * valueToCoefficient(endValue, series.yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n innerRadius = series.chart.radius * valueToCoefficient((startValue === 0 && series.yAxis.visibleRange.min !== 0) ? series.yAxis.visibleRange.min : startValue, series.yAxis);\n dStartX = centerX + innerRadius * Math.cos(startAngle);\n dStartY = centerY + innerRadius * Math.sin(startAngle);\n dEndX = centerX + innerRadius * Math.cos(endAngle);\n dEndY = centerY + innerRadius * Math.sin(endAngle);\n if (series.type === 'Polar') {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' '\n + '0' + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + dEndX + ' ' + dEndY + ' ' +\n 'A' + ' ' + innerRadius + ' ' + innerRadius + ' ' + '1' + ' ' + '0' + ' ' + '0' + ' '\n + dStartX + ' ' + dStartY + ' ' + 'z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L'\n + dEndX + ' ' + dEndY + ' ' + 'L' + ' ' + dStartX + ' ' + dStartY + ' ' + 'z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, innerRadius, radius, itemCurrentXPos);\n }\n else {\n endValue = point.yValue > series.yAxis.actualRange.max ? series.yAxis.actualRange.max : point.yValue;\n radius = series.chart.radius * valueToCoefficient((series.yAxis.valueType === 'Logarithmic' ? logBase(endValue, series.yAxis.logBase) : endValue), series.yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n if (series.type === 'Polar') {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' ' +\n '0' + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + centerX + ' ' +\n centerY + ' ' + 'z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' '\n + centerX + ' ' + centerY + ' ' + 'z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, 0, radius, itemCurrentXPos);\n }\n argsData = this.triggerEvent(series.chart, series, point);\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n if (!argsData.cancel) {\n this.appendLinePath(options, series, '');\n if (series.type === 'Polar') {\n point.symbolLocations.push({\n x: centerX + radius * Math.cos((startAngle + (endAngle - startAngle) / 2)),\n y: centerY + radius * Math.sin((startAngle + (endAngle - startAngle) / 2))\n });\n }\n else {\n point.symbolLocations.push({ x: (x1 + x2) / 2, y: (y1 + y2) / 2 });\n }\n }\n }\n }\n series.isRectSeries = true;\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.triggerEvent = function (chart, series, point) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color })\n };\n chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /** get position for column drawtypes\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.getSeriesPosition = function (series) {\n var chart = series.chart;\n var seriesCollection = [];\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (series_1.visible && (series_1.type === 'Polar' || series_1.type === 'Radar') && series_1.drawType.indexOf('Column') !== -1) {\n seriesCollection.push(series_1);\n }\n }\n seriesCollection.forEach(function (series) {\n if (series.drawType.indexOf('Stacking') !== -1) {\n if (series.stackingGroup) {\n if (stackingGroup[series.stackingGroup] === undefined) {\n series.position = vSeries.rectCount;\n stackingGroup[series.stackingGroup] = vSeries.rectCount++;\n }\n else {\n series.position = stackingGroup[series.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n series.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n series.position = vSeries.position;\n }\n }\n }\n else {\n series.position = vSeries.rectCount++;\n }\n });\n seriesCollection.forEach(function (value) {\n value.rectCount = vSeries.rectCount;\n });\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n PolarSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n if (series.drawType === 'Scatter') {\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n }\n else {\n for (count = 1; count < rectElements.length; count++) {\n this.doPolarRadarAnimation(rectElements[count], delay, duration, series);\n }\n }\n };\n /**\n * To do the Polar Radar draw type column animation.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.doPolarRadarAnimation = function (animateElement, delay, duration, series) {\n var chartcenterX = series.clipRect.width / 2 + series.clipRect.x;\n var chartcenterY = series.clipRect.height / 2 + series.clipRect.y;\n var elementHeight = 0;\n animateElement.style.visibility = 'hidden';\n new Animation({}).animate(animateElement, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n elementHeight = ((args.timeStamp - args.delay) / args.duration);\n animateElement.setAttribute('transform', 'translate(' + chartcenterX\n + ' ' + chartcenterY + ') scale(' + elementHeight + ') translate(' + (-chartcenterX) + ' ' + (-chartcenterY) + ')');\n }\n },\n end: function (model) {\n animateElement.style.visibility = 'visible';\n animateElement.removeAttribute('transform');\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n /**\n * Get module name.\n */\n PolarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'PolarSeries';\n };\n /**\n * To destroy the polar series.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return PolarSeries;\n}(PolarRadarPanel));\nexport { PolarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { firstToLowerCase } from '../../common/utils/helper';\nimport { PolarSeries } from '../series/polar-series';\n/**\n * `RadarSeries` module is used to render the radar series.\n */\nvar RadarSeries = /** @class */ (function (_super) {\n __extends(RadarSeries, _super);\n function RadarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render radar Series.\n * @return {void}.\n * @private\n */\n RadarSeries.prototype.render = function (series) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') === -1) {\n series.chart[seriesType + 'SeriesModule'].render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n }\n else {\n this.columnDrawTypeRender(series);\n }\n };\n /**\n * Get module name.\n */\n RadarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'RadarSeries';\n };\n /**\n * To destroy the radar series.\n * @return {void}\n * @private\n */\n RadarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return RadarSeries;\n}(PolarSeries));\nexport { RadarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingBarSeries` module is used to render the stacking bar series.\n */\nvar StackingBarSeries = /** @class */ (function (_super) {\n __extends(StackingBarSeries, _super);\n function StackingBarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking bar series.\n * @return {void}\n * @private\n */\n StackingBarSeries.prototype.render = function (series) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var stackedValue = series.stackedValues;\n var rect;\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointStack = _a[_i];\n pointStack.symbolLocations = [];\n pointStack.regions = [];\n if (pointStack.visible && withInRange(series.points[pointStack.index - 1], pointStack, series.points[pointStack.index + 1], series)) {\n rect = this.getRectangle(pointStack.xValue + sideBySideInfo.start, stackedValue.endValues[pointStack.index], pointStack.xValue + sideBySideInfo.end, stackedValue.startValues[pointStack.index], series);\n argsData = this.triggerEvent(series, pointStack, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.drawRectangle(series, pointStack, rect, argsData);\n this.updateSymbolLocation(pointStack, rect, series);\n }\n }\n }\n };\n /**\n * To destroy the stacking bar.\n * @return {void}\n * @private\n */\n StackingBarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n StackingBarSeries.prototype.getModuleName = function () {\n return 'StackingBarSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingBarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n return StackingBarSeries;\n}(ColumnBase));\nexport { StackingBarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange, PathOption } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `CandleSeries` module is used to render the candle series.\n */\nvar CandleSeries = /** @class */ (function (_super) {\n __extends(CandleSeries, _super);\n function CandleSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Candle series.\n * @return {void}\n * @private\n */\n CandleSeries.prototype.render = function (series) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var borderWidth = Math.max(series.border.width, 1);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var direction = '';\n var centerRegion = void 0;\n var tickRegion = void 0;\n var midPoint = void 0;\n midPoint = (sideBySideInfo.start + sideBySideInfo.end) / 2;\n //initializing after zooming and also normal initialization\n point.regions = [];\n point.symbolLocations = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //region to cover the top and bottom ticks\n tickRegion = this.getRectangle((point.xValue + sideBySideInfo.median), Math.max(point.high, point.low), (point.xValue + sideBySideInfo.median), Math.min(point.high, point.low), series);\n if (!series.chart.requireInvertedAxis) {\n tickRegion.x -= borderWidth / 2;\n tickRegion.width = borderWidth;\n }\n else {\n tickRegion.y -= borderWidth / 2;\n tickRegion.height = borderWidth;\n }\n //get middleRect\n centerRegion = this.getRectangle((point.xValue + sideBySideInfo.start), Math.max(point.open, point.close), (point.xValue + sideBySideInfo.end), Math.min(point.open, point.close), series);\n direction = this.getPathString(tickRegion, centerRegion, series);\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n this.drawCandle(series, point, centerRegion, argsData, direction);\n this.updateSymbolLocation(point, tickRegion, series);\n this.updateSymbolLocation(point, centerRegion, series);\n }\n }\n }\n };\n /**\n * Trigger point rendering event\n */\n CandleSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var fill;\n fill = this.getCandleColor(point, series);\n var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n return this.triggerEvent(series, point, fill, border);\n };\n /**\n * Find the color of the candle\n * @param series\n * @private\n */\n CandleSeries.prototype.getCandleColor = function (point, series) {\n var currentPoint = point;\n var previousPoint = series.points[point.index - 1];\n if (series.enableSolidCandles === false) {\n if (!previousPoint) {\n return series.bearFillColor;\n }\n else {\n return previousPoint.close > point.close ? series.bullFillColor :\n series.bearFillColor;\n }\n }\n else {\n return point.open > point.close ? series.bullFillColor :\n series.bearFillColor;\n }\n };\n /**\n * Finds the path of the candle shape\n * @param Series\n * @private\n */\n CandleSeries.prototype.getPathString = function (topRect, midRect, series) {\n var direction = '';\n var width = series.chart.requireInvertedAxis ? topRect.height : topRect.width;\n var center = series.chart.requireInvertedAxis ? topRect.y + topRect.height / 2 :\n topRect.x + topRect.width / 2;\n //tick 1 segment\n direction += !series.chart.requireInvertedAxis ?\n 'M' + ' ' + (center) + ' ' + (topRect.y) + ' ' + 'L' + ' ' + (center) + ' ' + midRect.y :\n 'M' + ' ' + (topRect.x) + ' ' + (center) + ' ' + 'L' + ' ' + (midRect.x) + ' ' + center;\n direction = direction.concat(' M' + ' ' + (midRect.x) + ' ' + (midRect.y) + ' ' +\n 'L' + ' ' + (midRect.x + midRect.width) + ' ' + (midRect.y) + ' ' +\n 'L' + ' ' + (midRect.x + midRect.width) + ' ' +\n (midRect.y + midRect.height) + ' ' +\n 'L' + ' ' + (midRect.x) + ' ' + (midRect.y + midRect.height) +\n ' ' + 'Z');\n direction += !series.chart.requireInvertedAxis ?\n ' M' + ' ' + (center) + ' ' + (midRect.y + midRect.height) + ' ' + 'L' + ' ' + (center) + ' ' + (topRect.y +\n topRect.height) :\n ' M' + ' ' + (midRect.x + midRect.width) + ' ' + (center) + ' ' + 'L' + ' ' +\n (topRect.x + topRect.width) + ' ' + center;\n return direction;\n };\n /**\n * Draws the candle shape\n * @param series\n * @private\n */\n CandleSeries.prototype.drawCandle = function (series, point, rect, argsData, direction) {\n var check = series.chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var fill = !series.enableSolidCandles ?\n (point.open > point.close ? argsData.fill : 'transparent') : argsData.fill;\n argsData.border.color = argsData.fill;\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var candleElement = series.chart.renderer.drawPath(options);\n candleElement.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n series.seriesElement.appendChild(candleElement);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n CandleSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n CandleSeries.prototype.getModuleName = function () {\n return 'CandleSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the candle series.\n * @return {void}\n * @private\n */\n CandleSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the candle series.\n */\n };\n return CandleSeries;\n}(ColumnBase));\nexport { CandleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingColumnSeries` module used to render the stacking column series.\n */\nvar StackingColumnSeries = /** @class */ (function (_super) {\n __extends(StackingColumnSeries, _super);\n function StackingColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking column series.\n * @return {void}\n * @private\n */\n StackingColumnSeries.prototype.render = function (series) {\n series.isRectSeries = true;\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var rect;\n var argsData;\n var stackedValue = series.stackedValues;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n rect = this.getRectangle(point.xValue + sideBySideInfo.start, stackedValue.endValues[point.index], point.xValue + sideBySideInfo.end, stackedValue.startValues[point.index], series);\n argsData = this.triggerEvent(series, point, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.drawRectangle(series, point, rect, argsData);\n this.updateSymbolLocation(point, rect, series);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the stacking column.\n * @return {void}\n * @private\n */\n StackingColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n StackingColumnSeries.prototype.getModuleName = function () {\n return 'StackingColumnSeries';\n };\n return StackingColumnSeries;\n}(ColumnBase));\nexport { StackingColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { PathOption, getPoint, withInRange } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StepLineSeries` module is used to render the step line series.\n */\nvar StepLineSeries = /** @class */ (function (_super) {\n __extends(StepLineSeries, _super);\n function StepLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Step line series.\n * @return {void}\n * @private\n */\n StepLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var direction = '';\n var startPoint = 'M';\n var prevPoint = null;\n var pathOptions;\n var lineLength;\n var point1;\n var point2;\n var visiblePoints = this.improveChartPerformance(series);\n if (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') {\n lineLength = 0.5;\n }\n else {\n lineLength = 0;\n }\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n if (prevPoint != null) {\n point2 = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n point1 = getPoint(prevPoint.xValue, prevPoint.yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' + 'L' + ' ' +\n (point2.x) + ' ' + (point1.y) + 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n startPoint = 'L';\n }\n else {\n point1 = getPoint(point.xValue - lineLength, point.yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n startPoint = 'L';\n }\n this.storePointLocation(point, series, isInverted, getPoint);\n prevPoint = point;\n }\n else {\n prevPoint = series.emptyPointSettings.mode === 'Drop' ? prevPoint : null;\n startPoint = series.emptyPointSettings.mode === 'Drop' ? startPoint : 'M';\n }\n }\n point1 = getPoint(visiblePoints[visiblePoints.length - 1].xValue + lineLength, visiblePoints[visiblePoints.length - 1].yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n pathOptions = new PathOption(series.chart.element.id + '_Series_' + series.index, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(pathOptions, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StepLineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the step line series.\n * @return {void}\n * @private\n */\n StepLineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StepLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StepLineSeries';\n };\n return StepLineSeries;\n}(LineBase));\nexport { StepLineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { getPoint, withInRange, ChartLocation, PathOption } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StepAreaSeries` Module used to render the step area series.\n */\nvar StepAreaSeries = /** @class */ (function (_super) {\n __extends(StepAreaSeries, _super);\n function StepAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render StepArea series.\n * @return {void}\n * @private\n */\n StepAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var currentPoint;\n var secondPoint;\n var start = null;\n var direction = '';\n var pointsLength = series.points.length;\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var options;\n var point;\n var xValue;\n var lineLength;\n var prevPoint = null;\n if (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') {\n lineLength = 0.5;\n }\n else {\n lineLength = 0;\n }\n for (var i = 0; i < pointsLength; i++) {\n point = series.points[i];\n xValue = point.xValue;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[i - 1], point, series.points[i + 1], series)) {\n if (start === null) {\n start = new ChartLocation(xValue, 0);\n // Start point for the current path\n currentPoint = getPoint(xValue - lineLength, origin, xAxis, yAxis, isInverted);\n direction += ('M' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n currentPoint = getPoint(xValue - lineLength, point.yValue, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n // First Point to draw the Steparea path\n if (prevPoint != null) {\n currentPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n secondPoint = getPoint(prevPoint.xValue, prevPoint.yValue, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' +\n (currentPoint.x) + ' ' + (secondPoint.y) + 'L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n else if (series.emptyPointSettings.mode === 'Gap') {\n currentPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n direction += 'L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ';\n }\n this.storePointLocation(point, series, isInverted, getPoint);\n prevPoint = point;\n }\n if (series.points[i + 1] && !series.points[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n // current start point\n currentPoint = getPoint(xValue + lineLength, origin, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y));\n start = null;\n prevPoint = null;\n }\n }\n if (pointsLength > 1) {\n start = { 'x': series.points[pointsLength - 1].xValue + lineLength, 'y': series.points[pointsLength - 1].yValue };\n secondPoint = getPoint(start.x, start.y, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (secondPoint.x) + ' ' + (secondPoint.y) + ' ');\n start = { 'x': series.points[pointsLength - 1].xValue + lineLength, 'y': origin };\n secondPoint = getPoint(start.x, start.y, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (secondPoint.x) + ' ' + (secondPoint.y) + ' ');\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StepAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the step Area series.\n * @return {void}\n * @private\n */\n StepAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StepAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StepAreaSeries';\n };\n return StepAreaSeries;\n}(LineBase));\nexport { StepAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { PathOption, getPoint, withInRange, Rect, TransformToVisible } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StackingAreaSeries` module used to render the Stacking Area series.\n */\nvar StackingAreaSeries = /** @class */ (function (_super) {\n __extends(StackingAreaSeries, _super);\n function StackingAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking area series.\n * @return {void}\n * @private\n */\n StackingAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var polarAreaType = series.chart.chartAreaType === 'PolarRadar';\n var getCoordinate = polarAreaType ? TransformToVisible : getPoint;\n var lineDirection = '';\n var visiblePoints = series.points;\n var pointsLength = visiblePoints.length;\n var stackedvalue = series.stackedValues;\n var origin = polarAreaType ?\n Math.max(series.yAxis.visibleRange.min, stackedvalue.endValues[0]) :\n Math.max(series.yAxis.visibleRange.min, stackedvalue.startValues[0]);\n var border = series.border;\n var options;\n var startPoint = 0;\n var point1 = getCoordinate(visiblePoints[0].xValue, origin, xAxis, yAxis, isInverted, series);\n var point2;\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n for (var i = 0; i < pointsLength; i++) {\n visiblePoints[i].symbolLocations = [];\n visiblePoints[i].regions = [];\n if (visiblePoints[i].visible && withInRange(visiblePoints[i - 1], visiblePoints[i], visiblePoints[i + 1], series)) {\n point1 = getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[i], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n visiblePoints[i].symbolLocations.push(getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[i], xAxis, yAxis, isInverted, series));\n visiblePoints[i].regions.push(new Rect(visiblePoints[i].symbolLocations[0].x - series.marker.width, visiblePoints[i].symbolLocations[0].y - series.marker.height, 2 * series.marker.width, 2 * series.marker.height));\n }\n else {\n if (series.emptyPointSettings.mode !== 'Drop') {\n for (var j = i - 1; j >= startPoint; j--) {\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[j], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n if (visiblePoints[i + 1] && visiblePoints[i + 1].visible) {\n point1 = getCoordinate(visiblePoints[i + 1].xValue, stackedvalue.startValues[i + 1], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n }\n startPoint = i + 1;\n }\n }\n }\n if (series.chart.chartAreaType === 'PolarRadar' && visiblePoints.length > 1) {\n point1 = { 'x': series.points[0].xValue, 'y': stackedvalue.endValues[0] };\n point2 = getCoordinate(point1.x, point1.y, xAxis, yAxis, isInverted, series);\n lineDirection += ('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n for (var j = pointsLength - 1; j >= startPoint; j--) {\n var previousSeries = this.getPreviousSeries(series);\n if (previousSeries.emptyPointSettings.mode !== 'Drop' || !previousSeries.points[j].isEmpty) {\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[j], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat(((j === (pointsLength - 1) && polarAreaType) ? 'M' : 'L')\n + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, lineDirection);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the stacking area.\n * @return {void}\n * @private\n */\n StackingAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StackingAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StackingAreaSeries';\n };\n /**\n * To find previous visible series\n */\n StackingAreaSeries.prototype.getPreviousSeries = function (series) {\n var seriesCollection = series.chart.visibleSeries;\n for (var i = 0, length_1 = seriesCollection.length; i < length_1; i++) {\n if (series.index === seriesCollection[i].index && i !== 0) {\n return seriesCollection[i - 1];\n }\n }\n return seriesCollection[0];\n };\n return StackingAreaSeries;\n}(LineBase));\nexport { StackingAreaSeries };\n","import { withInRange, getPoint, PathOption, drawSymbol, Size, Rect, markerAnimate, TransformToVisible } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `ScatterSeries` module is used to render the scatter series.\n */\nvar ScatterSeries = /** @class */ (function () {\n function ScatterSeries() {\n }\n /**\n * Render the scatter series.\n * @return {void}\n * @private\n */\n ScatterSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var seriesIndex = series.index;\n var marker = series.marker;\n var border = series.border;\n var visiblePoints = series.points;\n var pointIndex;\n var symbolId;\n var shapeOption;\n var argsData;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n point.symbolLocations.push(getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series));\n symbolId = series.chart.element.id + '_Series_' + seriesIndex + '_Point_' + point.index;\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color }),\n height: marker.height, width: marker.width, shape: marker.shape\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n point.color = argsData.fill;\n shapeOption = new PathOption(symbolId, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n series.seriesElement.appendChild(drawSymbol(point.symbolLocations[0], argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + point.yValue.toString()));\n point.regions.push(new Rect(point.symbolLocations[0].x - marker.width, point.symbolLocations[0].y - marker.height, 2 * marker.width, 2 * marker.height));\n point.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n width: argsData.width, shape: argsData.shape\n };\n }\n else {\n point.marker = { visible: true };\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ScatterSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n };\n /**\n * Get module name.\n */\n ScatterSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'ScatterSeries';\n };\n /**\n * To destroy the scatter.\n * @return {void}\n */\n ScatterSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return ScatterSeries;\n}());\nexport { ScatterSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `RangeColumnSeries` module is used to render the range column series.\n */\nvar RangeColumnSeries = /** @class */ (function (_super) {\n __extends(RangeColumnSeries, _super);\n function RangeColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Range Column series.\n * @return {void}\n * @private\n */\n RangeColumnSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n //let origin: number = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var rangePoint = _a[_i];\n rangePoint.symbolLocations = [];\n rangePoint.regions = [];\n if (rangePoint.visible && withInRange(series.points[rangePoint.index - 1], rangePoint, series.points[rangePoint.index + 1], series)) {\n rect = this.getRectangle(rangePoint.xValue + sideBySideInfo.start, rangePoint.high, rangePoint.xValue + sideBySideInfo.end, rangePoint.low, series);\n argsData = this.triggerEvent(series, rangePoint, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(rangePoint, rect, series);\n this.drawRectangle(series, rangePoint, rect, argsData);\n }\n }\n }\n };\n /**\n * Get module name.\n */\n RangeColumnSeries.prototype.getModuleName = function () {\n return 'RangeColumnSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n RangeColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the range column series.\n * @return {void}\n * @private\n */\n RangeColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return RangeColumnSeries;\n}(ColumnBase));\nexport { RangeColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { PathOption, withInRange, subArraySum } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `WaterfallSeries` module is used to render the waterfall series.\n */\nvar WaterfallSeries = /** @class */ (function (_super) {\n __extends(WaterfallSeries, _super);\n function WaterfallSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render waterfall series.\n * @return {void}\n * @private\n */\n WaterfallSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n var prevEndValue = 0;\n var direction = '';\n var currentEndValue = 0;\n var originValue;\n var prevRegion = null;\n var y;\n var isInversed = series.chart.requireInvertedAxis;\n var intermediateOrigin = 0;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //Calcute the current point value to render waterfall series.\n var isSum = this.isIntermediateSum(series, point.index);\n var totalSum = this.isSumIndex(series, point.index);\n currentEndValue += isSum || totalSum === true ? 0 : point.yValue;\n //Calcute the origin value for points\n originValue = (isSum === true ? intermediateOrigin : ((prevEndValue !== null && !totalSum) ? prevEndValue : origin));\n rect = this.getRectangle(point.xValue + sideBySideInfo.start, currentEndValue, point.xValue + sideBySideInfo.end, originValue, series);\n argsData = this.triggerPointRenderEvent(series, point);\n //intermediateOrigin is used only for imtermediate data \n if (isSum) {\n intermediateOrigin = currentEndValue;\n }\n prevEndValue = currentEndValue;\n if (!argsData.cancel) {\n this.updateSymbolLocation(point, rect, series);\n this.drawRectangle(series, point, rect, argsData);\n }\n var currentRegion = point.regions[0];\n if (prevRegion !== null) {\n var prevLeft = isInversed ? prevRegion.x : prevRegion.y;\n var currentLeft = isInversed ? currentRegion.x : currentRegion.y;\n var prevBottom = isInversed ? prevRegion.x + prevRegion.width : prevRegion.y + prevRegion.height;\n var currentBottom = isInversed ?\n currentRegion.x + currentRegion.width : currentRegion.y + currentRegion.height;\n if (Math.round(prevLeft) === Math.round(currentLeft) ||\n Math.round(prevBottom) === Math.round(currentLeft)) {\n y = isInversed ? currentRegion.x : currentRegion.y;\n }\n else {\n y = currentBottom;\n }\n if (isInversed) {\n direction = direction.concat('M' + ' ' + y + ' ' + (prevRegion.y + prevRegion.height) + ' ' +\n 'L' + ' ' + y + ' ' + currentRegion.y + ' ');\n }\n else {\n direction = direction.concat('M' + ' ' + prevRegion.x + ' ' + y + ' ' +\n 'L' + ' ' + (currentRegion.x + currentRegion.width) + ' ' + y + ' ');\n }\n }\n prevRegion = point.regions[0];\n }\n }\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Connector_', 'none', series.connector.width, series.connector.color, series.opacity, series.connector.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n if (series.chart.animateSeries) {\n element.style.visibility = 'hidden';\n }\n series.seriesElement.appendChild(element);\n };\n /**\n * To check intermediateSumIndex in waterfall series.\n * @return boolean\n * @private\n */\n WaterfallSeries.prototype.isIntermediateSum = function (series, index) {\n if (series.intermediateSumIndexes !== undefined && series.intermediateSumIndexes.indexOf(index) !== -1) {\n return true;\n }\n return false;\n };\n /**\n * To check sumIndex in waterfall series.\n * @return boolean\n * @private\n */\n WaterfallSeries.prototype.isSumIndex = function (series, index) {\n if (series.sumIndexes !== undefined && series.sumIndexes.indexOf(index) !== -1) {\n return true;\n }\n return false;\n };\n /**\n * To trigger the point rendering event for waterfall series.\n * @return IPointRenderEventArgs\n * @private\n */\n WaterfallSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var color;\n var isSum = this.isIntermediateSum(series, point.index);\n var totalSum = this.isSumIndex(series, point.index);\n if (isSum || totalSum) {\n color = series.summaryFillColor;\n }\n else if (point.y < 0) {\n color = series.negativeFillColor;\n }\n else {\n color = series.interior;\n }\n return this.triggerEvent(series, point, color, { color: series.border.color, width: series.border.width });\n };\n /**\n * Add sumIndex and intermediateSumIndex data.\n * @return {object[]}\n * @private\n */\n WaterfallSeries.prototype.processWaterfallData = function (json, series) {\n var data = json;\n var length = json.length;\n var index;\n var intermediateSum = series.intermediateSumIndexes;\n var sumIndex = series.sumIndexes;\n if (intermediateSum !== undefined && intermediateSum.length > 0) {\n for (var i = 0; i < intermediateSum.length; i++) {\n for (var j = 0; j < data.length; j++) {\n if (j === intermediateSum[i]) {\n if (i === 0) {\n index = subArraySum(data, -1, intermediateSum[i], null, series);\n }\n else {\n index = subArraySum(data, intermediateSum[i - 1], intermediateSum[i], null, series);\n }\n data[j][series.yName] = index;\n }\n }\n }\n }\n if (sumIndex !== undefined && sumIndex.length > 0) {\n for (var k = 0; k < sumIndex.length; k++) {\n for (var j = 0; j < data.length; j++) {\n if (j === sumIndex[k]) {\n if (intermediateSum !== undefined) {\n index = subArraySum(data, -1, sumIndex[k], sumIndex, series);\n }\n else {\n index = subArraySum(data, -1, sumIndex[k], null, series);\n }\n data[j][series.yName] = index;\n }\n }\n }\n }\n return data;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n WaterfallSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n WaterfallSeries.prototype.getModuleName = function () {\n return 'WaterfallSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the waterfall series.\n * @return {void}\n * @private\n */\n WaterfallSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the waterfall series.\n */\n };\n return WaterfallSeries;\n}(ColumnBase));\nexport { WaterfallSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `HiloSeries` module is used to render the hilo series.\n */\nvar HiloSeries = /** @class */ (function (_super) {\n __extends(HiloSeries, _super);\n function HiloSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Hiloseries.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.render = function (series) {\n var region;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible &&\n withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n region = this.getRectangle(point.xValue + sideBySideInfo.median, point.high, point.xValue + sideBySideInfo.median, point.low, series);\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n if (!series.chart.requireInvertedAxis) {\n region.width = argsData.border.width;\n region.x = region.x - (region.width / 2);\n }\n else {\n region.height = argsData.border.width;\n region.y = region.y - (region.height / 2);\n }\n argsData.border.width = 0;\n this.updateSymbolLocation(point, region, series);\n this.drawRectangle(series, point, region, argsData);\n }\n }\n }\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var border = { color: series.fill, width: Math.max(series.border.width, 2) };\n return _super.prototype.triggerEvent.call(this, series, point, series.interior, border);\n };\n /**\n * Get module name.\n */\n HiloSeries.prototype.getModuleName = function () {\n return 'HiloSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HiloSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the Hilo series.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the Hilo Series\n */\n };\n return HiloSeries;\n}(ColumnBase));\nexport { HiloSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange, PathOption } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `HiloOpenCloseSeries` module is used to render the hiloOpenClose series.\n */\nvar HiloOpenCloseSeries = /** @class */ (function (_super) {\n __extends(HiloOpenCloseSeries, _super);\n function HiloOpenCloseSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render HiloOpenCloseSeries series.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.render = function (series) {\n var highLowRect;\n var open;\n var close;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var borderWidth = Math.max(series.border.width, 2);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible &&\n withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //highlow\n highLowRect = this.getRectangle(point.xValue + sideBySideInfo.start, Math.max(point.high, point.low), point.xValue + sideBySideInfo.end, Math.min(point.high, point.low), series);\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.median, Math.max(point.high, point.low), point.xValue + sideBySideInfo.median, Math.min(point.high, point.low), series));\n this.updateTickRegion(!series.chart.requireInvertedAxis, point.regions[0], borderWidth);\n //open\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.start, Math.max(point.open, point.close), point.xValue + sideBySideInfo.median, Math.max(point.open, point.close), series));\n //close\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.median, Math.min(point.open, point.close), point.xValue + sideBySideInfo.end, Math.min(point.open, point.close), series));\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n this.updateSymbolLocation(point, point.regions[0], series);\n var open_1 = { x: point.regions[1].x, y: point.regions[1].y };\n var close_1 = { x: point.regions[2].x, y: point.regions[2].y };\n this.drawHiloOpenClosePath(series, point, open_1, close_1, highLowRect, argsData);\n }\n this.updateTickRegion(series.chart.requireInvertedAxis, point.regions[1], borderWidth);\n this.updateTickRegion(series.chart.requireInvertedAxis, point.regions[2], borderWidth);\n }\n }\n };\n /**\n * Updates the tick region\n */\n HiloOpenCloseSeries.prototype.updateTickRegion = function (horizontal, region, borderWidth) {\n if (horizontal) {\n region.x -= borderWidth / 2;\n region.width = borderWidth;\n }\n else {\n region.y -= borderWidth / 2;\n region.height = borderWidth;\n }\n };\n /**\n * Trigger point rendering event\n */\n HiloOpenCloseSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var fill = (point.open <= point.close) ? series.bearFillColor : series.bullFillColor;\n var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n return this.triggerEvent(series, point, fill, border);\n };\n /**\n * To draw the rectangle for points.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.drawHiloOpenClosePath = function (series, point, open, close, rect, argsData) {\n // region highlow\n var direction;\n var options;\n if (series.chart.requireInvertedAxis) {\n direction = ('M' + ' ' + (rect.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height / 2) + ' ');\n direction += ('M' + ' ' + (open.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (open.x) + ' ' + (rect.y + rect.height) + ' ');\n direction += ('M' + ' ' + (close.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (close.x) + ' ' + (rect.y) + ' ');\n }\n else {\n direction = ('M' + ' ' + (rect.x + rect.width / 2) + ' ' + (rect.y + rect.height) + ' ' +\n 'L' + ' ' + (rect.x + rect.width / 2) + ' ' + (rect.y) + ' ');\n //region opentick\n direction += ('M' + ' ' + (rect.x) + ' ' + (open.y) + ' ' +\n 'L' + ' ' + (rect.x + rect.width / 2) + ' ' + (open.y) + ' ');\n //region closetick\n direction += ('M' + ' ' + (rect.x + rect.width / 2) + ' ' + (close.y) + ' ' +\n 'L' + ' ' + (rect.x + rect.width) + ' ' + (close.y) + ' ');\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.fill, series.opacity, series.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n element.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n series.seriesElement.appendChild(element);\n };\n /**\n * Get module name.\n */\n HiloOpenCloseSeries.prototype.getModuleName = function () {\n return 'HiloOpenCloseSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HiloOpenCloseSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the column series.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return HiloOpenCloseSeries;\n}(ColumnBase));\nexport { HiloOpenCloseSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange, getPoint, PathOption, Rect } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `RangeAreaSeries` module is used to render the range area series.\n */\nvar RangeAreaSeries = /** @class */ (function (_super) {\n __extends(RangeAreaSeries, _super);\n function RangeAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render RangeArea Series.\n * @return {void}.\n * @private\n */\n RangeAreaSeries.prototype.render = function (series) {\n var point;\n var direction = '';\n var command = 'M';\n var closed = undefined;\n var visiblePoints = this.improveChartPerformance(series);\n for (var i = 0, length_1 = visiblePoints.length; i < length_1; i++) {\n point = visiblePoints[i];\n point.symbolLocations = [];\n point.regions = [];\n var low = Math.min(point.low, point.high);\n var high = Math.max(point.low, point.high);\n if (series.yAxis.isInversed) {\n var temp = low;\n low = high;\n high = temp;\n }\n var lowPoint = getPoint(point.xValue, low, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n var highPoint = getPoint(point.xValue, high, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n point.symbolLocations.push(highPoint);\n point.symbolLocations.push(lowPoint);\n var rect = new Rect(Math.min(lowPoint.x, highPoint.x), Math.min(lowPoint.y, highPoint.y), Math.max(Math.abs(highPoint.x - lowPoint.x), series.marker.width), Math.max(Math.abs(highPoint.y - lowPoint.y), series.marker.width));\n if (!series.chart.requireInvertedAxis) {\n rect.x -= series.marker.width / 2;\n }\n else {\n rect.y -= series.marker.width / 2;\n }\n point.regions.push(rect);\n //Path to connect the high points\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction = direction.concat(command + ' ' + (lowPoint.x) + ' ' + (lowPoint.y) + ' ');\n closed = false;\n if ((i + 1 < visiblePoints.length && !visiblePoints[i + 1].visible)\n || i === visiblePoints.length - 1) {\n // Path to connect the low points\n direction = this.closeRangeAreaPath(visiblePoints, point, series, direction, i);\n command = 'M';\n direction = direction.concat(' ' + 'Z');\n closed = true;\n }\n command = 'L';\n }\n else {\n if (closed === false && i !== 0) {\n direction = this.closeRangeAreaPath(visiblePoints, point, series, direction, i);\n closed = true;\n }\n command = 'M';\n point.symbolLocations = [];\n }\n }\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n series.chart.element.id + '_Series_' + series.index;\n var options = new PathOption(name, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * path for rendering the low points\n * @return {void}.\n * @private\n */\n RangeAreaSeries.prototype.closeRangeAreaPath = function (visiblePoints, point, series, direction, i) {\n for (var j = i; j >= 0; j--) {\n if (visiblePoints[j].visible && visiblePoints[j].symbolLocations[0]) {\n point = visiblePoints[j];\n direction += 'L' + ' ' + (point.symbolLocations[0].x) + ' ' + ((point.symbolLocations[0].y)) + ' ';\n }\n else {\n break;\n }\n }\n return direction;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n RangeAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * Get module name.\n */\n RangeAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'RangeAreaSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n RangeAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroys range area series\n */\n };\n return RangeAreaSeries;\n}(LineBase));\nexport { RangeAreaSeries };\n","import { withInRange, getPoint, PathOption, drawSymbol, Size, Rect, markerAnimate } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `BubbleSeries` module is used to render the bubble series.\n */\nvar BubbleSeries = /** @class */ (function () {\n function BubbleSeries() {\n }\n /**\n * Render the Bubble series.\n * @return {void}\n * @private\n */\n BubbleSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var marker = series.marker;\n var visiblePoints = series.points;\n var shapeOption;\n var argsData;\n //let bubbleMode: RadiusMode = bubbleOptions.radiusMode;\n var segmentRadius;\n var radius;\n var value = Math.max(series.chart.initialClipRect.height, series.chart.initialClipRect.width);\n var percentChange = value / 100;\n var maxRadius = series.maxRadius * percentChange;\n var minRadius = series.minRadius * percentChange;\n var maximumSize = null;\n var maxValue = null;\n if ((series.maxRadius === null || series.minRadius === null)) {\n for (var _i = 0, _a = series.chart.visibleSeries; _i < _a.length; _i++) {\n var value_1 = _a[_i];\n if (value_1.type === 'Bubble' && value_1.visible === true && (value_1.maxRadius === null || value_1.minRadius === null)) {\n maximumSize = value_1.sizeMax > maximumSize ? value_1.sizeMax : maximumSize;\n }\n }\n maxValue = (value / 5) / 2;\n minRadius = maxRadius = 1;\n radius = maxValue * maxRadius;\n }\n else {\n maximumSize = series.sizeMax;\n radius = maxRadius - minRadius;\n }\n for (var _b = 0, visiblePoints_1 = visiblePoints; _b < visiblePoints_1.length; _b++) {\n var bubblePoint = visiblePoints_1[_b];\n bubblePoint.symbolLocations = [];\n bubblePoint.regions = [];\n if (bubblePoint.visible &&\n withInRange(visiblePoints[bubblePoint.index - 1], bubblePoint, visiblePoints[bubblePoint.index + 1], series)) {\n bubblePoint.symbolLocations.push(getPoint(bubblePoint.xValue, bubblePoint.yValue, xAxis, yAxis, isInverted));\n if ((series.maxRadius === null || series.minRadius === null)) {\n segmentRadius = radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n else {\n segmentRadius = minRadius + radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n segmentRadius = segmentRadius || minRadius;\n argsData = {\n cancel: false, name: pointRender, series: series, point: bubblePoint,\n fill: series.setPointColor(bubblePoint, series.interior),\n border: series.setBorderColor(bubblePoint, { width: series.border.width, color: series.border.color }),\n height: 2 * segmentRadius, width: 2 * segmentRadius\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n bubblePoint.color = argsData.fill;\n shapeOption = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + bubblePoint.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n series.seriesElement.appendChild(drawSymbol(bubblePoint.symbolLocations[0], 'Circle', new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, bubblePoint.x.toString() + ':' + bubblePoint.yValue.toString()));\n bubblePoint.regions.push(new Rect(bubblePoint.symbolLocations[0].x - segmentRadius, bubblePoint.symbolLocations[0].y - segmentRadius, 2 * segmentRadius, 2 * segmentRadius));\n bubblePoint.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n shape: 'Circle', width: argsData.width\n };\n }\n else {\n bubblePoint.marker = { visible: false };\n }\n }\n }\n };\n /**\n * To destroy the Bubble.\n * @return {void}\n * @private\n */\n BubbleSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n BubbleSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'BubbleSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BubbleSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var bubblePoint = _a[_i];\n if (!bubblePoint.symbolLocations.length) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, bubblePoint.index, bubblePoint.symbolLocations[0], false);\n count++;\n }\n };\n return BubbleSeries;\n}());\nexport { BubbleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { ChartLocation, ControlPoints } from '../../common/utils/helper';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { LineBase } from './line-base';\n/**\n * render Line series\n */\nvar SplineBase = /** @class */ (function (_super) {\n __extends(SplineBase, _super);\n /** @private */\n function SplineBase(chartModule) {\n var _this = _super.call(this, chartModule) || this;\n _this.splinePoints = [];\n return _this;\n }\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.findSplinePoint = function (series) {\n var value;\n var points = this.filterEmptyPoints(series);\n this.splinePoints = this.findSplineCoefficients(points, series);\n if (points.length > 1) {\n series.drawPoints = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index !== 0) {\n var previous = this.getPreviousIndex(points, point.index - 1, series);\n value = this.getControlPoints(points[previous], point, this.splinePoints[previous], this.splinePoints[point.index], series);\n series.drawPoints.push(value);\n if (point.yValue && value.controlPoint1.y && value.controlPoint2.y) {\n series.yMin = Math.floor(Math.min(series.yMin, point.yValue, value.controlPoint1.y, value.controlPoint2.y));\n series.yMax = Math.ceil(Math.max(series.yMax, point.yValue, value.controlPoint1.y, value.controlPoint2.y));\n }\n }\n }\n }\n };\n SplineBase.prototype.getPreviousIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i > -1) {\n i = i - 1;\n }\n return i;\n };\n SplineBase.prototype.getNextIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i < points.length) {\n i = i + 1;\n }\n return i;\n };\n SplineBase.prototype.filterEmptyPoints = function (series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return series.points;\n }\n var points = extend([], series.points, null, true);\n for (var i = 0; i < points.length; i++) {\n points[i].index = i;\n if (points[i].isEmpty) {\n points[i].symbolLocations = [];\n points[i].regions = [];\n points.splice(i, 1);\n i--;\n }\n }\n return points;\n };\n /**\n * To find the natural spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.findSplineCoefficients = function (points, series) {\n var count = points.length;\n var ySpline = [];\n var ySplineDuplicate = [];\n var coefficient1;\n var coefficient2;\n var coefficient3;\n var dy1;\n var dy2;\n var dx = [];\n var dy = [];\n var slope = [];\n var interPoint;\n var slopeLength;\n var cardinalSplineTension = series.cardinalSplineTension ? series.cardinalSplineTension : 0.5;\n cardinalSplineTension = cardinalSplineTension < 0 ? 0 : cardinalSplineTension > 1 ? 1 : cardinalSplineTension;\n switch (series.splineType) {\n case 'Monotonic':\n for (var i = 0; i < count - 1; i++) {\n dx[i] = points[i + 1].xValue - points[i].xValue;\n dy[i] = points[i + 1].yValue - points[i].yValue;\n slope[i] = dy[i] / dx[i];\n }\n //interpolant points\n slopeLength = slope.length;\n // to find the first and last co-efficient value\n ySpline[0] = slope[0];\n ySpline[count - 1] = slope[slopeLength - 1];\n //to find the other co-efficient values\n for (var j = 0; j < dx.length; j++) {\n if (slopeLength > j + 1) {\n if (slope[j] * slope[j + 1] <= 0) {\n ySpline[j + 1] = 0;\n }\n else {\n interPoint = dx[j] + dx[j + 1];\n ySpline[j + 1] = 3 * interPoint / ((interPoint + dx[j + 1]) / slope[j] + (interPoint + dx[j]) / slope[j + 1]);\n }\n }\n }\n break;\n case 'Cardinal':\n for (var i = 0; i < count; i++) {\n if (i === 0) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[i + 2].xValue - points[i].xValue)) : 0;\n }\n else if (i === (count - 1)) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[count - 1].xValue - points[count - 3].xValue)) : 0;\n }\n else {\n ySpline[i] = (cardinalSplineTension * (points[i + 1].xValue - points[i - 1].xValue));\n }\n }\n break;\n default:\n if (series.splineType === 'Clamped') {\n var firstIndex = (points[1].yValue - points[0].yValue) / (points[1].xValue - points[0].xValue);\n var lastIndex = (points[count - 1].xValue - points[count - 2].xValue) /\n (points[count - 1].yValue - points[count - 2].yValue);\n ySpline[0] = (3 * (points[1].yValue - points[0].yValue)) / (points[1].xValue - points[0].xValue) - 3;\n ySplineDuplicate[0] = 0.5;\n ySpline[points.length - 1] = (3 * (points[points.length - 1].yValue - points[points.length - 2].yValue)) /\n (points[points.length - 1].xValue - points[points.length - 2].xValue);\n ySpline[0] = ySplineDuplicate[0] = Math.abs(ySpline[0]) === Infinity ? 0 : ySpline[0];\n ySpline[points.length - 1] = ySplineDuplicate[points.length - 1] = Math.abs(ySpline[points.length - 1]) === Infinity ?\n 0 : ySpline[points.length - 1];\n }\n else {\n // assigning the first and last value as zero\n ySpline[0] = ySplineDuplicate[0] = 0;\n ySpline[points.length - 1] = 0;\n }\n for (var i = 1; i < count - 1; i++) {\n coefficient1 = points[i].xValue - points[i - 1].xValue;\n coefficient2 = points[i + 1].xValue - points[i - 1].xValue;\n coefficient3 = points[i + 1].xValue - points[i].xValue;\n dy1 = points[i + 1].yValue - points[i].yValue || null;\n dy2 = points[i].yValue - points[i - 1].yValue || null;\n if (coefficient1 === 0 || coefficient2 === 0 || coefficient3 === 0) {\n ySpline[i] = 0;\n ySplineDuplicate[i] = 0;\n }\n else {\n var p = 1 / (coefficient1 * ySpline[i - 1] + 2 * coefficient2);\n ySpline[i] = -p * coefficient3;\n ySplineDuplicate[i] = p * (6 * (dy1 / coefficient3 - dy2 / coefficient1) - coefficient1 * ySplineDuplicate[i - 1]);\n }\n }\n for (var k = count - 2; k >= 0; k--) {\n ySpline[k] = ySpline[k] * ySpline[k + 1] + ySplineDuplicate[k];\n }\n break;\n }\n return ySpline;\n };\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.getControlPoints = function (point1, point2, ySpline1, ySpline2, series) {\n var controlPoint1;\n var controlPoint2;\n var point;\n var ySplineDuplicate1 = ySpline1;\n var ySplineDuplicate2 = ySpline2;\n switch (series.splineType) {\n case 'Cardinal':\n if (series.xAxis.valueType === 'DateTime') {\n ySplineDuplicate1 = ySpline1 / this.dateTimeInterval(series);\n ySplineDuplicate2 = ySpline2 / this.dateTimeInterval(series);\n }\n controlPoint1 = new ChartLocation(point1.xValue + ySpline1 / 3, point1.yValue + ySplineDuplicate1 / 3);\n controlPoint2 = new ChartLocation(point2.xValue - ySpline2 / 3, point2.yValue - ySplineDuplicate2 / 3);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n case 'Monotonic':\n var value = (point2.xValue - point1.xValue) / 3;\n controlPoint1 = new ChartLocation(point1.xValue + value, point1.yValue + ySpline1 * value);\n controlPoint2 = new ChartLocation(point2.xValue - value, point2.yValue - ySpline2 * value);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n default:\n var one3 = 1 / 3.0;\n var deltaX2 = (point2.xValue - point1.xValue);\n deltaX2 = deltaX2 * deltaX2;\n var y1 = one3 * (((2 * point1.yValue) + point2.yValue) - one3 * deltaX2 * (ySpline1 + 0.5 * ySpline2));\n var y2 = one3 * ((point1.yValue + (2 * point2.yValue)) - one3 * deltaX2 * (0.5 * ySpline1 + ySpline2));\n controlPoint1 = new ChartLocation((2 * (point1.xValue) + (point2.xValue)) * one3, y1);\n controlPoint2 = new ChartLocation(((point1.xValue) + 2 * (point2.xValue)) * one3, y2);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n }\n return point;\n };\n /**\n * calculate datetime interval in hours\n *\n */\n SplineBase.prototype.dateTimeInterval = function (series) {\n var interval = series.xAxis.actualIntervalType;\n var intervalInMilliseconds;\n if (interval === 'Years') {\n intervalInMilliseconds = 365 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Months') {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Days') {\n intervalInMilliseconds = 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Hours') {\n intervalInMilliseconds = 60 * 60 * 1000;\n }\n else if (interval === 'Minutes') {\n intervalInMilliseconds = 60 * 1000;\n }\n else if (interval === 'Seconds') {\n intervalInMilliseconds = 1000;\n }\n else {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n return intervalInMilliseconds;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n SplineBase.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return SplineBase;\n}(LineBase));\nexport { SplineBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { PathOption, getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { SplineBase } from './spline-base';\n/**\n * `SplineSeries` module is used to render the spline series.\n */\nvar SplineSeries = /** @class */ (function (_super) {\n __extends(SplineSeries, _super);\n function SplineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the spline series.\n * @return {void}\n * @private\n */\n SplineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var chart = series.chart;\n var marker = series.marker;\n var ySpline;\n var options;\n var firstPoint = null;\n var secondPoint = null;\n var direction = '';\n var pt1;\n var pt2;\n var bpt1;\n var bpt2;\n var data;\n var controlPointCount = 0;\n var controlPoint1;\n var controlPoint2;\n var startPoint = 'M';\n var points = this.filterEmptyPoints(series);\n var previous;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n previous = this.getPreviousIndex(points, point.index - 1, series);\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(points[previous], point, points[this.getNextIndex(points, point.index - 1, series)], series)) {\n if (firstPoint !== null) {\n data = series.drawPoints[previous];\n controlPoint1 = data.controlPoint1;\n controlPoint2 = data.controlPoint2;\n pt1 = getCoordinate(firstPoint.xValue, firstPoint.yValue, xAxis, yAxis, isInverted, series);\n pt2 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n bpt1 = getCoordinate(controlPoint1.x, controlPoint1.y, xAxis, yAxis, isInverted, series);\n bpt2 = getCoordinate(controlPoint2.x, controlPoint2.y, xAxis, yAxis, isInverted, series);\n direction = direction.concat((startPoint + ' ' + (pt1.x) + ' ' + (pt1.y) + ' ' + 'C' + ' ' + (bpt1.x) + ' '\n + (bpt1.y) + ' ' + (bpt2.x) + ' ' + (bpt2.y) + ' ' + (pt2.x) + ' ' + (pt2.y) + ' '));\n startPoint = 'L';\n }\n firstPoint = point;\n this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n else {\n startPoint = 'M';\n firstPoint = null;\n point.symbolLocations = [];\n }\n }\n var name = series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + series.index;\n options = new PathOption(name, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Get module name.\n */\n SplineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SplineSeries';\n };\n /**\n * To destroy the spline.\n * @return {void}\n * @private\n */\n SplineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return SplineSeries;\n}(SplineBase));\nexport { SplineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { PathOption, getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { SplineBase } from './spline-base';\n/**\n * `SplineAreaSeries` module used to render the spline area series.\n */\nvar SplineAreaSeries = /** @class */ (function (_super) {\n __extends(SplineAreaSeries, _super);\n function SplineAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the splineArea series.\n * @return {void}\n * @private\n */\n SplineAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var firstPoint = null;\n var direction = '';\n var startPoint = null;\n var startPoint1 = null;\n var pt1;\n var pt2;\n var bpt1;\n var bpt2;\n var controlPt1;\n var controlPt2;\n var points = this.filterEmptyPoints(series);\n var pointsLength = series.points.length;\n var point;\n var previous;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var origin = series.chart.chartAreaType === 'PolarRadar' ? series.points[0].yValue :\n Math.max(series.yAxis.visibleRange.min, 0);\n for (var i = 0; i < pointsLength; i++) {\n point = series.points[i];\n point.symbolLocations = [];\n point.regions = [];\n previous = this.getPreviousIndex(points, point.index - 1, series);\n if (point.visible &&\n withInRange(points[previous], point, points[this.getNextIndex(points, point.index - 1, series)], series)) {\n if (firstPoint) {\n controlPt1 = series.drawPoints[previous].controlPoint1;\n controlPt2 = series.drawPoints[previous].controlPoint2;\n pt1 = getCoordinate(firstPoint.xValue, firstPoint.yValue, xAxis, yAxis, isInverted, series);\n pt2 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n bpt1 = getCoordinate(controlPt1.x, controlPt1.y, xAxis, yAxis, isInverted, series);\n bpt2 = getCoordinate(controlPt2.x, controlPt2.y, xAxis, yAxis, isInverted, series);\n direction = direction.concat(' C' + bpt1.x + ' '\n + bpt1.y + ' ' + bpt2.x + ' ' + bpt2.y + ' ' + pt2.x + ' ' + pt2.y + ' ');\n }\n else {\n // Start point for the current path\n startPoint = getCoordinate(point.xValue, origin, xAxis, yAxis, isInverted, series);\n direction += ('M ' + startPoint.x + ' ' + startPoint.y + ' ');\n // First Point to draw the area path\n startPoint1 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n direction += ('L ' + startPoint1.x + ' ' + startPoint1.y + ' ');\n }\n this.storePointLocation(point, series, isInverted, getCoordinate);\n firstPoint = point;\n }\n else {\n firstPoint = null;\n point.symbolLocations = [];\n }\n if (((i + 1 < pointsLength && !series.points[i + 1].visible) || i === pointsLength - 1)\n && pt2 && startPoint) {\n startPoint = getCoordinate(point.xValue, origin, xAxis, yAxis, isInverted, series);\n direction = direction.concat('L ' + (startPoint.x) + ' ' + (startPoint.y));\n }\n }\n this.appendLinePath(new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction), series, '');\n this.renderMarker(series);\n };\n /**\n * Get module name.\n */\n SplineAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SplineAreaSeries';\n };\n /**\n * To destroy the spline.\n * @return {void}\n * @private\n */\n SplineAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return SplineAreaSeries;\n}(SplineBase));\nexport { SplineAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { LineBase } from '../series/line-base';\nimport { Series, Points } from '../series/chart-series';\nimport { RectOption, Rect } from '../../common/utils/helper';\nimport { findClipRect } from '../../common/utils/helper';\n/**\n * Technical Analysis module helps to predict the market trend\n */\nvar TechnicalAnalysis = /** @class */ (function (_super) {\n __extends(TechnicalAnalysis, _super);\n function TechnicalAnalysis() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series, that are used to represent the given technical indicator\n * @private\n */\n TechnicalAnalysis.prototype.initSeriesCollection = function (indicator, chart) {\n indicator.targetSeries = [];\n var signalLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(signalLine, indicator, 'SignalLine', indicator.fill, indicator.width, chart);\n };\n /**\n * Initializes the properties of the given series\n * @private\n */\n TechnicalAnalysis.prototype.setSeriesProperties = function (series, indicator, name, fill, width, chart) {\n series.name = name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || '#606eff';\n series.dashArray = indicator.dashArray;\n series.width = width;\n series.xAxisName = indicator.xAxisName;\n series.animation = indicator.animation;\n series.yAxisName = indicator.yAxisName;\n series.clipRectElement = indicator.clipRectElement;\n series.points = [];\n series.enableTooltip = true;\n series.interior = series.fill;\n series.category = 'Indicator';\n series.index = indicator.index;\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n series.marker.visible = false;\n indicator.targetSeries.push(series);\n };\n /**\n * Creates the elements of a technical indicator\n * @private\n */\n TechnicalAnalysis.prototype.createIndicatorElements = function (chart, indicator, index) {\n if (indicator.seriesName || indicator.dataSource) {\n findClipRect(indicator.targetSeries[0]);\n }\n var clipRect = new Rect(0, 0, 0, 0);\n if (indicator.seriesName || indicator.dataSource) {\n clipRect = indicator.targetSeries[0].clipRect;\n }\n //defines the clip rect element\n var clipRectElement = chart.renderer.drawClipPath(new RectOption(chart.element.id + '_ChartIndicatorClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height,\n }));\n //creates the group for an indicator\n indicator.indicatorElement = chart.renderer.createGroup({\n 'id': chart.element.id + 'IndicatorGroup' + index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartIndicatorClipRect_' + index + ')'\n });\n indicator.indicatorElement.appendChild(clipRectElement);\n //Defines a group for each series in a technical indicator\n for (var _i = 0, _a = indicator.targetSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n series.clipRectElement = clipRectElement;\n var element = series.chart.renderer.createGroup({\n 'id': series.chart.element.id + '_Indicator_' +\n indicator.index + '_' + series.name + '_Group'\n });\n indicator.indicatorElement.appendChild(element);\n series.seriesElement = element;\n }\n chart.indicatorElements.appendChild(indicator.indicatorElement);\n };\n TechnicalAnalysis.prototype.getDataPoint = function (x, y, sourcePoint, series, index, indicator) {\n if (indicator === void 0) { indicator = null; }\n var point = new Points();\n point.x = x;\n point.y = y;\n point.xValue = sourcePoint.xValue;\n point.color = series.fill;\n point.index = index;\n point.yValue = y;\n point.visible = true;\n series.xMin = Math.min(series.xMin, point.xValue);\n series.yMin = Math.min(series.yMin, point.yValue);\n series.xMax = Math.max(series.xMax, point.xValue);\n series.yMax = Math.max(series.yMax, point.yValue);\n series.xData.push(point.xValue);\n if (indicator && indicator.type === 'Macd' && series.type === 'Column') {\n if (point.y >= 0) {\n point.color = indicator.macdPositiveColor;\n }\n else {\n point.color = indicator.macdNegativeColor;\n }\n }\n return point;\n };\n TechnicalAnalysis.prototype.getRangePoint = function (x, high, low, sourcePoint, series, index, indicator) {\n if (indicator === void 0) { indicator = null; }\n var point = new Points();\n point.x = x;\n point.high = high;\n point.low = low;\n point.xValue = sourcePoint.xValue;\n point.color = series.fill;\n point.index = index;\n point.visible = true;\n series.xData.push(point.xValue);\n return point;\n };\n TechnicalAnalysis.prototype.setSeriesRange = function (points, indicator, series) {\n if (series === void 0) { series = null; }\n if (!series) {\n indicator.targetSeries[0].points = points;\n }\n else {\n series.points = points;\n }\n };\n return TechnicalAnalysis;\n}(LineBase));\nexport { TechnicalAnalysis };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `SmaIndicator` module is used to render SMA indicator.\n */\nvar SmaIndicator = /** @class */ (function (_super) {\n __extends(SmaIndicator, _super);\n function SmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on SMA approach\n * @private\n */\n SmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var smaPoints = [];\n var points = indicator.points;\n if (points && points.length) {\n //prepare data\n var validData = points;\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var signalSeries = indicator.targetSeries[0];\n if (validData && validData.length && validData.length >= indicator.period) {\n //find initial average\n var average = 0;\n var sum = 0;\n for (var i = 0; i < indicator.period; i++) {\n sum += validData[i][field];\n }\n average = sum / indicator.period;\n smaPoints.push(this.getDataPoint(validData[indicator.period - 1][xField], average, validData[indicator.period - 1], signalSeries, smaPoints.length));\n var index = indicator.period;\n while (index < validData.length) {\n sum -= validData[index - indicator.period][field];\n sum += validData[index][field];\n average = sum / indicator.period;\n smaPoints.push(this.getDataPoint(validData[index][xField], average, validData[index], signalSeries, smaPoints.length));\n index++;\n }\n }\n this.setSeriesRange(smaPoints, indicator);\n }\n };\n /**\n * To destroy the SMA indicator\n * @return {void}\n * @private\n */\n SmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the SMA indicator\n */\n };\n /**\n * Get module name.\n */\n SmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SmaIndicator';\n };\n return SmaIndicator;\n}(TechnicalAnalysis));\nexport { SmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `EmaIndicator` module is used to render EMA indicator.\n */\nvar EmaIndicator = /** @class */ (function (_super) {\n __extends(EmaIndicator, _super);\n function EmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on EMA approach\n * @private\n */\n EmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var emaPoints = [];\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData && validData.length && validData.length >= indicator.period) {\n //find initial average\n var sum = 0;\n var average = 0;\n //smoothing factor\n var k = (2 / (indicator.period + 1));\n for (var i = 0; i < indicator.period; i++) {\n sum += validData[i][field];\n }\n average = sum / indicator.period;\n emaPoints.push(this.getDataPoint(validData[indicator.period - 1][xField], average, validData[indicator.period - 1], signalSeries, emaPoints.length));\n var index = indicator.period;\n while (index < validData.length) {\n //previous average\n var prevAverage = emaPoints[index - indicator.period][signalSeries.yName];\n var yValue = (validData[index][field] - prevAverage) * k + prevAverage;\n emaPoints.push(this.getDataPoint(validData[index][xField], yValue, validData[index], signalSeries, emaPoints.length));\n index++;\n }\n }\n this.setSeriesRange(emaPoints, indicator);\n };\n /**\n * To destroy the EMA Indicator\n * @return {void}\n * @private\n */\n EmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the EMA Indicator\n */\n };\n /**\n * Get module name.\n */\n EmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'EmaIndicator';\n };\n return EmaIndicator;\n}(TechnicalAnalysis));\nexport { EmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `TmaIndicator` module is used to render TMA indicator.\n */\nvar TmaIndicator = /** @class */ (function (_super) {\n __extends(TmaIndicator, _super);\n function TmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on TMA approach\n * @private\n */\n TmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var tmaPoints = [];\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData && validData.length && validData.length >= indicator.period) {\n var signalSeries_1 = indicator.targetSeries[0];\n //prepare data\n var validData_1 = indicator.points;\n if (validData_1.length && validData_1.length >= indicator.period) {\n //smoothing factor\n var k = (2 / (indicator.period + 1));\n //find initial average\n var average = 0;\n var sum = 0;\n var sumOfSMA = 0;\n var averageSMA = 0;\n var smaValues = [];\n //sma values\n var index = 0;\n var length_1 = validData_1.length;\n var period = indicator.period;\n while (length_1 >= period) {\n sum = 0;\n index = validData_1.length - length_1;\n for (var j = index; j < index + period; j++) {\n sum = sum + validData_1[j][field];\n }\n sum = sum / period;\n smaValues.push(sum);\n length_1--;\n }\n //initial values\n for (var k_1 = 0; k_1 < period - 1; k_1++) {\n sum = 0;\n for (var j = 0; j < k_1 + 1; j++) {\n sum = sum + validData_1[j][field];\n }\n sum = sum / (k_1 + 1);\n smaValues.splice(k_1, 0, sum);\n }\n index = indicator.period;\n while (index <= smaValues.length) {\n sum = 0;\n for (var j = index - indicator.period; j < index; j++) {\n sum = sum + smaValues[j];\n }\n sum = sum / indicator.period;\n tmaPoints.push(this.getDataPoint(validData_1[index - 1][xField], sum, validData_1[index - 1], signalSeries_1, tmaPoints.length));\n index++;\n }\n }\n }\n this.setSeriesRange(tmaPoints, indicator);\n };\n /**\n * To destroy the TMA indicator.\n * @return {void}\n * @private\n */\n TmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the TMA Indicator\n */\n };\n /**\n * Get module name.\n */\n TmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'TmaIndicator';\n };\n return TmaIndicator;\n}(TechnicalAnalysis));\nexport { TmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { TechnicalAnalysis } from './indicator-base';\n/**\n * `AccumulationDistributionIndicator` module is used to render accumulation distribution indicator.\n */\nvar AccumulationDistributionIndicator = /** @class */ (function (_super) {\n __extends(AccumulationDistributionIndicator, _super);\n function AccumulationDistributionIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions using accumulation distribution approach\n * @private\n */\n AccumulationDistributionIndicator.prototype.initDataSource = function (indicator, chart) {\n var sourceSeries = indicator.sourceSeries;\n var adPoints = [];\n var validData = indicator.points;\n if (validData.length > 0 && validData.length > indicator.period) {\n adPoints = this.calculateADPoints(indicator, validData);\n }\n this.setSeriesRange(adPoints, indicator);\n };\n /**\n * Calculates the Accumulation Distribution values\n * @private\n */\n AccumulationDistributionIndicator.prototype.calculateADPoints = function (indicator, validData) {\n var temp = [];\n var sum = 0;\n var i = 0;\n var value = 0;\n var high = 0;\n var low = 0;\n var close = 0;\n var signalSeries = indicator.targetSeries[0];\n for (i = 0; i < validData.length; i++) {\n high = Number(validData[i].high);\n low = Number(validData[i].low);\n close = Number(validData[i].close);\n /**\n * Money Flow Multiplier = [(Close - Low) - (High - Close)] /(High - Low)\n * Money Flow Volume = Money Flow Multiplier x Volume for the Period\n * ADL = Previous ADL + Current Period's Money Flow Volume\n */\n value = ((close - low) - (high - close)) / (high - low);\n /**\n * Sum is to calculate the Y values of the Accumulation distribution indicator\n */\n sum = sum + value * Number(validData[i].volume);\n /**\n * To calculate the x and y values for the Accumulation distribution indicator\n */\n temp[i] = this.getDataPoint(validData[i].x, sum, validData[i], signalSeries, temp.length);\n }\n return temp;\n };\n /**\n * To destroy the Accumulation Distribution Technical Indicator.\n * @return {void}\n * @private\n */\n AccumulationDistributionIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the Accumulation Distribution Technical indicator\n */\n };\n /**\n * Get module name.\n */\n AccumulationDistributionIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the Indicator\n */\n return 'AccumulationDistributionIndicator';\n };\n return AccumulationDistributionIndicator;\n}(TechnicalAnalysis));\nexport { AccumulationDistributionIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { TechnicalAnalysis } from './indicator-base';\n/**\n * `AtrIndicator` module is used to render ATR indicator.\n */\nvar AtrIndicator = /** @class */ (function (_super) {\n __extends(AtrIndicator, _super);\n function AtrIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions using Average True Range approach\n * @private\n */\n AtrIndicator.prototype.initDataSource = function (indicator, chart) {\n var sourceSeries = indicator.sourceSeries;\n var atrPoints = [];\n var validData = indicator.points;\n if (validData.length > 0 && validData.length > indicator.period) {\n this.calculateATRPoints(indicator, validData);\n }\n };\n /**\n * To calculate Average True Range indicator points\n * @private\n */\n AtrIndicator.prototype.calculateATRPoints = function (indicator, validData) {\n var average = 0;\n var highLow = 0;\n var highClose = 0;\n var lowClose = 0;\n var trueRange = 0;\n var points = [];\n var temp = [];\n var period = indicator.period;\n var sum = 0;\n var y = 'y';\n var signalSeries = indicator.targetSeries[0];\n for (var i = 0; i < validData.length; i++) {\n /**\n * Current High less the current Low\n * Current High less the previous Close (absolute value)\n * Current Low less the previous Close (absolute value)\n */\n highLow = Number(validData[i].high) - Number(validData[i].low);\n if (i > 0) {\n //\n highClose = Math.abs(Number(validData[i].high) - Number(validData[i - 1].close));\n lowClose = Math.abs(Number(validData[i].low) - Number(validData[i - 1].close));\n }\n /**\n * To find the maximum of highLow, highClose, lowClose\n */\n trueRange = Math.max(highLow, highClose, lowClose);\n sum = sum + trueRange;\n /**\n * Push the x and y values for the Average true range indicator\n */\n if (i >= period) {\n average = (Number(temp[i - 1][y]) * (period - 1) + trueRange) / period;\n points.push(this.getDataPoint(validData[i].x, average, validData[i], signalSeries, points.length));\n }\n else {\n average = sum / period;\n if (i === period - 1) {\n points.push(this.getDataPoint(validData[i].x, average, validData[i], signalSeries, points.length));\n }\n }\n temp[i] = { x: validData[i].x, y: average };\n }\n this.setSeriesRange(points, indicator);\n };\n /**\n * To destroy the Average true range indicator.\n * @return {void}\n * @private\n */\n AtrIndicator.prototype.destroy = function (chart) {\n /**\n * Destroy the Average true range indicator\n */\n };\n /**\n * Get module name.\n */\n AtrIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the Indicator\n */\n return 'AtrIndicator';\n };\n return AtrIndicator;\n}(TechnicalAnalysis));\nexport { AtrIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `MomentumIndicator` module is used to render Momentum indicator.\n */\nvar MomentumIndicator = /** @class */ (function (_super) {\n __extends(MomentumIndicator, _super);\n function MomentumIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series to represent a momentum indicator\n * @private\n */\n MomentumIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n };\n /**\n * Defines the predictions using momentum approach\n * @private\n */\n MomentumIndicator.prototype.initDataSource = function (indicator, chart) {\n var upperCollection = [];\n var signalCollection = [];\n var validData = indicator.points;\n if (validData && validData.length) {\n var upperSeries = indicator.targetSeries[1];\n var signalSeries = indicator.targetSeries[0];\n var length_1 = indicator.period;\n if (validData.length >= indicator.period) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, 100, validData[i], upperSeries, upperCollection.length));\n if (!(i < length_1)) {\n signalCollection.push(this.getDataPoint(validData[i].x, (Number(validData[i].close) / Number(validData[i - length_1].close) * 100), validData[i], signalSeries, signalCollection.length));\n }\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[1]);\n }\n };\n /**\n * To destroy the momentum indicator\n * @return {void}\n * @private\n */\n MomentumIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the momentum indicator\n */\n };\n /**\n * Get module name.\n */\n MomentumIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MomentumIndicator';\n };\n return MomentumIndicator;\n}(TechnicalAnalysis));\nexport { MomentumIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `RsiIndicator` module is used to render RSI indicator.\n */\nvar RsiIndicator = /** @class */ (function (_super) {\n __extends(RsiIndicator, _super);\n function RsiIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the series collection to represent the RSI Indicator\n * @private\n */\n RsiIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n if (indicator.showZones) {\n var lowerLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, lowerLine, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n }\n };\n /**\n * Defines the predictions using RSI approach\n * @private\n */\n RsiIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var lowerCollection = [];\n var upperCollection = [];\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n //Find upper band and lower band values\n if (indicator.showZones) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, indicator.overBought, validData[i], indicator.targetSeries[1], upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[i].x, indicator.overSold, validData[i], indicator.targetSeries[2], lowerCollection.length));\n }\n }\n //Find signal line value\n var prevClose = Number(validData[0].close);\n var gain = 0;\n var loss = 0;\n for (var i = 1; i <= indicator.period; i++) {\n var close_1 = Number(validData[i].close);\n if (close_1 > prevClose) {\n gain += close_1 - prevClose;\n }\n else {\n loss += prevClose - close_1;\n }\n prevClose = close_1;\n }\n gain = gain / indicator.period;\n loss = loss / indicator.period;\n signalCollection.push(this.getDataPoint(validData[indicator.period].x, 100 - (100 / (1 + gain / loss)), validData[indicator.period], signalSeries, signalCollection.length));\n for (var j = indicator.period + 1; j < validData.length; j++) {\n var close_2 = Number(validData[j].close);\n if (close_2 > prevClose) {\n gain = (gain * (indicator.period - 1) + (close_2 - prevClose)) / indicator.period;\n loss = (loss * (indicator.period - 1)) / indicator.period;\n }\n else if (close_2 < prevClose) {\n loss = (loss * (indicator.period - 1) + (prevClose - close_2)) / indicator.period;\n gain = (gain * (indicator.period - 1)) / indicator.period;\n }\n prevClose = close_2;\n signalCollection.push(this.getDataPoint(validData[j].x, 100 - (100 / (1 + gain / loss)), validData[j], signalSeries, signalCollection.length));\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n if (indicator.showZones) {\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[1]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[2]);\n }\n };\n /**\n * To destroy the RSI Indicator.\n * @return {void}\n * @private\n */\n RsiIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the RSI Indicator\n */\n };\n /**\n * Get module name.\n */\n RsiIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the indicator.\n */\n return 'RsiIndicator';\n };\n return RsiIndicator;\n}(TechnicalAnalysis));\nexport { RsiIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `StochasticIndicator` module is used to render stochastic indicator.\n */\nvar StochasticIndicator = /** @class */ (function (_super) {\n __extends(StochasticIndicator, _super);\n function StochasticIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series that represents the stochastic indicator\n * @private\n */\n StochasticIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n var periodLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(periodLine, indicator, 'PeriodLine', indicator.periodLine.color, indicator.periodLine.width, chart);\n if (indicator.showZones) {\n var upperSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(upperSeries, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n var lowerSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(lowerSeries, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n }\n };\n /**\n * Defines the predictions based on stochastic approach\n * @private\n */\n StochasticIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var upperCollection = [];\n var lowerCollection = [];\n var periodCollection = [];\n var source = [];\n var sourceSeries = indicator.sourceSeries;\n var point = {};\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n if (indicator.showZones) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, indicator.overBought, validData[i], indicator.targetSeries[2], upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[i].x, indicator.overSold, validData[i], indicator.targetSeries[3], lowerCollection.length));\n }\n }\n source = this.calculatePeriod(indicator.period, indicator.kPeriod, validData, indicator.targetSeries[1]);\n periodCollection = this.smaCalculation(indicator.period, indicator.kPeriod, source, indicator.targetSeries[1]);\n signalCollection = this.smaCalculation(indicator.period + indicator.kPeriod - 1, indicator.dPeriod, source, indicator.targetSeries[0]);\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n this.setSeriesRange(periodCollection, indicator, indicator.targetSeries[1]);\n if (indicator.showZones) {\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[2]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[3]);\n }\n };\n /**\n * Calculates the SMA Values\n * @private\n */\n StochasticIndicator.prototype.smaCalculation = function (period, kPeriod, data, sourceSeries) {\n var pointCollection = [];\n if (data.length >= period + kPeriod) {\n var count = period + (kPeriod - 1);\n var temp = [];\n var values = [];\n for (var i = 0; i < data.length; i++) {\n var value = Number(data[i].y);\n temp.push(value);\n }\n var length_1 = temp.length;\n while (length_1 >= count) {\n var sum = 0;\n for (var i = period - 1; i < (period + kPeriod - 1); i++) {\n sum = sum + temp[i];\n }\n sum = sum / kPeriod;\n values.push(sum.toFixed(2));\n temp.splice(0, 1);\n length_1 = temp.length;\n }\n var len = count - 1;\n for (var i = 0; i < data.length; i++) {\n if (!(i < len)) {\n pointCollection.push(this.getDataPoint(data[i].x, Number(values[i - len]), data[i], sourceSeries, pointCollection.length));\n data[i].y = Number((values[i - len]));\n }\n }\n }\n return pointCollection;\n };\n /**\n * Calculates the period line values.\n * @private\n */\n StochasticIndicator.prototype.calculatePeriod = function (period, kPeriod, data, series) {\n var lowValues = [];\n var highValues = [];\n var closeValues = [];\n var modifiedSource = [];\n for (var j = 0; j < data.length; j++) {\n lowValues[j] = data[j].low;\n highValues[j] = data[j].high;\n closeValues[j] = data[j].close;\n }\n if (data.length > period) {\n var totalPeriod = period + kPeriod;\n var mins = [];\n var maxs = [];\n for (var i = 0; i < period - 1; ++i) {\n maxs.push(0);\n mins.push(0);\n modifiedSource.push(this.getDataPoint(data[i].x, data[i].close, data[i], series, modifiedSource.length));\n }\n for (var i = period - 1; i < data.length; ++i) {\n var min = Number.MAX_VALUE;\n var max = Number.MIN_VALUE;\n for (var j = 0; j < period; ++j) {\n min = Math.min(min, lowValues[i - j]);\n max = Math.max(max, highValues[i - j]);\n }\n maxs.push(max);\n mins.push(min);\n }\n for (var i = period - 1; i < data.length; ++i) {\n var top_1 = 0;\n var bottom = 0;\n top_1 += closeValues[i] - mins[i];\n bottom += maxs[i] - mins[i];\n modifiedSource.push(this.getDataPoint(data[i].x, (top_1 / bottom) * 100, data[i], series, modifiedSource.length));\n }\n }\n return modifiedSource;\n };\n /**\n * To destroy the Stocastic Indicator.\n * @return {void}\n * @private\n */\n StochasticIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the stochastic indicator\n */\n };\n /**\n * Get module name.\n */\n StochasticIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the indicator.\n */\n return 'StochasticIndicator';\n };\n return StochasticIndicator;\n}(TechnicalAnalysis));\nexport { StochasticIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `BollingerBands` module is used to render bollinger band indicator.\n */\nvar BollingerBands = /** @class */ (function (_super) {\n __extends(BollingerBands, _super);\n function BollingerBands() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the series collection to represent bollinger band\n */\n BollingerBands.prototype.initSeriesCollection = function (indicator, chart) {\n indicator.targetSeries = [];\n var rangeArea = new Series(indicator, 'targetSeries', {}, true);\n rangeArea.type = 'RangeArea';\n if (indicator.bandColor !== 'transparent' && indicator.bandColor !== 'none') {\n this.setSeriesProperties(rangeArea, indicator, 'BollingerBand', indicator.bandColor, 0, chart);\n }\n var signalLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(signalLine, indicator, 'SignalLine', indicator.fill, indicator.width, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n var lowerLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(lowerLine, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n };\n /**\n * Defines the predictions using Bollinger Band Approach\n * @private\n */\n BollingerBands.prototype.initDataSource = function (indicator, chart) {\n var enableBand = indicator.bandColor !== 'transparent' && indicator.bandColor !== 'none';\n var start = enableBand ? 1 : 0;\n var signalCollection = [];\n var upperCollection = [];\n var lowerCollection = [];\n var bandCollection = [];\n var upperSeries = indicator.targetSeries[start + 1];\n var lowerSeries = indicator.targetSeries[start + 2];\n var signalSeries = indicator.targetSeries[start];\n var rangeAreaSeries = enableBand ? indicator.targetSeries[0] : null;\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n var sum = 0;\n var deviationSum = 0;\n var multiplier = indicator.standardDeviation;\n var limit = validData.length;\n var length_1 = Math.round(indicator.period);\n var smaPoints = [];\n var deviations = [];\n var bollingerPoints = [];\n for (var i_1 = 0; i_1 < length_1; i_1++) {\n sum += Number(validData[i_1].close);\n }\n var sma = sum / indicator.period;\n for (var i_2 = 0; i_2 < limit; i_2++) {\n var y = Number(validData[i_2].close);\n if (i_2 >= length_1 - 1 && i_2 < limit) {\n if (i_2 - indicator.period >= 0) {\n var diff = y - Number(validData[i_2 - length_1].close);\n sum = sum + diff;\n sma = sum / (indicator.period);\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2] - deviations[i_2 - length_1];\n }\n else {\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2];\n }\n var range = Math.sqrt(deviationSum / (indicator.period));\n var lowerBand = smaPoints[i_2] - (multiplier * range);\n var upperBand = smaPoints[i_2] + (multiplier * range);\n if (i_2 + 1 === length_1) {\n for (var j_1 = 0; j_1 < length_1 - 1; j_1++) {\n bollingerPoints[j_1] = {\n 'X': validData[j_1].x, 'mb': smaPoints[i_2],\n 'lb': lowerBand, 'ub': upperBand, visible: true\n };\n }\n }\n bollingerPoints[i_2] = {\n 'X': validData[i_2].x, 'mb': smaPoints[i_2],\n 'lb': lowerBand, 'ub': upperBand, visible: true\n };\n }\n else {\n if (i_2 < indicator.period - 1) {\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2];\n }\n }\n }\n var i = -1;\n var j = -1;\n for (var k = 0; k < limit; k++) {\n if (k >= (length_1 - 1)) {\n var ub = 'ub';\n var lb = 'lb';\n var mb = 'mb';\n upperCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][ub], validData[k], upperSeries, upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][lb], validData[k], lowerSeries, lowerCollection.length));\n signalCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][mb], validData[k], signalSeries, signalCollection.length));\n if (enableBand) {\n bandCollection.push(this.getRangePoint(validData[k].x, upperCollection[++i].y, lowerCollection[++j].y, validData[k], rangeAreaSeries, bandCollection.length));\n }\n }\n }\n }\n if (enableBand) {\n this.setSeriesRange(bandCollection, indicator, indicator.targetSeries[0]);\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[start]);\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[start + 1]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[start + 2]);\n };\n /**\n * To destroy the Bollinger Band.\n * @return {void}\n * @private\n */\n BollingerBands.prototype.destroy = function (chart) {\n /**\n * Destroys the bollinger band\n */\n };\n /**\n * Get module name.\n */\n BollingerBands.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'BollingerBandsIndicator';\n };\n return BollingerBands;\n}(TechnicalAnalysis));\nexport { BollingerBands };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `MacdIndicator` module is used to render MACD indicator.\n */\nvar MacdIndicator = /** @class */ (function (_super) {\n __extends(MacdIndicator, _super);\n function MacdIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series to represent the MACD indicator\n * @private\n */\n MacdIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n if (indicator.macdType === 'Line' || indicator.macdType === 'Both') {\n var macdSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(macdSeries, indicator, 'MacdLine', indicator.macdLine.color, indicator.macdLine.width, chart);\n }\n if (indicator.macdType === 'Histogram' || indicator.macdType === 'Both') {\n var histogramSeries = new Series(indicator, 'targetSeries', {}, true);\n histogramSeries.type = 'Column';\n this.setSeriesProperties(histogramSeries, indicator, 'Histogram', indicator.macdPositiveColor, indicator.width, chart);\n }\n };\n /**\n * Defines the predictions using MACD approach\n * @private\n */\n MacdIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var fastPeriod = indicator.fastPeriod;\n var slowPeriod = indicator.slowPeriod;\n var trigger = indicator.period;\n var length = fastPeriod + trigger;\n var macdCollection = [];\n var histogramCollection = [];\n var validData = indicator.points;\n var signalSeries = indicator.targetSeries[0];\n var histogramSeries;\n var macdLineSeries;\n if (indicator.macdType === 'Histogram') {\n histogramSeries = indicator.targetSeries[1];\n }\n else {\n macdLineSeries = indicator.targetSeries[1];\n if (indicator.macdType === 'Both') {\n histogramSeries = indicator.targetSeries[2];\n }\n }\n if (validData && length < validData.length && slowPeriod <= fastPeriod &&\n slowPeriod > 0 && (length - 2) >= 0) {\n var shortEMA = this.calculateEMAValues(slowPeriod, validData, 'close');\n var longEMA = this.calculateEMAValues(fastPeriod, validData, 'close');\n var macdValues = this.getMACDVales(indicator, shortEMA, longEMA);\n macdCollection = this.getMACDPoints(indicator, macdValues, validData, macdLineSeries || signalSeries);\n var signalEMA = this.calculateEMAValues(trigger, macdCollection, 'y');\n signalCollection = this.getSignalPoints(indicator, signalEMA, validData, signalSeries);\n if (histogramSeries) {\n histogramCollection = this.getHistogramPoints(indicator, macdValues, signalEMA, validData, histogramSeries);\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n if (histogramSeries) {\n this.setSeriesRange(histogramCollection, indicator, histogramSeries);\n }\n if (macdLineSeries) {\n this.setSeriesRange(macdCollection, indicator, macdLineSeries);\n }\n };\n /**\n * Calculates the EMA values for the given period\n */\n MacdIndicator.prototype.calculateEMAValues = function (period, validData, field) {\n var sum = 0;\n var initialEMA = 0;\n var emaValues = [];\n var emaPercent = (2 / (period + 1));\n for (var i = 0; i < period; i++) {\n sum += Number(validData[i][field]);\n }\n initialEMA = (sum / period);\n emaValues.push(initialEMA);\n var emaAvg = initialEMA;\n for (var j = period; j < validData.length; j++) {\n emaAvg = (Number(validData[j][field]) - emaAvg) * emaPercent + emaAvg;\n emaValues.push(emaAvg);\n }\n return emaValues;\n };\n /**\n * Defines the MACD Points\n */\n MacdIndicator.prototype.getMACDPoints = function (indicator, macdPoints, validData, series) {\n var macdCollection = [];\n var dataMACDIndex = indicator.fastPeriod - 1;\n var macdIndex = 0;\n while (dataMACDIndex < validData.length) {\n macdCollection.push(this.getDataPoint(validData[dataMACDIndex].x, macdPoints[macdIndex], validData[dataMACDIndex], series, macdCollection.length));\n dataMACDIndex++;\n macdIndex++;\n }\n return macdCollection;\n };\n /**\n * Calculates the signal points\n */\n MacdIndicator.prototype.getSignalPoints = function (indicator, signalEma, validData, series) {\n var dataSignalIndex = indicator.fastPeriod + indicator.period - 2;\n var signalIndex = 0;\n var signalCollection = [];\n while (dataSignalIndex < validData.length) {\n signalCollection.push(this.getDataPoint(validData[dataSignalIndex].x, signalEma[signalIndex], validData[dataSignalIndex], series, signalCollection.length));\n dataSignalIndex++;\n signalIndex++;\n }\n return signalCollection;\n };\n /**\n * Calculates the MACD values\n */\n MacdIndicator.prototype.getMACDVales = function (indicator, shortEma, longEma) {\n var macdPoints = [];\n var diff = indicator.fastPeriod - indicator.slowPeriod;\n for (var i = 0; i < longEma.length; i++) {\n macdPoints.push((shortEma[i + diff] - longEma[i]));\n }\n return macdPoints;\n };\n /**\n * Calculates the Histogram Points\n */\n MacdIndicator.prototype.getHistogramPoints = function (indicator, macdPoints, signalEma, validData, series) {\n var dataHistogramIndex = indicator.fastPeriod + indicator.period - 2;\n var histogramIndex = 0;\n var histogramCollection = [];\n while (dataHistogramIndex < validData.length) {\n histogramCollection.push(this.getDataPoint(validData[dataHistogramIndex].x, macdPoints[histogramIndex + (indicator.period - 1)] - signalEma[histogramIndex], validData[dataHistogramIndex], series, histogramCollection.length, indicator));\n dataHistogramIndex++;\n histogramIndex++;\n }\n return histogramCollection;\n };\n /**\n * To destroy the MACD Indicator.\n * @return {void}\n * @private\n */\n MacdIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the MACD indicator\n */\n };\n /**\n * Get module name.\n */\n MacdIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MacdIndicator';\n };\n return MacdIndicator;\n}(TechnicalAnalysis));\nexport { MacdIndicator };\n","import { Series, Points } from '../series/chart-series';\nimport { findClipRect, RectOption } from '../../common/utils/helper';\n/**\n * `Trendline` module is used to render 6 types of trendlines in chart.\n */\nvar Trendlines = /** @class */ (function () {\n function Trendlines() {\n }\n /**\n * Defines the collection of series, that are used to represent a trendline\n * @private\n */\n Trendlines.prototype.initSeriesCollection = function (trendline, chart) {\n var trendLineSeries = new Series(trendline, 'targetSeries', {}, true);\n if (trendline.type === 'Linear' || trendline.type === 'MovingAverage') {\n trendLineSeries.type = 'Line';\n }\n else {\n trendLineSeries.type = 'Spline';\n }\n this.setSeriesProperties(trendLineSeries, trendline, trendline.type, trendline.fill, trendline.width, chart);\n };\n /**\n * Initializes the properties of the trendline series\n */\n Trendlines.prototype.setSeriesProperties = function (series, trendline, name, fill, width, chart) {\n series.name = trendline.name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || 'blue';\n series.width = width;\n series.clipRectElement = trendline.clipRectElement;\n series.points = [];\n series.enableTooltip = trendline.enableTooltip;\n series.index = trendline.index;\n series.sourceIndex = trendline.sourceIndex;\n series.interior = series.fill;\n series.animation = trendline.animation;\n series.legendShape = 'HorizontalLine';\n series.marker = trendline.marker;\n series.category = 'TrendLine';\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n trendline.targetSeries = series;\n };\n /**\n * Creates the elements of a trendline\n */\n Trendlines.prototype.createTrendLineElements = function (chart, trendline, index, element, clipRectElement) {\n trendline.trendLineElement = element;\n trendline.targetSeries.clipRectElement = clipRectElement;\n trendline.targetSeries.seriesElement = element;\n chart.trendLineElements.appendChild(trendline.trendLineElement);\n };\n /**\n * Defines the data point of trendline\n */\n Trendlines.prototype.getDataPoint = function (x, y, sourcePoint, series, index) {\n var trendPoint = new Points();\n trendPoint.x = x;\n trendPoint.y = y;\n trendPoint.xValue = Number(x);\n trendPoint.color = series.fill;\n trendPoint.index = index;\n trendPoint.yValue = Number(y);\n trendPoint.visible = true;\n series.xMin = Math.min(series.xMin, trendPoint.xValue);\n series.yMin = Math.min(series.yMin, trendPoint.yValue);\n series.xMax = Math.max(series.xMax, trendPoint.xValue);\n series.yMax = Math.max(series.yMax, trendPoint.yValue);\n series.xData.push(trendPoint.xValue);\n return trendPoint;\n };\n /**\n * Finds the slope and intercept of trendline\n */\n Trendlines.prototype.findSlopeIntercept = function (xValues, yValues, trendline, points) {\n var xAvg = 0;\n var yAvg = 0;\n var xyAvg = 0;\n var xxAvg = 0;\n var yyAvg = 0;\n var index = 0;\n var slope = 0;\n var intercept = 0;\n while (index < points.length) {\n xAvg += xValues[index];\n yAvg += yValues[index];\n xyAvg += xValues[index] * yValues[index];\n xxAvg += xValues[index] * xValues[index];\n yyAvg += yValues[index] * yValues[index];\n index++;\n }\n var type = trendline.type;\n if (trendline.intercept && (type === 'Linear' || type === 'Exponential')) {\n intercept = trendline.intercept;\n switch (type) {\n case 'Linear':\n slope = ((xyAvg) - (trendline.intercept * xAvg)) / xxAvg;\n break;\n case 'Exponential':\n slope = ((xyAvg) - (Math.log(Math.abs(trendline.intercept)) * xAvg)) / xxAvg;\n break;\n }\n }\n else {\n slope = ((points.length * xyAvg) - (xAvg * yAvg)) / ((points.length * xxAvg) - (xAvg * xAvg));\n if (type === 'Exponential' || type === 'Power') {\n intercept = Math.exp((yAvg - (slope * xAvg)) / points.length);\n }\n else {\n intercept = (yAvg - (slope * xAvg)) / points.length;\n }\n }\n return { slope: slope, intercept: intercept };\n };\n /**\n * Defines the points to draw the trendlines\n */\n Trendlines.prototype.initDataSource = function (trendline, chart) {\n var points = trendline.points;\n if (points && points.length) {\n //prepare data\n var trendlineSeries = trendline.targetSeries;\n switch (trendline.type) {\n case 'Linear':\n this.setLinearRange(points, trendline, trendlineSeries);\n break;\n case 'Exponential':\n this.setExponentialRange(points, trendline, trendlineSeries);\n break;\n case 'MovingAverage':\n this.setMovingAverageRange(points, trendline, trendlineSeries);\n break;\n case 'Polynomial':\n this.setPolynomialRange(points, trendline, trendlineSeries);\n break;\n case 'Power':\n this.setPowerRange(points, trendline, trendlineSeries);\n break;\n case 'Logarithmic':\n this.setLogarithmicRange(points, trendline, trendlineSeries);\n break;\n }\n if (trendline.type !== 'Linear' && trendline.type !== 'MovingAverage') {\n trendlineSeries.chart.splineSeriesModule.findSplinePoint(trendlineSeries);\n }\n }\n };\n /**\n * Calculation of exponential points\n */\n Trendlines.prototype.setExponentialRange = function (points, trendline, series) {\n var xValue = [];\n var yValue = [];\n var index = 0;\n var slopeIntercept;\n while (index < points.length) {\n var point = points[index];\n xValue.push(point.xValue);\n yValue.push(Math.log(point.yValue));\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValue, yValue, trendline, points);\n series.points = this.getExponentialPoints(trendline, points, xValue, yValue, series, slopeIntercept);\n };\n /**\n * Calculation of logarithmic points\n */\n Trendlines.prototype.setLogarithmicRange = function (points, trendline, series) {\n var xLogValue = [];\n var yLogValue = [];\n var xPointsLgr = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPointsLgr.push(point.xValue);\n xLogValue.push(Math.log(point.xValue));\n yLogValue.push(point.yValue);\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xLogValue, yLogValue, trendline, points);\n series.points = this.getLogarithmicPoints(trendline, points, xPointsLgr, yLogValue, series, slopeIntercept);\n };\n /**\n * Calculation of polynomial points\n */\n Trendlines.prototype.setPolynomialRange = function (points, trendline, series) {\n var xPolyValues = [];\n var yPolyValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPolyValues.push(point.xValue);\n yPolyValues.push(point.yValue);\n index++;\n }\n series.points = this.getPolynomialPoints(trendline, points, xPolyValues, yPolyValues, series);\n };\n /**\n * Calculation of power points\n */\n Trendlines.prototype.setPowerRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var powerPoints = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n powerPoints.push(point.xValue);\n xValues.push(Math.log(point.xValue));\n yValues.push(Math.log(point.yValue));\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getPowerPoints(trendline, points, powerPoints, yValues, series, slopeIntercept);\n };\n /**\n * Calculation of linear points\n */\n Trendlines.prototype.setLinearRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xValues.push(point.xValue);\n yValues.push(point.yValue);\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getLinearPoints(trendline, points, xValues, yValues, series, slopeIntercept);\n };\n /**\n * Calculation of moving average points\n */\n Trendlines.prototype.setMovingAverageRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var xAvgValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xAvgValues.push(point.xValue);\n xValues.push(index + 1);\n yValues.push(point.yValue);\n index++;\n }\n series.points = this.getMovingAveragePoints(trendline, points, xAvgValues, yValues, series);\n };\n /**\n * Calculation of logarithmic points\n */\n Trendlines.prototype.getLogarithmicPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLog) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1Log = xValues[0] - trendline.backwardForecast;\n var y1Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x1Log));\n var x2Log = xValues[midPoint - 1];\n var y2Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x2Log));\n var x3Log = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x3Log));\n pts.push(this.getDataPoint(x1Log, y1Log, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2Log, y2Log, points[midPoint - 1], series, pts.length));\n pts.push(this.getDataPoint(x3Log, y3Log, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Defines the points based on data point\n */\n Trendlines.prototype.getPowerPoints = function (trendline, points, xValues, yValues, series, slopeInterceptPower) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n x1 = x1 > -1 ? x1 : 0;\n var y1 = slopeInterceptPower.intercept * Math.pow(x1, slopeInterceptPower.slope);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptPower.intercept * Math.pow(x2, slopeInterceptPower.slope);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptPower.intercept * Math.pow(x3, slopeInterceptPower.slope);\n pts.push(this.getDataPoint(x1, y1, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2, y2, points[midPoint - 1], series, pts.length));\n pts.push(this.getDataPoint(x3, y3, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Get the polynomial points based on polynomial slopes\n */\n Trendlines.prototype.getPolynomialPoints = function (trendline, points, xValues, yValues, series) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var polynomialOrder = points.length <= trendline.polynomialOrder ? points.length : trendline.polynomialOrder;\n polynomialOrder = Math.max(2, polynomialOrder);\n polynomialOrder = Math.min(6, polynomialOrder);\n trendline.polynomialOrder = polynomialOrder;\n trendline.polynomialSlopes = [];\n trendline.polynomialSlopes.length = trendline.polynomialOrder + 1;\n var index = 0;\n while (index < xValues.length) {\n var xVal = xValues[index];\n var yVal = yValues[index];\n var subIndex = 0;\n while (subIndex <= trendline.polynomialOrder) {\n if (!trendline.polynomialSlopes[subIndex]) {\n trendline.polynomialSlopes[subIndex] = 0;\n }\n trendline.polynomialSlopes[subIndex] += Math.pow(xVal, subIndex) * yVal;\n ++subIndex;\n }\n index++;\n }\n var numArray = [];\n numArray.length = 1 + 2 * trendline.polynomialOrder;\n var matrix = [];\n matrix.length = trendline.polynomialOrder + 1;\n var newIndex = 0;\n while (newIndex < (trendline.polynomialOrder + 1)) {\n matrix[newIndex] = [];\n matrix[newIndex].length = 3;\n newIndex++;\n }\n var nIndex = 0;\n var num1 = 0;\n while (nIndex < xValues.length) {\n var d = xValues[nIndex];\n var num2 = 1.0;\n var nIndex2 = 0;\n while (nIndex2 < numArray.length) {\n if (!numArray[nIndex2]) {\n numArray[nIndex2] = 0;\n }\n numArray[nIndex2] += num2;\n num2 *= d;\n ++num1;\n ++nIndex2;\n }\n ++nIndex;\n }\n var nnIndex = 0;\n while (nnIndex <= trendline.polynomialOrder) {\n var nnIndex2 = 0;\n while (nnIndex2 <= trendline.polynomialOrder) {\n matrix[nnIndex][nnIndex2] = numArray[nnIndex + nnIndex2];\n ++nnIndex2;\n }\n ++nnIndex;\n }\n if (!this.gaussJordanElimination(matrix, trendline.polynomialSlopes)) {\n trendline.polynomialSlopes = null;\n }\n pts = this.getPoints(trendline, points, xValues, yValues, series);\n return pts;\n };\n /**\n * Defines the moving average points\n */\n Trendlines.prototype.getMovingAveragePoints = function (trendline, points, xValues, yValues, series) {\n var pts = [];\n var period = trendline.period >= points.length ? points.length - 1 : trendline.period;\n period = Math.max(2, period);\n var index = 0;\n var y;\n var x;\n var count;\n var nullCount;\n while (index < points.length - 1) {\n y = count = nullCount = 0;\n for (var j = index; count < period; j++) {\n count++;\n if (!yValues[j]) {\n nullCount++;\n }\n y += yValues[j];\n }\n y = period - nullCount <= 0 ? null : y / (period - nullCount);\n if (y && !isNaN(y)) {\n x = xValues[period - 1 + index];\n pts.push(this.getDataPoint(x, y, points[period - 1 + index], series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Defines the linear points\n */\n Trendlines.prototype.getLinearPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLinear) {\n var pts = [];\n var x1Linear = xValues[0] - trendline.backwardForecast;\n var y1Linear = slopeInterceptLinear.slope * x1Linear + slopeInterceptLinear.intercept;\n var x2Linear = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y2Linear = slopeInterceptLinear.slope * x2Linear + slopeInterceptLinear.intercept;\n pts.push(this.getDataPoint(x1Linear, y1Linear, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2Linear, y2Linear, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Defines the exponential points\n */\n Trendlines.prototype.getExponentialPoints = function (trendline, points, xValues, yValues, series, slopeInterceptExp) {\n var midPoint = Math.round((points.length / 2));\n var ptsExp = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n var y1 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x1);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x2);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x3);\n ptsExp.push(this.getDataPoint(x1, y1, points[0], series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x2, y2, points[midPoint - 1], series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x3, y3, points[points.length - 1], series, ptsExp.length));\n return ptsExp;\n };\n /**\n * Defines the points based on data point\n */\n Trendlines.prototype.getPoints = function (trendline, points, xValues, yValues, series) {\n var midPoint = Math.round((points.length / 2));\n var polynomialSlopes = trendline.polynomialSlopes;\n var pts = [];\n var x1 = 1;\n var index = 1;\n var xValue;\n var yValue;\n while (index <= polynomialSlopes.length) {\n if (index === 1) {\n xValue = xValues[0] - trendline.backwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[0], series, pts.length));\n }\n else if (index === polynomialSlopes.length) {\n xValue = xValues[points.length - 1] + trendline.forwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[points.length - 1], series, pts.length));\n }\n else {\n x1 += (points.length + trendline.forwardForecast) / polynomialSlopes.length;\n xValue = xValues[parseInt(x1.toString(), 10) - 1];\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[parseInt(x1.toString(), 10) - 1], series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Defines the polynomial value of y\n */\n Trendlines.prototype.getPolynomialYValue = function (slopes, x) {\n var sum = 0;\n var index = 0;\n while (index < slopes.length) {\n sum += slopes[index] * Math.pow(x, index);\n index++;\n }\n return sum;\n };\n /**\n * Defines the gauss jordan elimination\n */\n Trendlines.prototype.gaussJordanElimination = function (matrix, polynomialSlopes) {\n var length = matrix.length;\n var numArray1 = [];\n var numArray2 = [];\n var numArray3 = [];\n numArray1.length = length;\n numArray2.length = length;\n numArray3.length = length;\n var index = 0;\n while (index < length) {\n numArray3[index] = 0;\n ++index;\n }\n var index1 = 0;\n while (index1 < length) {\n var num1 = 0;\n var index2 = 0;\n var index3 = 0;\n var index4 = 0;\n while (index4 < length) {\n if (numArray3[index4] !== 1) {\n var index5 = 0;\n while (index5 < length) {\n if (numArray3[index5] === 0 && Math.abs(matrix[index4][index5]) >= num1) {\n num1 = Math.abs(matrix[index4][index5]);\n index2 = index4;\n index3 = index5;\n }\n ++index5;\n }\n }\n ++index4;\n }\n ++numArray3[index3];\n if (index2 !== index3) {\n var index4_1 = 0;\n while (index4_1 < length) {\n var num2 = matrix[index2][index4_1];\n matrix[index2][index4_1] = matrix[index3][index4_1];\n matrix[index3][index4_1] = num2;\n ++index4_1;\n }\n var num3 = polynomialSlopes[index2];\n polynomialSlopes[index2] = polynomialSlopes[index3];\n polynomialSlopes[index3] = num3;\n }\n numArray2[index1] = index2;\n numArray1[index1] = index3;\n if (matrix[index3][index3] === 0.0) {\n return false;\n }\n var num4 = 1.0 / matrix[index3][index3];\n matrix[index3][index3] = 1.0;\n var iindex4 = 0;\n while (iindex4 < length) {\n matrix[index3][iindex4] *= num4;\n ++iindex4;\n }\n polynomialSlopes[index3] *= num4;\n var iandex4 = 0;\n while (iandex4 < length) {\n if (iandex4 !== index3) {\n var num2 = matrix[iandex4][index3];\n matrix[iandex4][index3] = 0.0;\n var index5 = 0;\n while (index5 < length) {\n matrix[iandex4][index5] -= matrix[index3][index5] * num2;\n ++index5;\n }\n polynomialSlopes[iandex4] -= polynomialSlopes[index3] * num2;\n }\n ++iandex4;\n }\n ++index1;\n }\n var iindex1 = length - 1;\n while (iindex1 >= 0) {\n if (numArray2[iindex1] !== numArray1[iindex1]) {\n var iindex2 = 0;\n while (iindex2 < length) {\n var num = matrix[iindex2][numArray2[iindex1]];\n matrix[iindex2][numArray2[iindex1]] = matrix[iindex2][numArray1[iindex1]];\n matrix[iindex2][numArray1[iindex1]] = num;\n ++iindex2;\n }\n }\n --iindex1;\n }\n return true;\n };\n /**\n * Defines the trendline elements\n */\n Trendlines.prototype.getTrendLineElements = function (series, chart) {\n findClipRect(series);\n var clipRect = series.clipRect;\n var clipRectElement = chart.renderer.drawClipPath(new RectOption(chart.element.id + '_ChartTrendlineClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height,\n }));\n var element;\n element = chart.renderer.createGroup({\n 'id': chart.element.id + 'TrendlineSeriesGroup' + series.index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartTrendlineClipRect_' + series.index + ')'\n });\n //defines the clip rect element\n element.appendChild(clipRectElement);\n for (var _i = 0, _a = series.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n this.createTrendLineElements(chart, trendline, trendline.index, element, clipRectElement);\n }\n };\n /**\n * To destroy the trendline\n */\n Trendlines.prototype.destroy = function (chart) {\n /**\n * Destroys the Linear Trendline\n */\n };\n /**\n * Get module name\n */\n Trendlines.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'TrendLine';\n };\n return Trendlines;\n}());\nexport { Trendlines };\n","import { Animation, Browser } from '@syncfusion/ej2-base';\nimport { measureText, findDirection, textElement, getValueXByPoint, stopTimer, getValueYByPoint, TextOption, Rect, ChartLocation, PathOption, withInBounds, removeElement } from '../../common/utils/helper';\n/**\n * `Crosshair` module is used to render the crosshair for chart.\n */\nvar Crosshair = /** @class */ (function () {\n /**\n * Constructor for crosshair module.\n * @private\n */\n function Crosshair(chart) {\n this.arrowLocation = new ChartLocation(0, 0);\n this.rx = 2;\n this.ry = 2;\n this.chart = chart;\n this.elementID = this.chart.element.id;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n Crosshair.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n this.chart.on('tapHold', this.longPress, this);\n };\n Crosshair.prototype.mouseUpHandler = function () {\n if (this.chart.startMove) {\n this.removeCrosshair(2000);\n }\n };\n Crosshair.prototype.mouseLeaveHandler = function () {\n this.removeCrosshair(1000);\n };\n Crosshair.prototype.mouseMoveHandler = function (event) {\n var chart = this.chart;\n if (event.type === 'touchmove' && (Browser.isIos || Browser.isIos7) && chart.startMove && event.preventDefault) {\n event.preventDefault();\n }\n // Tooltip for chart series.\n if (!chart.disableTrackTooltip) {\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n if (chart.startMove || !chart.isTouch) {\n this.crosshair();\n }\n }\n else {\n this.removeCrosshair(1000);\n }\n }\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Crosshair.prototype.longPress = function () {\n var chart = this.chart;\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n this.crosshair();\n }\n return false;\n };\n /**\n * Renders the crosshair.\n * @return {void}\n */\n Crosshair.prototype.crosshair = function () {\n var chart = this.chart;\n var horizontalCross = '';\n var verticalCross = '';\n var options;\n var crosshair = chart.crosshair;\n var chartRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var crossGroup = document.getElementById(this.elementID + '_UserInteraction');\n this.stopAnimation();\n if (chart.tooltip.enable && !withInBounds(chart.tooltipModule.valueX, chart.tooltipModule.valueY, chartRect)) {\n return null;\n }\n this.valueX = chart.tooltip.enable ? chart.tooltipModule.valueX : chart.mouseX;\n this.valueY = chart.tooltip.enable ? chart.tooltipModule.valueY : chart.mouseY;\n crossGroup.setAttribute('opacity', '1');\n if (crosshair.lineType === 'Both' || crosshair.lineType === 'Horizontal') {\n horizontalCross += 'M ' + chartRect.x + ' ' + this.valueY +\n ' L ' + (chartRect.x + chartRect.width) + ' ' + this.valueY;\n }\n if (crosshair.lineType === 'Both' || crosshair.lineType === 'Vertical') {\n verticalCross += 'M ' + this.valueX + ' ' + chartRect.y +\n ' L ' + this.valueX + ' ' + (chartRect.y + chartRect.height);\n }\n if (crossGroup.childNodes.length === 0) {\n var axisTooltipGroup = chart.renderer.createGroup({ 'id': this.elementID + '_crosshair_axis' });\n options = new PathOption(this.elementID + '_HorizontalLine', 'none', crosshair.line.width, crosshair.line.color || chart.themeStyle.crosshairLine, 1, null, horizontalCross);\n this.renderCrosshairLine(options, crossGroup);\n options.d = verticalCross;\n options.id = this.elementID + '_VerticalLine';\n this.renderCrosshairLine(options, crossGroup);\n crossGroup.appendChild(axisTooltipGroup);\n this.renderAxisTooltip(chart, chartRect, crossGroup.lastChild);\n }\n else {\n document.getElementById(this.elementID + '_HorizontalLine').setAttribute('d', horizontalCross);\n document.getElementById(this.elementID + '_VerticalLine').setAttribute('d', verticalCross);\n this.renderAxisTooltip(chart, chartRect, crossGroup.lastChild);\n }\n };\n Crosshair.prototype.renderCrosshairLine = function (options, crossGroup) {\n var htmlObject = this.chart.renderer.drawPath(options);\n crossGroup.appendChild(htmlObject);\n };\n Crosshair.prototype.renderAxisTooltip = function (chart, chartRect, axisGroup) {\n var axis;\n var text;\n var rect;\n var pathElement;\n var textElem;\n var options;\n var padding = 5;\n var direction;\n var axisRect;\n for (var k = 0, length_1 = chart.axisCollections.length; k < length_1; k++) {\n axis = chart.axisCollections[k];\n axisRect = !axis.placeNextToAxisLine ? axis.rect : axis.updatedRect;\n if (axis.crosshairTooltip.enable) {\n if ((this.valueX <= (axisRect.x + axisRect.width) && axisRect.x <= this.valueX) ||\n (this.valueY <= (axisRect.y + axisRect.height) && axisRect.y <= this.valueY)) {\n pathElement = document.getElementById(this.elementID + '_axis_tooltip_' + k);\n textElem = document.getElementById(this.elementID + '_axis_tooltip_text_' + k);\n text = this.getAxisText(axis);\n if (!text) {\n continue;\n }\n rect = this.tooltipLocation(text, axis, chartRect, axisRect);\n if (pathElement === null) {\n pathElement = chart.renderer.drawPath({\n 'id': this.elementID + '_axis_tooltip_' + k,\n 'fill': axis.crosshairTooltip.fill || chart.themeStyle.crosshairFill\n });\n axisGroup.appendChild(pathElement);\n options = new TextOption(this.elementID + '_axis_tooltip_text_' + k, 0, 0, 'start', text);\n textElem = textElement(options, axis.crosshairTooltip.textStyle, axis.crosshairTooltip.textStyle.color || chart.themeStyle.crosshairLabel, axisGroup);\n }\n direction = findDirection(this.rx, this.ry, rect, this.arrowLocation, 10, this.isTop, this.isBottom, this.isLeft, this.valueX, this.valueY);\n pathElement.setAttribute('d', direction);\n textElem.textContent = text;\n textElem.setAttribute('x', (rect.x + padding).toString());\n textElem.setAttribute('y', (rect.y + padding + 3 * this.elementSize.height / 4).toString());\n }\n else {\n removeElement(this.elementID + '_axis_tooltip_' + k);\n removeElement(this.elementID + '_axis_tooltip_text_' + k);\n }\n }\n }\n };\n Crosshair.prototype.getAxisText = function (axis) {\n var value;\n this.isBottom = false;\n this.isTop = false;\n this.isLeft = false;\n this.isRight = false;\n var labelValue = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks')\n ? 0.5 : 0;\n if (axis.orientation === 'Horizontal') {\n value = getValueXByPoint(Math.abs(this.valueX - axis.rect.x), axis.rect.width, axis) + labelValue;\n this.isBottom = !axis.opposedPosition;\n this.isTop = axis.opposedPosition;\n }\n else {\n value = getValueYByPoint(Math.abs(this.valueY - axis.rect.y), axis.rect.height, axis) + labelValue;\n this.isRight = axis.opposedPosition;\n this.isLeft = !axis.opposedPosition;\n }\n if (axis.valueType === 'DateTime') {\n return axis.format(new Date(value));\n }\n else if (axis.valueType === 'Category') {\n return axis.labels[Math.floor(value)];\n }\n else if (axis.valueType === 'Logarithmic') {\n return value = axis.format(Math.pow(axis.logBase, value));\n }\n else {\n var customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n return customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(value)) : axis.format(value);\n }\n };\n Crosshair.prototype.tooltipLocation = function (text, axis, bounds, axisRect) {\n var isBottom = false;\n var isLeft = false;\n var padding = 5;\n var arrowPadding = 10;\n var tooltipRect;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n var islabelInside = axis.labelPosition === 'Inside';\n this.elementSize = measureText(text, axis.crosshairTooltip.textStyle);\n if (axis.orientation === 'Horizontal') {\n var yLocation = islabelInside ? axisRect.y - this.elementSize.height - (padding * 2 + arrowPadding) : axisRect.y;\n var height = islabelInside ? axisRect.y - this.elementSize.height - arrowPadding : axisRect.y + arrowPadding;\n this.arrowLocation = new ChartLocation(this.valueX, yLocation);\n tooltipRect = new Rect((this.valueX - (this.elementSize.width / 2) - padding), height, this.elementSize.width + padding * 2, this.elementSize.height + padding * 2);\n if (axis.opposedPosition) {\n tooltipRect.y = islabelInside ? axisRect.y : axisRect.y - (this.elementSize.height + padding * 2 + arrowPadding);\n }\n if (tooltipRect.x < boundsX) {\n tooltipRect.x = boundsX;\n }\n if (tooltipRect.x + tooltipRect.width > boundsX + bounds.width) {\n tooltipRect.x -= ((tooltipRect.x + tooltipRect.width) - (boundsX + bounds.width));\n }\n if (this.arrowLocation.x + arrowPadding / 2 > tooltipRect.x + tooltipRect.width - this.rx) {\n this.arrowLocation.x = tooltipRect.x + tooltipRect.width - this.rx - arrowPadding / 2;\n }\n if (this.arrowLocation.x - arrowPadding / 2 < tooltipRect.x + this.rx) {\n this.arrowLocation.x = tooltipRect.x + this.rx + arrowPadding / 2;\n }\n }\n else {\n this.arrowLocation = new ChartLocation(axisRect.x, this.valueY);\n var width = islabelInside ? axisRect.x : axisRect.x - (this.elementSize.width) - (padding * 2 + arrowPadding);\n tooltipRect = new Rect(width, this.valueY - (this.elementSize.height / 2) - padding, this.elementSize.width + (padding * 2), this.elementSize.height + padding * 2);\n if (axis.opposedPosition) {\n tooltipRect.x = islabelInside ? axisRect.x - this.elementSize.width - arrowPadding : axisRect.x + arrowPadding;\n if ((tooltipRect.x + tooltipRect.width) > this.chart.availableSize.width) {\n this.arrowLocation.x -= ((tooltipRect.x + tooltipRect.width) - this.chart.availableSize.width);\n tooltipRect.x -= ((tooltipRect.x + tooltipRect.width) - this.chart.availableSize.width);\n }\n }\n else {\n if (tooltipRect.x < 0) {\n this.arrowLocation.x -= tooltipRect.x;\n tooltipRect.x = 0;\n }\n }\n if (tooltipRect.y < boundsY) {\n tooltipRect.y = boundsY;\n }\n if (tooltipRect.y + tooltipRect.height >= boundsY + bounds.height) {\n tooltipRect.y -= ((tooltipRect.y + tooltipRect.height) - (boundsY + bounds.height));\n }\n if (this.arrowLocation.y + arrowPadding / 2 > tooltipRect.y + tooltipRect.height - this.ry) {\n this.arrowLocation.y = tooltipRect.y + tooltipRect.height - this.ry - arrowPadding / 2;\n }\n if (this.arrowLocation.y - arrowPadding / 2 < tooltipRect.y + this.ry) {\n this.arrowLocation.y = tooltipRect.y + this.ry + arrowPadding / 2;\n }\n }\n return tooltipRect;\n };\n Crosshair.prototype.stopAnimation = function () {\n stopTimer(this.crosshairInterval);\n };\n /**\n * Removes the crosshair on mouse leave.\n * @return {void}\n * @private\n */\n Crosshair.prototype.removeCrosshair = function (duration) {\n var chart = this.chart;\n var crosshair = document.getElementById(this.elementID + '_UserInteraction');\n this.stopAnimation();\n if (crosshair && crosshair.getAttribute('opacity') !== '0') {\n this.crosshairInterval = setTimeout(function () {\n new Animation({}).animate(crosshair, {\n duration: 200,\n progress: function (args) {\n // crosshair.removeAttribute('e-animate');\n crosshair.style.animation = '';\n crosshair.setAttribute('opacity', (1 - (args.timeStamp / args.duration)).toString());\n },\n end: function (model) {\n crosshair.setAttribute('opacity', '0');\n chart.startMove = false;\n if (chart.tooltipModule) {\n chart.tooltipModule.valueX = null;\n chart.tooltipModule.valueY = null;\n }\n }\n });\n }, duration);\n }\n };\n /**\n * Get module name.\n */\n Crosshair.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Crosshair';\n };\n /**\n * To destroy the crosshair.\n * @return {void}\n * @private\n */\n Crosshair.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Crosshair;\n}());\nexport { Crosshair };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, extend, Browser } from '@syncfusion/ej2-base';\nimport { Animation, compile as templateComplier } from '@syncfusion/ej2-base';\nimport { measureText, TextOption, Size, Rect, ChartLocation, textElement } from '../../common/utils/helper';\nimport { findDirection, stopTimer, removeElement } from '../../common/utils/helper';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { tooltipRender } from '../../common/model/constants';\nimport { Theme } from '../../common/model/theme';\n/**\n * Tooltip Module used to render the tooltip for series.\n */\nvar BaseTooltip = /** @class */ (function (_super) {\n __extends(BaseTooltip, _super);\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function BaseTooltip(chart) {\n var _this = _super.call(this, chart) || this;\n _this.padding = 5;\n _this.arrowPadding = 12;\n _this.rx = 2;\n _this.ry = 2;\n _this.markerPoint = [];\n _this.element = _this.chart.element;\n _this.textStyle = chart.tooltip.textStyle;\n _this.control = chart;\n return _this;\n }\n BaseTooltip.prototype.getElement = function (id) {\n return document.getElementById(id);\n };\n /**\n * Renders the tooltip.\n * @return {void}\n * @private\n */\n BaseTooltip.prototype.getTooltipElement = function (isTooltip) {\n this.inverted = this.chart.requireInvertedAxis;\n this.updateTemplateFn(this.control);\n this.formattedText = [];\n this.header = (this.control.tooltip.header === null) ?\n ((this.control.tooltip.shared) ? '${point.x}' : '${series.name}')\n : (this.control.tooltip.header);\n if (!isTooltip) {\n var elementCollection = document.getElementsByClassName('ejSVGTooltip');\n for (var i = elementCollection.length - 1; i >= 0; i--) {\n if (!this.getElement(this.element.id).contains(elementCollection[i])) {\n elementCollection[i].remove();\n }\n }\n return this.createElement(this.control);\n }\n return null;\n };\n BaseTooltip.prototype.createElement = function (chart) {\n this.textElements = [];\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_tooltip';\n tooltipDiv.className = 'ejSVGTooltip';\n tooltipDiv.setAttribute('style', 'pointer-events:none; position:absolute;z-index: 1');\n if (!chart.tooltip.template || chart.tooltip.shared) {\n // SVG element for tooltip\n var svgObject = chart.renderer.createSvg({ id: this.element.id + '_tooltip_svg' });\n tooltipDiv.appendChild(svgObject);\n // Group to hold text and path.\n var groupElement = chart.renderer.createGroup({ id: this.element.id + '_tooltip_group' });\n svgObject.appendChild(groupElement);\n var pathElement = chart.renderer.drawPath({\n 'id': this.element.id + '_tooltip_path', 'stroke-width': chart.tooltip.border.width,\n 'fill': chart.tooltip.fill || chart.themeStyle.tooltipFill, 'opacity': chart.tooltip.opacity,\n 'stroke': chart.tooltip.border.color\n });\n groupElement.appendChild(pathElement);\n }\n return tooltipDiv;\n };\n BaseTooltip.prototype.pushData = function (data, isFirst, tooltipDiv, isChart) {\n if (data.series.enableTooltip) {\n if (isChart) {\n this.currentPoints.push(data);\n }\n else {\n this.currentPoints.push(data);\n }\n this.stopAnimation();\n if (isFirst) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n return true;\n }\n return false;\n };\n BaseTooltip.prototype.renderTooltip = function (data, areaRect, location, textCollection, isFirst, cartesain) {\n if (this.triggerEvent(data, isFirst, textCollection)) {\n this.renderText(isFirst, this.control);\n this.removeHighlight(this.control);\n this.highlightPoints(data);\n return this.renderTooltipElement(this.control, data, areaRect, location, cartesain, isFirst);\n }\n else {\n this.removeHighlight(this.control);\n this.getElement(this.element.id + '_tooltip').remove();\n return null;\n }\n };\n BaseTooltip.prototype.renderTemplate = function (data, rect, location, point, isFirst) {\n this.removeHighlight(this.control);\n this.createTemplate(point, data, rect, location, this.getElement(this.element.id + '_tooltip'), isFirst);\n };\n BaseTooltip.prototype.renderTooltipElement = function (chart, pointData, areaRect, location, cartesain, isFirst) {\n var tooltipDiv = this.getElement(this.element.id + '_tooltip');\n var arrowLocation = new ChartLocation(0, 0);\n var tipLocation = new ChartLocation(0, 0);\n var textHeights;\n var svgObject = this.getElement(this.element.id + '_tooltip_svg');\n var groupElement = this.getElement(this.element.id + '_tooltip_group');\n var pathElement = this.getElement(this.element.id + '_tooltip_path');\n var rect;\n var isTop = false;\n var isLeft = false;\n var isBottom = false;\n var x = 0;\n var y = 0;\n this.tipRadius = 1;\n var series = pointData.series;\n if (this.header !== '') {\n this.elementSize.height += 5;\n }\n if (this.currentPoints.length > 1) {\n this.arrowPadding = 0;\n rect = this.sharedTooltipLocation(areaRect, this.valueX, this.valueY);\n isTop = true;\n }\n else {\n this.arrowPadding = 12;\n rect = this.seriesTooltipLocation(pointData, areaRect, location, arrowLocation, tipLocation);\n if (!this.inverted || !series.isRectSeries) {\n isTop = (rect.y < (location.y + (cartesain ? series.clipRect.y : 0)));\n isBottom = !isTop;\n y = (isTop ? 0 : this.arrowPadding);\n }\n else {\n isLeft = (rect.x < (location.x + series.clipRect.x));\n x = (isLeft ? 0 : this.arrowPadding);\n }\n }\n if (this.header !== '') {\n var headerSize = measureText(this.header, chart.tooltip.textStyle).height + (this.padding * 2) +\n (isBottom ? this.arrowPadding : 0); //header padding;\n var xLength = (this.padding * 3) + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0);\n var direction = 'M ' + xLength + ' ' + headerSize +\n 'L ' + (rect.width + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0) - (this.padding * 2)) +\n ' ' + headerSize;\n var pathElement_1 = this.chart.renderer.drawPath({\n 'id': this.element.id + '_header_path', 'stroke-width': 1,\n 'fill': null, 'opacity': 0.8, 'stroke': chart.themeStyle.tooltipHeaderLine, 'd': direction\n });\n groupElement.appendChild(pathElement_1);\n }\n var start = chart.tooltip.border.width / 2;\n var pointRect = new Rect(start + x, start + y, rect.width - start, rect.height - start);\n groupElement.setAttribute('opacity', '1');\n if (chart.tooltip.enableAnimation && !chart.tooltip.shared && !isFirst && !this.isComplete) {\n this.animateTooltipDiv(tooltipDiv, rect);\n }\n else {\n this.updateDiv(tooltipDiv, rect.x, rect.y);\n }\n this.isComplete = false;\n svgObject.setAttribute('height', (rect.height + chart.tooltip.border.width + (!((!this.inverted) ||\n (!pointData.series.isRectSeries)) ? 0 : this.arrowPadding)).toString());\n svgObject.setAttribute('width', (rect.width + chart.tooltip.border.width + (((!this.inverted) ||\n (!pointData.series.isRectSeries)) ? 0 : this.arrowPadding)).toString());\n svgObject.setAttribute('opacity', '1');\n pathElement.setAttribute('d', findDirection(this.rx, this.ry, pointRect, arrowLocation, this.arrowPadding, isTop, isBottom, isLeft, tipLocation.x, tipLocation.y, this.tipRadius));\n pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#chart_shadow_tooltip)');\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n var defElement = chart.renderer.createDefs();\n defElement.setAttribute('id', 'chart_tooltip_definition');\n groupElement.appendChild(defElement);\n defElement.innerHTML = shadowElement;\n pathElement.setAttribute('stroke', chart.tooltip.border.color);\n this.changeText(new ChartLocation(x, y), isBottom, !isLeft && !isTop && !isBottom, rect);\n return new Side(isBottom, !isLeft && !isTop && !isBottom);\n };\n BaseTooltip.prototype.changeText = function (point, isBottom, isRight, rect) {\n var element = document.getElementById(this.element.id + '_tooltip_text');\n if (isBottom) {\n element.setAttribute('transform', 'translate(0,' + this.arrowPadding + ')');\n }\n if (isRight) {\n element.setAttribute('transform', 'translate(' + this.arrowPadding + ' 0)');\n }\n };\n BaseTooltip.prototype.renderText = function (isRender, chart) {\n var height = 0;\n var width = 0; // Padding for text;\n var subWidth = 0;\n var size;\n var lines;\n var key = 'properties';\n var font = extend({}, this.chart.tooltip.textStyle, null, true)[key];\n var groupElement = this.getElement(this.element.id + '_tooltip_group');\n var tspanElement;\n var tspanStyle = '';\n var line;\n var tspanOption;\n this.header = this.header.replace(//g, '').replace(/<\\/b>/g, '').trim();\n var headerSpace = (this.header !== '' && this.formattedText[0] !== '') ? 5 : 0;\n var isRow = true;\n var isColumn = true;\n this.markerPoint = [];\n var markerSize = 10;\n var spaceWidth = 4;\n var dy = (22 / parseFloat(Theme.tooltipLabelFont.size)) * (parseFloat(font.size));\n if (!isRender) {\n removeElement(this.element.id + '_tooltip_text');\n removeElement(this.element.id + '_header_path');\n removeElement(this.element.id + '_tooltip_trackball_group');\n removeElement('chart_tooltip_definition');\n }\n var options = new TextOption(this.element.id + '_tooltip_text', this.padding * 2, this.padding * 4, 'start', '');\n var parentElement = textElement(options, font, null, groupElement, false);\n for (var k = 0, pointsLength = this.formattedText.length; k < pointsLength; k++) {\n var textCollection = this.formattedText[k].replace(/<(b|strong)>/g, '')\n .replace(/<\\/(b|strong)>/g, '')\n .split(//g);\n size = measureText(this.formattedText[k], font);\n if ((k !== 0) || (this.header === '')) {\n this.markerPoint.push((this.header !== '' ? (this.padding) : 0) + options.y + height);\n }\n for (var i = 0, len = textCollection.length; i < len; i++) {\n lines = textCollection[i].replace(//g, '
').replace(/<\\/b>/g, '
').split('
');\n subWidth = 0;\n isColumn = true;\n height += dy;\n for (var k_1 = 0, len_1 = lines.length; k_1 < len_1; k_1++) {\n line = lines[k_1];\n if (line.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n subWidth += spaceWidth;\n if (isColumn && !isRow) {\n tspanOption = { x: (this.padding * 2) + (markerSize + 5), dy: dy + ((isColumn) ? headerSpace : 0), fill: '' };\n headerSpace = null;\n }\n else {\n if (isRow && isColumn) {\n tspanOption = { x: (this.header === '') ? ((this.padding * 2) + (markerSize + 5)) : (this.padding * 2) };\n }\n else {\n tspanOption = {};\n }\n }\n isColumn = false;\n tspanElement = chart.renderer.createTSpan(tspanOption, '');\n parentElement.appendChild(tspanElement);\n if (line.indexOf('') > -1) {\n tspanStyle = 'font-weight:bold';\n font.fontWeight = 'bold';\n (tspanElement).setAttribute('fill', chart.tooltip.textStyle.color || chart.themeStyle.tooltipBoldLabel);\n }\n else {\n tspanStyle = '';\n font.fontWeight = 'Normal';\n (tspanElement).setAttribute('fill', chart.tooltip.textStyle.color || chart.themeStyle.tooltipLightLabel);\n }\n (tspanElement).textContent = line = line.replace(/<[a-zA-Z\\/](.|\\n)*?>/g, '');\n subWidth += measureText(line, font).width;\n if (tspanStyle !== '') {\n tspanElement.setAttribute('style', tspanStyle);\n }\n isRow = false;\n }\n }\n subWidth -= spaceWidth;\n width = Math.max(width, subWidth);\n }\n }\n height -= (this.header ? this.padding : 0);\n this.elementSize = new Size(width + (width > 0 ? (2 * this.padding) : 0), height + (this.header !== '' ? this.padding : 0));\n this.elementSize.width += (markerSize + 5); // marker size + marker Spacing\n var element = (parentElement.childNodes[0]);\n if (this.header !== '' && element) {\n font.fontWeight = 'bold';\n var width_1 = (this.elementSize.width + (2 * this.padding)) / 2 - measureText(this.header, font).width / 2;\n element.setAttribute('x', width_1.toString());\n }\n };\n BaseTooltip.prototype.createTemplate = function (point, data, areaRect, location, parent, isFirst) {\n var chart = this.control;\n this.highlightPoints(data);\n var argsData = { cancel: false, name: tooltipRender, point: data.point, series: data.series, };\n this.chart.trigger(tooltipRender, argsData);\n var firstElement = this.getElement(this.element.id + '_tooltip').firstChild;\n if (firstElement) {\n firstElement.remove();\n }\n if (!argsData.cancel) {\n var templateElement = this.templateFn(point);\n var elem = createElement('div');\n while (templateElement.length > 0) {\n elem.appendChild(templateElement[0]);\n }\n parent.appendChild(elem);\n var rect = parent.getBoundingClientRect();\n this.padding = 0;\n this.elementSize = new Size(rect.width, rect.height);\n var tooltipRect = this.seriesTooltipLocation(data, areaRect, location, new ChartLocation(0, 0), new ChartLocation(0, 0));\n if (chart.tooltip.enableAnimation && !chart.tooltip.shared && !isFirst && !this.isComplete) {\n this.animateTooltipDiv(parent, tooltipRect);\n }\n else {\n this.updateDiv(parent, tooltipRect.x, tooltipRect.y);\n }\n this.isComplete = false;\n }\n else {\n this.removeHighlight(chart);\n this.getElement(this.element.id + '_tooltip').remove();\n }\n };\n BaseTooltip.prototype.sharedTooltipLocation = function (bounds, x, y) {\n var width = this.elementSize.width + (2 * this.padding);\n var height = this.elementSize.height + (2 * this.padding);\n var tooltipRect = new Rect(x + 2 * this.padding, y - height - this.padding, width, height);\n if (tooltipRect.y < bounds.y) {\n tooltipRect.y += (tooltipRect.height + 2 * this.padding);\n }\n if (tooltipRect.x + tooltipRect.width > bounds.x + bounds.width) {\n tooltipRect.x -= (tooltipRect.width + 4 * this.padding);\n }\n return tooltipRect;\n };\n BaseTooltip.prototype.seriesTooltipLocation = function (pointData, bounds, symbolLocation, arrowLocation, tipLocation) {\n var series = pointData.series;\n var location = new ChartLocation(symbolLocation.x, symbolLocation.y);\n if (series.type === 'RangeArea' && pointData.point.regions[0]) {\n if (!series.chart.requireInvertedAxis) {\n location.y = pointData.point.regions[0].y + pointData.point.regions[0].height / 2;\n }\n else {\n location.x = pointData.point.regions[0].x + pointData.point.regions[0].width / 2;\n }\n }\n var width = this.elementSize.width + (2 * this.padding);\n var height = this.elementSize.height + (2 * this.padding);\n var markerHeight = 0;\n if (!series.isRectSeries) {\n var chartSeries = pointData.series;\n markerHeight = (this.chart.tooltip.shared || chartSeries.marker.visible || series.type === 'Scatter'\n || chartSeries.drawType === 'Scatter') ? ((chartSeries.marker.height + 2) / 2 + (2 * chartSeries.marker.border.width)) : 0;\n }\n var clipX = this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.x;\n var clipY = this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.y;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n if (!this.inverted || !series.isRectSeries) {\n location.y = (series.type === 'Waterfall' && pointData.point.y < 0) ?\n location.y - pointData.point.regions[0].height : location.y;\n location = new ChartLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if (location.y < boundsY || (series.isRectSeries && pointData.point.y < 0 && series.type !== 'Waterfall')) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n }\n if (location.y + height + this.arrowPadding > boundsY + bounds.height) {\n location.y = (symbolLocation.y > bounds.height ? bounds.height : symbolLocation.y)\n + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight;\n }\n tipLocation.x = width / 2;\n if (location.x < boundsX) {\n arrowLocation.x -= (boundsX - location.x);\n tipLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (location.x + width > boundsX + bounds.width) {\n arrowLocation.x += ((location.x + width) - (boundsX + bounds.width));\n tipLocation.x += ((location.x + width) - (boundsX + bounds.width));\n location.x -= ((location.x + width) - (boundsX + bounds.width));\n }\n if (arrowLocation.x + this.arrowPadding / 2 > width - this.rx) {\n arrowLocation.x = width - this.rx - this.arrowPadding / 2;\n tipLocation.x = width;\n this.tipRadius = 0;\n }\n if (arrowLocation.x - this.arrowPadding / 2 < this.rx) {\n arrowLocation.x = this.rx + this.arrowPadding / 2;\n tipLocation.x = 0;\n this.tipRadius = 0;\n }\n }\n else {\n location.x = (series.type === 'Waterfall' && pointData.point.y < 0) ?\n location.x + pointData.point.regions[0].width : location.x;\n location = new ChartLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if ((location.x + width + this.arrowPadding > boundsX + bounds.width) || (series.isRectSeries &&\n pointData.point.y < 0 && series.type !== 'Waterfall')) {\n location.x = (symbolLocation.x > bounds.width ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (location.x < boundsX) {\n location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + clipX + markerHeight;\n }\n if (location.y <= boundsY) {\n arrowLocation.y -= (boundsY - location.y);\n tipLocation.y -= (boundsY - location.y);\n location.y = boundsY;\n }\n if (location.y + height >= boundsY + bounds.height) {\n arrowLocation.y += ((location.y + height) - (boundsY + bounds.height));\n tipLocation.y += ((location.y + height) - (boundsY + bounds.height));\n location.y -= ((location.y + height) - (boundsY + bounds.height));\n }\n if (arrowLocation.y + this.arrowPadding / 2 > height - this.ry) {\n arrowLocation.y = height - this.ry - this.arrowPadding / 2;\n tipLocation.y = height;\n this.tipRadius = 0;\n }\n if (arrowLocation.y - this.arrowPadding / 2 < this.ry) {\n arrowLocation.y = this.ry + this.arrowPadding / 2;\n tipLocation.y = 0;\n this.tipRadius = 0;\n }\n }\n return new Rect(location.x, location.y, width, height);\n };\n /*\n * @hidden\n */\n BaseTooltip.prototype.progressAnimation = function (element, tooltipGroup, series, opacity, rectOpacity, timeStamp, isRect, shared) {\n tooltipGroup.style.animation = '';\n tooltipGroup.setAttribute('opacity', (opacity - timeStamp).toString());\n if (element && isRect && !shared) {\n element.setAttribute('opacity', (rectOpacity + (rectOpacity * timeStamp)).toString());\n }\n };\n /*\n * @hidden\n */\n BaseTooltip.prototype.endAnimation = function (element, tooltipGroup, series, shared) {\n this.currentPoints = [];\n if (element && series.isRectSeries) {\n element.setAttribute('opacity', series.opacity.toString());\n }\n this.removeHighlight(this.control);\n tooltipGroup.setAttribute('opacity', '0');\n if (this.control.tooltip.template && !shared) {\n tooltipGroup.style.display = 'none';\n }\n this.isComplete = true;\n this.control.trigger('animationComplete', {});\n };\n BaseTooltip.prototype.removeHighlight = function (chart) {\n var item;\n var series;\n for (var i = 0, len = this.previousPoints.length; i < len; i++) {\n item = this.previousPoints[i];\n if (item.series.isRectSeries) {\n if (item.series.visible) {\n this.highlightPoint(item.series, item.point.index, false);\n }\n continue;\n }\n series = item.series;\n if (!series.marker.visible && item.series.type !== 'Scatter' && item.series.type !== 'Bubble') {\n this.previousPoints.shift();\n len -= 1;\n }\n }\n };\n BaseTooltip.prototype.highlightPoint = function (series, pointIndex, highlight) {\n var element = this.getElement(this.element.id + '_Series_' + series.index + '_Point_' + pointIndex);\n if (element) {\n element.setAttribute('opacity', (highlight ? series.opacity / 2 : series.opacity).toString());\n }\n };\n BaseTooltip.prototype.highlightPoints = function (item) {\n if (item.series.isRectSeries) {\n this.highlightPoint(item.series, item.point.index, true);\n return null;\n }\n };\n BaseTooltip.prototype.animateTooltipDiv = function (tooltipDiv, rect) {\n var _this = this;\n var x = parseFloat(tooltipDiv.style.left);\n var y = parseFloat(tooltipDiv.style.top);\n var currenDiff;\n new Animation({}).animate(tooltipDiv, {\n duration: 300,\n progress: function (args) {\n currenDiff = (args.timeStamp / args.duration);\n tooltipDiv.style.animation = null;\n tooltipDiv.style.left = (x + currenDiff * (rect.x - x)) + 'px';\n tooltipDiv.style.top = (y + currenDiff * (rect.y - y)) + 'px';\n },\n end: function (model) {\n _this.updateDiv(tooltipDiv, rect.x, rect.y);\n }\n });\n };\n BaseTooltip.prototype.updateDiv = function (tooltipDiv, x, y) {\n tooltipDiv.style.left = x + 'px';\n tooltipDiv.style.top = y + 'px';\n };\n BaseTooltip.prototype.triggerEvent = function (point, isFirst, textCollection, firstText) {\n if (firstText === void 0) { firstText = true; }\n var argsData = {\n cancel: false, name: tooltipRender, text: textCollection,\n point: point.point, series: point.series, textStyle: this.textStyle\n };\n this.chart.trigger(tooltipRender, argsData);\n if (!argsData.cancel) {\n if (point.series.type === 'BoxAndWhisker') {\n this.removeText();\n isFirst = true;\n }\n this.formattedText = this.formattedText.concat(argsData.text);\n }\n return !argsData.cancel;\n };\n BaseTooltip.prototype.removeText = function () {\n this.textElements = [];\n var element = this.getElement(this.element.id + '_tooltip_group');\n if (element.childNodes.length > 0) {\n while (element.lastChild && element.childNodes.length !== 1) {\n element.removeChild(element.lastChild);\n }\n }\n };\n BaseTooltip.prototype.updateTemplateFn = function (chart) {\n if (chart.tooltip.template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(chart.tooltip.template).length) {\n this.templateFn = templateComplier(document.querySelector(chart.tooltip.template).innerHTML.trim());\n }\n }\n catch (e) {\n this.templateFn = templateComplier(chart.tooltip.template);\n }\n }\n };\n BaseTooltip.prototype.stopAnimation = function () {\n stopTimer(this.toolTipInterval);\n };\n return BaseTooltip;\n}(ChartData));\nexport { BaseTooltip };\nvar Side = /** @class */ (function () {\n function Side(bottom, right) {\n this.isRight = right;\n this.isBottom = bottom;\n }\n return Side;\n}());\nexport { Side };\n","var __extends = (this && this.__extends) || (function () {\n var 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 function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend, Browser } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { Size, PointData, ChartLocation } from '../../common/utils/helper';\nimport { drawSymbol, PathOption, valueToCoefficient, removeElement, valueToPolarCoefficient, withInBounds } from '../../common/utils/helper';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\n/**\n * `Tooltip` module is used to render the tooltip for chart series.\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function Tooltip(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * @hidden\n */\n Tooltip.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n this.chart.on('tapHold', this.longPress, this);\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n Tooltip.prototype.mouseUpHandler = function () {\n var chart = this.control;\n if (chart.isTouch && !this.isSelected(chart) &&\n ((withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect) && chart.tooltip.shared)\n || !chart.tooltip.shared)) {\n if (!chart.crosshair.enable) {\n this.tooltip();\n this.removeTooltip(2000);\n }\n else if (chart.startMove) {\n this.removeTooltip(2000);\n }\n }\n };\n Tooltip.prototype.mouseLeaveHandler = function () {\n this.removeTooltip(1000);\n };\n Tooltip.prototype.mouseMoveHandler = function () {\n var chart = this.chart;\n // Tooltip for chart series.\n if (!chart.disableTrackTooltip && !this.isSelected(chart)) {\n if (!chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n this.tooltip();\n }\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n if (chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n this.tooltip();\n }\n }\n else {\n if (chart.tooltip.shared) {\n this.removeTooltip(1000);\n }\n }\n }\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Tooltip.prototype.longPress = function () {\n var chart = this.chart;\n if (chart.crosshair.enable && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n this.tooltip();\n }\n return false;\n };\n /**\n * Renders the tooltip.\n * @return {void}\n */\n Tooltip.prototype.tooltip = function () {\n var isTooltip = this.getElement(this.element.id + '_tooltip');\n var tooltipDiv = this.getTooltipElement(isTooltip);\n if (!this.chart.tooltip.shared) {\n this.renderSeriesTooltip(this.chart, !isTooltip, tooltipDiv);\n }\n else {\n this.renderGroupedTooltip(this.chart, !isTooltip, tooltipDiv);\n }\n };\n Tooltip.prototype.findHeader = function (data) {\n this.header = this.parseTemplate(data.point, data.series, this.header, data.series.xAxis, data.series.yAxis);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n this.formattedText = this.formattedText.concat(this.header);\n }\n };\n Tooltip.prototype.renderSeriesTooltip = function (chart, isFirst, tooltipDiv) {\n var data = this.getData();\n var markerSide;\n data.lierIndex = this.lierIndex;\n var rect = chart.chartAxisLayoutPanel.seriesClipRect;\n this.currentPoints = [];\n if (this.findData(data, this.previousPoints[0])) {\n if (this.pushData(data, isFirst, tooltipDiv, true)) {\n var text = this.getTooltipText(data);\n if (!chart.tooltip.template) {\n if (this.header !== '') {\n this.findHeader(data);\n }\n markerSide = this.renderTooltip(data, rect, this.getSymbolLocation(data), text, isFirst, chart.chartAreaType === 'Cartesian');\n if (markerSide) {\n this.drawMarker(markerSide.isBottom, markerSide.isRight, 10);\n }\n }\n else {\n this.renderTemplate(data, rect, this.getSymbolLocation(data), this.getTemplateText(data), isFirst);\n }\n this.isRemove = true;\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n }\n else {\n if (!data.point && this.isRemove) {\n this.removeTooltip(1000);\n this.isRemove = false;\n }\n else {\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible) {\n data = this.getClosestX(chart, series) || data;\n }\n }\n }\n }\n if (data && data.point) {\n this.findMouseValue(data, chart);\n }\n };\n Tooltip.prototype.findData = function (data, previous) {\n return data.point && ((!previous || (previous.point !== data.point)) ||\n (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex));\n };\n Tooltip.prototype.getSymbolLocation = function (data) {\n return data.series.type === 'BoxAndWhisker' ?\n this.getBoxLocation(data) : data.point.symbolLocations[0];\n };\n Tooltip.prototype.getTooltipText = function (pointData) {\n var series = pointData.series;\n var text;\n return this.parseTemplate(pointData.point, series, this.getFormat(this.chart, series), series.xAxis, series.yAxis);\n };\n Tooltip.prototype.getTemplateText = function (data) {\n var point = extend({}, data.point);\n point.x = this.formatPointValue(data.point, data.series.xAxis, 'x', true, false);\n if ((data.series.seriesType === 'XY')) {\n point.y = this.formatPointValue(data.point, data.series.yAxis, 'y', false, true);\n }\n else {\n point.low = this.formatPointValue(data.point, data.series.yAxis, 'low', false, true);\n point.high = this.formatPointValue(data.point, data.series.yAxis, 'high', false, true);\n }\n return point;\n };\n Tooltip.prototype.findMouseValue = function (data, chart) {\n if (!chart.requireInvertedAxis) {\n if (chart.chartAreaType === 'PolarRadar') {\n this.valueX = valueToPolarCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n + data.series.xAxis.rect.x;\n }\n else {\n this.valueX = valueToCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n + data.series.xAxis.rect.x;\n }\n this.valueY = chart.mouseY;\n }\n else {\n this.valueY = (1 - valueToCoefficient(data.point.xValue, data.series.xAxis)) * data.series.xAxis.rect.height\n + data.series.xAxis.rect.y;\n this.valueX = chart.mouseX;\n }\n };\n Tooltip.prototype.renderGroupedTooltip = function (chart, isFirst, tooltipDiv) {\n var data;\n var height = 0;\n var width = 0;\n var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n this.stopAnimation();\n this.removeHighlight(chart);\n this.currentPoints = [];\n var extraPoints = [];\n var markerSide;\n if (isFirst) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n this.removeText();\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (!series.enableTooltip) {\n continue;\n }\n if (chart.chartAreaType === 'Cartesian' && series.visible) {\n data = this.getClosestX(chart, series);\n }\n else if (chart.chartAreaType === 'PolarRadar' && series.visible && pointData.point !== null) {\n data = new PointData(series.points[pointData.point.index], series);\n }\n if (data && this.header !== '' && this.currentPoints.length === 0) {\n this.findHeader(data);\n }\n if (data && this.triggerEvent(data, isFirst, this.getTooltipText(data))) {\n if (series.category === 'Series') {\n this.highlightPoints(data);\n }\n this.findMouseValue(data, chart);\n this.currentPoints.push(data);\n data = null;\n }\n else if (data) {\n extraPoints.push(data);\n }\n }\n if (this.currentPoints.length > 0) {\n this.renderText(isFirst, chart);\n markerSide = this.renderTooltipElement(chart, this.currentPoints[0], chart.chartAxisLayoutPanel.seriesClipRect, this.getSymbolLocation(this.currentPoints[0]), chart.chartAreaType === 'Cartesian', isFirst);\n this.drawMarker(markerSide.isBottom, markerSide.isRight, 10);\n }\n else {\n this.getElement(this.element.id + '_tooltip_path').setAttribute('d', '');\n }\n this.currentPoints = this.currentPoints.concat(extraPoints);\n this.previousPoints = extend([], this.currentPoints, null, true);\n };\n Tooltip.prototype.getBoxLocation = function (data) {\n var location;\n location = this.lierIndex > 3 ? data.point.symbolLocations[this.lierIndex - 4] :\n {\n x: data.point.regions[0].x + (data.point.regions[0].width / 2),\n y: data.point.regions[0].y + (data.point.regions[0].height / 2)\n };\n return location;\n };\n Tooltip.prototype.drawMarker = function (isBottom, isRight, size) {\n var shapeOption;\n var count = 0;\n var series;\n var markerGroup = this.chart.renderer.createGroup({ id: this.element.id + '_tooltip_trackball_group' });\n var groupElement = this.getElement(this.element.id + '_tooltip_group');\n var x = (this.padding * 2) + (size / 2) + (isRight ? this.arrowPadding : 0);\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n series = data.series;\n if (series.visible && series.enableTooltip && data.point.visible) {\n shapeOption = new PathOption(this.element.id + '_Tooltip_Trackball_' + series.index, this.findColor(data, series) || series.interior, 1, '#cccccc', series.opacity, null);\n markerGroup.appendChild(drawSymbol(new ChartLocation(x, this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : 0)), data.point.marker.shape || series.marker.shape, new Size(size, size), series.marker.imageUrl, shapeOption, null));\n count++;\n }\n }\n groupElement.appendChild(markerGroup);\n };\n Tooltip.prototype.findColor = function (data, series) {\n if (series.isRectSeries) {\n return data.point.color;\n }\n else {\n return (data.point.color && data.point.color !== '#ffffff' ? data.point.color : data.point.interior) || series.marker.fill;\n }\n };\n Tooltip.prototype.parseTemplate = function (point, series, format, xAxis, yAxis) {\n var val;\n var textValue;\n var xFormat;\n var customLabelFormat;\n var chart = this.chart;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n val = new RegExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(val.source, this.formatPointValue(point, val.source === '${point.x}' ? xAxis : yAxis, dataValue, val.source === '${point.x}', (val.source === '${point.high}' ||\n val.source === '${point.open}' ||\n val.source === '${point.close}' ||\n val.source === '${point.low}' ||\n val.source === '${point.y}' ||\n val.source === '${point.minimum}' ||\n val.source === '${point.maximum}' ||\n val.source === '${point.outliers}' ||\n val.source === '${point.upperQuartile}' ||\n val.source === '${point.lowerQuartile}' ||\n val.source === '${point.median}')));\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n val = new RegExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(val.source, textValue);\n }\n return format;\n };\n Tooltip.prototype.formatPointValue = function (point, axis, dataValue, isXPoint, isYPoint) {\n var textValue;\n var customLabelFormat;\n var value;\n if (axis.valueType !== 'Category' && isXPoint) {\n customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n textValue = customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(point[dataValue])) :\n axis.format(point[dataValue]);\n }\n else if (isYPoint) {\n customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n value = dataValue === 'outliers' ? axis.format(point[dataValue][this.lierIndex - 4]) :\n axis.format(point[dataValue]);\n textValue = customLabelFormat ? axis.labelFormat.replace('{value}', value) : value;\n }\n else {\n textValue = point[dataValue];\n }\n return textValue;\n };\n Tooltip.prototype.getFormat = function (chart, series) {\n if (chart.tooltip.format) {\n if (series.seriesType === 'XY' && series.category === 'Indicator') {\n return this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return chart.tooltip.format;\n }\n var format = !chart.tooltip.shared ? '${point.x}' : '${series.name}';\n switch (series.seriesType) {\n case 'XY':\n if (series.category === 'Indicator') {\n this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return format + ' : ' + ((series.type === 'Bubble') ? '${point.y} Size : ${point.size}'\n : '${point.y}');\n case 'HighLow':\n return format + ('
High : ${point.high}
Low : ${point.low}');\n case 'HighLowOpenClose':\n return format + ('
High : ${point.high}
Low : ${point.low}
' +\n 'Open : ${point.open}
Close : ${point.close}');\n case 'BoxPlot': {\n return format + '
' + (this.lierIndex > 3 ? 'Outliers : ${point.outliers}' :\n 'Maximum : ${point.maximum}
Q1 : ${point.upperQuartile}
' +\n 'Median : ${point.median}
Q3 : ${point.lowerQuartile}
Minimum : ${point.minimum}');\n }\n }\n return '';\n };\n Tooltip.prototype.getIndicatorTooltipFormat = function (series, chart, format) {\n var toolTip;\n var points = [];\n if (series.seriesType === 'XY') {\n toolTip = series.name + ' : ${point.y}';\n }\n else {\n toolTip = format;\n }\n return toolTip;\n };\n /*\n * @hidden\n */\n Tooltip.prototype.removeHighlightedMarker = function (data) {\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var item = data_1[_i];\n removeElement(this.element.id + '_Series_' + item.series.index +\n '_Point_' + item.point.index + '_Trackball');\n }\n if (this.chart.markerRender) {\n this.chart.markerRender.removeHighlightedMarker();\n }\n this.previousPoints = [];\n };\n /**\n * Removes the tooltip on mouse leave.\n * @return {void}\n * @private\n */\n Tooltip.prototype.removeTooltip = function (duration) {\n var _this = this;\n var chart = this.chart;\n var tooltipElement = this.getElement(this.element.id + '_tooltip');\n this.stopAnimation();\n if (tooltipElement && this.previousPoints.length > 0) {\n var data_2 = this.previousPoints;\n this.toolTipInterval = setTimeout(function () {\n var rectOpacity;\n var tooltipGroup = tooltipElement.firstChild;\n var series = data_2[0].series;\n var element = _this.getElement(chart.element.id + '_Series_' + data_2[0].series.index\n + '_Point_' + data_2[0].point.index);\n var opacity = parseFloat(tooltipGroup.getAttribute('opacity')) || 1;\n if (element && series.isRectSeries && !chart.tooltip.shared) {\n rectOpacity = parseFloat(element.getAttribute('opacity'));\n }\n new Animation({}).animate(tooltipGroup, {\n duration: 200,\n progress: function (args) {\n // tooltipGroup.removeAttribute('e-animate');\n _this.progressAnimation(element, tooltipGroup, series, opacity, rectOpacity, (args.timeStamp / args.duration), series.isRectSeries, !chart.tooltip.shared);\n },\n end: function (model) {\n _this.valueX = null;\n _this.valueY = null;\n _this.endAnimation(element, tooltipGroup, series, chart.tooltip.shared);\n _this.removeHighlightedMarker(data_2);\n }\n });\n }, duration);\n }\n };\n /**\n * Get module name.\n */\n Tooltip.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n Tooltip.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Tooltip;\n}(BaseTooltip));\nexport { Tooltip };\n","import { EventHandler } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { removeElement, measureText, RectOption, Rect, PolygonOption, PathOption, createTooltip, minMax } from '../../common/utils/helper';\nimport { textElement, TextOption } from '../../common/utils/helper';\n/**\n * Zooming Toolkit created here\n * @private\n */\nvar Toolkit = /** @class */ (function () {\n /** @private */\n function Toolkit(chart) {\n this.chart = chart;\n this.elementId = chart.element.id;\n this.selectionColor = '#ff4081';\n this.fillColor = '#737373';\n }\n /**\n * To create the pan button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createPanButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.chart.zoomModule.isPanning ? this.selectionColor : this.fillColor;\n var direction = 'M5,3h2.3L7.275,5.875h1.4L8.65,3H11L8,0L5,3z M3,11V8.7l2.875,0.025v-1.4L3,7.35V5L0,8L3,';\n direction += '11z M11,13H8.7l0.025-2.875h-1.4L7.35,13H5l3,3L11,13z M13,5v2.3l-2.875-0.025v1.4L13,8.65V11l3-3L13,5z';\n childElement.id = this.elementId + '_Zooming_Pan';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Pan'));\n this.panElements = childElement;\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Pan_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Pan_2', fillColor, null, null, 1, null, direction)));\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.pan);\n };\n /**\n * To create the zoom button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.chart.zoomModule.isPanning ? this.fillColor : this.selectionColor;\n var direction = 'M0.001,14.629L1.372,16l4.571-4.571v-0.685l0.228-0.274c1.051,0.868,2.423,1.417,3.885,1.417c3.291,0,';\n direction += '5.943-2.651,5.943-5.943S13.395,0,10.103,0S4.16,2.651,4.16,5.943c0,1.508,0.503,2.834,1.417,3.885l-0.274,0.228H4.571';\n direction = direction + 'L0.001,14.629L0.001,14.629z M5.943,5.943c0-2.285,1.828-4.114,4.114-4.114s4.114,1.828,4.114,';\n childElement.id = this.elementId + '_Zooming_Zoom';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Zoom'));\n this.zoomElements = childElement;\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Zoom_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Zoom_3', fillColor, null, null, 1, null, direction + '4.114s-1.828,4.114-4.114,4.114S5.943,8.229,5.943,5.943z')));\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoom);\n };\n /**\n * To create the ZoomIn button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomInButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var direction = 'M10.103,0C6.812,0,4.16,2.651,4.16,5.943c0,1.509,0.503,2.834,1.417,3.885l-0.274,0.229H4.571L0,';\n direction += '14.628l0,0L1.372,16l4.571-4.572v-0.685l0.228-0.275c1.052,0.868,2.423,1.417,3.885,1.417c3.291,0,5.943-2.651,';\n direction += '5.943-5.943C16,2.651,13.395,0,10.103,0z M10.058,10.058c-2.286,0-4.114-1.828-4.114-4.114c0-2.286,1.828-4.114,';\n childElement.id = this.elementId + '_Zooming_ZoomIn';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('ZoomIn'));\n var polygonDirection = '12.749,5.466 10.749,5.466 10.749,3.466 9.749,3.466 9.749,5.466 7.749,5.466 7.749,6.466';\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_ZoomIn_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_ZoomIn_2', fillColor, null, null, 1, null, direction + '4.114-4.114c2.286,0,4.114,1.828,4.114,4.114C14.172,8.229,12.344,10.058,10.058,10.058z')));\n childElement.appendChild(render.drawPolygon(new PolygonOption(this.elementId + '_Zooming_ZoomIn_3', polygonDirection + ' 9.749,6.466 9.749,8.466 10.749,8.466 10.749,6.466 12.749,6.466', fillColor)));\n this.zoomInElements = childElement;\n this.elementOpacity = chart.zoomModule.isPanning ? '0.2' : '1';\n childElement.setAttribute('opacity', this.elementOpacity);\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoomIn);\n };\n /**\n * To create the ZoomOut button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomOutButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var direction = 'M0,14.622L1.378,16l4.533-4.533v-0.711l0.266-0.266c1.022,0.889,2.4,1.422,3.866,';\n direction += '1.422c3.289,0,5.955-2.666,5.955-5.955S13.333,0,10.044,0S4.089,2.667,4.134,5.911c0,1.466,0.533,2.844,';\n direction += '1.422,3.866l-0.266,0.266H4.578L0,14.622L0,14.622z M5.911,5.911c0-2.311,1.822-4.133,4.133-4.133s4.133,1.822,4.133,';\n childElement.id = this.elementId + '_Zooming_ZoomOut';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('ZoomOut'));\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_ZoomOut_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_ZoomOut_2', fillColor, null, null, 1, null, direction + '4.133s-1.866,4.133-4.133,4.133S5.911,8.222,5.911,5.911z M12.567,6.466h-5v-1h5V6.466z')));\n this.zoomOutElements = childElement;\n this.elementOpacity = chart.zoomModule.isPanning ? '0.2' : '1';\n childElement.setAttribute('opacity', this.elementOpacity);\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoomOut);\n };\n /**\n * To create the Reset button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createResetButton = function (childElement, parentElement, chart, isDevice) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var size;\n var direction = 'M12.364,8h-2.182l2.909,3.25L16,8h-2.182c0-3.575-2.618-6.5-5.818-6.5c-1.128,0-2.218,0.366-3.091,';\n direction += '1.016l1.055,1.178C6.581,3.328,7.272,3.125,8,3.125C10.4,3.125,12.363,5.319,12.364,8L12.364,8z M11.091,';\n direction += '13.484l-1.055-1.178C9.419,12.672,8.728,12.875,8,12.875c-2.4,0-4.364-2.194-4.364-4.875h2.182L2.909,4.75L0,8h2.182c0,';\n childElement.id = this.elementId + '_Zooming_Reset';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Reset'));\n if (!isDevice) {\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Reset_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Reset_2', fillColor, null, null, 1, null, direction + '3.575,2.618,6.5,5.818,6.5C9.128,14.5,10.219,14.134,11.091,13.484L11.091,13.484z')));\n }\n else {\n size = measureText(this.chart.getLocalizedLabel('ResetZoom'), { size: '12px' });\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Reset_1', 'transparent', {}, 1, new Rect(0, 0, size.width, size.height))));\n textElement(new TextOption(this.elementId + '_Zooming_Reset_2', 0 + size.width / 2, 0 + size.height * 3 / 4, 'middle', this.chart.getLocalizedLabel('ResetZoom'), 'rotate(0,' + (0) + ',' + (0) + ')', 'auto'), { size: '12px' }, 'black', childElement);\n }\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.reset);\n };\n /**\n * To bind events.\n * @return {void}\n * @private\n */\n Toolkit.prototype.wireEvents = function (element, process) {\n EventHandler.add(element, 'mousedown touchstart', process, this);\n EventHandler.add(element, 'mouseover', this.showTooltip, this);\n EventHandler.add(element, 'mouseout', this.removeTooltip, this);\n };\n /**\n * To show tooltip.\n * @return {void}\n * @private\n */\n Toolkit.prototype.showTooltip = function (event) {\n var text = event.currentTarget.id.split('_Zooming_')[1];\n var left = (event.pageX - (measureText(text, { size: '10px' }).width + 5));\n if (!this.chart.isTouch) {\n createTooltip('EJ2_Chart_ZoomTip', this.chart.getLocalizedLabel(text), (event.pageY + 10), left, '10px');\n }\n };\n /** @private */\n Toolkit.prototype.removeTooltip = function () {\n removeElement('EJ2_Chart_ZoomTip');\n };\n // Toolkit events function calculation here.\n /** @private */\n Toolkit.prototype.reset = function () {\n var chart = this.chart;\n if (!chart.zoomModule.isDevice) {\n remove(chart.zoomModule.toolkitElements);\n }\n this.removeTooltip();\n chart.svgObject.setAttribute('cursor', 'auto');\n chart.axisCollections.forEach(function (axis) {\n axis.zoomFactor = 1;\n axis.zoomPosition = 0;\n });\n chart.disableTrackTooltip = false;\n chart.zoomModule.isZoomed = chart.zoomModule.isPanning = chart.isChartDrag = chart.delayRedraw = false;\n chart.zoomModule.touchMoveList = chart.zoomModule.touchStartList = [];\n chart.zoomModule.pinchTarget = null;\n chart.removeSvg();\n chart.refreshAxis();\n chart.refreshBound();\n this.elementOpacity = '1';\n return false;\n };\n Toolkit.prototype.zoomIn = function (e) {\n this.zoomInOutCalculation(1, this.chart, this.chart.axisCollections, this.chart.zoomSettings.mode);\n return false;\n };\n Toolkit.prototype.zoomOut = function (e) {\n this.zoomInOutCalculation(-1, this.chart, this.chart.axisCollections, this.chart.zoomSettings.mode);\n return false;\n };\n Toolkit.prototype.zoom = function (e) {\n this.chart.zoomModule.isPanning = false;\n var zoomModule = this.chart.zoomModule;\n this.elementOpacity = '1';\n this.chart.svgObject.setAttribute('cursor', 'auto');\n this.zoomInElements.setAttribute('opacity', this.elementOpacity);\n this.zoomOutElements.setAttribute('opacity', this.elementOpacity);\n this.applySelection(this.zoomElements.childNodes, this.selectionColor);\n this.applySelection(this.panElements.childNodes, '#737373');\n return false;\n };\n /** @private */\n Toolkit.prototype.pan = function () {\n var zoomModule = this.chart.zoomModule;\n var element;\n this.chart.zoomModule.isPanning = true;\n this.chart.svgObject.setAttribute('cursor', 'pointer');\n this.elementOpacity = '0.2';\n element = this.zoomInElements ? this.zoomInElements.setAttribute('opacity', this.elementOpacity) : null;\n element = this.zoomOutElements ? this.zoomOutElements.setAttribute('opacity', this.elementOpacity) : null;\n element = this.panElements ? this.applySelection(this.panElements.childNodes, this.selectionColor) : null;\n element = this.zoomElements ? this.applySelection(this.zoomElements.childNodes, '#737373') : null;\n return false;\n };\n Toolkit.prototype.zoomInOutCalculation = function (scale, chart, axes, mode) {\n if (!chart.zoomModule.isPanning && this.elementOpacity !== '0.2') {\n var zoomFactor_1;\n var zoomPosition_1;\n var cumulative_1;\n chart.disableTrackTooltip = true;\n chart.delayRedraw = true;\n axes.forEach(function (axis) {\n if ((axis.orientation === 'Horizontal' && mode !== 'Y') ||\n (axis.orientation === 'Vertical' && mode !== 'X')) {\n cumulative_1 = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * scale), 1);\n zoomFactor_1 = (cumulative_1 === 1) ? 1 : minMax(1 / cumulative_1, 0, 1);\n zoomPosition_1 = (cumulative_1 === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - zoomFactor_1) * 0.5);\n if (axis.zoomPosition !== zoomPosition_1 || axis.zoomFactor !== zoomFactor_1) {\n zoomFactor_1 = (zoomPosition_1 + zoomFactor_1) > 1 ? (1 - zoomPosition_1) : zoomFactor_1;\n }\n axis.zoomFactor = zoomFactor_1;\n axis.zoomPosition = zoomPosition_1;\n }\n });\n }\n };\n Toolkit.prototype.applySelection = function (elements, color) {\n for (var i = 1, length_1 = elements.length; i < length_1; i++) {\n elements[i].setAttribute('fill', color);\n }\n };\n return Toolkit;\n}());\nexport { Toolkit };\n","import { EventHandler, Browser } from '@syncfusion/ej2-base';\nimport { getRectLocation, minMax, getElement, ChartLocation, Rect, RectOption, measureText } from '../../common/utils/helper';\nimport { Toolkit } from './zooming-toolkit';\nimport { zoomComplete } from '../../common/model/constants';\nimport { withInBounds } from '../../common/utils/helper';\n/**\n * `Zooming` module handles the zooming for chart.\n */\nvar Zoom = /** @class */ (function () {\n /**\n * Constructor for Zooming module.\n * @private.\n */\n function Zoom(chart) {\n this.chart = chart;\n this.isPointer = Browser.isPointer;\n this.browserName = Browser.info.name;\n this.wheelEvent = this.browserName === 'mozilla' ? (this.isPointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n this.cancelEvent = this.isPointer ? 'pointerleave' : 'mouseleave';\n this.addEventListener();\n this.isDevice = Browser.isDevice;\n var zooming = chart.zoomSettings;\n this.toolkit = new Toolkit(chart);\n this.zooming = zooming;\n this.elementId = chart.element.id;\n this.zoomingRect = new Rect(0, 0, 0, 0);\n this.zoomAxes = [];\n this.zoomkitOpacity = 0.3;\n this.isIOS = Browser.isIos || Browser.isIos7;\n }\n /**\n * Function that handles the Rectangular zooming.\n * @return {void}\n */\n Zoom.prototype.renderZooming = function (e, chart, isTouch) {\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n if (this.zooming.enableSelectionZooming && (!isTouch\n || (chart.isDoubleTap && this.touchStartList.length === 1)) && (!this.isPanning || chart.isDoubleTap)) {\n this.isPanning = this.isDevice ? true : this.isPanning;\n this.performedUI = true;\n this.drawZoomingRectangle(chart);\n }\n else if (this.isPanning && chart.isChartDrag) {\n if (!isTouch || (isTouch && this.touchStartList.length === 1)) {\n this.pinchTarget = isTouch ? e.target : null;\n this.doPan(chart, chart.axisCollections);\n }\n }\n };\n // Zooming rectangle drawn here\n Zoom.prototype.drawZoomingRectangle = function (chart) {\n var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n var startLocation = new ChartLocation(chart.previousMouseMoveX, chart.previousMouseMoveY);\n var endLocation = new ChartLocation(chart.mouseX, chart.mouseY);\n var rect = this.zoomingRect = getRectLocation(startLocation, endLocation, areaBounds);\n if (rect.width > 0 && rect.height > 0) {\n this.isZoomed = true;\n chart.disableTrackTooltip = true;\n chart.svgObject.setAttribute('cursor', 'crosshair');\n if (this.zooming.mode === 'X') {\n rect.height = areaBounds.height;\n rect.y = areaBounds.y;\n }\n else if (this.zooming.mode === 'Y') {\n rect.width = areaBounds.width;\n rect.x = areaBounds.x;\n }\n chart.svgObject.appendChild(chart.renderer.drawRectangle(new RectOption(this.elementId + '_ZoomArea', chart.themeStyle.selectionRectFill, { color: chart.themeStyle.selectionRectStroke, width: 1 }, 1, rect, 0, 0, '', '3')));\n }\n };\n // Panning performed here\n Zoom.prototype.doPan = function (chart, axes) {\n if (chart.startMove && chart.crosshair.enable) {\n return null;\n }\n var currentScale;\n var offset;\n this.isZoomed = true;\n var translateX;\n var translateY;\n this.offset = !chart.delayRedraw ? chart.chartAxisLayoutPanel.seriesClipRect : this.offset;\n chart.delayRedraw = true;\n chart.disableTrackTooltip = true;\n axes.forEach(function (axis) {\n currentScale = Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1);\n if (axis.orientation === 'Horizontal') {\n offset = (chart.previousMouseMoveX - chart.mouseX) / axis.rect.width / currentScale;\n axis.zoomPosition = minMax(axis.zoomPosition + offset, 0, (1 - axis.zoomFactor));\n }\n else {\n offset = (chart.previousMouseMoveY - chart.mouseY) / axis.rect.height / currentScale;\n axis.zoomPosition = minMax(axis.zoomPosition - offset, 0, (1 - axis.zoomFactor));\n }\n });\n if (this.zooming.enableDeferredZooming) {\n translateX = chart.mouseX - chart.mouseDownX;\n translateY = chart.mouseY - chart.mouseDownY;\n switch (this.zooming.mode) {\n case 'X':\n translateY = 0;\n break;\n case 'Y':\n translateX = 0;\n break;\n }\n this.setTransform(translateX, translateY, null, null, chart, false);\n this.refreshAxis(chart.chartAxisLayoutPanel, chart, chart.axisCollections);\n }\n else {\n this.performZoomRedraw(chart);\n }\n chart.previousMouseMoveX = chart.mouseX;\n chart.previousMouseMoveY = chart.mouseY;\n };\n /**\n * Redraw the chart on zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performZoomRedraw = function (chart) {\n var rect = this.zoomingRect;\n chart.animateSeries = false;\n if (this.isZoomed) {\n if (rect.width > 0 && rect.height > 0) {\n this.performedUI = true;\n chart.svgObject.setAttribute('cursor', 'auto');\n this.doZoom(chart, chart.axisCollections, chart.chartAxisLayoutPanel.seriesClipRect);\n chart.isDoubleTap = false;\n }\n else if (chart.disableTrackTooltip) {\n chart.disableTrackTooltip = false;\n chart.delayRedraw = false;\n chart.removeSvg();\n chart.refreshAxis();\n chart.refreshBound();\n }\n }\n };\n Zoom.prototype.refreshAxis = function (layout, chart, axes) {\n var mode = chart.zoomSettings.mode;\n layout.measureAxis(new Rect(chart.initialClipRect.x, chart.initialClipRect.y, chart.initialClipRect.width, chart.initialClipRect.height));\n axes.map(function (axis, index) {\n if (axis.orientation === 'Horizontal' && mode !== 'Y') {\n layout.drawXAxisLabels(axis, index, null, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n if (axis.orientation === 'Vertical' && mode !== 'X') {\n layout.drawYAxisLabels(axis, index, null, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n });\n };\n // Rectangular zoom calculated here performed here\n Zoom.prototype.doZoom = function (chart, axes, bounds) {\n var zoomRect = this.zoomingRect;\n var mode = this.zooming.mode;\n var argsData;\n var previousZF;\n var previousZP;\n var currentZF;\n var currentZP;\n this.isPanning = chart.zoomSettings.enablePan || this.isPanning;\n axes.forEach(function (axis) {\n previousZF = currentZF = axis.zoomFactor;\n previousZP = currentZP = axis.zoomPosition;\n argsData = {\n cancel: false, name: zoomComplete, axis: axis, previousZoomFactor: previousZF, previousZoomPosition: previousZP,\n currentZoomFactor: currentZF, currentZoomPosition: currentZP\n };\n if (axis.orientation === 'Horizontal') {\n if (mode !== 'Y') {\n currentZP += Math.abs((zoomRect.x - bounds.x) / (bounds.width)) * axis.zoomFactor;\n currentZF *= (zoomRect.width / bounds.width);\n argsData.currentZoomPosition = currentZP;\n argsData.currentZoomFactor = currentZF;\n chart.trigger(zoomComplete, argsData);\n }\n }\n else {\n if (mode !== 'X') {\n currentZP += (1 - Math.abs((zoomRect.height + (zoomRect.y - bounds.y)) / (bounds.height))) * axis.zoomFactor;\n currentZF *= (zoomRect.height / bounds.height);\n argsData.currentZoomFactor = currentZF;\n argsData.currentZoomPosition = currentZP;\n chart.trigger(zoomComplete, argsData);\n }\n }\n if (!argsData.cancel) {\n axis.zoomFactor = argsData.currentZoomFactor;\n axis.zoomPosition = argsData.currentZoomPosition;\n }\n });\n this.zoomingRect = new Rect(0, 0, 0, 0);\n this.performZoomRedraw(chart);\n };\n /**\n * Function that handles the Mouse wheel zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performMouseWheelZooming = function (e, mouseX, mouseY, chart, axes) {\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 1 : -1 : (e.wheelDelta / 120) > 0 ? 1 : -1;\n var mode = this.zooming.mode;\n var origin = 0.5;\n var cumulative;\n var zoomFactor;\n var zoomPosition;\n this.isZoomed = true;\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n chart.disableTrackTooltip = true;\n this.performedUI = true;\n this.isPanning = chart.zoomSettings.enablePan || this.isPanning;\n axes.forEach(function (axis) {\n if ((axis.orientation === 'Vertical' && mode !== 'X') ||\n (axis.orientation === 'Horizontal' && mode !== 'Y')) {\n cumulative = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * direction), 1);\n if (cumulative >= 1) {\n origin = axis.orientation === 'Horizontal' ? mouseX / axis.rect.width : 1 - (mouseY / axis.rect.height);\n origin = origin > 1 ? 1 : origin < 0 ? 0 : origin;\n zoomFactor = (cumulative === 1) ? 1 : minMax(1 / cumulative, 0, 1);\n zoomPosition = (cumulative === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - zoomFactor) * origin);\n if (axis.zoomPosition !== zoomPosition || axis.zoomFactor !== zoomFactor) {\n zoomFactor = (zoomPosition + zoomFactor) > 1 ? (1 - zoomPosition) : zoomFactor;\n }\n }\n axis.zoomFactor = zoomFactor;\n axis.zoomPosition = zoomPosition;\n }\n });\n this.performZoomRedraw(chart);\n };\n /**\n * Function that handles the Pinch zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performPinchZooming = function (e, chart) {\n if ((this.zoomingRect.width > 0 && this.zoomingRect.height > 0) || (chart.startMove && chart.crosshair.enable)) {\n return false;\n }\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n this.isZoomed = true;\n this.isPanning = true;\n this.performedUI = true;\n this.offset = !chart.delayRedraw ? chart.chartAxisLayoutPanel.seriesClipRect : this.offset;\n chart.delayRedraw = true;\n chart.disableTrackTooltip = true;\n var elementOffset = chart.element.getBoundingClientRect();\n var touchDown = this.touchStartList;\n var touchMove = this.touchMoveList;\n var touch0StartX = touchDown[0].pageX - elementOffset.left;\n var touch0StartY = touchDown[0].pageY - elementOffset.top;\n var touch0EndX = touchMove[0].pageX - elementOffset.left;\n var touch0EndY = touchMove[0].pageY - elementOffset.top;\n var touch1StartX = touchDown[1].pageX - elementOffset.left;\n var touch1StartY = touchDown[1].pageY - elementOffset.top;\n var touch1EndX = touchMove[1].pageX - elementOffset.left;\n var touch1EndY = touchMove[1].pageY - elementOffset.top;\n var scaleX;\n var scaleY;\n var translateXValue;\n var translateYValue;\n var pinchRect;\n var clipX;\n var clipY;\n scaleX = Math.abs(touch0EndX - touch1EndX) / Math.abs(touch0StartX - touch1StartX);\n scaleY = Math.abs(touch0EndY - touch1EndY) / Math.abs(touch0StartY - touch1StartY);\n clipX = ((this.offset.x - touch0EndX) / scaleX) + touch0StartX;\n clipY = ((this.offset.y - touch0EndY) / scaleY) + touch0StartY;\n pinchRect = new Rect(clipX, clipY, this.offset.width / scaleX, this.offset.height / scaleY);\n translateXValue = (touch0EndX - (scaleX * touch0StartX));\n translateYValue = (touch0EndY - (scaleY * touch0StartY));\n if (!isNaN(scaleX - scaleX) && !isNaN(scaleY - scaleY)) {\n switch (this.zooming.mode) {\n case 'XY':\n this.setTransform(translateXValue, translateYValue, scaleX, scaleY, chart, true);\n break;\n case 'X':\n this.setTransform(translateXValue, 0, scaleX, 1, chart, true);\n break;\n case 'Y':\n this.setTransform(0, translateYValue, 1, scaleY, chart, true);\n break;\n }\n }\n this.calculatePinchZoomFactor(chart, pinchRect);\n this.refreshAxis(chart.chartAxisLayoutPanel, chart, chart.axisCollections);\n return true;\n };\n Zoom.prototype.calculatePinchZoomFactor = function (chart, pinchRect) {\n var _this = this;\n var mode = this.zooming.mode;\n var selectionMin;\n var selectionMax;\n var rangeMin;\n var rangeMax;\n var value;\n var axisTrans;\n chart.axisCollections.forEach(function (axis, index) {\n if ((axis.orientation === 'Horizontal' && mode !== 'Y') ||\n (axis.orientation === 'Vertical' && mode !== 'X')) {\n if (axis.orientation === 'Horizontal') {\n value = pinchRect.x - _this.offset.x;\n axisTrans = axis.rect.width / _this.zoomAxes[index].delta;\n rangeMin = value / axisTrans + _this.zoomAxes[index].min;\n value = pinchRect.x + pinchRect.width - _this.offset.x;\n rangeMax = value / axisTrans + _this.zoomAxes[index].min;\n }\n else {\n value = pinchRect.y - _this.offset.y;\n axisTrans = axis.rect.height / _this.zoomAxes[index].delta;\n rangeMin = (value * -1 + axis.rect.height) / axisTrans + _this.zoomAxes[index].min;\n value = pinchRect.y + pinchRect.height - _this.offset.y;\n rangeMax = (value * -1 + axis.rect.height) / axisTrans + _this.zoomAxes[index].min;\n }\n selectionMin = Math.min(rangeMin, rangeMax);\n selectionMax = Math.max(rangeMin, rangeMax);\n axis.zoomPosition = (selectionMin - _this.zoomAxes[index].actualMin) / _this.zoomAxes[index].actualDelta;\n axis.zoomFactor = (selectionMax - selectionMin) / _this.zoomAxes[index].actualDelta;\n axis.zoomPosition = axis.zoomPosition < 0 ? 0 : axis.zoomPosition;\n axis.zoomFactor = axis.zoomFactor > 1 ? 1 : axis.zoomFactor;\n }\n });\n };\n // Series transformation style applied here.\n Zoom.prototype.setTransform = function (transX, transY, scaleX, scaleY, chart, isPinch) {\n chart.seriesElements.setAttribute('clip-path', 'url(#' + this.elementId + '_ChartAreaClipRect_)');\n if (chart.indicatorElements) {\n chart.indicatorElements.setAttribute('clip-path', 'url(#' + this.elementId + '_ChartAreaClipRect_)');\n }\n var translate;\n var xAxisLoc;\n var yAxisLoc;\n var element;\n if (transX !== null && transY !== null) {\n chart.visibleSeries.forEach(function (value) {\n xAxisLoc = chart.requireInvertedAxis ? value.yAxis.rect.x : value.xAxis.rect.x;\n yAxisLoc = chart.requireInvertedAxis ? value.xAxis.rect.y : value.yAxis.rect.y;\n translate = 'translate(' + (transX + (isPinch ? (scaleX * xAxisLoc) : xAxisLoc)) +\n ',' + (transY + (isPinch ? (scaleY * yAxisLoc) : yAxisLoc)) + ')';\n translate = (scaleX || scaleY) ? translate + ' scale(' + scaleX + ' ' + scaleY + ')' : translate;\n if (value.category === 'Indicator') {\n value.seriesElement.parentElement.setAttribute('transform', translate);\n }\n else {\n value.seriesElement.setAttribute('transform', translate);\n }\n element = getElement(chart.element.id + '_Series_' + value.index + '_DataLabelCollections');\n if (value.errorBarElement) {\n value.errorBarElement.setAttribute('transform', translate);\n }\n if (value.symbolElement) {\n value.symbolElement.setAttribute('transform', translate);\n }\n if (value.textElement) {\n value.textElement.setAttribute('visibility', 'hidden');\n value.shapeElement.setAttribute('visibility', 'hidden');\n }\n if (element) {\n element.style.visibility = 'hidden';\n }\n });\n }\n };\n Zoom.prototype.calculateZoomAxesRange = function (chart, axes) {\n var _this = this;\n var range;\n var axisRange;\n chart.axisCollections.forEach(function (axis, index) {\n axisRange = axis.visibleRange;\n if (_this.zoomAxes[index]) {\n if (!chart.delayRedraw) {\n _this.zoomAxes[index].min = axisRange.min;\n _this.zoomAxes[index].delta = axisRange.delta;\n }\n }\n else {\n range = {\n actualMin: axis.actualRange.min,\n actualDelta: axis.actualRange.delta,\n min: axisRange.min,\n delta: axisRange.delta\n };\n _this.zoomAxes[index] = range;\n }\n });\n };\n // Zooming Toolkit created here\n Zoom.prototype.showZoomingToolkit = function (chart) {\n var toolboxItems = this.zooming.toolbarItems;\n var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n var spacing = 5;\n var render = chart.renderer;\n var length = this.isDevice ? 1 : toolboxItems.length;\n var iconSize = this.isDevice ? measureText('Reset Zoom', { size: '12px' }).width : 16;\n var height = this.isDevice ? measureText('Reset Zoom', { size: '12px' }).height : 22;\n var width = (length * iconSize) + ((length + 1) * spacing) + ((length - 1) * spacing);\n var transX = areaBounds.x + areaBounds.width - width - spacing;\n var transY = (areaBounds.y + spacing);\n var xPosition = spacing;\n var outerElement;\n var toolkit = this.toolkit;\n var element;\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n if (length === 0 || getElement(this.elementId + '_Zooming_KitCollection')) {\n return false;\n }\n var defElement = render.createDefs();\n toolboxItems = this.isDevice ? ['Reset'] : toolboxItems;\n defElement.innerHTML = shadowElement;\n this.toolkitElements = render.createGroup({\n id: this.elementId + '_Zooming_KitCollection',\n transform: 'translate(' + transX + ',' + transY + ')'\n });\n this.toolkitElements.appendChild(defElement);\n this.toolkitElements.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', '#fafafa', { color: 'transparent', width: 1 }, 1, new Rect(0, 0, width, (height + (spacing * 2))), 0, 0)));\n outerElement = render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', '#fafafa', { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, width, (height + (spacing * 2))), 0, 0));\n outerElement.setAttribute('filter', 'url(#chart_shadow)');\n this.toolkitElements.appendChild(outerElement);\n var currentItem;\n for (var i = 1; i <= length; i++) {\n currentItem = toolboxItems[i - 1];\n element = render.createGroup({\n transform: 'translate(' + xPosition + ',' + (this.isDevice ? spacing : (spacing + 3)) + ')'\n });\n // for desktop toolkit hight is 32 and top padding is 8 icon size 16\n switch (currentItem) {\n case 'Pan':\n toolkit.createPanButton(element, this.toolkitElements, chart);\n break;\n case 'Zoom':\n toolkit.createZoomButton(element, this.toolkitElements, chart);\n break;\n case 'ZoomIn':\n toolkit.createZoomInButton(element, this.toolkitElements, chart);\n break;\n case 'ZoomOut':\n toolkit.createZoomOutButton(element, this.toolkitElements, chart);\n break;\n case 'Reset':\n toolkit.createResetButton(element, this.toolkitElements, chart, this.isDevice);\n break;\n }\n xPosition += iconSize + (spacing * 2);\n }\n this.toolkitElements.setAttribute('opacity', this.isDevice ? '1' : '' + this.zoomkitOpacity);\n this.toolkitElements.setAttribute('cursor', 'auto');\n chart.svgObject.appendChild(this.toolkitElements);\n if (!this.isDevice) {\n EventHandler.add(this.toolkitElements, 'mousemove touchstart', this.zoomToolkitMove, this);\n EventHandler.add(this.toolkitElements, 'mouseleave touchend', this.zoomToolkitLeave, this);\n if (this.isPanning) {\n toolkit.pan();\n }\n }\n return true;\n };\n /**\n * To the show the zooming toolkit.\n * @return {void}\n * @private\n */\n Zoom.prototype.applyZoomToolkit = function (chart, axes) {\n var showToolkit = this.isAxisZoomed(axes);\n if (showToolkit) {\n this.showZoomingToolkit(chart);\n this.isZoomed = true;\n }\n else {\n this.toolkit.removeTooltip();\n this.isPanning = false;\n this.isZoomed = false;\n chart.svgObject.setAttribute('cursor', 'auto');\n }\n };\n /**\n * Return boolean property to show zooming toolkit.\n * @return {void}\n * @private\n */\n Zoom.prototype.isAxisZoomed = function (axes) {\n var showToolkit = false;\n axes.forEach(function (axis) {\n showToolkit = (showToolkit || (axis.zoomFactor !== 1 || axis.zoomPosition !== 0));\n });\n return showToolkit;\n };\n Zoom.prototype.zoomToolkitMove = function (e) {\n var element = this.toolkitElements;\n var opacity = +element.getAttribute('opacity');\n this.zoomkitOpacity = 1;\n element.setAttribute('opacity', '' + this.zoomkitOpacity);\n return false;\n };\n Zoom.prototype.zoomToolkitLeave = function (e) {\n var element = this.toolkitElements;\n this.zoomkitOpacity = 0.3;\n element.setAttribute('opacity', '' + this.zoomkitOpacity);\n return false;\n };\n /**\n * @hidden\n */\n Zoom.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n EventHandler.add(this.chart.element, this.wheelEvent, this.chartMouseWheel, this);\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.chart.on(this.cancelEvent, this.mouseCancelHandler, this);\n };\n /**\n * @hidden\n */\n Zoom.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n EventHandler.remove(this.chart.element, this.wheelEvent, this.chartMouseWheel);\n this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.chart.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.chart.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.chart.off(this.cancelEvent, this.mouseCancelHandler);\n };\n /**\n * Handles the mouse wheel on chart.\n * @return {boolean}\n * @private\n */\n Zoom.prototype.chartMouseWheel = function (e) {\n var chart = this.chart;\n var offset = chart.element.getBoundingClientRect();\n var svgRect = getElement(chart.element.id + '_svg').getBoundingClientRect();\n var mouseX = (e.clientX - offset.left) - Math.max(svgRect.left - offset.left, 0);\n var mouseY = (e.clientY - offset.top) - Math.max(svgRect.top - offset.top, 0);\n if (this.zooming.enableMouseWheelZooming &&\n withInBounds(mouseX, mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n e.preventDefault();\n this.performMouseWheelZooming(e, mouseX, mouseY, chart, chart.axisCollections);\n }\n return false;\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseMoveHandler = function (e) {\n //Zooming for chart\n var chart = this.chart;\n var touches = null;\n if (e.type === 'touchmove') {\n if (e.preventDefault && this.isIOS &&\n (this.isPanning || (chart.isDoubleTap)\n || (this.zooming.enablePinchZooming && this.touchStartList.length > 1))) {\n e.preventDefault();\n }\n touches = e.touches;\n }\n if (chart.isChartDrag) {\n if (chart.isTouch) {\n this.touchMoveList = this.addTouchPointer(this.touchMoveList, e, touches);\n if (this.zooming.enablePinchZooming && this.touchMoveList.length > 1\n && this.touchStartList.length > 1) {\n this.performPinchZooming(e, chart);\n }\n }\n this.renderZooming(e, chart, chart.isTouch);\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseDownHandler = function (e) {\n //Zooming for chart\n var chart = this.chart;\n var touches = null;\n var target;\n if (e.type === 'touchstart') {\n touches = e.touches;\n target = e.target;\n }\n else {\n target = e.target;\n }\n if (target.id.indexOf(chart.element.id + '_Zooming_') === -1 &&\n withInBounds(chart.previousMouseMoveX, chart.previousMouseMoveY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n chart.isChartDrag = true;\n }\n if (chart.isTouch) {\n this.touchStartList = this.addTouchPointer(this.touchStartList, e, touches);\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseUpHandler = function (e) {\n var chart = this.chart;\n var performZoomRedraw = e.target.id.indexOf(chart.element.id + '_ZoomOut_') === -1 ||\n e.target.id.indexOf(chart.element.id + '_ZoomIn_') === -1;\n if (chart.isChartDrag || performZoomRedraw) {\n this.performZoomRedraw(chart);\n }\n if (chart.isTouch) {\n if (chart.isDoubleTap && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)\n && this.touchStartList.length === 1 && this.isZoomed) {\n this.toolkit.reset();\n }\n this.touchStartList = [];\n chart.isDoubleTap = false;\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseCancelHandler = function (e) {\n if (this.isZoomed) {\n this.performZoomRedraw(this.chart);\n }\n this.pinchTarget = null;\n this.touchStartList = [];\n this.touchMoveList = [];\n };\n /**\n * Handles the touch pointer.\n * @return {boolean}\n * @private\n */\n Zoom.prototype.addTouchPointer = function (touchList, e, touches) {\n if (touches) {\n touchList = [];\n for (var i = 0, length_1 = touches.length; i < length_1; i++) {\n touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n }\n }\n else {\n touchList = touchList ? touchList : [];\n if (touchList.length === 0) {\n touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n }\n else {\n for (var i = 0, length_2 = touchList.length; i < length_2; i++) {\n if (touchList[i].pointerId === e.pointerId) {\n touchList[i] = { pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId };\n }\n else {\n touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n }\n }\n }\n }\n return touchList;\n };\n /**\n * Get module name.\n */\n Zoom.prototype.getModuleName = function () {\n // Returns te module name\n return 'Zoom';\n };\n /**\n * To destroy the zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.destroy = function (chart) {\n // Destroy method performed here\n this.removeEventListener();\n };\n return Zoom;\n}());\nexport { Zoom };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Selection Module handles the selection for chart.\n * @private\n */\nvar BaseSelection = /** @class */ (function () {\n function BaseSelection(control) {\n this.control = control;\n }\n /**\n * To create selection styles for series\n */\n BaseSelection.prototype.seriesStyles = function () {\n var seriesclass;\n var style = document.getElementById(this.styleId);\n if (isNullOrUndefined(style)) {\n style = document.createElement('style');\n style.setAttribute('id', this.styleId);\n for (var _i = 0, _a = this.control.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n seriesclass = series.selectionStyle || this.styleId + '_series_' + series.index;\n style.innerHTML += series.selectionStyle ? '' : '.' + seriesclass + ' { } ';\n }\n style.innerHTML += '.' + this.unselected + ' { opacity:' + (0.3) + ';} ';\n document.body.appendChild(style);\n }\n };\n /**\n * To concat indexes\n */\n BaseSelection.prototype.concatIndexes = function (userIndexes, localIndexes) {\n return userIndexes.concat(localIndexes);\n };\n /**\n * Selected points series visibility checking on legend click\n */\n BaseSelection.prototype.checkVisibility = function (selectedIndexes) {\n var visible = false;\n var uniqueSeries = [];\n for (var _i = 0, selectedIndexes_1 = selectedIndexes; _i < selectedIndexes_1.length; _i++) {\n var index = selectedIndexes_1[_i];\n if (uniqueSeries.indexOf(index.series) === -1) {\n uniqueSeries.push(index.series);\n }\n }\n for (var _a = 0, uniqueSeries_1 = uniqueSeries; _a < uniqueSeries_1.length; _a++) {\n var index = uniqueSeries_1[_a];\n if (this.control.series[index].visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * To add svg element style class\n * @private\n */\n BaseSelection.prototype.addSvgClass = function (element, className) {\n var elementClassName = element.getAttribute('class') || '';\n elementClassName += ((elementClassName !== '') ? ' ' : '');\n if (elementClassName.indexOf(className) === -1) {\n element.setAttribute('class', elementClassName + className);\n }\n };\n /**\n * To remove svg element style class\n * @private\n */\n BaseSelection.prototype.removeSvgClass = function (element, className) {\n var elementClassName = element.getAttribute('class') || '';\n if (elementClassName.indexOf(className) > -1) {\n element.setAttribute('class', elementClassName.replace(className, ''));\n }\n };\n /**\n * To get children from parent element\n */\n BaseSelection.prototype.getChildren = function (parent) {\n var children = [];\n for (var i = 0; i < parent.childNodes.length; i++) {\n if (parent.childNodes[i].tagName !== 'defs') {\n children.push(parent.childNodes[i]);\n }\n }\n return children;\n };\n return BaseSelection;\n}());\nexport { BaseSelection };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * Selection src file\n */\nimport { Browser } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ChartLocation, Rect, RectOption, CircleOption, withInBounds, getDraggedRectLocation, removeElement, getElement } from '../../common/utils/helper';\nimport { Index } from '../../common/model/base';\nimport { dragComplete } from '../../common/model/constants';\nimport { BaseSelection } from '../../common/user-interaction/selection';\n/**\n * `Selection` module handles the selection for chart.\n * @private\n */\nvar Selection = /** @class */ (function (_super) {\n __extends(Selection, _super);\n /**\n * Constructor for selection module.\n * @private.\n */\n function Selection(chart) {\n var _this = _super.call(this, chart) || this;\n _this.chart = chart;\n _this.renderer = chart.renderer;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for selection module.\n */\n Selection.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on(cancelEvent, this.completeSelection, this);\n this.chart.on('click', this.calculateSelectedElements, this);\n this.chart.on(Browser.touchStartEvent, this.mousedown, this);\n this.chart.on(Browser.touchEndEvent, this.completeSelection, this);\n };\n /**\n * Chart mouse down\n */\n Selection.prototype.mousedown = function (e) {\n var chart = this.chart;\n if (chart.selectionMode === 'None' || chart.isChartDrag) {\n return;\n }\n if (chart.isDoubleTap || !chart.isTouch || this.rectPoints) {\n this.dragStart(chart, chart.chartAxisLayoutPanel.seriesClipRect, chart.mouseDownX, chart.mouseDownY, e);\n }\n };\n /**\n * UnBinding events for selection module.\n */\n Selection.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('pointerleave' || 'mouseleave', this.completeSelection);\n this.chart.off('click', this.calculateSelectedElements);\n this.chart.off(Browser.touchStartEvent, this.mousedown);\n this.chart.off(Browser.touchEndEvent, this.completeSelection);\n };\n /**\n * To find private variable values\n */\n Selection.prototype.initPrivateVariables = function (chart) {\n this.styleId = chart.element.id + '_ej2_chart_selection';\n this.unselected = chart.element.id + '_ej2_deselected';\n this.closeIconId = chart.element.id + '_ej2_drag_close';\n this.draggedRectGroup = chart.element.id + '_ej2_drag_group';\n this.draggedRect = chart.element.id + '_ej2_drag_rect';\n this.selectedDataIndexes = [];\n this.rectPoints = null;\n this.isSeriesMode = chart.selectionMode === 'Series';\n };\n /**\n * Method to select the point and series.\n * @return {void}\n */\n Selection.prototype.invokeSelection = function (chart) {\n this.initPrivateVariables(chart);\n this.series = extend({}, chart.visibleSeries, null, true);\n this.seriesStyles();\n if (!(chart.selectionMode.indexOf('Drag') > -1)) {\n this.selectDataIndex(chart, this.concatIndexes(chart.selectedDataIndexes, this.selectedDataIndexes));\n }\n };\n Selection.prototype.generateStyle = function (series) {\n if (series) {\n return (series.selectionStyle || this.styleId + '_series_' + series.index);\n }\n return 'undefined';\n };\n Selection.prototype.selectDataIndex = function (chart, indexes) {\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\n var index = indexes_1[_i];\n this.performSelection(index, chart, this.getElementByIndex(chart, index)[0]);\n }\n };\n Selection.prototype.getElementByIndex = function (chart, index, suffix) {\n if (suffix === void 0) { suffix = ''; }\n var elementId = chart.element.id + '_Series_' + index.series + '_Point' + '_' + index.point;\n var series = chart.series[index.series];\n elementId = (!series.isRectSeries && series.type !== 'Scatter' && series.type !== 'Bubble' &&\n series.marker.visible) ? (elementId + '_Symbol' + suffix) : elementId;\n return [getElement(elementId), (series.type === 'RangeArea' && series.marker.visible) ? getElement(elementId + '1') : null];\n };\n Selection.prototype.getClusterElements = function (chart, index) {\n var clusters = [];\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n index = new Index(series.index, index.point);\n clusters.push(this.getElementByIndex(chart, index)[0]);\n }\n return clusters;\n };\n Selection.prototype.findElements = function (chart, series, index, suffix) {\n if (suffix === void 0) { suffix = ''; }\n if (this.isSeriesMode) {\n return this.getSeriesElements(series);\n }\n else if (chart.selectionMode === 'Cluster') {\n return this.getClusterElements(chart, index);\n }\n else {\n return this.getElementByIndex(chart, index, suffix);\n }\n };\n /**\n * To find the selected element.\n * @return {void}\n * @private\n */\n Selection.prototype.calculateSelectedElements = function (event) {\n if (this.chart.selectionMode === 'None' || event.target.id.indexOf(this.chart.element.id + '_') === -1) {\n return;\n }\n if (event.target.id.indexOf('_Series_') > -1) {\n this.performSelection(this.indexFinder(event.target.id), this.chart, event.target);\n }\n };\n Selection.prototype.performSelection = function (index, chart, element) {\n this.isSeriesMode = chart.selectionMode === 'Series';\n if (chart.series[index.series].type === 'BoxAndWhisker' &&\n element.id === chart.element.id + '_Series_' + index.series + '_Point_' + index.point + '_BoxPath') {\n element = element.parentElement;\n }\n switch (chart.selectionMode) {\n case 'Series':\n this.selection(chart, index, this.getSeriesElements(chart.series[index.series]));\n this.blurEffect(chart.element.id, chart.visibleSeries);\n break;\n case 'Point':\n if (!isNaN(index.point)) {\n this.selection(chart, index, [element]);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n break;\n case 'Cluster':\n if (!isNaN(index.point)) {\n this.clusterSelection(chart, chart.series, index);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n break;\n }\n };\n Selection.prototype.selection = function (chart, index, selectedElements) {\n if (!chart.isMultiSelect && (chart.selectionMode.indexOf('Drag') === -1)) {\n this.removeMultiSelectEelments(chart, this.selectedDataIndexes, index, chart.series);\n }\n var className = selectedElements[0] && (selectedElements[0].getAttribute('class') || '');\n if (selectedElements[0] && className.indexOf(this.getSelectionClass(selectedElements[0].id)) > -1) {\n this.removeStyles(selectedElements);\n this.addOrRemoveIndex(this.selectedDataIndexes, index);\n }\n else {\n this.applyStyles(selectedElements);\n this.addOrRemoveIndex(this.selectedDataIndexes, index, true);\n }\n };\n Selection.prototype.clusterSelection = function (chart, series, index) {\n this.selection(chart, index, this.getClusterElements(chart, new Index(index.series, index.point)));\n };\n Selection.prototype.removeMultiSelectEelments = function (chart, index, currentIndex, seriesCollection) {\n var series;\n for (var i = 0; i < index.length; i++) {\n series = seriesCollection[index[i].series];\n if ((this.isSeriesMode && !this.toEquals(index[i], currentIndex, this.isSeriesMode)) ||\n (this.control.selectionMode === 'Cluster' && !this.toEquals(index[i], currentIndex, false)) ||\n (!this.isSeriesMode && this.toEquals(index[i], currentIndex, true) && !this.toEquals(index[i], currentIndex, false))) {\n this.removeStyles(this.findElements(chart, series, index[i]));\n index.splice(i, 1);\n i--;\n }\n }\n };\n Selection.prototype.blurEffect = function (chartId, visibleSeries) {\n var visibility = this.checkVisibility(this.selectedDataIndexes); // legend click scenario\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (series.visible) {\n this.checkSelectionElements(getElement(chartId + 'SeriesGroup' + series.index), this.generateStyle(series), visibility);\n if (!isNullOrUndefined(getElement(chartId + 'SymbolGroup' + series.index))) {\n this.checkSelectionElements(getElement(chartId + 'SymbolGroup' + series.index), this.generateStyle(series), visibility);\n }\n }\n }\n };\n Selection.prototype.checkSelectionElements = function (element, className, visibility) {\n var children = (this.isSeriesMode ? [element] : element.childNodes);\n var elementClassName;\n var parentClassName;\n var legendShape;\n var selectElement = element;\n for (var i = 0; i < children.length; i++) {\n elementClassName = children[i].getAttribute('class') || '';\n parentClassName = children[i].parentNode.getAttribute('class') || '';\n if (elementClassName.indexOf(className) === -1 &&\n parentClassName.indexOf(className) === -1 && visibility) {\n this.addSvgClass(children[i], this.unselected);\n }\n else {\n selectElement = children[i];\n this.removeSvgClass(children[i], this.unselected);\n }\n }\n if (this.control.legendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + className.split('_series_')[1]);\n if (legendShape) {\n elementClassName = selectElement.getAttribute('class') || '';\n parentClassName = selectElement.parentNode.getAttribute('class') || '';\n if (elementClassName.indexOf(className) === -1 && parentClassName.indexOf(className) === -1 && visibility) {\n this.addSvgClass(legendShape, this.unselected);\n }\n else {\n this.removeSvgClass(legendShape, this.unselected);\n }\n }\n }\n };\n Selection.prototype.applyStyles = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n if (element) {\n this.removeSvgClass(element.parentNode, this.unselected);\n this.removeSvgClass(element, this.unselected);\n this.addSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n Selection.prototype.getSelectionClass = function (id) {\n return this.generateStyle(this.control.series[this.indexFinder(id).series]);\n };\n Selection.prototype.removeStyles = function (elements) {\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n if (element) {\n this.removeSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n Selection.prototype.addOrRemoveIndex = function (indexes, index, add) {\n for (var i = 0; i < indexes.length; i++) {\n if (this.toEquals(indexes[i], index, this.isSeriesMode)) {\n indexes.splice(i, 1);\n i--;\n }\n }\n if (add) {\n indexes.push(index);\n }\n };\n Selection.prototype.toEquals = function (first, second, checkSeriesOnly) {\n return ((first.series === second.series || (this.control.selectionMode === 'Cluster' && !checkSeriesOnly))\n && (checkSeriesOnly || (first.point === second.point)));\n };\n /**\n * To redraw the selected points.\n * @return {void}\n * @private\n */\n Selection.prototype.redrawSelection = function (chart, oldMode) {\n this.isSeriesMode = oldMode === 'Series';\n var selectedDataIndexes = extend([], this.selectedDataIndexes, null, true);\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n this.selectDataIndex(chart, selectedDataIndexes);\n };\n /** @private */\n Selection.prototype.legendSelection = function (chart, series) {\n var seriesStyle = this.generateStyle(chart.visibleSeries[series]);\n var selectedElements = document.getElementsByClassName(seriesStyle);\n this.isSeriesMode = chart.selectionMode === 'Series';\n var isBlurEffectNeeded = true;\n if (selectedElements.length > 0) {\n var elements = [];\n for (var i = 0; i < selectedElements.length; i++) {\n elements.push(selectedElements[i]);\n }\n this.removeStyles(elements);\n this.isSeriesMode = true;\n this.addOrRemoveIndex(this.selectedDataIndexes, new Index(series, NaN));\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n seriesStyle = this.generateStyle(series_1);\n if (document.getElementsByClassName(seriesStyle).length > 0) {\n for (var _b = 0, elements_3 = elements; _b < elements_3.length; _b++) {\n var element = elements_3[_b];\n this.checkSelectionElements(element, seriesStyle, true);\n }\n isBlurEffectNeeded = false;\n break;\n }\n }\n if (isBlurEffectNeeded) {\n this.isSeriesMode = chart.selectionMode === 'Series';\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n }\n else {\n var seriesElements = this.getSeriesElements(chart.visibleSeries[series]);\n for (var _c = 0, seriesElements_1 = seriesElements; _c < seriesElements_1.length; _c++) {\n var seriesElement = seriesElements_1[_c];\n this.checkSelectionElements(seriesElement, seriesStyle, false);\n }\n this.isSeriesMode = true;\n this.selection(chart, new Index(series, NaN), seriesElements);\n this.isSeriesMode = chart.selectionMode === 'Series';\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n };\n Selection.prototype.getSeriesElements = function (series) {\n var seriesElements = [series.seriesElement];\n if (series.marker.visible && series.type !== 'Scatter' && series.type !== 'Bubble' && !series.isRectSeries) {\n seriesElements.push(series.symbolElement);\n }\n return seriesElements;\n };\n Selection.prototype.indexFinder = function (id) {\n var ids = ['NaN', 'NaN'];\n if (id.indexOf('SeriesGroup') > -1) {\n ids = id.split('SeriesGroup');\n ids[0] = ids[1];\n }\n else if (id.indexOf('SymbolGroup') > -1) {\n ids = id.split('SymbolGroup');\n ids[0] = ids[1];\n }\n else if (id.indexOf('_Point_') > -1) {\n ids = id.split('_Series_')[1].split('_Point_');\n }\n else if (id.indexOf('_Series_') > -1) {\n ids[0] = id.split('_Series_')[1];\n }\n return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n };\n /**\n * Drag selection that returns the selected data.\n * @return {void}\n * @private\n */\n Selection.prototype.calculateDragSelectedElements = function (chart, dragRect) {\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n var rect = new Rect(dragRect.x, dragRect.y, dragRect.width, dragRect.height);\n var axisOffset = new ChartLocation(chart.chartAxisLayoutPanel.seriesClipRect.x, chart.chartAxisLayoutPanel.seriesClipRect.y);\n this.removeOffset(rect, axisOffset);\n var points;\n var index;\n var selectedPointValues = [];\n var selectedSeriesValues = [];\n this.isSeriesMode = false;\n var symbolLocation;\n var _loop_1 = function (series) {\n if (series.visible) {\n points = series.points;\n selectedPointValues = [];\n var xAxisOffset_1;\n var yAxisOffset_1;\n if ((chart.isTransposed || series.type.indexOf('Bar') !== -1) &&\n !(chart.isTransposed && series.type.indexOf('Bar') !== -1)) {\n xAxisOffset_1 = series.xAxis.rect.y - axisOffset.y;\n yAxisOffset_1 = series.yAxis.rect.x - axisOffset.x;\n }\n else {\n xAxisOffset_1 = series.xAxis.rect.x - axisOffset.x;\n yAxisOffset_1 = series.yAxis.rect.y - axisOffset.y;\n }\n for (var j = 0; j < points.length; j++) {\n var yValue = series.type !== 'RangeArea' ? points[j].yValue :\n points[j].regions[0].y;\n var isCurrentPoint = void 0;\n if (series.type === 'BoxAndWhisker') {\n isCurrentPoint = points[j].regions.some(function (region) {\n return withInBounds(region.x + xAxisOffset_1, region.y + yAxisOffset_1, rect);\n });\n }\n else {\n isCurrentPoint = points[j].symbolLocations.some(function (location) {\n return location && withInBounds(location.x + xAxisOffset_1, location.y + yAxisOffset_1, rect);\n });\n }\n if (isCurrentPoint && series.category !== 'Indicator') {\n index = new Index(series.index, points[j].index);\n this_1.selection(chart, index, this_1.findElements(chart, series, index));\n selectedPointValues.push({ x: points[j].xValue.toString(), y: yValue });\n }\n if (isCurrentPoint && series.type === 'RangeArea') {\n selectedPointValues.push({ x: points[j].xValue.toString(), y: points[j].regions[0].y });\n }\n }\n selectedSeriesValues.push(selectedPointValues);\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n _loop_1(series);\n }\n this.blurEffect(chart.element.id, chart.visibleSeries);\n this.rectPoints = new Rect(dragRect.x, dragRect.y, dragRect.width, dragRect.height);\n this.createCloseButton((dragRect.x + dragRect.width), dragRect.y);\n var args = {\n name: dragComplete,\n selectedDataValues: selectedSeriesValues,\n cancel: false\n };\n chart.trigger(dragComplete, args);\n };\n Selection.prototype.removeOffset = function (rect, clip) {\n rect.x -= clip.x;\n rect.y -= clip.y;\n };\n /**\n * Method to draw dragging rect.\n * @return {void}\n * @private\n */\n Selection.prototype.drawDraggingRect = function (chart, dragRect) {\n var cartesianLayout = chart.chartAxisLayoutPanel.seriesClipRect;\n switch (chart.selectionMode) {\n case 'DragX':\n dragRect.y = cartesianLayout.y;\n dragRect.height = cartesianLayout.height;\n break;\n case 'DragY':\n dragRect.x = cartesianLayout.x;\n dragRect.width = cartesianLayout.width;\n break;\n }\n if (dragRect.width < 5 || dragRect.height < 5) {\n return null;\n }\n var element = getElement(this.draggedRect);\n if (this.closeIcon) {\n removeElement(this.closeIconId);\n }\n if (element) {\n this.setAttributes(element, dragRect);\n }\n else {\n var dragGroup = chart.renderer.createGroup({ id: this.draggedRectGroup });\n chart.svgObject.appendChild(dragGroup);\n element = chart.renderer.drawRectangle(new RectOption(this.draggedRect, chart.themeStyle.selectionRectFill, { color: chart.themeStyle.selectionRectStroke, width: 1 }, 1, dragRect));\n element.setAttribute('style', 'cursor:move;');\n dragGroup.appendChild(element);\n }\n };\n Selection.prototype.createCloseButton = function (x, y) {\n var closeIcon = this.chart.renderer.createGroup({\n id: this.closeIconId,\n style: 'cursor:pointer; visibility: visible;'\n });\n closeIcon.appendChild(this.chart.renderer.drawCircle(new CircleOption(this.closeIconId + '_circle', '#FFFFFF', { color: this.chart.themeStyle.selectionCircleStroke, width: 1 }, 1, x, y, 10)));\n var direction = 'M ' + (x - 4) + ' ' + (y - 4) + ' L ' + (x + 4) + ' ' + (y + 4) + ' M ' + (x - 4) + ' ' + (y + 4) +\n ' L ' + (x + 4) + ' ' + (y - 4);\n closeIcon.appendChild(this.chart.renderer.drawPath({\n id: this.closeIconId + '_cross', d: direction,\n stroke: this.chart.themeStyle.selectionCircleStroke,\n 'stroke-width': 2, fill: this.chart.themeStyle.selectionCircleStroke\n }));\n this.closeIcon = closeIcon;\n getElement(this.draggedRectGroup).appendChild(closeIcon);\n };\n /**\n * Method to remove dragged element.\n * @return {void}\n * @private\n */\n Selection.prototype.removeDraggedElements = function (chart, event) {\n if ((event.target.id.indexOf(this.closeIconId) > -1) && (event.type.indexOf('move') === -1)) {\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n remove(getElement(this.draggedRectGroup));\n this.changeCursorStyle(false, chart.svgObject, 'auto');\n this.rectPoints = null;\n }\n };\n /**\n * Method to resize the drag rect.\n * @return {void}\n * @private\n */\n Selection.prototype.resizingSelectionRect = function (chart, location, tapped) {\n var rect = new Rect(this.rectPoints.x, this.rectPoints.y, this.rectPoints.width, this.rectPoints.height);\n var resize = this.findResizeMode(chart.svgObject, rect, location);\n if (this.resizing) {\n rect = getDraggedRectLocation(rect.x, rect.y, (rect.x + rect.width), (rect.y + rect.height), chart.chartAxisLayoutPanel.seriesClipRect);\n this.drawDraggingRect(chart, rect);\n this.dragRect = rect;\n }\n if (tapped) {\n this.resizing = resize;\n }\n };\n Selection.prototype.findResizeMode = function (chartSvgObject, rect, location) {\n var cursorStyle = 'se-resize';\n var resize = false;\n if (!this.resizing) {\n var resizeEdges = [new Rect(rect.x, (rect.y - 10), rect.width - 5, 20),\n new Rect((rect.x - 10), rect.y, 20, rect.height),\n new Rect(rect.x, (rect.y + rect.height - 10), rect.width - 10, 20),\n new Rect((rect.x + rect.width - 10), rect.y + 5, 20, rect.height - 15),\n new Rect((rect.x + rect.width - 10), (rect.y + rect.height - 10), 20, 20)]; //corner\n for (var i = 0; i < resizeEdges.length; i++) {\n if (withInBounds(location.x, location.y, resizeEdges[i])) {\n cursorStyle = (i === 4) ? cursorStyle : (i % 2 === 0) ? 'ns-resize' : 'ew-resize';\n resize = true;\n this.resizeMode = i;\n break;\n }\n }\n }\n else {\n var x = rect.x;\n var y = rect.y;\n var width = (location.x - x);\n var height = (location.y - y);\n switch (this.resizeMode) {\n case 0:\n height = Math.abs((rect.height + rect.y) - location.y);\n rect.y = Math.min((rect.height + rect.y), location.y);\n rect.height = height;\n break;\n case 1:\n width = Math.abs((rect.width + rect.x) - location.x);\n rect.x = Math.min((rect.width + rect.x), location.x);\n rect.width = width;\n break;\n case 2:\n rect.height = Math.abs(height);\n rect.y = Math.min(location.y, y);\n break;\n case 3:\n rect.width = Math.abs(width);\n rect.x = Math.min(location.x, x);\n break;\n case 4:\n rect.width = Math.abs(width);\n rect.height = Math.abs(height);\n rect.x = Math.min(location.x, x);\n rect.y = Math.min(location.y, y);\n break;\n }\n }\n this.changeCursorStyle(resize, getElement(this.draggedRect), cursorStyle);\n this.changeCursorStyle(resize, chartSvgObject, cursorStyle);\n return resize;\n };\n Selection.prototype.changeCursorStyle = function (isResize, rectelement, cursorStyle) {\n cursorStyle = isResize ? cursorStyle : (this.control.svgObject === rectelement) ? 'auto' : 'move';\n rectelement.setAttribute('style', 'cursor:' + cursorStyle + ';');\n };\n Selection.prototype.removeSelectedElements = function (chart, index, seriesCollection) {\n index.splice(0, index.length);\n var seriesElements;\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n seriesElements = this.getSeriesElements(series);\n this.removeStyles(seriesElements);\n for (var _a = 0, seriesElements_2 = seriesElements; _a < seriesElements_2.length; _a++) {\n var seriesElement = seriesElements_2[_a];\n this.removeStyles(this.getChildren(seriesElement));\n }\n }\n };\n Selection.prototype.setAttributes = function (ele, object) {\n var keys = Object.keys(object);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, object[key]);\n }\n };\n /**\n * Method to move the dragged rect.\n * @return {void}\n * @private\n */\n Selection.prototype.draggedRectMoved = function (chart, grabbedPoint, doDrawing) {\n var rect = new Rect(this.rectPoints.x, this.rectPoints.y, this.rectPoints.width, this.rectPoints.height);\n rect.x -= (grabbedPoint.x - chart.mouseX);\n rect.y -= (grabbedPoint.y - chart.mouseY);\n rect = getDraggedRectLocation(rect.x, rect.y, rect.x + rect.width, rect.height + rect.y, chart.chartAxisLayoutPanel.seriesClipRect);\n if (doDrawing) {\n this.drawDraggingRect(chart, rect);\n }\n else {\n this.calculateDragSelectedElements(chart, rect);\n }\n };\n /**\n * To complete the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.completeSelection = function (e) {\n var chart = this.chart;\n if (chart.selectionMode === 'None') {\n return;\n }\n if ((this.dragging || this.resizing) && this.dragRect.width > 5 && this.dragRect.height > 5) {\n this.calculateDragSelectedElements(chart, this.dragRect);\n }\n else if (this.rectGrabbing && this.rectPoints.width && this.rectPoints.height) {\n this.draggedRectMoved(chart, this.dragRect);\n }\n this.dragging = false;\n this.rectGrabbing = false;\n this.resizing = false;\n this.removeDraggedElements(chart, e);\n };\n Selection.prototype.getDragRect = function (chart, seriesClipRect) {\n return getDraggedRectLocation(chart.mouseDownX, chart.mouseDownY, chart.mouseX, chart.mouseY, seriesClipRect);\n };\n /** @private */\n Selection.prototype.dragStart = function (chart, seriesClipRect, mouseDownX, mouseDownY, event) {\n this.dragging = (chart.selectionMode.indexOf('Drag') > -1) && (chart.isDoubleTap || !chart.isTouch) &&\n chart.chartAreaType !== 'PolarRadar';\n if (this.dragging) {\n this.dragRect = new Rect(chart.mouseDownX, chart.mouseDownY, 0, 0);\n if (chart.mouseDownX < seriesClipRect.x || chart.mouseDownX > (seriesClipRect.x + seriesClipRect.width) ||\n chart.mouseDownY < seriesClipRect.y || chart.mouseDownY > (seriesClipRect.y + seriesClipRect.height)) {\n this.dragging = false;\n }\n }\n if (this.rectPoints) {\n this.dragRect = new Rect(chart.mouseDownX, chart.mouseDownY, 0, 0);\n this.resizingSelectionRect(chart, new ChartLocation(mouseDownX, mouseDownY), true);\n this.rectGrabbing = withInBounds(mouseDownX, mouseDownY, this.rectPoints);\n }\n };\n /** @private */\n Selection.prototype.mouseMove = function (event) {\n var chart = this.chart;\n if (chart.selectionMode === 'None') {\n return;\n }\n if (event.type === 'touchmove' && (Browser.isIos || Browser.isIos7) && this.dragging && event.preventDefault) {\n event.preventDefault();\n }\n var insideMoving = withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect);\n if (insideMoving) {\n if (this.rectGrabbing && !this.resizing) {\n this.draggedRectMoved(chart, this.dragRect, true);\n }\n else if (this.dragging && !this.resizing) {\n this.dragRect = this.getDragRect(chart, chart.chartAxisLayoutPanel.seriesClipRect);\n this.drawDraggingRect(chart, this.dragRect);\n }\n if (this.rectPoints) {\n this.resizingSelectionRect(chart, new ChartLocation(chart.mouseX, chart.mouseY));\n }\n }\n else {\n this.completeSelection(event);\n }\n };\n /**\n * Get module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.destroy = function (chart) {\n this.removeEventListener();\n // Destroy method performed here\n };\n return Selection;\n}(BaseSelection));\nexport { Selection };\n","import { ChartLocation, Rect, TextOption, RectOption, isCollide, markerAnimate } from '../../common/utils/helper';\nimport { getLabelText, measureText, convertHexToColor, calculateRect, textElement, colorNameToHex } from '../../common/utils/helper';\nimport { textRender } from '../../common/model/constants';\nimport { createTemplate, getFontStyle, getElement, measureElementRect, templateAnimate, withIn } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { getPoint } from '../../common/utils/helper';\n/**\n * `DataLabel` module is used to render data label for the data point.\n */\nvar DataLabel = /** @class */ (function () {\n /**\n * Constructor for the data label module.\n * @private\n */\n function DataLabel(chart) {\n this.errorHeight = 0;\n this.chart = chart;\n }\n DataLabel.prototype.initPrivateVariables = function (series, marker) {\n var transform;\n var render = series.chart.renderer;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.dataLabel.visible) {\n series.shapeElement = render.createGroup({\n 'id': this.chart.element.id + 'ShapeGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + series.index + ')'\n });\n series.textElement = render.createGroup({\n 'id': this.chart.element.id + 'TextGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + series.index + ')'\n });\n }\n this.markerHeight = ((series.type === 'Scatter' || marker.visible) && !this.isRectSeries(series)) ? (marker.height / 2) : 0;\n this.commonId = this.chart.element.id + '_Series_' + series.index + '_Point_';\n this.calculateErrorHeight(series, series.marker.dataLabel.position);\n this.chartBackground = this.chart.chartArea.background === 'trasparent' ?\n this.chart.background || this.chart.themeStyle.background : this.chart.chartArea.background;\n };\n DataLabel.prototype.calculateErrorHeight = function (series, position) {\n if (!series.errorBar.visible) {\n return null;\n }\n else if (series.errorBar.visible && this.chart.chartAreaType !== 'PolarRadar') {\n var direction = series.errorBar.direction;\n var positiveHeight = this.chart.errorBarModule.positiveHeight;\n var negativeHeight = this.chart.errorBarModule.negativeHeight;\n if (this.isRectSeries(series)) {\n if (position === 'Top' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Outer' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Plus') {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n else {\n if (position === 'Top' || position === 'Outer' || position === 'Auto') {\n if ((direction === 'Both' || direction === 'Plus') && (!series.chart.isTransposed)) {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Bottom' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n }\n else {\n this.errorHeight = 0;\n }\n };\n DataLabel.prototype.isRectSeries = function (series) {\n return series.isRectSeries || series.type === 'RangeArea';\n };\n /**\n * Render the data label for series.\n * @return {void}\n */\n DataLabel.prototype.render = function (series, chart, dataLabel) {\n var _this = this;\n // initialize the private variable\n this.initPrivateVariables(series, series.marker);\n var rect;\n var rgbValue;\n var contrast;\n var argsData;\n var border;\n var textSize;\n this.inverted = chart.requireInvertedAxis;\n this.yAxisInversed = series.yAxis.isInversed;\n var element = createElement('div', {\n id: chart.element.id + '_Series_' + series.index + '_DataLabelCollections'\n });\n // Data label point iteration started\n series.points.map(function (point, index) {\n _this.margin = dataLabel.margin;\n var labelText = [];\n var labelLength;\n var clip = series.clipRect;\n border = { width: dataLabel.border.width, color: dataLabel.border.color };\n if ((point.symbolLocations.length && point.symbolLocations[0]) ||\n (series.type === 'BoxAndWhisker' && point.regions.length)) {\n labelText = getLabelText(point, series, chart);\n labelLength = labelText.length;\n for (var i = 0; i < labelLength; i++) {\n argsData = {\n cancel: false, name: textRender, series: series,\n point: point, text: labelText[i], border: border,\n color: dataLabel.fill, template: dataLabel.template\n };\n chart.trigger(textRender, argsData);\n if (!argsData.cancel) {\n _this.fontBackground = argsData.color;\n _this.isDataLabelShape(argsData);\n _this.markerHeight = series.type === 'Bubble' ? (point.regions[0].height / 2) : _this.markerHeight;\n if (argsData.template !== null) {\n _this.createDataLabelTemplate(element, series, dataLabel, point, argsData, i);\n }\n else {\n textSize = measureText(argsData.text, dataLabel.font);\n rect = _this.calculateTextPosition(point, series, textSize, dataLabel, i);\n if (!isCollide(rect, chart.dataLabelCollections, clip)) {\n chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n if (_this.isShape) {\n series.shapeElement.appendChild(chart.renderer.drawRectangle(new RectOption(_this.commonId + index + '_TextShape_' + i, argsData.color, argsData.border, dataLabel.opacity, rect, dataLabel.rx, dataLabel.ry)));\n }\n // Checking the font color\n rgbValue = convertHexToColor(colorNameToHex(_this.fontBackground));\n contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n textElement(new TextOption(_this.commonId + index + '_Text_' + i, rect.x + _this.margin.left + textSize.width / 2, rect.y + _this.margin.top + textSize.height * 3 / 4, 'middle', argsData.text, 'rotate(0,' + (rect.x) + ',' + (rect.y) + ')', 'auto'), dataLabel.font, dataLabel.font.color ||\n ((contrast >= 128 || series.type === 'Hilo') ? 'black' : 'white'), series.textElement);\n }\n }\n }\n }\n }\n });\n if (element.childElementCount) {\n getElement(chart.element.id + '_Secondary_Element').appendChild(element);\n }\n };\n /**\n * Render the data label template.\n * @return {void}\n * @private\n */\n DataLabel.prototype.createDataLabelTemplate = function (parentElement, series, dataLabel, point, data, labelIndex) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n var clip = series.clipRect;\n var childElement = createTemplate(createElement('div', {\n id: this.chart.element.id + '_Series_' + series.index + '_DataLabel_'\n + point.index + (labelIndex ? ('_' + labelIndex) : ''),\n styles: 'position: absolute;background-color:' + data.color + ';' +\n getFontStyle(dataLabel.font) + ';border:' + data.border.width + 'px solid ' + data.border.color + ';'\n }), point.index, data.template, this.chart, point, series);\n var elementRect = measureElementRect(childElement);\n var rect = this.calculateTextPosition(point, series, { width: elementRect.width, height: elementRect.height }, dataLabel, labelIndex);\n childElement.style.left = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.x) + rect.x) + 'px';\n childElement.style.top = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.y) + rect.y) + 'px';\n var rgbValue = convertHexToColor(colorNameToHex(this.fontBackground));\n var vAxis = series.chart.requireInvertedAxis ? series.xAxis : series.yAxis;\n var hAxis = series.chart.requireInvertedAxis ? series.yAxis : series.xAxis;\n childElement.style.color = dataLabel.font.color ||\n ((Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000)) >= 128 ? 'black' : 'white');\n if (childElement.childElementCount && !isCollide(rect, this.chart.dataLabelCollections, clip)\n && (series.seriesType !== 'XY' || point.yValue === undefined || withIn(point.yValue, series.yAxis.visibleRange) ||\n (series.type.indexOf('100') > -1 && withIn(series.stackedValues.endValues[point.index], series.yAxis.visibleRange)))\n && withIn(point.xValue, series.xAxis.visibleRange) && parseFloat(childElement.style.top) >= vAxis.rect.y &&\n parseFloat(childElement.style.left) >= hAxis.rect.x && parseFloat(childElement.style.top) <= vAxis.rect.y + vAxis.rect.height &&\n parseFloat(childElement.style.left) <= hAxis.rect.x + hAxis.rect.width) {\n this.chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n parentElement.appendChild(childElement);\n if (series.animation.enable && this.chart.animateSeries) {\n this.doDataLabelAnimation(series, childElement);\n }\n }\n };\n DataLabel.prototype.calculateTextPosition = function (point, series, textSize, dataLabel, labelIndex) {\n var labelRegion = labelIndex > 1 ? (series.type === 'Candle') ? point.regions[1] : point.regions[0] : point.regions[0];\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var location;\n location = this.getLabelLocation(point, series, textSize, labelIndex);\n var padding = 5;\n var clipRect = series.clipRect;\n var rect;\n // calculating alignment\n if (!this.chart.requireInvertedAxis || !this.isRectSeries(series) || series.type === 'BoxAndWhisker') {\n this.locationX = location.x;\n var alignmentValue = textSize.height + (this.borderWidth * 2) + this.markerHeight +\n this.margin.bottom + this.margin.top + padding;\n location.y = (dataLabel.position === 'Auto') ? location.y :\n this.calculateAlignment(alignmentValue, location.y, dataLabel.alignment, this.isRectSeries(series) ? point.yValue < 0 : false);\n // calculating position\n location.y = (!this.isRectSeries(series) || series.type === 'BoxAndWhisker') ?\n this.calculatePathPosition(location.y, dataLabel.position, series, point, textSize, labelIndex) :\n this.calculateRectPosition(location.y, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n if (this.isRectSeries(series) && this.chart.chartAreaType === 'PolarRadar') {\n location = this.calculatePolarRectPosition(location, dataLabel.position, series, point, textSize, labelIndex);\n }\n }\n else {\n this.locationY = location.y;\n var alignmentValue = textSize.width + this.borderWidth + this.margin.left + this.margin.right - padding;\n location.x = dataLabel.position === 'Auto' ? location.x :\n this.calculateAlignment(alignmentValue, location.x, dataLabel.alignment, point.yValue < 0);\n location.x = this.calculateRectPosition(location.x, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n }\n rect = calculateRect(location, textSize, this.margin);\n // Checking the condition whether data Label has been exist the clip rect\n if (!((rect.y > clipRect.height) || (rect.x > clipRect.width) ||\n (rect.x + rect.width < 0) || (rect.y + rect.height < 0))) {\n rect.x = rect.x < 0 ? padding : rect.x;\n rect.y = rect.y < 0 ? padding : rect.y;\n rect.x -= (rect.x + rect.width) > clipRect.width ? (rect.x + rect.width) - clipRect.width + padding : 0;\n rect.y -= (rect.y + rect.height) > clipRect.height ? (rect.y + rect.height) - clipRect.height + padding : 0;\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n }\n return rect;\n };\n // Calculation label location for polar column draw types\n DataLabel.prototype.calculatePolarRectPosition = function (location, position, series, point, size, labelIndex) {\n var padding = 5;\n var columnRadius;\n var angle = (point.regionData.startAngle - 0.5 * Math.PI) + (point.regionData.endAngle - point.regionData.startAngle) / 2;\n if (labelIndex === 0) {\n columnRadius = point.regionData.radius < point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n else {\n columnRadius = point.regionData.radius > point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n if (series.drawType.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.drawType.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n if (position === 'Outer') {\n columnRadius = labelIndex === 0 ? columnRadius + 2 * padding : columnRadius - 2 * padding;\n }\n else if (position === 'Middle') {\n columnRadius = columnRadius / 2 + padding;\n }\n else if (position === 'Top') {\n columnRadius = labelIndex === 0 ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n }\n else if (position === 'Bottom') {\n columnRadius = padding;\n }\n else {\n if (labelIndex === 0) {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius - padding :\n series.drawType === 'StackingColumn' ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n }\n else {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius + padding : columnRadius - 2 * padding;\n }\n }\n location.x = series.clipRect.width / 2 + series.clipRect.x + columnRadius * Math.cos(angle);\n location.y = series.clipRect.height / 2 + series.clipRect.y + columnRadius * Math.sin(angle);\n return location;\n };\n /**\n * Get the label location\n */\n DataLabel.prototype.getLabelLocation = function (point, series, textSize, labelIndex) {\n var location = new ChartLocation(0, 0);\n var labelRegion = (series.type === 'Candle' && labelIndex > 1) ? point.regions[1] : point.regions[0];\n if (series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var xAxis = series.xAxis;\n var yAxis = series.yAxis;\n var isInverted = series.chart.requireInvertedAxis;\n if (series.type === 'BoxAndWhisker') {\n this.markerHeight = 0;\n switch (labelIndex) {\n case 0:\n location = getPoint(point.xValue, point.median, xAxis, yAxis, isInverted);\n break;\n case 1:\n location = getPoint(point.xValue, point.maximum, xAxis, yAxis, isInverted);\n break;\n case 2:\n location = getPoint(point.xValue, point.minimum, xAxis, yAxis, isInverted);\n break;\n case 3:\n location = getPoint(point.xValue, point.upperQuartile, xAxis, yAxis, isInverted);\n break;\n case 4:\n location = getPoint(point.xValue, point.lowerQuartile, xAxis, yAxis, isInverted);\n break;\n default: {\n location = getPoint(point.xValue, point.outliers[labelIndex - 5], xAxis, yAxis, isInverted);\n this.markerHeight = series.marker.height / 2;\n break;\n }\n }\n }\n else if (labelIndex === 0 || labelIndex === 1) {\n location = new ChartLocation(point.symbolLocations[0].x, point.symbolLocations[0].y);\n }\n else if ((labelIndex === 2 || labelIndex === 3) && series.type === 'Candle') {\n location = new ChartLocation(point.symbolLocations[1].x, point.symbolLocations[1].y);\n }\n else if (isInverted) {\n location = { x: labelRegion.x + (labelRegion.width) / 2, y: labelRegion.y };\n }\n else {\n location = { x: labelRegion.x + labelRegion.width, y: labelRegion.y + (labelRegion.height) / 2 };\n }\n //Aligning the label at the beginning of the tick, when tick size is less than text size\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n if (series.chart.requireInvertedAxis) {\n var height = labelRegion.height;\n location.y = labelRegion.y + height / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n else {\n var width = labelRegion.width;\n location.x = labelRegion.x + width / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n }\n return location;\n };\n DataLabel.prototype.calculateRectPosition = function (labelLocation, rect, isMinus, position, series, textSize, labelIndex, point) {\n if (series.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n var padding = 5;\n var margin = this.margin;\n var textLength = !this.inverted ? textSize.height : textSize.width;\n var extraSpace = this.borderWidth + textLength / 2 + padding;\n if (series.type.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.type.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n else if (series.type === 'Waterfall') {\n position = position === 'Auto' ? 'Middle' : position;\n }\n switch (position) {\n case 'Bottom':\n labelLocation = !this.inverted ?\n isMinus ? (labelLocation - rect.height + extraSpace + margin.top) :\n (labelLocation + rect.height - extraSpace - margin.bottom) :\n isMinus ? (labelLocation + rect.width - extraSpace - margin.left) :\n (labelLocation - rect.width + extraSpace + margin.right);\n break;\n case 'Middle':\n labelLocation = labelLocation = !this.inverted ?\n (isMinus ? labelLocation - (rect.height / 2) : labelLocation + (rect.height / 2)) :\n (isMinus ? labelLocation + (rect.width / 2) : labelLocation - (rect.width / 2));\n break;\n case 'Auto':\n labelLocation = this.calculateRectActualPosition(labelLocation, rect, isMinus, series, textSize, labelIndex, point);\n break;\n default:\n extraSpace += this.errorHeight;\n labelLocation = this.calculateTopAndOuterPosition(labelLocation, rect, position, series, labelIndex, extraSpace, isMinus);\n break;\n }\n var check = !this.inverted ? (labelLocation < rect.y || labelLocation > rect.y + rect.height) :\n (labelLocation < rect.x || labelLocation > rect.x + rect.width);\n this.fontBackground = check ?\n (this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground)\n : this.fontBackground === 'transparent' ? (point.color || series.interior) : this.fontBackground;\n return labelLocation;\n };\n DataLabel.prototype.calculatePathPosition = function (labelLocation, position, series, point, size, labelIndex) {\n var padding = 5;\n if ((series.type.indexOf('Area') > -1 && series.type !== 'RangeArea')\n && this.yAxisInversed && series.marker.dataLabel.position !== 'Auto') {\n position = position === 'Top' ? 'Bottom' : position === 'Bottom' ? 'Top' : position;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n switch (position) {\n case 'Top':\n case 'Outer':\n labelLocation = labelLocation - this.markerHeight - this.borderWidth - size.height / 2 - this.margin.bottom - padding -\n this.errorHeight;\n break;\n case 'Bottom':\n labelLocation = labelLocation + this.markerHeight + this.borderWidth + size.height / 2 + this.margin.top + padding +\n this.errorHeight;\n break;\n case 'Auto':\n labelLocation = this.calculatePathActualPosition(labelLocation, this.markerHeight, series, point, size, labelIndex);\n break;\n }\n return labelLocation;\n };\n DataLabel.prototype.isDataLabelShape = function (style) {\n this.isShape = (style.color !== 'transparent' || style.border.width > 0);\n this.borderWidth = style.border.width;\n if (!this.isShape) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n }\n };\n DataLabel.prototype.calculateRectActualPosition = function (labelLocation, rect, isMinus, series, size, labelIndex, point) {\n var location;\n var labelRect;\n var isOverLap = true;\n var position = 0;\n var collection = this.chart.dataLabelCollections;\n var finalPosition = series.type.indexOf('Range') !== -1 || series.type === 'Hilo' ? 2 : 4;\n while (isOverLap && position < finalPosition) {\n location = this.calculateRectPosition(labelLocation, rect, isMinus, this.getPosition(position), series, size, labelIndex, point);\n if (!this.inverted) {\n labelRect = calculateRect(new ChartLocation(this.locationX, location), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect) || labelRect.y > series.clipRect.height;\n }\n else {\n labelRect = calculateRect(new ChartLocation(location, this.locationY), size, this.margin);\n isOverLap = labelRect.x < 0 || isCollide(labelRect, collection, series.clipRect) ||\n labelRect.x + labelRect.width > series.clipRect.width;\n }\n position++;\n }\n return location;\n };\n // alignment calculation assigned here\n DataLabel.prototype.calculateAlignment = function (value, labelLocation, alignment, isMinus) {\n switch (alignment) {\n case 'Far':\n labelLocation = !this.inverted ? (isMinus ? labelLocation + value : labelLocation - value) :\n (isMinus ? labelLocation - value : labelLocation + value);\n break;\n case 'Near':\n labelLocation = !this.inverted ? (isMinus ? labelLocation - value : labelLocation + value) :\n (isMinus ? labelLocation + value : labelLocation - value);\n break;\n case 'Center':\n labelLocation = labelLocation;\n break;\n }\n return labelLocation;\n };\n //calculation for top and outer position of datalabel for rect series\n DataLabel.prototype.calculateTopAndOuterPosition = function (location, rect, position, series, index, extraSpace, isMinus) {\n var margin = this.margin;\n var top;\n switch (series.type) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'Hilo':\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n break;\n case 'Candle':\n top = (index === 0 || index === 2) && !this.yAxisInversed\n || (index === 1 || index === 3) && this.yAxisInversed;\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top, index > 1);\n break;\n case 'HiloOpenClose':\n if (index <= 1) {\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n }\n else {\n if (this.yAxisInversed) {\n location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n }\n else {\n location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n }\n }\n break;\n default:\n if ((isMinus && position === 'Top') || (!isMinus && position === 'Outer')) {\n location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n }\n else {\n location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n }\n break;\n }\n return location;\n };\n /**\n * Updates the label location\n */\n DataLabel.prototype.updateLabelLocation = function (position, location, extraSpace, margin, rect, top, inside) {\n if (inside === void 0) { inside = false; }\n if (!this.inverted) {\n if (top) {\n location = (position === 'Outer' && !inside) ? location - extraSpace - margin.bottom : location + extraSpace + margin.top;\n }\n else {\n location = (position === 'Outer' && !inside) ? location + rect.height + extraSpace + margin.top :\n location + rect.height - extraSpace - margin.bottom;\n }\n }\n else {\n if (top) {\n location = (position === 'Outer' && !inside) ? location + extraSpace + margin.left : location - extraSpace - margin.right;\n }\n else {\n location = (position === 'Outer' && !inside) ? location - rect.width - extraSpace - margin.right :\n location - rect.width + extraSpace + margin.left;\n }\n }\n return location;\n };\n DataLabel.prototype.calculatePathActualPosition = function (y, markerSize, series, point, size, labelIndex) {\n var points = series.points;\n var index = point.index;\n var yValue = points[index].yValue;\n var position;\n var nextPoint = points.length - 1 > index ? points[index + 1] : null;\n var previousPoint = index > 0 ? points[index - 1] : null;\n var yLocation;\n var isOverLap = true;\n var labelRect;\n var isBottom;\n var positionIndex;\n var collection = this.chart.dataLabelCollections;\n if (series.type === 'Bubble') {\n position = 'Top';\n }\n else if (series.type.indexOf('Step') > -1) {\n position = 'Top';\n if (index) {\n position = (!previousPoint || !previousPoint.visible || (yValue > previousPoint.yValue !== this.yAxisInversed)\n || yValue === previousPoint.yValue) ? 'Top' : 'Bottom';\n }\n }\n else if (series.type === 'BoxAndWhisker') {\n if (labelIndex === 1 || labelIndex === 3 || labelIndex > 4) {\n position = series.yAxis.isInversed ? 'Bottom' : 'Top';\n }\n else if (labelIndex === 2 || labelIndex === 4) {\n position = series.yAxis.isInversed ? 'Top' : 'Bottom';\n }\n else {\n isOverLap = false;\n position = 'Middle';\n yLocation = this.calculatePathPosition(y, position, series, point, size, labelIndex);\n }\n }\n else {\n if (index === 0) {\n position = (!nextPoint || !nextPoint.visible || yValue > nextPoint.yValue ||\n (yValue < nextPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else if (index === points.length - 1) {\n position = (!previousPoint || !previousPoint.visible || yValue > previousPoint.yValue ||\n (yValue < previousPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else {\n if (!nextPoint.visible && !(previousPoint && previousPoint.visible)) {\n position = 'Top';\n }\n else if (!nextPoint.visible || !previousPoint) {\n position = (nextPoint.yValue > yValue || (previousPoint && previousPoint.yValue > yValue)) ?\n 'Bottom' : 'Top';\n }\n else {\n var slope = (nextPoint.yValue - previousPoint.yValue) / 2;\n var intersectY = (slope * index) + (nextPoint.yValue - (slope * (index + 1)));\n position = !this.yAxisInversed ? intersectY < yValue ? 'Top' : 'Bottom' :\n intersectY < yValue ? 'Bottom' : 'Top';\n }\n }\n }\n isBottom = position === 'Bottom';\n positionIndex = ['Outer', 'Top', 'Bottom', 'Middle', 'Auto'].indexOf(position);\n while (isOverLap && positionIndex < 4) {\n yLocation = this.calculatePathPosition(y, this.getPosition(positionIndex), series, point, size, labelIndex);\n labelRect = calculateRect(new ChartLocation(this.locationX, yLocation), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect)\n || (labelRect.y + labelRect.height) > series.clipRect.height;\n positionIndex = isBottom ? positionIndex - 1 : positionIndex + 1;\n isBottom = false;\n }\n return yLocation;\n };\n /**\n * Animates the data label.\n * @param {Series} series - Data label of the series gets animated.\n * @return {void}\n */\n DataLabel.prototype.doDataLabelAnimation = function (series, element) {\n var shapeElements = series.shapeElement.childNodes;\n var textNode = series.textElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var location;\n var length = element ? 1 : textNode.length;\n for (var i = 0; i < length; i++) {\n if (element) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n else {\n location = new ChartLocation((+textNode[i].getAttribute('x')) + ((+textNode[i].getAttribute('width')) / 2), (+textNode[i].getAttribute('y')) + ((+textNode[i].getAttribute('height')) / 2));\n markerAnimate(textNode[i], delay, 200, series, null, location, true);\n if (shapeElements[i]) {\n location = new ChartLocation((+shapeElements[i].getAttribute('x')) + ((+shapeElements[i].getAttribute('width')) / 2), (+shapeElements[i].getAttribute('y')) + ((+shapeElements[i].getAttribute('height')) / 2));\n markerAnimate(shapeElements[i], delay, 200, series, null, location, true);\n }\n }\n }\n };\n DataLabel.prototype.getPosition = function (index) {\n return (['Outer', 'Top', 'Bottom', 'Middle', 'Auto'][index]);\n };\n /**\n * Get module name.\n */\n DataLabel.prototype.getModuleName = function () {\n // Returns the module name\n return 'DataLabel';\n };\n /**\n * To destroy the dataLabel for series.\n * @return {void}\n * @private\n */\n DataLabel.prototype.destroy = function (chart) {\n // Destroy method performed here\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { Mean, RectOption } from '../../common/utils/helper';\nimport { getPoint, PathOption, sum, templateAnimate } from '../../common/utils/helper';\n/**\n * `ErrorBar` module is used to render the error bar for series.\n */\nvar ErrorBar = /** @class */ (function () {\n /**\n * Constructor for the error bar module.\n * @private\n */\n function ErrorBar(chart) {\n this.chart = chart;\n }\n /**\n * Render the error bar for series.\n * @return {void}\n */\n ErrorBar.prototype.render = function (series) {\n if (this.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n this.createElement(series);\n this.renderErrorBar(series);\n };\n ErrorBar.prototype.renderErrorBar = function (series) {\n var seriesIndex = series.index;\n var point;\n var symbolId;\n var capId;\n var errorbar = series.errorBar;\n var errorBarCap = series.errorBar.errorBarCap;\n var border = series.border;\n var start;\n var mid;\n var end;\n var isInverted;\n var isVert;\n var errorDirection = ['', ''];\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point_1 = _a[_i];\n if (point_1.visible && point_1.symbolLocations[0]) {\n var errorX = 0;\n var errorY = 0;\n switch (errorbar.mode) {\n case 'Vertical':\n errorY = errorbar.verticalError;\n break;\n case 'Horizontal':\n errorX = errorbar.horizontalError;\n break;\n case 'Both':\n errorX = errorbar.horizontalError;\n errorY = errorbar.verticalError;\n break;\n }\n errorDirection = this['calculate' + errorbar.type + 'Value'](point_1, series, this.chart.requireInvertedAxis, errorX, errorY);\n symbolId = this.chart.element.id + '_Series_' + '_ErrorBarGroup_' + seriesIndex + '_Point_' + point_1.index;\n capId = this.chart.element.id + '_Series_' + '_ErrorBarCap_' + seriesIndex + '_Point_' + point_1.index;\n var shapeOption = new PathOption(symbolId, '', errorbar.width, errorbar.color || this.chart.themeStyle.errorBar, null, '', errorDirection[0]);\n var path = this.chart.renderer.drawPath(shapeOption);\n series.errorBarElement.appendChild(path);\n var capOption = new PathOption(capId, '', errorBarCap.width, errorBarCap.color || this.chart.themeStyle.errorBar, null, '', errorDirection[1]);\n var capPath = this.chart.renderer.drawPath(capOption);\n series.errorBarElement.appendChild(capPath);\n }\n }\n };\n // path calculation for error bar\n ErrorBar.prototype.findLocation = function (point, series, isInverted, x1, y1) {\n var errorbar = series.errorBar;\n var direction = errorbar.direction;\n var location = [];\n var stackedValue = series.stackedValues;\n var yValue = series.type.indexOf('Stacking') > -1 ? series.stackedValues.endValues[point.index] :\n (series.seriesType === 'HighLow' || series.seriesType === 'HighLowOpenClose') ? (series.points[point.index].high) :\n point.yValue;\n var startPoint = getPoint(point.xValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = errorbar.horizontalPositiveError : x1 : 0), yValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = errorbar.verticalPositiveError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(startPoint);\n if (series.isRectSeries) {\n var midPoint = point.symbolLocations[0];\n location.push(midPoint);\n }\n else {\n var midPoint = getPoint(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted);\n location.push(midPoint);\n }\n var endPoint = getPoint(point.xValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = errorbar.horizontalNegativeError : x1 : 0), yValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = errorbar.verticalNegativeError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(endPoint);\n // calculate error height for datalabel position alignment\n point.error = (errorbar.mode === 'Vertical') ? errorbar.verticalError : errorbar.horizontalError;\n this.negativeHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[1].x - location[2].x) :\n (location[2].y - location[1].y)) : 0;\n this.positiveHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[0].x - location[1].x) :\n (location[1].y - location[0].y)) : 0;\n return this.getErrorDirection(location[0], location[1], location[2], series, isInverted);\n };\n // calculations for eror bar types\n ErrorBar.prototype.calculateFixedValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var errorbar = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculatePercentageValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n errorX = (errorX / 100) * point.xValue;\n errorY = (errorY / 100) * point.yValue;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardDeviationValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = errorX * (getMean.horizontalSquareRoot + getMean.horizontalMean);\n errorY = errorY * (getMean.verticalSquareRoot + getMean.verticalMean);\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardErrorValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var length = series.points.length;\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = ((errorX * getMean.horizontalSquareRoot) / Math.sqrt(length));\n errorY = ((errorY * getMean.verticalSquareRoot) / Math.sqrt(length));\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateCustomValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var errorbar = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.getHorizontalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += ' M ' + start.x + ' ' + mid.y + ' L ' + end.x + ' ' + mid.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? ' M ' + (start.x) + ' ' + (mid.y - capLength) + ' L '\n + (start.x) + ' ' + (mid.y + capLength) : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? ' M ' + (end.x) + ' ' + (mid.y - capLength) + ' L '\n + (end.x) + ' ' + (mid.y + capLength) : ' ';\n return [path, capDirection];\n };\n ErrorBar.prototype.getVerticalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += ' M ' + mid.x + ' ' + start.y + ' L ' + mid.x + ' ' + end.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? ' M ' + (mid.x - capLength) + ' ' + start.y + ' L '\n + (mid.x + capLength) + ' ' + start.y : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? ' M ' + (mid.x - capLength) + ' ' + end.y + ' L '\n + (mid.x + capLength) + ' ' + end.y : '';\n return [path, capDirection];\n };\n ErrorBar.prototype.getBothDirection = function (start, mid, end, direction, errorMode, capLength) {\n var capDirection = '';\n var path = '';\n var pathH = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n var pathV = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n path = pathH[0].concat(pathV[0]);\n capDirection = pathH[1].concat(pathV[1]);\n return [path, capDirection];\n };\n ErrorBar.prototype.getErrorDirection = function (start, mid, end, series, isInverted) {\n var direction = series.errorBar.direction;\n var mode = series.errorBar.mode;\n var capLength = series.errorBar.errorBarCap.length;\n var path = '';\n var paths;\n var capDirection = '';\n var errorMode = mode;\n switch (mode) {\n case 'Both':\n errorMode = mode;\n break;\n case 'Horizontal':\n errorMode = (isInverted) ? 'Vertical' : mode;\n break;\n case 'Vertical':\n errorMode = (isInverted) ? 'Horizontal' : mode;\n break;\n }\n switch (errorMode) {\n case 'Horizontal':\n paths = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Vertical':\n paths = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Both':\n paths = this.getBothDirection(start, mid, end, direction, errorMode, capLength);\n break;\n }\n return [paths[0], paths[1]];\n };\n // mean calculation for standard deviation and standard error\n ErrorBar.prototype.meanCalculation = function (series, mode) {\n var sumOfX = 0;\n var sumOfY = 0;\n var verticalMean = 0;\n var horizontalMean = 0;\n var horSquareDev;\n var verStandardMean;\n var horStandardMean;\n var verSquareTotal;\n var horSquareTotal;\n var verSquareRoot;\n var horSquareRoot;\n var length = series.points.length;\n switch (mode) {\n case 'Vertical':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n break;\n case 'Horizontal':\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n break;\n case 'Both':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n }\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (mode === 'Vertical') {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n }\n else if (mode === 'Horizontal') {\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n else {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n }\n verStandardMean = sumOfY / (length - 1);\n verSquareRoot = Math.sqrt(sumOfY / (length - 1));\n horStandardMean = sumOfX / (length - 1);\n horSquareRoot = Math.sqrt(sumOfX / (length - 1));\n return new Mean(verStandardMean, verSquareRoot, horStandardMean, horSquareRoot, verticalMean, horizontalMean);\n };\n ErrorBar.prototype.createElement = function (series) {\n var explodeValue = 5;\n var render = series.chart.renderer;\n var transform;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n var markerHeight = (series.marker.height + explodeValue) / 2;\n var markerWidth = (series.marker.width + explodeValue) / 2;\n if (series.chart.chartAreaType === 'Cartesian') {\n var errorBarClipRect = render.drawClipPath(new RectOption(this.chart.element.id + '_ChartErrorBarClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2, height: series.clipRect.height + markerHeight * 2\n }));\n series.errorBarElement = render.createGroup({\n 'id': this.chart.element.id + 'ErrorBarGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartErrorBarClipRect_' + series.index + ')'\n });\n series.errorBarElement.appendChild(errorBarClipRect);\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ErrorBar.prototype.doErrorBarAnimation = function (series) {\n var errorBarElements = series.errorBarElement.childNodes;\n if (!errorBarElements) {\n return null;\n }\n var delay = series.animation.delay + series.animation.duration;\n var j = 1;\n while (j < errorBarElements.length) {\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations[0]) {\n continue;\n }\n errorBarElements[j].style.visibility = 'hidden';\n templateAnimate(errorBarElements[j], delay, 350, series.chart.requireInvertedAxis ? 'SlideLeftIn' : 'SlideBottomIn', false);\n }\n j++;\n }\n };\n /**\n * Get module name.\n */\n ErrorBar.prototype.getModuleName = function () {\n // Returns the module name\n return 'ErrorBar';\n };\n /**\n * To destroy the errorBar for series.\n * @return {void}\n * @private\n */\n ErrorBar.prototype.destroy = function (chart) {\n // Destroy method performed here\n };\n return ErrorBar;\n}());\nexport { ErrorBar };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * Chart legend\n */\nimport { remove, Browser } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { LegendOptions, BaseLegend } from '../../common/legend/legend';\nimport { measureText, textTrim } from '../../common/utils/helper';\nimport { legendRender } from '../../common/model/constants';\n/**\n * `Legend` module is used to render legend for the chart.\n */\nvar Legend = /** @class */ (function (_super) {\n __extends(Legend, _super);\n function Legend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for legend module.\n */\n Legend.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on('click', this.click, this);\n this.chart.on(Browser.touchEndEvent, this.mouseEnd, this);\n };\n /**\n * UnBinding events for legend module.\n */\n Legend.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('click', this.click);\n this.chart.off(Browser.touchEndEvent, this.mouseEnd);\n };\n /**\n * To handle mosue move for legend module\n */\n Legend.prototype.mouseMove = function (e) {\n if (this.chart.legendSettings.visible && !this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * To handle mosue end for legend module\n */\n Legend.prototype.mouseEnd = function (e) {\n if (this.chart.legendSettings.visible && this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * Get the legend options.\n * @return {void}\n * @private\n */\n Legend.prototype.getLegendOptions = function (visibleSeriesCollection, chart) {\n this.legendCollections = [];\n var seriesType;\n for (var _i = 0, visibleSeriesCollection_1 = visibleSeriesCollection; _i < visibleSeriesCollection_1.length; _i++) {\n var series = visibleSeriesCollection_1[_i];\n if (series.category !== 'Indicator') {\n seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n series.type;\n this.legendCollections.push(new LegendOptions(series.name, series.interior, series.legendShape, series.visible, seriesType, series.marker.shape, series.marker.visible));\n }\n }\n };\n /** @private */\n Legend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n var padding = legend.padding;\n var extraHeight = 0;\n var extraWidth = 0;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.height += extraHeight;\n legendBounds.width += extraWidth;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var rowWidth = 0;\n var legendWidth = 0;\n var columnHeight = 0;\n var rowCount = 0;\n var legendEventArgs;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle).height, legend.shapeHeight);\n var render = false;\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n legendEventArgs = {\n fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n markerShape: legendOption.markerShape, name: legendRender, cancel: false\n };\n this.chart.trigger(legendRender, legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.markerShape = legendEventArgs.markerShape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + legendOption.textSize.width + padding;\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth) || this.isVertical) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding - (this.isVertical ? 0 : legendWidth)));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = this.isVertical ? 0 : legendWidth;\n rowCount++;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n }\n }\n }\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding);\n this.isPaging = legendBounds.height < columnHeight;\n this.totalPages = rowCount;\n if (render) {\n this.setBounds(Math.max((rowWidth + padding), maximumWidth), columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /** @private */\n Legend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n var previousBound = (prevLegend.location.x + textPadding + prevLegend.textSize.width);\n if ((previousBound + (legendOption.textSize.width + textPadding)) > (rect.x + rect.width + this.legend.shapeWidth / 2) ||\n this.isVertical) {\n legendOption.location.x = start.x;\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.maxItemHeight + padding;\n }\n else {\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n legendOption.location.y = prevLegend.location.y;\n }\n var availwidth = (this.legendBounds.x + this.legendBounds.width) - (legendOption.location.x +\n textPadding - this.legend.shapeWidth / 2);\n legendOption.text = textTrim(+availwidth.toFixed(4), legendOption.text, this.legend.textStyle);\n };\n /** @private */\n Legend.prototype.LegendClick = function (seriesIndex) {\n var chart = this.chart;\n var series = chart.visibleSeries[seriesIndex];\n var legend = this.legendCollections[seriesIndex];\n var selectedDataIndexes = [];\n if (chart.selectionModule) {\n selectedDataIndexes = extend([], chart.selectionModule.selectedDataIndexes, null, true);\n }\n if (chart.legendSettings.toggleVisibility) {\n if (!series.visible) {\n series.visible = true;\n }\n else {\n series.visible = false;\n }\n legend.visible = (series.visible);\n if (chart.svgObject.childNodes.length > 0) {\n while (chart.svgObject.lastChild) {\n chart.svgObject.removeChild(chart.svgObject.lastChild);\n }\n remove(chart.svgObject);\n }\n chart.animateSeries = false;\n chart.removeSvg();\n chart.refreshAxis();\n series.refreshAxisLabel();\n this.refreshSeries(chart.visibleSeries);\n chart.refreshBound();\n if (selectedDataIndexes.length > 0) {\n chart.selectionModule.selectedDataIndexes = selectedDataIndexes;\n chart.selectionModule.redrawSelection(chart, chart.selectionMode);\n }\n }\n else if (chart.selectionModule) {\n chart.selectionModule.legendSelection(chart, seriesIndex);\n }\n };\n Legend.prototype.refreshSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series.position = undefined;\n }\n };\n /**\n * To show the tooltip for the trimmed text in legend.\n * @return {void}\n */\n Legend.prototype.click = function (event) {\n if (!this.chart.legendSettings.visible) {\n return;\n }\n var targetId = event.target.id;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_marker_',\n this.legendID + '_shape_'];\n var seriesIndex;\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n seriesIndex = parseInt(targetId.split(id)[1], 10);\n this.LegendClick(seriesIndex);\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n };\n /**\n * Get module name\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (chart) {\n this.removeEventListener();\n };\n return Legend;\n}(BaseLegend));\nexport { Legend };\n","import { createTemplate, measureElementRect, logBase } from '../utils/helper';\nimport { ChartLocation, stringToNumber, appendElement, withIn, Rect } from '../utils/helper';\nimport { getPoint } from '../utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { annotationRender } from '../model/constants';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Annotation Module handles the Annotation for chart and accumulation series.\n */\nvar AnnotationBase = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n * @param control\n */\n function AnnotationBase(control) {\n this.control = control;\n }\n /**\n * Method to render the annotation for chart and accumulation series.\n * @private\n * @param annotation\n * @param index\n */\n AnnotationBase.prototype.render = function (annotation, index) {\n this.isChart = this.control.getModuleName() === 'chart';\n this.annotation = annotation;\n var childElement = createTemplate(createElement('div', {\n id: this.control.element.id + '_Annotation_' + index,\n styles: 'position: absolute;'\n }), index, annotation.content, this.control);\n return childElement;\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as pixel.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAnnotationPixelValue = function (location) {\n var rect;\n rect = this.annotation.region === 'Chart' ?\n new Rect(0, 0, this.control.availableSize.width, this.control.availableSize.height) :\n this.isChart ?\n this.control.chartAxisLayoutPanel.seriesClipRect :\n this.control.series[0].accumulationBound;\n location.x = ((typeof this.annotation.x !== 'string') ?\n ((typeof this.annotation.x === 'number') ? this.annotation.x : 0) :\n stringToNumber(this.annotation.x, rect.width)) + rect.x;\n location.y = ((typeof this.annotation.y === 'number') ? this.annotation.y :\n stringToNumber(this.annotation.y, rect.height)) + rect.y;\n return true;\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as point.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAnnotationPointValue = function (location) {\n var symbolLocation = new ChartLocation(0, 0);\n if (this.isChart) {\n var xAxis = void 0;\n var yAxis = void 0;\n var chart = this.control;\n var annotation = this.annotation;\n var xValue = void 0;\n var isLog = false;\n var xAxisName = annotation.xAxisName;\n var yAxisName = annotation.yAxisName;\n var isInverted = chart.requireInvertedAxis;\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n if (xAxisName === axis.name || (xAxisName == null && axis.name === 'primaryXAxis')) {\n xAxis = axis;\n if (xAxis.valueType.indexOf('Category') > -1) {\n var xAnnotation = xAxis.valueType === 'DateTimeCategory' ? (annotation.x.getTime()).toString() :\n annotation.x;\n if (xAxis.labels.indexOf(xAnnotation) < 0) {\n return false;\n }\n else {\n xValue = xAxis.labels.indexOf(xAnnotation);\n }\n }\n else if (xAxis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n xValue = (typeof this.annotation.x === 'object') ?\n Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: annotation.x }).val)))) : 0;\n }\n else {\n xValue = +annotation.x;\n }\n }\n else if (yAxisName === axis.name || (yAxisName == null && axis.name === 'primaryYAxis')) {\n yAxis = axis;\n isLog = yAxis.valueType === 'Logarithmic';\n }\n }\n if (xAxis && yAxis && withIn(xAxis.valueType === 'Logarithmic' ? logBase(xValue, xAxis.logBase) : xValue, xAxis.visibleRange)) {\n symbolLocation = getPoint(xValue, withIn((isLog ? logBase(+this.annotation.y, yAxis.logBase) : +this.annotation.y), yAxis.visibleRange) ? +annotation.y :\n isLog ? Math.pow(yAxis.logBase, yAxis.visibleRange.max) :\n +annotation.y > yAxis.visibleRange.max ? yAxis.visibleRange.max : yAxis.visibleRange.min, xAxis, yAxis, isInverted);\n location.x = symbolLocation.x + (isInverted ? yAxis.rect.x : xAxis.rect.x);\n location.y = symbolLocation.y + (isInverted ? xAxis.rect.y : yAxis.rect.y);\n }\n else {\n return false;\n }\n return true;\n }\n else {\n return this.setAccumulationPointValue(location);\n }\n };\n /**\n * To process the annotation for accumulation chart\n * @param annotation\n * @param index\n * @param parentElement\n */\n AnnotationBase.prototype.processAnnotation = function (annotation, index, parentElement) {\n var annotationElement;\n var location;\n location = new ChartLocation(0, 0);\n annotationElement = this.render(annotation, index);\n if (this['setAnnotation' + annotation.coordinateUnits + 'Value'](location)) {\n this.setElementStyle(location, annotationElement, parentElement);\n }\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as point in accumulation chart.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAccumulationPointValue = function (location) {\n var accumulation = this.control;\n var point;\n for (var _i = 0, _a = accumulation.visibleSeries[0].points; _i < _a.length; _i++) {\n var accPoint = _a[_i];\n if (typeof accPoint.x === 'object') {\n if (Date.parse(accPoint.x) === Date.parse(this.annotation.x) &&\n accPoint.y === this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n else {\n if (accPoint.x === this.annotation.x && accPoint.y === this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n }\n if (point && point.visible) {\n location.x = point.symbolLocation.x;\n location.y = point.symbolLocation.y;\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Method to set the element style for accumulation / chart annotation.\n * @private\n * @param location\n * @param element\n * @param parentElement\n */\n AnnotationBase.prototype.setElementStyle = function (location, element, parentElement) {\n var elementRect = measureElementRect(element);\n var argsData = {\n cancel: false, name: annotationRender, content: element,\n location: location\n };\n this.control.trigger(annotationRender, argsData);\n if (!argsData.cancel) {\n argsData.content.style.left = this.setAlignmentValue(this.annotation.horizontalAlignment, elementRect.width, argsData.location.x) + 'px';\n argsData.content.style.top = this.setAlignmentValue(this.annotation.verticalAlignment, elementRect.height, argsData.location.y) + 'px';\n argsData.content.setAttribute('aria-label', this.annotation.description || 'Annotation');\n appendElement(argsData.content, parentElement);\n }\n };\n /**\n * Method to calculate the alignment value for annotation.\n * @private\n * @param alignment\n * @param size\n * @param value\n */\n AnnotationBase.prototype.setAlignmentValue = function (alignment, size, value) {\n switch (alignment) {\n case 'Top':\n case 'Near':\n value -= size;\n break;\n case 'Bottom':\n case 'Far':\n value += 0;\n break;\n case 'Middle':\n case 'Center':\n value -= (size / 2);\n break;\n }\n return value;\n };\n return AnnotationBase;\n}());\nexport { AnnotationBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `ChartAnnotation` module handles the annotation for chart.\n */\nvar ChartAnnotation = /** @class */ (function (_super) {\n __extends(ChartAnnotation, _super);\n /**\n * Constructor for chart annotation.\n * @private.\n */\n function ChartAnnotation(control, annotations) {\n var _this = _super.call(this, control) || this;\n _this.chart = control;\n _this.annotations = annotations;\n return _this;\n }\n /**\n * Method to render the annotation for chart\n * @param element\n * @private\n */\n ChartAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.parentElement = createElement('div', {\n id: this.chart.element.id + '_Annotation_Collections'\n });\n this.annotations.map(function (annotation, index) {\n _this.processAnnotation(annotation, index, _this.parentElement);\n });\n appendElement(this.parentElement, element);\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n ChartAnnotation.prototype.destroy = function (control) {\n // Destroy method performed here\n };\n /**\n * Get module name.\n */\n ChartAnnotation.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotation';\n };\n return ChartAnnotation;\n}(AnnotationBase));\nexport { ChartAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange, PathOption, sum } from '../../common/utils/helper';\nimport { Size, getSaturationColor, getPoint } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ColumnBase } from './column-base';\nimport { getMedian } from '../../common/utils/helper';\n/**\n * `BoxAndWhiskerSeries` module is used to render the box and whisker series.\n */\nvar BoxAndWhiskerSeries = /** @class */ (function (_super) {\n __extends(BoxAndWhiskerSeries, _super);\n function BoxAndWhiskerSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render BoxAndWhisker series.\n * @return {void}\n * @private\n */\n BoxAndWhiskerSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var centerRegion;\n var borderWidth = series.border.width || 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n var centerRegion_1 = void 0;\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n this.findBoxPlotValues(point.y, point, series.boxPlotMode);\n //region to cover the top and bottom ticks\n this.updateTipRegion(series, point, sideBySideInfo);\n //get middle rect\n centerRegion_1 = this.getRectangle((point.xValue + sideBySideInfo.start), point.upperQuartile, (point.xValue + sideBySideInfo.end), point.lowerQuartile, series);\n point.regions.push(centerRegion_1);\n argsData = this.triggerEvent(series, point, series.interior, {\n color: (!isNullOrUndefined(series.border.color) && series.border.color !== 'transparent') ? series.border.color :\n getSaturationColor(series.interior, -0.6),\n width: series.border.width ? series.border.width : 1\n });\n if (!argsData.cancel) {\n this.renderBoxAndWhisker(series, point, centerRegion_1, argsData, this.getPathString(point, series, getPoint(point.xValue, point.median, xAxis, yAxis, isInverted), getPoint(point.xValue, point.average, xAxis, yAxis, isInverted)));\n }\n }\n }\n if (series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * update the tip region fo box plot\n * @param series\n * @param point\n * @param sideBySideInfo\n */\n BoxAndWhiskerSeries.prototype.updateTipRegion = function (series, point, sideBySideInfo) {\n var tipRegion = this.getRectangle((point.xValue + sideBySideInfo.median), point.maximum, (point.xValue + sideBySideInfo.median), point.minimum, series);\n this.updateTipSize(series, point, tipRegion, series.chart.requireInvertedAxis);\n };\n /**\n * Update tip size to tip regions\n * @param series\n * @param point\n * @param region\n * @param isInverted\n */\n BoxAndWhiskerSeries.prototype.updateTipSize = function (series, point, region, isInverted) {\n var borderWidth = series.border.width || 1;\n if (!isInverted) {\n region.x -= borderWidth / 2;\n region.width = region.width || borderWidth;\n }\n else {\n region.y -= borderWidth / 2;\n region.height = region.height || borderWidth;\n }\n point.regions.push(region);\n };\n /**\n * Calculation for path direction performed here\n * @param point\n * @param series\n * @param median\n * @param average\n */\n BoxAndWhiskerSeries.prototype.getPathString = function (point, series, median, average) {\n var topRect = point.regions[0];\n var midRect = point.regions[1];\n var direction = '';\n var width = series.chart.requireInvertedAxis ? topRect.height : topRect.width;\n var center = series.chart.requireInvertedAxis ? topRect.y + topRect.height / 2 :\n topRect.x + topRect.width / 2;\n var midWidth = midRect.x + midRect.width;\n var midHeight = midRect.y + midRect.height;\n var topWidth = topRect.x + topRect.width;\n var topHeight = topRect.y + topRect.height;\n if (!series.chart.requireInvertedAxis) {\n this.updateTipSize(series, point, { x: midRect.x, y: topRect.y, width: midWidth - midRect.x, height: 0 }, true);\n this.updateTipSize(series, point, { x: midRect.x, y: topHeight, width: midWidth - midRect.x, height: 0 }, true);\n direction += 'M ' + midRect.x + ' ' + topRect.y + ' ' + ' L ' + midWidth + ' ' + topRect.y;\n direction += ' M ' + center + ' ' + topRect.y + ' ' + ' L ' + center + ' ' + midRect.y;\n direction += ' M ' + midRect.x + ' ' + midRect.y + ' ' + ' L ' + midWidth + ' ' + midRect.y +\n ' L ' + midWidth + ' ' + midHeight + ' L ' + midRect.x + ' ' + midHeight + ' Z';\n direction += ' M ' + center + ' ' + midHeight + ' L ' + center + ' ' + topHeight;\n direction += ' M ' + midRect.x + ' ' + topHeight + ' L ' + midWidth + ' ' + topHeight;\n direction += ' M ' + midRect.x + ' ' + median.y + ' L ' + midWidth + ' ' + median.y;\n direction += series.showMean ?\n ' M ' + (average.x - 5) + ' ' + (average.y - 5) + ' L ' + (average.x + 5) + ' ' + (average.y + 5) +\n ' M ' + (average.x + 5) + ' ' + (average.y - 5) + ' L ' + (average.x - 5) + ' ' + (average.y + 5) : '';\n }\n else {\n this.updateTipSize(series, point, { x: topRect.x, y: midRect.y, width: 0, height: midHeight - midRect.y }, false);\n this.updateTipSize(series, point, { x: topWidth, y: midRect.y, width: 0, height: midHeight - midRect.y }, true);\n direction += 'M ' + topRect.x + ' ' + midRect.y + ' L ' + topRect.x + ' ' + midHeight;\n direction += 'M ' + topRect.x + ' ' + center + ' ' + ' L ' + midRect.x + ' ' + center;\n direction += ' M ' + midRect.x + ' ' + midRect.y + ' ' + ' L ' + midWidth + ' ' + midRect.y +\n ' L ' + midWidth + ' ' + midHeight + ' L ' + midRect.x + ' ' + midHeight + ' Z';\n direction += ' M ' + midWidth + ' ' + center + ' L ' + topWidth + ' ' + center;\n direction += ' M ' + topWidth + ' ' + midRect.y + ' L ' + topWidth + ' ' + midHeight;\n direction += ' M ' + median.x + ' ' + midRect.y + ' ' + ' L ' + median.x + ' ' + midHeight;\n direction += series.showMean ?\n 'M ' + (average.x + 5) + ' ' + (average.y - 5) + ' L ' + (average.x - 5) + ' ' + (average.y + 5) +\n 'M ' + (average.x - 5) + ' ' + (average.y - 5) + ' L ' + (average.x + 5) + ' ' + (average.y + 5) : '';\n }\n return direction;\n };\n /**\n * Rendering for box and whisker append here.\n * @param series\n * @param point\n * @param rect\n * @param argsData\n * @param direction\n */\n BoxAndWhiskerSeries.prototype.renderBoxAndWhisker = function (series, point, rect, argsData, direction) {\n var location;\n var size;\n var symbolId = series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n var element = series.chart.renderer.drawPath(new PathOption(symbolId + '_BoxPath', argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction));\n element.setAttribute('aria-label', point.x.toString() + ':' + point.maximum.toString()\n + ':' + point.minimum.toString() + ':' + point.lowerQuartile.toString() + ':' + point.upperQuartile.toString());\n var parentElement = series.chart.renderer.createGroup({\n 'id': symbolId\n });\n parentElement.appendChild(element);\n for (var i = 0; i < point.outliers.length; i++) {\n location = getPoint(point.xValue, point.outliers[i], series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n size = new Size(series.marker.width, series.marker.height);\n point.symbolLocations.push(location);\n this.updateTipSize(series, point, {\n x: location.x - (size.width / 2), y: location.y - (size.height / 2),\n width: size.width, height: size.height\n }, true);\n }\n series.seriesElement.appendChild(parentElement);\n };\n /**\n * To find the box plot values\n * @param yValues\n * @param point\n * @param mode\n */\n BoxAndWhiskerSeries.prototype.findBoxPlotValues = function (yValues, point, mode) {\n var yCount = yValues.length;\n var quartile = {\n average: sum(yValues) / yCount,\n lowerQuartile: 0, upperQuartile: 0,\n maximum: 0, minimum: 0,\n median: 0, outliers: []\n };\n if (mode === 'Exclusive') {\n quartile.lowerQuartile = this.getExclusiveQuartileValue(yValues, yCount, 0.25);\n quartile.upperQuartile = this.getExclusiveQuartileValue(yValues, yCount, 0.75);\n quartile.median = this.getExclusiveQuartileValue(yValues, yCount, 0.5);\n }\n else if (mode === 'Inclusive') {\n quartile.lowerQuartile = this.getInclusiveQuartileValue(yValues, yCount, 0.25);\n quartile.upperQuartile = this.getInclusiveQuartileValue(yValues, yCount, 0.75);\n quartile.median = this.getInclusiveQuartileValue(yValues, yCount, 0.5);\n }\n else {\n quartile.median = getMedian(yValues);\n this.getQuartileValues(yValues, yCount, quartile);\n }\n this.getMinMaxOutlier(yValues, yCount, quartile);\n point.minimum = quartile.minimum;\n point.maximum = quartile.maximum;\n point.lowerQuartile = quartile.lowerQuartile;\n point.upperQuartile = quartile.upperQuartile;\n point.median = quartile.median;\n point.outliers = quartile.outliers;\n point.average = quartile.average;\n };\n /**\n * to find the exclusive quartile values\n * @param yValues\n * @param count\n * @param percentile\n */\n BoxAndWhiskerSeries.prototype.getExclusiveQuartileValue = function (yValues, count, percentile) {\n if (count === 0) {\n return 0;\n }\n else if (count === 1) {\n return yValues[0];\n }\n var value = 0;\n var rank = percentile * (count + 1);\n var integerRank = Math.floor(Math.abs(rank));\n var fractionRank = rank - integerRank;\n if (integerRank === 0) {\n value = yValues[0];\n }\n else if (integerRank > count - 1) {\n value = yValues[count - 1];\n }\n else {\n value = fractionRank * (yValues[integerRank] - yValues[integerRank - 1]) + yValues[integerRank - 1];\n }\n return value;\n };\n /**\n * to find the inclusive quartile values\n * @param yValues\n * @param count\n * @param percentile\n */\n BoxAndWhiskerSeries.prototype.getInclusiveQuartileValue = function (yValues, count, percentile) {\n if (count === 0) {\n return 0;\n }\n else if (count === 1) {\n return yValues[0];\n }\n var value = 0;\n var rank = percentile * (count - 1);\n var integerRank = Math.floor(Math.abs(rank));\n var fractionRank = rank - integerRank;\n value = fractionRank * (yValues[integerRank + 1] - yValues[integerRank]) + yValues[integerRank];\n return value;\n };\n /**\n * To find the quartile values\n * @param yValues\n * @param count\n * @param lowerQuartile\n * @param upperQuartile\n */\n BoxAndWhiskerSeries.prototype.getQuartileValues = function (yValues, count, quartile) {\n if (count === 1) {\n quartile.lowerQuartile = yValues[0];\n quartile.upperQuartile = yValues[0];\n return null;\n }\n var isEvenList = count % 2 === 0;\n var halfLength = count / 2;\n var lowerQuartileArray = yValues.slice(0, halfLength);\n var upperQuartileArray = yValues.slice(isEvenList ? halfLength : halfLength + 1, count);\n quartile.lowerQuartile = getMedian(lowerQuartileArray);\n quartile.upperQuartile = getMedian(upperQuartileArray);\n };\n /**\n * To find the min, max and outlier values\n * @param yValues\n * @param lowerQuartile\n * @param upperQuartile\n * @param minimum\n * @param maximum\n * @param outliers\n */\n BoxAndWhiskerSeries.prototype.getMinMaxOutlier = function (yValues, count, quartile) {\n var interquartile = quartile.upperQuartile - quartile.lowerQuartile;\n var rangeIQR = 1.5 * interquartile;\n for (var i = 0; i < count; i++) {\n if (yValues[i] < quartile.lowerQuartile - rangeIQR) {\n quartile.outliers.push(yValues[i]);\n }\n else {\n quartile.minimum = yValues[i];\n break;\n }\n }\n for (var i = count - 1; i >= 0; i--) {\n if (yValues[i] > quartile.upperQuartile + rangeIQR) {\n quartile.outliers.push(yValues[i]);\n }\n else {\n quartile.maximum = yValues[i];\n break;\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BoxAndWhiskerSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n BoxAndWhiskerSeries.prototype.getModuleName = function () {\n return 'BoxAndWhiskerSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the candle series.\n * @return {void}\n * @private\n */\n BoxAndWhiskerSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the candle series.\n */\n };\n return BoxAndWhiskerSeries;\n}(ColumnBase));\nexport { BoxAndWhiskerSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { getPoint, withInRange, ChartLocation, PathOption } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `MultiColoredAreaSeries` module used to render the area series with multi color.\n */\nvar MultiColoredAreaSeries = /** @class */ (function (_super) {\n __extends(MultiColoredAreaSeries, _super);\n function MultiColoredAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Area series.\n * @return {void}\n * @private\n */\n MultiColoredAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var _this = this;\n var firstPoint;\n var startPoint = null;\n var direction = '';\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var options = [];\n var startRegion;\n var previous;\n var color;\n var rendered;\n var segments = this.sortSegments(series, series.segments);\n series.points.map(function (point, i, seriesPoints) {\n point.symbolLocations = [];\n point.regions = [];\n rendered = false;\n if (point.visible && withInRange(seriesPoints[i - 1], point, seriesPoints[i + 1], series)) {\n direction += _this.getAreaPathDirection(point.xValue, origin, series, isInverted, getPoint, startPoint, 'M');\n startPoint = startPoint || new ChartLocation(point.xValue, origin);\n firstPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n if (previous && _this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n rendered = true;\n startRegion = getPoint(startPoint.x, origin, xAxis, yAxis, isInverted, series);\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (startRegion.y) + ' ');\n _this.generatePathOption(options, series, previous, direction, '_Point_' + previous.index);\n direction = 'M' + ' ' + (firstPoint.x) + ' ' + (startRegion.y) + ' ' + 'L' + ' ' +\n (firstPoint.x) + ' ' + (firstPoint.y) + ' ';\n }\n else {\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n _this.setPointColor(point, null, series, series.segmentAxis === 'X', segments);\n }\n if (seriesPoints[i + 1] && !seriesPoints[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n direction += _this.getAreaEmptyDirection({ 'x': point.xValue, 'y': origin }, startPoint, series, isInverted, getPoint);\n startPoint = null;\n }\n previous = point;\n _this.storePointLocation(point, series, isInverted, getPoint);\n }\n });\n if (!rendered) {\n direction = series.points.length > 1 ?\n (direction + this.getAreaPathDirection(previous.xValue, origin, series, isInverted, getPoint, null, 'L')) : '';\n this.generatePathOption(options, series, previous, direction, '');\n }\n this.applySegmentAxis(series, options, segments);\n this.renderMarker(series);\n };\n /**\n * To Store the path directions of the area\n */\n MultiColoredAreaSeries.prototype.generatePathOption = function (options, series, point, direction, id) {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + id, series.setPointColor(point, series.interior), series.border.width, series.border.color, series.opacity, series.dashArray, direction));\n };\n /**\n * To destroy the area series.\n * @return {void}\n * @private\n */\n MultiColoredAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name\n */\n MultiColoredAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MultiColoredAreaSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n MultiColoredAreaSeries.prototype.doAnimation = function (series) {\n this.doLinearAnimation(series, series.animation);\n };\n return MultiColoredAreaSeries;\n}(MultiColoredSeries));\nexport { MultiColoredAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { withInRange, getPoint, PathOption } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `MultiColoredLineSeries` used to render the line series with multi color.\n */\nvar MultiColoredLineSeries = /** @class */ (function (_super) {\n __extends(MultiColoredLineSeries, _super);\n function MultiColoredLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Line Series.\n * @return {void}.\n * @private\n */\n MultiColoredLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var previous = null;\n var startPoint = 'M';\n var visiblePoints = this.improveChartPerformance(series);\n var options = [];\n var direction = '';\n var segments = this.sortSegments(series, series.segments);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction += this.getLineDirection(previous, point, series, isInverted, getPoint, startPoint);\n if (previous != null) {\n if (this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + previous.index, 'none', series.width, series.setPointColor(previous, series.interior), series.opacity, series.dashArray, direction));\n startPoint = 'M';\n direction = '';\n }\n else {\n startPoint = 'L';\n }\n }\n else {\n this.setPointColor(point, null, series, series.segmentAxis === 'X', segments);\n }\n previous = point;\n this.storePointLocation(point, series, isInverted, getPoint);\n }\n else {\n previous = (series.emptyPointSettings.mode === 'Drop') ? previous : null;\n startPoint = (series.emptyPointSettings.mode === 'Drop') ? startPoint : 'M';\n point.symbolLocations = [];\n }\n }\n if (direction !== '') {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index, 'none', series.width, series.setPointColor(visiblePoints[visiblePoints.length - 1], series.interior), series.opacity, series.dashArray, direction));\n }\n this.applySegmentAxis(series, options, segments);\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n MultiColoredLineSeries.prototype.doAnimation = function (series) {\n this.doLinearAnimation(series, series.animation);\n };\n /**\n * Get module name.\n */\n MultiColoredLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MultiColoredLineSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n MultiColoredLineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return MultiColoredLineSeries;\n}(MultiColoredSeries));\nexport { MultiColoredLineSeries };\n","import { textWrap, TextOption, PathOption } from '../../common/utils/helper';\nimport { valueToCoefficient, measureText, textTrim, textElement } from '../../common/utils/helper';\nimport { axisMultiLabelRender } from '../../common/model/constants';\n/**\n * `MultiLevelLabel` module is used to render the multi level label in chart.\n */\nvar MultiLevelLabel = /** @class */ (function () {\n /**\n * Constructor for the logerithmic module.\n * @private\n */\n function MultiLevelLabel(chart) {\n /** @private */\n this.xAxisPrevHeight = [];\n /** @private */\n this.xAxisMultiLabelHeight = [];\n /** @private */\n this.yAxisPrevHeight = [];\n /** @private */\n this.yAxisMultiLabelHeight = [];\n this.chart = chart;\n }\n /**\n * Finds multilevel label height\n * @return {void}\n */\n MultiLevelLabel.prototype.getMultilevelLabelsHeight = function (axis) {\n var value = 0;\n var multiLevelLabelsHeight = [];\n var prevHeight = [];\n var isVertical = axis.orientation === 'Vertical';\n var axisValue = isVertical ? axis.rect.height : axis.rect.width;\n var labelSize;\n var height;\n var padding = 10;\n var gap;\n axis.multiLevelLabels.map(function (multiLevel, index) {\n multiLevel.categories.map(function (categoryLabel) {\n if (categoryLabel.text !== '' && categoryLabel.start !== null && categoryLabel.end !== null) {\n labelSize = measureText(categoryLabel.text, multiLevel.textStyle);\n height = isVertical ? labelSize.width : labelSize.height;\n height += 2 * multiLevel.border.width +\n (multiLevel.border.type === 'CurlyBrace' ? padding : 0);\n gap = (categoryLabel.maximumTextWidth !== null) ? categoryLabel.maximumTextWidth :\n (valueToCoefficient(typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) :\n categoryLabel.end, axis) * axisValue) -\n (valueToCoefficient(typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) :\n categoryLabel.start, axis) * axisValue);\n if ((labelSize.width > gap - padding) && gap > 0 && (multiLevel.overflow === 'Wrap') && !isVertical) {\n height = (height * (textWrap(categoryLabel.text, gap - padding, multiLevel.textStyle).length));\n }\n multiLevelLabelsHeight[index] = !multiLevelLabelsHeight[index] ? height :\n ((multiLevelLabelsHeight[index] < height) ? height : multiLevelLabelsHeight[index]);\n }\n });\n prevHeight[index] = value;\n value += multiLevelLabelsHeight[index] ? (multiLevelLabelsHeight[index] + padding) : 0;\n });\n axis.multiLevelLabelHeight = value + ((axis.title !== '' || (this.chart.legendModule && this.chart.legendSettings.visible))\n ? padding / 2 : 0);\n if (isVertical) {\n this.yAxisMultiLabelHeight = multiLevelLabelsHeight;\n this.yAxisPrevHeight = prevHeight;\n }\n else {\n this.xAxisMultiLabelHeight = multiLevelLabelsHeight;\n this.xAxisPrevHeight = prevHeight;\n }\n };\n /**\n * render x axis multi level labels\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderXAxisMultiLevelLabels = function (axis, index, parent, axisRect) {\n var _this = this;\n var x;\n var y;\n var padding = 10;\n var startX;\n var startY = (axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0) +\n (axis.maxLabelSize.height) + padding;\n var endX;\n var endY;\n var pathRect = '';\n var start;\n var end;\n var labelSize;\n var clipY;\n var isOutside = axis.labelPosition === 'Outside';\n var gap;\n var anchor;\n var isInversed = axis.isInversed;\n var argsData;\n var labelElement;\n var opposedPosition = axis.opposedPosition;\n clipY = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ?\n (axisRect.y + startY - axis.majorTickLines.width) : (axisRect.y - startY - axis.multiLevelLabelHeight);\n this.createClipRect(axisRect.x - axis.majorTickLines.width, clipY, axis.multiLevelLabelHeight + padding, axisRect.width + 2 * axis.majorTickLines.width, this.chart.element.id + '_XAxis_Clippath_' + index, this.chart.element.id + 'XAxisMultiLevelLabel' + index);\n axis.multiLevelLabels.map(function (multiLevel, level) {\n pathRect = '';\n multiLevel.categories.map(function (categoryLabel, i) {\n labelElement = _this.chart.renderer.createGroup({ id: _this.chart.element.id + index + '_MultiLevelLabel' + level });\n start = typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) : categoryLabel.start;\n end = typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) : categoryLabel.end;\n if (((start >= axis.visibleRange.min && start <= axis.visibleRange.max)\n || (end >= axis.visibleRange.min && end <= axis.visibleRange.max))) {\n argsData = _this.triggerMultiLabelRender(axis, categoryLabel.text, axis.multiLevelLabels[level].textStyle, axis.multiLevelLabels[level].alignment);\n if (!argsData.cancel) {\n startX = valueToCoefficient(start, axis) * axisRect.width;\n endX = valueToCoefficient(end, axis) * axisRect.width;\n endX = isInversed ? [startX, startX = endX][0] : endX;\n labelSize = measureText(argsData.text, argsData.textStyle);\n gap = ((categoryLabel.maximumTextWidth === null) ? endX - startX : categoryLabel.maximumTextWidth) - padding;\n x = startX + axisRect.x + padding;\n y = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ? (startY + axisRect.y +\n labelSize.height / 2 + padding + _this.xAxisPrevHeight[level]) : (axisRect.y - startY + labelSize.height / 2 -\n _this.xAxisMultiLabelHeight[level] - _this.xAxisPrevHeight[level]);\n if (argsData.alignment === 'Center') {\n x += (endX - startX - padding) / 2;\n anchor = 'middle';\n }\n else if (argsData.alignment === 'Far') {\n x = x + (endX - startX - padding) - multiLevel.border.width / 2;\n anchor = 'end';\n }\n else {\n anchor = 'start';\n x += multiLevel.border.width / 2;\n }\n y = multiLevel.border.type === 'CurlyBrace' ?\n (((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? y + padding : y - padding / 2) : y;\n var options = new TextOption(_this.chart.element.id + index + '_Axis_MultiLevelLabel_Level_' + level + '_Text_' + i, x, y, anchor, argsData.text);\n if (multiLevel.overflow !== 'None') {\n options.text = (multiLevel.overflow === 'Wrap') ?\n textWrap(argsData.text, gap, argsData.textStyle) : textTrim(gap, argsData.text, argsData.textStyle);\n options.x = options.x - padding / 2;\n }\n textElement(options, argsData.textStyle, argsData.textStyle.color || _this.chart.themeStyle.axisLabel, labelElement);\n if (multiLevel.border.width > 0 && multiLevel.border.type !== 'WithoutBorder') {\n pathRect = _this.renderXAxisLabelBorder(level, endX - startX - padding, axis, startX, startY, labelSize, options, axisRect, argsData.alignment, pathRect, isOutside, opposedPosition);\n }\n _this.multiElements.appendChild(labelElement);\n }\n }\n });\n if (pathRect !== '') {\n _this.createBorderElement(level, index, axis, pathRect);\n }\n });\n parent.appendChild(this.multiElements);\n };\n /**\n * render x axis multi level labels border\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderXAxisLabelBorder = function (labelIndex, gap, axis, startX, startY, labelSize, textOptions, axisRect, alignment, path, isOutside, opposedPosition) {\n var padding = 10;\n var padding1;\n var padding2;\n var value;\n var value1;\n var groupLabel = axis.multiLevelLabels[labelIndex];\n var width = gap + padding;\n var height = this.xAxisMultiLabelHeight[labelIndex] + padding;\n var x = startX + axisRect.x;\n var y = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ?\n (startY + axisRect.y + this.xAxisPrevHeight[labelIndex]) : (axisRect.y - startY - this.xAxisPrevHeight[labelIndex]);\n switch (groupLabel.border.type) {\n case 'WithoutTopandBottomBorder':\n case 'Rectangle':\n case 'WithoutTopBorder':\n height = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? height : -height;\n path += 'M' + x + ' ' + y + 'L' + x + ' ' + (y + height) +\n 'M' + (x + width) + ' ' + y + 'L' + (x + width) + ' ' + (y + height);\n path += (groupLabel.border.type !== 'WithoutTopandBottomBorder') ? ('L' + ' ' + (x) + ' ' + (y + height) + ' ') : ' ';\n path += groupLabel.border.type === 'Rectangle' ? ('M' + x + ' ' + y + 'L' + (x + width) + ' ' + y) : ' ';\n break;\n case 'Brace':\n if (alignment === 'Near') {\n value = textOptions.x;\n value1 = textOptions.x + labelSize.width + 2;\n }\n else if (alignment === 'Center') {\n value = textOptions.x - labelSize.width / 2 - 2;\n value1 = textOptions.x + labelSize.width / 2 + 2;\n }\n else {\n value = textOptions.x - labelSize.width - 2;\n value1 = textOptions.x;\n }\n height = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? height : -height;\n path += 'M' + x + ' ' + y + 'L' + x + ' ' + (y + height / 2) +\n 'M' + x + ' ' + (y + height / 2) + 'L' + (value - 2) + ' ' + (y + height / 2) +\n 'M' + (value1) + ' ' + (y + height / 2) + 'L' + (x + width) + ' ' + (y + height / 2) +\n 'M' + (x + width) + ' ' + (y + height / 2) + 'L' + (x + width) + ' ' + (y);\n break;\n case 'CurlyBrace':\n if ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) {\n padding = 10;\n padding1 = 15;\n padding2 = 5;\n }\n else {\n padding = -10;\n padding1 = -15;\n padding2 = -5;\n }\n if (alignment === 'Center') {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + width / 2 - 5) + ' ' + (y + padding) + 'L' + (x + width / 2) + ' ' + (y + padding1) +\n 'L' + (x + width / 2 + 5) + ' ' + (y + padding) + 'L' + (x + width - 10) + ' ' + (y + padding) + ' C ' +\n (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' ' + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n else if (alignment === 'Near') {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + 15) + ' ' + (y + padding1) + 'L' + (x + 20) + ' ' + (y + padding) + 'L' +\n (x + width - 10) + ' ' + (y + padding) + ' C ' + (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' '\n + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n else {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + width - 20) + ' ' + (y + padding) + 'L' + (x + width - 15) + ' ' + (y + padding1) +\n 'L' + (x + width - 10) + ' ' + (y + padding) + 'L' + (x + width - 10) + ' ' + (y + padding) + ' C '\n + (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' ' + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n break;\n }\n return path;\n };\n /**\n * render y axis multi level labels\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderYAxisMultiLevelLabels = function (axis, index, parent, rect) {\n var _this = this;\n var labelSize;\n var clipX;\n var isOutside = axis.labelPosition === 'Outside';\n var x;\n var y;\n var padding = 10;\n var startX = (axis.tickPosition === axis.labelPosition ? axis.majorTickLines.height : 0) +\n (axis.maxLabelSize.width) + padding;\n var startY;\n var path = '';\n var labelElement;\n var endY;\n var argsData;\n var isInversed = axis.isInversed;\n var start;\n var end;\n var gap;\n var anchor = 'middle';\n var opposedPosition = axis.opposedPosition;\n clipX = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ?\n (rect.x - axis.multiLevelLabelHeight - startX - padding) : (rect.x + startX);\n this.createClipRect(clipX, rect.y - axis.majorTickLines.width, rect.height + 2 * axis.majorTickLines.width, axis.multiLevelLabelHeight + padding, this.chart.element.id + '_YAxis_Clippath_' + index, this.chart.element.id + 'YAxisMultiLevelLabel' + index);\n axis.multiLevelLabels.map(function (multiLevel, level) {\n path = '';\n multiLevel.categories.map(function (categoryLabel, i) {\n labelElement = _this.chart.renderer.createGroup({ id: _this.chart.element.id + index + '_MultiLevelLabel' + level });\n end = typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) : categoryLabel.end;\n start = typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) : categoryLabel.start;\n if (((start >= axis.visibleRange.min && start <= axis.visibleRange.max)\n || (end >= axis.visibleRange.min && end <= axis.visibleRange.max))) {\n startY = valueToCoefficient((start), axis) * (rect.height);\n endY = valueToCoefficient((end), axis) * (rect.height);\n endY = isInversed ? [startY, startY = endY][0] : endY;\n argsData = _this.triggerMultiLabelRender(axis, categoryLabel.text, multiLevel.textStyle, multiLevel.alignment);\n if (!argsData.cancel) {\n labelSize = measureText(argsData.text, argsData.textStyle);\n gap = endY - startY;\n x = rect.x - startX - _this.yAxisPrevHeight[level] -\n (_this.yAxisMultiLabelHeight[level] / 2) - padding / 2;\n y = rect.height + rect.y - startY - (gap / 2);\n if (opposedPosition) {\n x = isOutside ? rect.x + startX + padding / 2 + (_this.yAxisMultiLabelHeight[level] / 2) +\n _this.yAxisPrevHeight[level] : rect.x - startX - (_this.yAxisMultiLabelHeight[level] / 2) -\n _this.yAxisPrevHeight[level] - padding / 2;\n }\n else {\n x = isOutside ? x : rect.x + startX + padding / 2 + (_this.yAxisMultiLabelHeight[level] / 2) +\n _this.yAxisPrevHeight[level];\n }\n if (argsData.alignment === 'Center') {\n y += labelSize.height / 4;\n }\n else if (argsData.alignment === 'Far') {\n y += gap / 2 - labelSize.height / 2;\n }\n else {\n y = y - gap / 2 + labelSize.height;\n }\n x = multiLevel.border.type === 'CurlyBrace' ? (((!opposedPosition && isOutside) ||\n (opposedPosition && !isOutside)) ? x - padding : x + padding) : x;\n var options = new TextOption(_this.chart.element.id + index + '_Axis_MultiLevelLabel_Level_' + level + '_Text_' + i, x, y, anchor, argsData.text);\n options.text = (multiLevel.overflow === 'Trim') ?\n textTrim((categoryLabel.maximumTextWidth === null ? _this.yAxisMultiLabelHeight[level] :\n categoryLabel.maximumTextWidth), argsData.text, argsData.textStyle) : options.text;\n textElement(options, argsData.textStyle, argsData.textStyle.color || _this.chart.themeStyle.axisLabel, labelElement);\n if (multiLevel.border.width > 0 && multiLevel.border.type !== 'WithoutBorder') {\n path = _this.renderYAxisLabelBorder(level, gap, axis, endY, startX, startY, labelSize, options, rect, argsData.alignment, path, isOutside, opposedPosition);\n }\n _this.multiElements.appendChild(labelElement);\n }\n }\n });\n if (path !== '') {\n _this.createBorderElement(level, index, axis, path);\n }\n });\n parent.appendChild(this.multiElements);\n };\n /**\n * render y axis multi level labels border\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderYAxisLabelBorder = function (labelIndex, gap, axis, endY, startX, startY, labelSize, textOptions, rect, alignment, path, isOutside, opposedPosition) {\n var height = endY - startY;\n var padding = 10;\n var padding1;\n var padding2;\n var groupLabel = axis.multiLevelLabels[labelIndex];\n var y = rect.y + rect.height - endY;\n var width = this.yAxisMultiLabelHeight[labelIndex] + padding;\n var x = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? rect.x - startX -\n this.yAxisPrevHeight[labelIndex] : rect.x + startX + this.yAxisPrevHeight[labelIndex];\n switch (groupLabel.border.type) {\n case 'WithoutTopandBottomBorder':\n case 'Rectangle':\n case 'WithoutTopBorder':\n width = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? -width : width;\n path += 'M' + x + ' ' + y + 'L' + (x + width) + ' ' + y +\n 'M' + x + ' ' + (y + height) + 'L' + (x + width) + ' ' + (y + height);\n path += (groupLabel.border.type !== 'WithoutTopandBottomBorder') ? ('L' + ' ' + (x + width) + ' ' + y + ' ') : ' ';\n path += (groupLabel.border.type === 'Rectangle') ? ('M' + (x) + ' ' + (y + height) + 'L' + ' ' + (x) + ' ' + y + ' ') : ' ';\n break;\n case 'Brace':\n width = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? width : -width;\n path += 'M ' + (x) + ' ' + y + ' L ' + (x - width / 2) + ' ' + y + ' L ' + (x - width / 2) + ' ' +\n (textOptions.y - labelSize.height / 2 - 4) + ' M ' + (x - width / 2) + ' ' +\n (textOptions.y + labelSize.height / 4 + 2) +\n ' L ' + (x - width / 2) + ' ' + (y + height) + ' L ' + (x) + ' ' + (y + height);\n break;\n case 'CurlyBrace':\n if ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) {\n padding = -10;\n padding1 = -15;\n padding2 = -5;\n }\n else {\n padding = 10;\n padding1 = 15;\n padding2 = 5;\n }\n if (alignment === 'Center') {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding) + ' ' + (y + (height - 10) / 2) + ' L ' + (x + padding1) + ' ' + (y + (height - 10) / 2 + 5)\n + ' L ' + (x + padding) + ' ' + (y + (height - 10) / 2 + 10) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C ' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding2) + ' ' + (y + height) + ' '\n + x + ' ' + (y + height);\n }\n else if (alignment === 'Far') {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding) + ' ' + (y + height - 20) + ' ' + ' L ' + (x + padding1) + ' ' + (y + (height - 15)) +\n ' L ' + (x + padding) + ' ' + (y + (height - 10)) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding) + ' ' + (y + height) + ' ' + x + ' '\n + (y + height);\n }\n else {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding1) + ' ' + (y + 15) +\n ' L ' + (x + padding) + ' ' + (y + 20) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding2) + ' ' + (y + height) + ' ' + x +\n ' ' + (y + height);\n }\n break;\n }\n return path;\n };\n /**\n * create cliprect\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.createClipRect = function (x, y, height, width, clipId, axisId) {\n this.multiElements = this.chart.renderer.createGroup({\n 'id': axisId,\n 'clip-path': 'url(#' + clipId + ')'\n });\n this.multiElements.appendChild(this.chart.renderer.drawClipPath({\n 'id': clipId,\n 'x': x,\n 'y': y,\n 'width': width,\n 'height': height,\n 'fill': 'white',\n 'stroke-width': 1, 'stroke': 'Gray'\n }));\n };\n /**\n * create borer element\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.createBorderElement = function (borderIndex, axisIndex, axis, path) {\n var borderElement = this.chart.renderer.drawPath(new PathOption(this.chart.element.id + axisIndex + '_Axis_MultiLevelLabel_Rect_' + borderIndex, 'Transparent', axis.multiLevelLabels[borderIndex].border.width, axis.multiLevelLabels[borderIndex].border.color || this.chart.themeStyle.axisLine, 1, '', path));\n borderElement.setAttribute('style', 'pointer-events: none');\n this.multiElements.appendChild(borderElement);\n };\n /**\n * Triggers the event.\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.triggerMultiLabelRender = function (axis, text, textStyle, textAlignment) {\n var argsData;\n argsData = {\n cancel: false, name: axisMultiLabelRender, axis: axis,\n text: text, textStyle: textStyle, alignment: textAlignment\n };\n this.chart.trigger(axisMultiLabelRender, argsData);\n return argsData;\n };\n /**\n * To get the module name for `MultiLevelLabel`.\n * @private\n */\n MultiLevelLabel.prototype.getModuleName = function () {\n return 'MultiLevelLabel';\n };\n /**\n * To destroy the `MultiLevelLabel` module.\n * @private\n */\n MultiLevelLabel.prototype.destroy = function () {\n // destroy peform here\n };\n return MultiLevelLabel;\n}());\nexport { MultiLevelLabel };\n","/**\n * Defines the common functionalities of accumulation series\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { degreeToLocation, getElement, indexFinder } from '../../common/utils/helper';\nimport { pointByIndex } from '../model/acc-base';\n/**\n * Accumulation Base used to do some base calculation for accumulation chart.\n */\nvar AccumulationBase = /** @class */ (function () {\n /** @private */\n function AccumulationBase(accumulation) {\n this.accumulation = accumulation;\n }\n Object.defineProperty(AccumulationBase.prototype, \"center\", {\n /**\n * Gets the center of the pie\n * @private\n */\n get: function () {\n return this.pieCenter || (this.accumulation.visibleSeries[0].type === 'Pie' ?\n this.accumulation.pieSeriesModule.center : null);\n },\n /**\n * Sets the center of the pie\n * @private\n */\n set: function (value) {\n this.pieCenter = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"radius\", {\n /**\n * Gets the radius of the pie\n * @private\n */\n get: function () {\n return this.pieRadius !== undefined ? this.pieRadius :\n this.accumulation.pieSeriesModule.radius;\n },\n /**\n * Sets the radius of the pie\n * @private\n */\n set: function (value) {\n this.pieRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"labelRadius\", {\n /**\n * Gets the label radius of the pie\n * @private\n */\n get: function () {\n return this.pieLabelRadius !== undefined ? this.pieLabelRadius :\n this.accumulation.pieSeriesModule.labelRadius;\n },\n /**\n * Sets the label radius of the pie\n * @private\n */\n set: function (value) {\n this.pieLabelRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Checks whether the series is circular or not\n * @private\n */\n AccumulationBase.prototype.isCircular = function () {\n return this.accumulation.type === 'Pie';\n };\n /**\n * To process the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.processExplode = function (event) {\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n var pointIndex = indexFinder(event.target.id).point;\n if (isNaN(pointIndex) || (event.target.id.indexOf('_datalabel_') > -1 &&\n this.accumulation.visibleSeries[0].points[pointIndex].labelPosition === 'Outside')) {\n return null;\n }\n this.explodePoints(pointIndex, this.accumulation);\n this.deExplodeAll(pointIndex);\n }\n };\n /**\n * To invoke the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.invokeExplode = function () {\n if (this.accumulation.visibleSeries[0].explodeAll) {\n for (var _i = 0, _a = this.accumulation.visibleSeries[0].points; _i < _a.length; _i++) {\n var point = _a[_i];\n this.explodePoints(point.index, this.accumulation);\n }\n }\n else if (!isNullOrUndefined(this.accumulation.visibleSeries[0].explodeIndex)) {\n this.explodePoints(this.accumulation.visibleSeries[0].explodeIndex, this.accumulation);\n }\n if (this.accumulation.accumulationSelectionModule && this.accumulation.selectionMode !== 'None' &&\n this.accumulation.accumulationSelectionModule.selectedDataIndexes.length) {\n for (var _b = 0, _c = this.accumulation.accumulationSelectionModule.selectedDataIndexes; _b < _c.length; _b++) {\n var index = _c[_b];\n this.explodePoints(index.point, this.accumulation, true);\n this.deExplodeAll(index.point);\n }\n }\n };\n /**\n * To deExplode all points in the series\n */\n AccumulationBase.prototype.deExplodeAll = function (index) {\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var points = this.accumulation.visibleSeries[0].points;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var currentPoint = points_1[_i];\n if (index !== currentPoint.index) {\n this.deExplodeSlice(currentPoint.index, pointId, this.center);\n }\n }\n };\n /**\n * To explode point by index\n * @private\n */\n AccumulationBase.prototype.explodePoints = function (index, chart, explode) {\n if (explode === void 0) { explode = false; }\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var translate;\n var points = this.accumulation.visibleSeries[0].points;\n var point = pointByIndex(index, this.accumulation.visibleSeries[0].points);\n if (isNullOrUndefined(point)) {\n return null;\n }\n if (!this.isCircular()) {\n translate = { x: chart.explodeDistance, y: 0 };\n }\n else {\n translate = degreeToLocation(point.midAngle, chart.explodeDistance, this.center);\n }\n if (this.isExplode(pointId + index) || explode) {\n this.explodeSlice(index, translate, pointId, this.center || { x: 0, y: 0 });\n }\n else {\n this.deExplodeSlice(index, pointId, this.center);\n }\n };\n /**\n * To check point is exploded by id\n */\n AccumulationBase.prototype.isExplode = function (id) {\n var element = getElement(id);\n if (element && (element.getAttribute('transform') === 'translate(0, 0)' || element.getAttribute('transform') === null ||\n element.getAttribute('transform') === 'translate(0)')) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * To deExplode the point by index\n */\n AccumulationBase.prototype.deExplodeSlice = function (index, sliceId, center) {\n var position = 'translate(0, 0)';\n this.setTranslate(index, sliceId, position);\n };\n /**\n * To translate the point elements by index and position\n */\n AccumulationBase.prototype.setTranslate = function (index, sliceId, position) {\n this.setElementTransform(sliceId + index, position);\n if (this.accumulation.visibleSeries[0].dataLabel.visible) {\n sliceId = this.accumulation.element.id + '_datalabel_Series_0_';\n this.setElementTransform(sliceId + 'shape_' + index, position);\n this.setElementTransform(sliceId + 'text_' + index, position);\n this.setElementTransform(sliceId + 'connector_' + index, position);\n }\n };\n /**\n * To translate the point element by id and position\n */\n AccumulationBase.prototype.setElementTransform = function (id, position) {\n var element = getElement(id);\n if (element) {\n element.setAttribute('transform', position);\n }\n };\n /**\n * To translate the point elements by index position\n */\n AccumulationBase.prototype.explodeSlice = function (index, translate, sliceId, center) {\n var position = 'translate(' + (translate.x - center.x) + ', ' + (translate.y - center.y) + ')';\n this.setTranslate(index, sliceId, position);\n };\n return AccumulationBase;\n}());\nexport { AccumulationBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * Accumulation charts base file\n */\nimport { Animation } from '@syncfusion/ej2-base';\nimport { stringToNumber, ChartLocation, degreeToLocation, Rect, getAnimationFunction, getElement } from '../../common/utils/helper';\nimport { animationComplete } from '../../common/model/constants';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * PieBase class used to do pie base calculations.\n */\nvar PieBase = /** @class */ (function (_super) {\n __extends(PieBase, _super);\n function PieBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To initialize the property values.\n * @private\n */\n PieBase.prototype.initProperties = function (chart, series) {\n this.accumulation = chart;\n var size = Math.min(chart.initialClipRect.width, chart.initialClipRect.height);\n this.initAngles(series);\n this.radius = stringToNumber(series.radius, size / 2);\n this.innerRadius = stringToNumber(series.innerRadius, this.radius);\n this.labelRadius = series.dataLabel.position === 'Inside' ? (((this.radius - this.innerRadius) / 2) + this.innerRadius) :\n (this.radius + stringToNumber(series.dataLabel.connectorStyle.length || '4%', size / 2));\n chart.explodeDistance = series.explode ? stringToNumber(series.explodeOffset, this.radius) : 0;\n this.findCenter(chart, series);\n this.defaultLabelBound(series, series.dataLabel.visible, series.dataLabel.position);\n this.totalAngle -= 0.001;\n };\n /**\n * To find the center of the accumulation.\n * @private\n */\n PieBase.prototype.findCenter = function (accumulation, series) {\n this.accumulation = accumulation;\n this.center = {\n x: stringToNumber('50%', accumulation.initialClipRect.width) + (accumulation.initialClipRect.x),\n y: stringToNumber('50%', accumulation.initialClipRect.height) + (accumulation.initialClipRect.y)\n };\n var accumulationRect = this.getSeriesBound(series);\n var accumulationRectCenter = new ChartLocation(accumulationRect.x + accumulationRect.width / 2, accumulationRect.y + accumulationRect.height / 2);\n this.center.x += (this.center.x - accumulationRectCenter.x);\n this.center.y += (this.center.y - accumulationRectCenter.y);\n this.accumulation.center = this.center;\n };\n /**\n * To find angles from series.\n */\n PieBase.prototype.initAngles = function (series) {\n this.totalAngle = (series.endAngle - series.startAngle) % 360;\n this.startAngle = series.startAngle - 90;\n this.totalAngle = this.totalAngle <= 0 ? (360 + this.totalAngle) : this.totalAngle;\n this.startAngle = (this.startAngle < 0 ? (this.startAngle + 360) : this.startAngle) % 360;\n };\n /**\n * To calculate data-label bound\n * @private\n */\n PieBase.prototype.defaultLabelBound = function (series, visible, position) {\n var accumulationBound = this.getSeriesBound(series);\n series.accumulationBound = accumulationBound;\n series.labelBound = new Rect(accumulationBound.x, accumulationBound.y, accumulationBound.width + accumulationBound.x, accumulationBound.height + accumulationBound.y);\n if (visible && position === 'Outside') {\n series.labelBound = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n }\n };\n /**\n * To calculate series bound\n * @private\n */\n PieBase.prototype.getSeriesBound = function (series) {\n var rect = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n this.initAngles(series);\n var start = this.startAngle;\n var total = this.totalAngle;\n var end = (this.startAngle + total) % 360;\n end = (end === 0) ? 360 : end;\n series.findMaxBounds(rect, this.getRectFromAngle(start));\n series.findMaxBounds(rect, this.getRectFromAngle(end));\n series.findMaxBounds(rect, new Rect(this.center.x, this.center.y, 0, 0));\n var nextQuandrant = (Math.floor(start / 90) * 90 + 90) % 360;\n var lastQuadrant = (Math.floor(end / 90) * 90) % 360;\n lastQuadrant = (lastQuadrant === 0) ? 360 : lastQuadrant;\n if (total >= 90 || lastQuadrant === nextQuandrant) {\n series.findMaxBounds(rect, this.getRectFromAngle(nextQuandrant));\n series.findMaxBounds(rect, this.getRectFromAngle(lastQuadrant));\n }\n if (start === 0 || (start + total >= 360)) {\n series.findMaxBounds(rect, this.getRectFromAngle(0));\n }\n var length = nextQuandrant === lastQuadrant ? 0 : Math.floor(total / 90);\n for (var i = 1; i < length; i++) {\n nextQuandrant = nextQuandrant + 90;\n if ((nextQuandrant < lastQuadrant || end < start) || total === 360) {\n series.findMaxBounds(rect, this.getRectFromAngle(nextQuandrant));\n }\n }\n rect.width -= rect.x;\n rect.height -= rect.y;\n return rect;\n };\n /**\n * To get rect location size from angle\n */\n PieBase.prototype.getRectFromAngle = function (angle) {\n var location = degreeToLocation(angle, this.radius, this.center);\n return new Rect(location.x, location.y, 0, 0);\n };\n /**\n * To get path arc direction\n */\n PieBase.prototype.getPathArc = function (center, start, end, radius, innerRadius) {\n var degree = end - start;\n degree = degree < 0 ? (degree + 360) : degree;\n var flag = (degree < 180) ? 0 : 1;\n if (!innerRadius && innerRadius === 0) {\n return this.getPiePath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, flag);\n }\n else {\n return this.getDoughnutPath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, degreeToLocation(start, innerRadius, center), degreeToLocation(end, innerRadius, center), innerRadius, flag);\n }\n };\n /**\n * To get pie direction\n */\n PieBase.prototype.getPiePath = function (center, start, end, radius, clockWise) {\n return 'M ' + center.x + ' ' + center.y + ' L ' + start.x + ' ' + start.y + ' A ' + radius + ' ' +\n radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y + ' Z';\n };\n /**\n * To get doughnut direction\n */\n PieBase.prototype.getDoughnutPath = function (center, start, end, radius, innerStart, innerEnd, innerRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise +\n ' 1 ' + end.x + ' ' + end.y + ' L ' + innerEnd.x + ' ' + innerEnd.y + ' A ' + innerRadius +\n ' ' + innerRadius + ' 0 ' + clockWise + ',0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n };\n /**\n * Method to start animation for pie series.\n */\n PieBase.prototype.doAnimation = function (slice, series) {\n var _this = this;\n var startAngle = series.startAngle - 85;\n var value;\n var radius = Math.max(this.accumulation.availableSize.height, this.accumulation.availableSize.width) * 0.75;\n radius += radius * (0.414); // formula r + r / 2 * (1.414 -1)\n var effect = getAnimationFunction('Linear'); // need to check animation type\n new Animation({}).animate(slice, {\n duration: series.animation.duration,\n delay: series.animation.delay,\n progress: function (args) {\n value = effect(args.timeStamp, startAngle, _this.totalAngle, args.duration);\n slice.setAttribute('d', _this.getPathArc(_this.center, startAngle, value, radius, 0));\n },\n end: function (args) {\n slice.setAttribute('d', _this.getPathArc(_this.center, 0, 359.99999, radius, 0));\n _this.accumulation.trigger(animationComplete, { series: series, accumulation: _this.accumulation });\n var datalabelGroup = getElement(_this.accumulation.element.id + '_datalabel_Series_' + series.index);\n datalabelGroup.style.visibility = _this.accumulation.isDestroyed ? 'hidden' : 'visible';\n }\n });\n };\n return PieBase;\n}(AccumulationBase));\nexport { PieBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { PathOption, degreeToLocation } from '../../common/utils/helper';\nimport { PieBase } from '../renderer/pie-base';\n/**\n * PieSeries module used to render `Pie` Series.\n */\nvar PieSeries = /** @class */ (function (_super) {\n __extends(PieSeries, _super);\n function PieSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To get path option, degree, symbolLocation from the point.\n * @private\n */\n PieSeries.prototype.renderPoint = function (point, series, chart, option) {\n var sum = series.sumOfPoints;\n var degree = ((Math.abs(point.y) / sum) * (this.totalAngle));\n option.d = this.getPathOption(point, degree);\n point.midAngle = (this.startAngle - (degree / 2)) % 360;\n point.endAngle = this.startAngle % 360;\n point.symbolLocation = degreeToLocation(point.midAngle, (this.radius + this.innerRadius) / 2, this.center);\n return option;\n };\n /**\n * To get path option from the point.\n */\n PieSeries.prototype.getPathOption = function (point, degree) {\n var path = this.getPathArc(this.center, this.startAngle % 360, (this.startAngle + degree) % 360, this.radius, this.innerRadius);\n this.startAngle += degree;\n return path;\n };\n /**\n * To animate the pie series.\n * @private\n */\n PieSeries.prototype.animateSeries = function (accumulation, option, series, slice) {\n var groupId = accumulation.element.id + 'SeriesGroup' + series.index;\n if (series.animation.enable && accumulation.animateSeries) {\n var clippath = accumulation.renderer.createClipPath({ id: groupId + '_clipPath' });\n var path = new PathOption(groupId + '_slice', 'transparent', 1, 'transparent', 1, '', '');\n var clipslice = accumulation.renderer.drawPath(path);\n clippath.appendChild(clipslice);\n accumulation.svgObject.appendChild(clippath);\n slice.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n this.doAnimation(clipslice, series);\n }\n };\n /**\n * To get the module name of the Pie series.\n */\n PieSeries.prototype.getModuleName = function () {\n return 'PieSeries';\n };\n /**\n * To destroy the pie series.\n * @return {void}\n * @private\n */\n PieSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroy method calling here\n */\n };\n return PieSeries;\n}(PieBase));\nexport { PieSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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/**\n * AccumulationChart file\n */\nimport { Property, Component, Complex, Collection, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { Internationalization, Event, Browser, EventHandler, Touch } from '@syncfusion/ej2-base';\nimport { remove, extend, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nimport { Font, Margin, Border, TooltipSettings, Indexes } from '../common/model/base';\nimport { AccumulationSeries } from './model/acc-base';\nimport { Theme, getThemeColor } from '../common/model/theme';\nimport { load, pointClick } from '../common/model/constants';\nimport { pointMove, chartMouseClick, chartMouseDown } from '../common/model/constants';\nimport { chartMouseLeave, chartMouseMove, chartMouseUp, resized } from '../common/model/constants';\nimport { LegendSettings } from '../common/legend/legend';\nimport { Rect, Size, subtractRect, indexFinder } from '../common/utils/helper';\nimport { measureText, RectOption, showTooltip } from '../common/utils/helper';\nimport { textElement, TextOption, createSvg, calculateSize, removeElement, firstToLowerCase } from '../common/utils/helper';\nimport { getElement, titlePositionX } from '../common/utils/helper';\nimport { Data } from '../common/model/data';\nimport { AccumulationBase } from './renderer/accumulation-base';\nimport { PieSeries } from './renderer/pie-series';\nimport { AccumulationAnnotationSettings } from './model/acc-base';\nimport { ExportUtils } from '../common/utils/export';\nimport { getTitle } from '../common/utils/helper';\n/**\n * Represents the AccumulationChart control.\n * ```html\n *
\n * \n * ```\n */\nvar AccumulationChart = /** @class */ (function (_super) {\n __extends(AccumulationChart, _super);\n /**\n * Constructor for creating the AccumulationChart widget\n * @private\n */\n function AccumulationChart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private explode radius internal property */\n _this.explodeDistance = 0;\n return _this;\n }\n Object.defineProperty(AccumulationChart.prototype, \"type\", {\n /** @private */\n get: function () {\n if (this.series && this.series.length) {\n return this.series[0].type;\n }\n return 'Pie';\n },\n enumerable: true,\n configurable: true\n });\n // accumulation chart methods\n /**\n * To create svg object, renderer and binding events for the container.\n */\n AccumulationChart.prototype.preRender = function () {\n this.unWireEvents();\n this.setCulture();\n this.animateSeries = true;\n calculateSize(this);\n this.wireEvents();\n };\n /**\n * Themeing for chart goes here\n */\n AccumulationChart.prototype.setTheme = function () {\n /*! Set theme for accumulation chart */\n this.themeStyle = getThemeColor(this.theme);\n };\n /**\n * To render the accumulation chart elements\n */\n AccumulationChart.prototype.render = function () {\n this.trigger(load, { accumulation: this });\n this.setTheme();\n this.accBaseModule = new AccumulationBase(this);\n this.pieSeriesModule = new PieSeries(this);\n this.calculateVisibleSeries();\n this.processData();\n };\n /**\n * Method to unbind events for accumulation chart\n */\n AccumulationChart.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var move = Browser.touchMoveEvent;\n var stop = Browser.touchEndEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, move, this.accumulationMouseMove);\n EventHandler.remove(this.element, stop, this.accumulationMouseEnd);\n EventHandler.remove(this.element, start, this.accumulationMouseStart);\n EventHandler.remove(this.element, 'click', this.accumulationOnMouseClick);\n EventHandler.remove(this.element, 'contextmenu', this.accumulationRightClick);\n EventHandler.remove(this.element, cancel, this.accumulationMouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.accumulationResize);\n };\n /**\n * Method to bind events for the accumulation chart\n */\n AccumulationChart.prototype.wireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, move, this.accumulationMouseMove, this);\n EventHandler.add(this.element, stop, this.accumulationMouseEnd, this);\n EventHandler.add(this.element, start, this.accumulationMouseStart, this);\n EventHandler.add(this.element, 'click', this.accumulationOnMouseClick, this);\n EventHandler.add(this.element, 'contextmenu', this.accumulationRightClick, this);\n EventHandler.add(this.element, cancel, this.accumulationMouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.accumulationResize.bind(this));\n new Touch(this.element); // To avoid geasture blocking for browser\n /*! Apply the style for chart */\n this.setStyle(this.element);\n };\n /**\n * Method to set mouse x, y from events\n */\n AccumulationChart.prototype.setMouseXY = function (e) {\n var pageX;\n var pageY;\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseEnd = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseUp, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n if (this.accumulationDataLabelModule && this.visibleSeries[0].dataLabel.visible) {\n this.accumulationDataLabelModule.move(e, this.mouseX, this.mouseY, this.isTouch);\n }\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.move(e);\n }\n }\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /*public removeSvgOffset(x: number, y: number): ChartLocation {\n let rect: ClientRect = this.element.getBoundingClientRect();\n let svgRect: ClientRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n return { x: (x - rect.left) - Math.max(svgRect.left - rect.left, 0), y: (y - rect.top) - Math.max(svgRect.top - rect.top, 0)};\n }*/\n /**\n * Handles the mouse start.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseStart = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseDown, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n return false;\n };\n /**\n * Handles the accumulation chart resize.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n var args = {\n accumulation: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n calculateSize(_this);\n args.currentSize = _this.availableSize;\n _this.trigger(resized, args);\n _this.refreshSeries();\n _this.refreshChart();\n }, 500);\n return false;\n };\n /**\n * Handles the export method for chart control.\n */\n AccumulationChart.prototype.export = function (type, fileName, orientation) {\n var exportChart = new ExportUtils(this);\n exportChart.export(type, fileName, orientation);\n };\n /**\n * Handles the print method for accumulation chart control.\n */\n AccumulationChart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Applying styles for accumulation chart element\n */\n AccumulationChart.prototype.setStyle = function (element) {\n element.style.touchAction = 'element';\n element.style.msTouchAction = 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Method to set the annotation content dynamically for accumulation.\n */\n AccumulationChart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var annotation = this.annotations[annotationIndex];\n var element;\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n if (content) {\n annotation.content = content;\n if (parentNode) {\n element = createElement('div');\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n parentNode.appendChild(element.children[0]);\n }\n else {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n }\n };\n /**\n * Handles the mouse move on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseMove = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseMove, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointMove) {\n this.triggerPointEvent(pointMove, e.target);\n }\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.move(e);\n }\n if (this.accumulationDataLabelModule && this.visibleSeries[0] && this.visibleSeries[0].dataLabel.visible) {\n this.accumulationDataLabelModule.move(e, this.mouseX, this.mouseY);\n }\n if (!this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY);\n }\n this.notify(Browser.touchMoveEvent, e);\n return false;\n };\n AccumulationChart.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((event.target.textContent.indexOf('...') > -1) && (targetId === (this.element.id + '_title'))) {\n showTooltip(this.title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n /**\n * Handles the mouse click on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationOnMouseClick = function (e) {\n this.setMouseXY(e);\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.click(e);\n }\n if (this.selectionMode !== 'None' && this.accumulationSelectionModule) {\n this.accumulationSelectionModule.calculateSelectedElements(this, e);\n }\n if (this.visibleSeries[0].explode) {\n this.accBaseModule.processExplode(e);\n }\n this.trigger(chartMouseClick, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointClick) {\n this.triggerPointEvent(pointClick, e.target);\n }\n return false;\n };\n AccumulationChart.prototype.triggerPointEvent = function (event, element) {\n var indexes = indexFinder(element.id, true);\n if (indexes.series >= 0 && indexes.point >= 0) {\n this.trigger(event, { series: this.series[indexes.series],\n point: this.series[indexes.series].points[indexes.point],\n seriesIndex: indexes.series, pointIndex: indexes.point,\n x: this.mouseX, y: this.mouseY });\n }\n };\n /**\n * Handles the mouse right click on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseLeave = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseLeave, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n this.notify(Browser.isPointer ? 'pointerleave' : 'mouseleave', e);\n return false;\n };\n /**\n * Method to set culture for chart\n */\n AccumulationChart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Method to create SVG element for accumulation chart.\n */\n AccumulationChart.prototype.createPieSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the SVG from accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n removeElement('EJ2_legend_tooltip');\n removeElement('EJ2_datalabel_tooltip');\n };\n /**\n * Method to create the secondary element for tooltip, datalabel and annotaitons.\n */\n AccumulationChart.prototype.createSecondaryElement = function () {\n this.element.appendChild(createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: relative'\n }));\n };\n /**\n * Method to find visible series based on series types\n */\n AccumulationChart.prototype.calculateVisibleSeries = function () {\n this.visibleSeries = [];\n for (var i = 0, length_1 = this.series.length; i < length_1; i++) {\n this.series[i].index = i;\n if (this.series[i].type === this.type && this.visibleSeries.length === 0) {\n this.visibleSeries.push(this.series[i]);\n break;\n }\n }\n };\n /**\n * To find points from dataSource\n */\n AccumulationChart.prototype.processData = function () {\n this.seriesCounts = 0;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n series.dataModule = new Data(series.dataSource, series.query);\n series.refreshDataManager(this);\n }\n };\n /**\n * To refresh the accumulation chart\n * @private\n */\n AccumulationChart.prototype.refreshChart = function () {\n this.doGrouppingProcess();\n this.createPieSvg();\n this.calculateBounds();\n this.renderElements();\n };\n /**\n * Method to find groupped points\n */\n AccumulationChart.prototype.doGrouppingProcess = function () {\n var series = this.visibleSeries[0];\n if (!isNullOrUndefined(series.resultData) && ((!isNullOrUndefined(series.lastGroupTo) &&\n series.lastGroupTo !== series.groupTo))) {\n series.getPoints(series.resultData, this);\n }\n };\n /**\n * Method to calculate bounds for accumulation chart\n */\n AccumulationChart.prototype.calculateBounds = function () {\n this.initialClipRect = new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height);\n this.titleCollection = [];\n this.titleCollection = getTitle(this.title, this.titleStyle, this.initialClipRect.width);\n subtractRect(this.initialClipRect, new Rect(0, (measureText(this.title, this.titleStyle).height * this.titleCollection.length), this.margin.right + this.margin.left, this.margin.bottom + this.margin.top));\n this.calculateLegendBounds();\n };\n /*\n * Method to calculate legend bounds for accumulation chart\n */\n AccumulationChart.prototype.calculateLegendBounds = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n this.accumulationLegendModule.getLegendOptions(this, this.visibleSeries);\n this.accumulationLegendModule.calculateLegendBounds(this.initialClipRect, this.availableSize);\n };\n /**\n * To render elements for accumulation chart\n * @private\n */\n AccumulationChart.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.createSecondaryElement();\n this.renderSeries();\n this.renderLegend();\n this.element.appendChild(this.svgObject);\n this.processSelection();\n this.processExplode();\n this.renderAnnotation();\n this.setSecondaryElementPosition();\n this.trigger('loaded', { accumulation: this });\n this.animateSeries = false;\n };\n /**\n * To set the left and top position for data label template for center aligned chart\n */\n AccumulationChart.prototype.setSecondaryElementPosition = function () {\n var tooltipParent = getElement(this.element.id + '_Secondary_Element');\n if (!tooltipParent) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n tooltipParent.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n tooltipParent.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n /**\n * To render the annotaitions for accumulation series.\n */\n AccumulationChart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n /**\n * Method to process the explode in accumulation chart\n */\n AccumulationChart.prototype.processExplode = function () {\n if (!this.visibleSeries[0].explode) {\n return null;\n }\n this.accBaseModule.invokeExplode();\n };\n /**\n * Method to render series for accumulation chart\n */\n AccumulationChart.prototype.renderSeries = function () {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_SeriesCollection' }));\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible && this[(firstToLowerCase(series.type) + 'SeriesModule')]) {\n this[(firstToLowerCase(series.type) + 'SeriesModule')].initProperties(this, series);\n series.renderSeries(this);\n }\n }\n };\n /**\n * Method to render border for accumulation chart\n */\n AccumulationChart.prototype.renderBorder = function () {\n var padding = this.border.width;\n this.svgObject.appendChild(this.renderer.drawRectangle(new RectOption(this.element.id + '_border', this.background || this.themeStyle.background, this.border, 1, new Rect(padding / 2, padding / 2, this.availableSize.width - padding, this.availableSize.height - padding))));\n };\n /**\n * Method to render legend for accumulation chart\n */\n AccumulationChart.prototype.renderLegend = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n if (this.accumulationLegendModule.legendCollections.length) {\n if (this.visibleSeries[0].type === 'Pie') {\n this.accumulationLegendModule.getSmartLegendLocation(this.visibleSeries[0].labelBound, this.accumulationLegendModule.legendBounds, this.margin);\n }\n this.accumulationLegendModule.renderLegend(this, this.legendSettings, this.accumulationLegendModule.legendBounds);\n }\n };\n /**\n * To process the selection in accumulation chart\n */\n AccumulationChart.prototype.processSelection = function () {\n if (!this.accumulationSelectionModule || this.selectionMode === 'None') {\n return null;\n }\n var selectedDataIndexes = extend([], this.accumulationSelectionModule.selectedDataIndexes, null, true);\n this.accumulationSelectionModule.invokeSelection(this);\n if (selectedDataIndexes.length > 0) {\n this.accumulationSelectionModule.selectedDataIndexes = selectedDataIndexes;\n this.accumulationSelectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n /**\n * To render title for accumulation chart\n */\n AccumulationChart.prototype.renderTitle = function () {\n if (!this.title) {\n return null;\n }\n var titleSize = measureText(this.title, this.titleStyle);\n var anchor = this.titleStyle.textAlignment === 'Near' ? 'start' :\n this.titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n textElement(new TextOption(this.element.id + '_title', titlePositionX(this.availableSize, this.margin.left, this.margin.left, this.titleStyle), this.margin.top + (titleSize.height * 3 / 4), anchor, this.titleCollection, '', 'auto'), this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n };\n /**\n * To get the series parent element\n * @private\n */\n AccumulationChart.prototype.getSeriesElement = function () {\n return this.svgObject.getElementsByTagName('g')[0];\n };\n /**\n * To refresh the all visible series points\n * @private\n */\n AccumulationChart.prototype.refreshSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n this.refreshPoints(series.points);\n }\n };\n /**\n * To refresh points label region and visible\n * @private\n */\n AccumulationChart.prototype.refreshPoints = function (points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n point.labelPosition = null;\n point.labelRegion = null;\n point.labelVisible = true;\n }\n };\n /**\n * To get Module name\n * @private\n */\n AccumulationChart.prototype.getModuleName = function () {\n return 'accumulationchart';\n };\n /**\n * To destroy the accumulationcharts\n * @private\n */\n AccumulationChart.prototype.destroy = function () {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-accumulationchart');\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n AccumulationChart.prototype.requiredModules = function () {\n var modules = [];\n var enableAnnotation = false;\n modules.push({\n member: this.type + 'Series',\n args: [this]\n });\n if (this.legendSettings.visible) {\n modules.push({\n member: 'AccumulationLegend',\n args: [this]\n });\n }\n if (this.findDatalabelVisibility()) {\n modules.push({\n member: 'AccumulationDataLabel',\n args: [this]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'AccumulationTooltip',\n args: [this]\n });\n }\n if (this.selectionMode !== 'None') {\n modules.push({\n member: 'AccumulationSelection',\n args: [this]\n });\n }\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this, this.annotations]\n });\n }\n return modules;\n };\n /**\n * To find datalabel visibility in series\n */\n AccumulationChart.prototype.findDatalabelVisibility = function () {\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.dataLabel.visible) {\n return true;\n }\n }\n return false;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n AccumulationChart.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n AccumulationChart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var update = {\n refreshElements: false, refreshBounds: false\n };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'theme':\n this.animateSeries = true;\n break;\n case 'title':\n case 'height':\n case 'width':\n case 'margin':\n update.refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n update.refreshBounds = true;\n }\n else {\n update.refreshElements = true;\n }\n break;\n case 'legendSettings':\n update.refreshBounds = true;\n update.refreshElements = true;\n break;\n case 'locale':\n case 'currencyCode':\n _super.prototype.refresh.call(this);\n break;\n case 'background':\n case 'border':\n case 'annotations':\n case 'enableSmartLabels':\n update.refreshElements = true;\n break;\n case 'isMultiSelect':\n case 'selectedDataIndexes':\n case 'selectionMode':\n if (this.accumulationSelectionModule) {\n if (isNullOrUndefined(this.accumulationSelectionModule.selectedDataIndexes)) {\n this.accumulationSelectionModule.invokeSelection(this);\n }\n else {\n this.accumulationSelectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n }\n break;\n }\n }\n if (!update.refreshBounds && update.refreshElements) {\n this.createPieSvg();\n this.renderElements();\n }\n else if (update.refreshBounds) {\n this.refreshSeries();\n this.createPieSvg();\n this.calculateBounds();\n this.renderElements();\n }\n };\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"title\", void 0);\n __decorate([\n Complex(Theme.chartTitleFont, Font)\n ], AccumulationChart.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], AccumulationChart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], AccumulationChart.prototype, \"tooltip\", void 0);\n __decorate([\n Property('None')\n ], AccumulationChart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property(false)\n ], AccumulationChart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Collection([], Indexes)\n ], AccumulationChart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Complex({}, Margin)\n ], AccumulationChart.prototype, \"margin\", void 0);\n __decorate([\n Property(true)\n ], AccumulationChart.prototype, \"enableSmartLabels\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], AccumulationChart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"background\", void 0);\n __decorate([\n Collection([{}], AccumulationSeries)\n ], AccumulationChart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], AccumulationAnnotationSettings)\n ], AccumulationChart.prototype, \"annotations\", void 0);\n __decorate([\n Property('Material')\n ], AccumulationChart.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"resized\", void 0);\n __decorate([\n Property('USD')\n ], AccumulationChart.prototype, \"currencyCode\", void 0);\n AccumulationChart = __decorate([\n NotifyPropertyChanges\n ], AccumulationChart);\n return AccumulationChart;\n}(Component));\nexport { AccumulationChart };\n","/**\n * Defines the common behavior of funnel and pyramid series\n */\nvar __extends = (this && this.__extends) || (function () {\n var 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 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 { Size, stringToNumber, Rect } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * TriangularBase is used to calculate base functions for funnel/pyramid series.\n */\nvar TriangularBase = /** @class */ (function (_super) {\n __extends(TriangularBase, _super);\n function TriangularBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the properties of funnel/pyramid series\n * @private\n */\n TriangularBase.prototype.initProperties = function (chart, series) {\n var actualChartArea = chart.initialClipRect;\n series.triangleSize = new Size(stringToNumber(series.width, actualChartArea.width), stringToNumber(series.height, actualChartArea.height));\n series.neckSize = new Size(stringToNumber(series.neckWidth, actualChartArea.width), stringToNumber(series.neckHeight, actualChartArea.height));\n this.defaultLabelBound(series, series.dataLabel.visible, series.dataLabel.position, chart);\n if (series.explodeOffset === '30%') {\n series.explodeOffset = '25px';\n }\n chart.explodeDistance = stringToNumber(series.explodeOffset, actualChartArea.width);\n var points = series.points;\n this.initializeSizeRatio(points, series);\n };\n /**\n * Initializes the size of the pyramid/funnel segments\n * @private\n */\n TriangularBase.prototype.initializeSizeRatio = function (points, series, reverse) {\n if (reverse === void 0) { reverse = false; }\n var sumOfPoints = series.sumOfPoints;\n //Limiting the ratio within the range of 0 to 1\n var gapRatio = Math.min(Math.max(series.gapRatio, 0), 1);\n //% equivalence of a value 1\n var coEff = 1 / (sumOfPoints * (1 + gapRatio / (1 - gapRatio)));\n var spacing = gapRatio / (points.length - 1);\n var y = 0;\n //starting from bottom\n for (var i = points.length - 1; i >= 0; i--) {\n var index = reverse ? points.length - 1 - i : i;\n if (points[index].visible) {\n var height = coEff * points[index].y;\n points[index].yRatio = y;\n points[index].heightRatio = height;\n y += height + spacing;\n }\n }\n };\n /**\n * Marks the label location from the set of points that forms a pyramid/funnel segment\n * @private\n */\n TriangularBase.prototype.setLabelLocation = function (series, point, points) {\n var last = points.length - 1;\n var bottom = series.type === 'Funnel' ? points.length - 2 : points.length - 1;\n var x = (points[0].x + points[bottom].x) / 2;\n var right = (points[1].x + points[bottom - 1].x) / 2;\n point.region = new Rect(x, points[0].y, right - x, points[bottom].y - points[0].y);\n point.symbolLocation = {\n x: point.region.x + point.region.width / 2,\n y: point.region.y + point.region.height / 2\n };\n point.labelOffset = {\n x: point.symbolLocation.x - (points[0].x + points[last].x) / 2,\n y: point.symbolLocation.y - (points[0].y + points[last].y) / 2\n };\n };\n /**\n * Finds the path to connect the list of points\n * @private\n */\n TriangularBase.prototype.findPath = function (locations) {\n var path = 'M';\n for (var i = 0; i < locations.length; i++) {\n path += locations[i].x + ' ' + locations[i].y;\n if (i !== locations.length - 1) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * To calculate data-label bounds\n * @private\n */\n TriangularBase.prototype.defaultLabelBound = function (series, visible, position, chart) {\n var x = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var y = (chart.initialClipRect.height - series.triangleSize.height) / 2;\n var accumulationBound = new Rect(x, y, series.triangleSize.width, series.triangleSize.height);\n series.labelBound = new Rect(accumulationBound.x, accumulationBound.y, accumulationBound.width + accumulationBound.x, accumulationBound.height + accumulationBound.y);\n series.accumulationBound = accumulationBound;\n if (visible && position === 'Outside') {\n series.labelBound = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n }\n };\n return TriangularBase;\n}(AccumulationBase));\nexport { TriangularBase };\n","/**\n * Defines the behavior of a funnel series\n */\nvar __extends = (this && this.__extends) || (function () {\n var 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 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 { TriangularBase } from './triangular-base';\n/**\n * FunnelSeries module used to render `Funnel` Series.\n */\nvar FunnelSeries = /** @class */ (function (_super) {\n __extends(FunnelSeries, _super);\n function FunnelSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the path of a funnel segment\n */\n FunnelSeries.prototype.getSegmentData = function (point, series, chart) {\n var lineWidth;\n var topRadius;\n var bottomRadius;\n var endTop;\n var endBottom;\n var minRadius;\n var endMin;\n var bottomY;\n var area = series.triangleSize;\n var offset = 0;\n var extraSpace = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var emptySpaceAtLeft = extraSpace + chart.initialClipRect.x;\n var seriesTop = chart.initialClipRect.y + (chart.initialClipRect.height - area.height) / 2;\n //defines the top and bottom of a segment\n var top = point.yRatio * area.height;\n var bottom = top + point.heightRatio * area.height;\n var neckSize = series.neckSize;\n lineWidth = neckSize.width + (area.width - neckSize.width) * ((area.height - neckSize.height - top) /\n (area.height - neckSize.height));\n topRadius = (area.width / 2) - lineWidth / 2;\n //Calculating the middle slope change and bottom\n endTop = topRadius + lineWidth;\n if (bottom > area.height - neckSize.height || area.height === neckSize.height) {\n lineWidth = neckSize.width;\n }\n else {\n lineWidth = neckSize.width + (area.width - neckSize.width) *\n ((area.height - neckSize.height - bottom) / (area.height - neckSize.height));\n }\n bottomRadius = (area.width / 2) - (lineWidth / 2);\n endBottom = bottomRadius + lineWidth;\n if (top >= area.height - neckSize.height) {\n topRadius = bottomRadius = minRadius = (area.width / 2) - neckSize.width / 2;\n endTop = endBottom = endMin = (area.width / 2) + neckSize.width / 2;\n }\n else if (bottom > (area.height - neckSize.height)) {\n minRadius = bottomRadius = (area.width / 2) - lineWidth / 2;\n endMin = endBottom = minRadius + lineWidth;\n bottomY = area.height - neckSize.height;\n }\n var points = [];\n top += seriesTop;\n bottom += seriesTop;\n bottomY += seriesTop;\n var line1 = { x: emptySpaceAtLeft + offset + topRadius, y: top };\n var line2 = { x: emptySpaceAtLeft + offset + endTop, y: top };\n var line4 = { x: emptySpaceAtLeft + offset + endBottom, y: bottom };\n var line5 = { x: emptySpaceAtLeft + offset + bottomRadius, y: bottom };\n var line3 = { x: emptySpaceAtLeft + offset + endBottom, y: bottom };\n var line6 = { x: emptySpaceAtLeft + offset + bottomRadius, y: bottom };\n if (bottomY) {\n line3 = { x: emptySpaceAtLeft + offset + endMin, y: bottomY };\n line6 = { x: emptySpaceAtLeft + offset + minRadius, y: bottomY };\n }\n var polygon = [line1, line2, line3, line4, line5, line6];\n this.setLabelLocation(series, point, polygon);\n var direction = this.findPath(polygon);\n return direction;\n };\n /**\n * Renders a funnel segment\n * @private\n */\n FunnelSeries.prototype.renderPoint = function (point, series, chart, options) {\n var direction = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n options.d = direction;\n };\n /**\n * To get the module name of the funnel series.\n */\n FunnelSeries.prototype.getModuleName = function () {\n return 'FunnelSeries';\n };\n /**\n * To destroy the funnel series.\n * @return {void}\n * @private\n */\n FunnelSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroys the funnel series\n */\n };\n return FunnelSeries;\n}(TriangularBase));\nexport { FunnelSeries };\n","/**\n * Defines the behavior of a pyramid series\n */\nvar __extends = (this && this.__extends) || (function () {\n var 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 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 { TriangularBase } from './triangular-base';\n/**\n * PyramidSeries module used to render `Pyramid` Series.\n */\nvar PyramidSeries = /** @class */ (function (_super) {\n __extends(PyramidSeries, _super);\n function PyramidSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the path of a pyramid segment\n */\n PyramidSeries.prototype.getSegmentData = function (point, series, chart) {\n var area = series.triangleSize;\n //top of th series\n var seriesTop = chart.initialClipRect.y + (chart.initialClipRect.height - area.height) / 2;\n var points = [];\n //consider, if the point is exploded\n var offset = 0;\n var extraSpace = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var emptySpaceAtLeft = extraSpace + chart.initialClipRect.x;\n //top and bottom\n var top = point.yRatio;\n var bottom = point.yRatio + point.heightRatio;\n //width of the top and bottom edge\n var topRadius = 0.5 * (1 - point.yRatio);\n var bottomRadius = 0.5 * (1 - bottom);\n top += seriesTop / area.height;\n bottom += seriesTop / area.height;\n var line1 = {\n x: emptySpaceAtLeft + offset + topRadius * area.width,\n y: top * area.height\n };\n var line2 = {\n x: emptySpaceAtLeft + offset + (1 - topRadius) * area.width,\n y: top * area.height\n };\n var line3 = {\n x: emptySpaceAtLeft + offset + (1 - bottomRadius) * area.width,\n y: bottom * area.height\n };\n var line4 = {\n x: emptySpaceAtLeft + offset + bottomRadius * area.width,\n y: bottom * area.height\n };\n var polygon = [line1, line2, line3, line4];\n this.setLabelLocation(series, point, polygon);\n var direction = this.findPath(polygon);\n return direction;\n };\n /**\n * Initializes the size of the pyramid segments\n * @private\n */\n PyramidSeries.prototype.initializeSizeRatio = function (points, series) {\n if (series.pyramidMode === 'Linear') {\n _super.prototype.initializeSizeRatio.call(this, points, series, true);\n }\n else {\n this.calculateSurfaceSegments(series);\n }\n };\n /**\n * Defines the size of the pyramid segments, the surface of that will reflect the values\n */\n PyramidSeries.prototype.calculateSurfaceSegments = function (series) {\n var count = series.points.length;\n var sumOfValues = series.sumOfPoints;\n var yRatio = 0;\n var y = [];\n var height = [];\n var gapRatio = Math.min(0, Math.max(series.gapRatio, 1));\n var gapHeight = gapRatio / (count - 1);\n var preSum = this.getSurfaceHeight(0, sumOfValues);\n var currY = 0;\n for (var i = 0; i < count; i++) {\n if (series.points[i].visible) {\n y[i] = currY;\n height[i] = this.getSurfaceHeight(currY, Math.abs(series.points[i].y));\n currY += height[i] + gapHeight * preSum;\n }\n }\n var coef = 1 / (currY - gapHeight * preSum);\n for (var i = 0; i < count; i++) {\n if (series.points[i].visible) {\n series.points[i].yRatio = coef * y[i];\n series.points[i].heightRatio = coef * height[i];\n }\n }\n };\n /**\n * Finds the height of pyramid segment\n */\n PyramidSeries.prototype.getSurfaceHeight = function (y, surface) {\n var result = this.solveQuadraticEquation(1, 2 * y, -surface);\n return result;\n };\n /**\n * Solves quadratic equation\n */\n PyramidSeries.prototype.solveQuadraticEquation = function (a, b, c) {\n var root1;\n var root2;\n var d = b * b - 4 * a * c;\n if (d >= 0) {\n var sd = Math.sqrt(d);\n root1 = (-b - sd) / (2 * a);\n root2 = (-b + sd) / (2 * a);\n return Math.max(root1, root2);\n }\n return 0;\n };\n /**\n * Renders a pyramid segment\n */\n PyramidSeries.prototype.renderPoint = function (point, series, chart, options) {\n var direction = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n options.d = direction;\n };\n /**\n * To get the module name of the Pyramid series.\n */\n PyramidSeries.prototype.getModuleName = function () {\n return 'PyramidSeries';\n };\n /**\n * To destroy the pyramid series\n * @return {void}\n * @private\n */\n PyramidSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroys the pyramid series\n */\n };\n return PyramidSeries;\n}(TriangularBase));\nexport { PyramidSeries };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * AccumulationChart legend\n */\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointByIndex } from '../model/acc-base';\nimport { BaseLegend, LegendOptions } from '../../common/legend/legend';\nimport { Rect, measureText, textTrim } from '../../common/utils/helper';\n/**\n * AccumulationLegend module used to render `Legend` for Accumulation chart.\n */\nvar AccumulationLegend = /** @class */ (function (_super) {\n __extends(AccumulationLegend, _super);\n /**\n * Constructor for Accumulation Legend.\n * @param chart\n */\n function AccumulationLegend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.titleRect = new Rect(0, chart.margin.top, 0, 0);\n return _this;\n }\n /**\n * Get the legend options.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.getLegendOptions = function (chart, series) {\n this.legendCollections = [];\n for (var i = 0; i < 1; i++) {\n var seriesType = series[i].type;\n if (seriesType === 'Pie' || seriesType === 'Doughnut') {\n seriesType = (series[i].innerRadius !== '0' && series[i].innerRadius !== '0%') ?\n 'Doughnut' : 'Pie';\n }\n for (var _i = 0, _a = series[i].points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!isNullOrUndefined(point.x) && !isNullOrUndefined(point.y)) {\n this.legendCollections.push(new LegendOptions(point.x.toString(), point.color, series[i].legendShape, point.visible, seriesType, null, null, point.index, series[i].index));\n }\n }\n }\n };\n /**\n * To find legend bounds for accumulation chart.\n * @private\n */\n AccumulationLegend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n var extraWidth = 0;\n var extraHeight = 0;\n var padding = legend.padding;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.width += extraWidth;\n legendBounds.height += extraHeight;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var shapeWidth = legend.shapeWidth;\n var rowWidth = 0;\n var rowCount = 0;\n var columnWidth = [];\n var columnHeight = 0;\n var legendWidth = 0;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle).height, legend.shapeHeight);\n var legendEventArgs;\n var render = false;\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n legendEventArgs = { fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n name: 'legendRender', cancel: false };\n this.chart.trigger('legendRender', legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + legendOption.textSize.width + padding;\n if (this.isVertical) {\n ++rowCount;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n if ((rowCount * (this.maxItemHeight + padding)) + padding > legendBounds.height) {\n columnHeight = Math.max(columnHeight, (rowCount * (this.maxItemHeight + padding)) + padding);\n rowWidth = rowWidth + maximumWidth;\n columnWidth.push(maximumWidth);\n this.totalPages = Math.max(rowCount, this.totalPages || 1);\n maximumWidth = 0;\n rowCount = 1;\n }\n maximumWidth = Math.max(legendWidth, maximumWidth);\n }\n else {\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth)) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding - legendWidth));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = legendWidth;\n rowCount++;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n }\n }\n }\n }\n if (this.isVertical) {\n rowWidth = rowWidth + maximumWidth;\n this.isPaging = legendBounds.width < (rowWidth + padding);\n columnHeight = Math.max(columnHeight, ((this.totalPages || 1) * (this.maxItemHeight + padding)) + padding);\n this.isPaging = this.isPaging && (this.totalPages > 1);\n if (columnWidth[columnWidth.length - 1] !== maximumWidth) {\n columnWidth.push(maximumWidth);\n }\n }\n else {\n this.isPaging = legendBounds.height < columnHeight;\n this.totalPages = this.totalRowCount = rowCount;\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding);\n }\n this.maxColumns = 0; // initialization for max columns\n var width = this.isVertical ? this.getMaxColumn(columnWidth, legendBounds.width, padding, rowWidth + padding) :\n Math.max(rowWidth + padding, maximumWidth);\n if (render) {\n this.setBounds(width, columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /**\n * To find maximum column size for legend\n */\n AccumulationLegend.prototype.getMaxColumn = function (columns, width, padding, rowWidth) {\n var maxPageColumn = padding;\n this.maxColumnWidth = Math.max.apply(null, columns);\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n maxPageColumn += this.maxColumnWidth;\n this.maxColumns++;\n if (maxPageColumn + padding > width) {\n maxPageColumn -= this.maxColumnWidth;\n this.maxColumns--;\n break;\n }\n }\n this.isPaging = (maxPageColumn < rowWidth) && (this.totalPages > 1);\n if (maxPageColumn === padding) {\n maxPageColumn = width;\n }\n this.maxColumns = Math.max(1, this.maxColumns);\n this.maxWidth = maxPageColumn;\n return maxPageColumn;\n };\n /**\n * To find available width from legend x position.\n */\n AccumulationLegend.prototype.getAvailWidth = function (tx, width, legendX) {\n if (this.isVertical) {\n width = this.maxWidth;\n }\n return width - ((this.legend.padding * 2) + this.legend.shapeWidth + this.legend.shapePadding);\n };\n /**\n * To find legend rendering locations from legend options.\n * @private\n */\n AccumulationLegend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n if (this.isVertical) {\n if (count === firstLegend || (prevLegend.location.y + (this.maxItemHeight * 1.5) + (padding * 2) > rect.y + rect.height)) {\n legendOption.location.x = prevLegend.location.x + ((count === firstLegend) ? 0 : this.maxColumnWidth);\n legendOption.location.y = start.y;\n this.pageXCollections.push(legendOption.location.x - (this.legend.shapeWidth / 2) - padding);\n this.totalPages++;\n }\n else {\n legendOption.location.x = prevLegend.location.x;\n legendOption.location.y = prevLegend.location.y + this.maxItemHeight + padding;\n }\n }\n else {\n var previousBound = (prevLegend.location.x + textPadding + prevLegend.textSize.width);\n if ((previousBound + (legendOption.textSize.width + textPadding)) > (rect.x + rect.width + this.legend.shapeWidth / 2)) {\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.maxItemHeight + padding;\n legendOption.location.x = start.x;\n }\n else {\n legendOption.location.y = prevLegend.location.y;\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n }\n this.totalPages = this.totalRowCount;\n }\n var availablewidth = this.getAvailWidth(legendOption.location.x, this.legendBounds.width, this.legendBounds.x);\n legendOption.text = textTrim(+availablewidth.toFixed(4), legendOption.text, this.legend.textStyle);\n };\n /**\n * finding the smart legend place according to positions.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.getSmartLegendLocation = function (labelBound, legendBound, margin) {\n var space;\n switch (this.position) {\n case 'Left':\n space = ((labelBound.x - legendBound.width) - margin.left) / 2;\n legendBound.x = (labelBound.x - legendBound.width) < margin.left ? legendBound.x :\n (labelBound.x - legendBound.width) - space;\n break;\n case 'Right':\n space = ((this.chart.availableSize.width - margin.right) - (labelBound.x + labelBound.width + legendBound.width)) / 2;\n legendBound.x = (labelBound.x + labelBound.width + legendBound.width) > (this.chart.availableSize.width - margin.right) ?\n legendBound.x : (labelBound.x + labelBound.width + space);\n break;\n case 'Top':\n this.getTitleRect(this.chart);\n space = ((labelBound.y - legendBound.height) - (this.titleRect.y + this.titleRect.height)) / 2;\n legendBound.y = (labelBound.y - legendBound.height) < margin.top ? legendBound.y :\n (labelBound.y - legendBound.height) - space;\n break;\n case 'Bottom':\n space = ((this.chart.availableSize.height - margin.bottom) - (labelBound.y + labelBound.height + legendBound.height)) / 2;\n legendBound.y = labelBound.y + labelBound.height + legendBound.height > (this.chart.availableSize.height - margin.bottom) ?\n legendBound.y : (labelBound.y + labelBound.height) + space;\n break;\n }\n };\n /**\n * To get title rect.\n */\n AccumulationLegend.prototype.getTitleRect = function (accumulation) {\n if (!accumulation.title) {\n return null;\n }\n var titleSize = measureText(accumulation.title, accumulation.titleStyle);\n this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n };\n /**\n * To get legend by index\n */\n AccumulationLegend.prototype.legendByIndex = function (index, legendCollections) {\n for (var _i = 0, legendCollections_1 = legendCollections; _i < legendCollections_1.length; _i++) {\n var legend = legendCollections_1[_i];\n if (legend.pointIndex === index) {\n return legend;\n }\n }\n return null;\n };\n /**\n * To show or hide the legend on clicking the legend.\n * @return {void}\n */\n AccumulationLegend.prototype.click = function (event) {\n var targetId = event.target.id;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_',\n this.legendID + '_shape_marker_'];\n var selectedDataIndexes = [];\n if (this.chart.accumulationSelectionModule) {\n selectedDataIndexes = extend([], this.chart.accumulationSelectionModule.selectedDataIndexes, null, true);\n }\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n var pointIndex = parseInt(targetId.split(id)[1], 10);\n var currentSeries = this.chart.visibleSeries[0];\n var point = pointByIndex(pointIndex, currentSeries.points);\n var legendOption = this.legendByIndex(pointIndex, this.legendCollections);\n if (this.chart.legendSettings.toggleVisibility) {\n point.visible = !point.visible;\n legendOption.visible = point.visible;\n this.chart.removeSvg();\n if (point.visible) {\n currentSeries.sumOfPoints += point.y;\n }\n else {\n currentSeries.sumOfPoints -= point.y;\n }\n this.chart.refreshPoints(currentSeries.points);\n this.chart.renderElements();\n }\n else if (this.chart.accumulationSelectionModule) {\n this.chart.accumulationSelectionModule.legendSelection(this.chart, 0, pointIndex);\n }\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n };\n /**\n * Get module name\n */\n AccumulationLegend.prototype.getModuleName = function () {\n return 'AccumulationLegend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return AccumulationLegend;\n}(BaseLegend));\nexport { AccumulationLegend };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * AccumulationChart DataLabel module file\n */\nimport { extend, createElement } from '@syncfusion/ej2-base';\nimport { ChartLocation, degreeToLocation, Rect, isOverlap, stringToNumber, getAngle, TextOption } from '../../common/utils/helper';\nimport { textTrim, subtractThickness, Thickness, getElement } from '../../common/utils/helper';\nimport { removeElement, measureText, RectOption, textElement, showTooltip } from '../../common/utils/helper';\nimport { PathOption, colorNameToHex, convertHexToColor, containsRect } from '../../common/utils/helper';\nimport { getSeriesFromIndex } from '../model/acc-base';\nimport { textRender } from '../../common/model/constants';\nimport { getFontStyle, createTemplate, measureElementRect, templateAnimate } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * AccumulationDataLabel module used to render `dataLabel`.\n */\nvar AccumulationDataLabel = /** @class */ (function (_super) {\n __extends(AccumulationDataLabel, _super);\n function AccumulationDataLabel(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.id = accumulation.element.id + '_datalabel_Series_';\n if (accumulation.title) {\n var titleSize = measureText(accumulation.title, accumulation.titleStyle);\n _this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n }\n return _this;\n }\n /**\n * Method to get datalabel text location.\n * @private\n */\n AccumulationDataLabel.prototype.getDataLabelPosition = function (point, dataLabel, textSize, points, parent, id) {\n var radius = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n this.getLabelRegion(point, dataLabel.position, textSize, radius, this.marginValue);\n point.labelAngle = point.midAngle;\n point.labelPosition = dataLabel.position;\n if (this.accumulation.enableSmartLabels) {\n this.getSmartLabel(point, dataLabel, textSize, points, parent, id);\n }\n };\n /**\n * Method to get datalabel bound.\n */\n AccumulationDataLabel.prototype.getLabelRegion = function (point, position, textSize, labelRadius, margin, endAngle) {\n if (endAngle === void 0) { endAngle = 0; }\n var labelAngle = endAngle || point.midAngle;\n var space = 10;\n var location = degreeToLocation(labelAngle, labelRadius, this.isCircular() ? this.center :\n this.getLabelLocation(point, position));\n location.y = (position === 'Inside') ? (location.y - textSize.height / 2) : location.y;\n location.x = (position === 'Inside') ? (location.x - textSize.width / 2) : location.x;\n point.labelRegion = new Rect(location.x, location.y, textSize.width + (margin * 2), textSize.height + (margin * 2));\n if (position === 'Outside') {\n point.labelRegion.y -= point.labelRegion.height / 2;\n if (labelAngle >= 90 && labelAngle <= 270) {\n point.labelRegion.x -= (point.labelRegion.width + space);\n }\n else {\n point.labelRegion.x += space;\n }\n }\n };\n /**\n * Method to get datalabel smart position.\n */\n AccumulationDataLabel.prototype.getSmartLabel = function (point, dataLabel, textSize, points, parent, id) {\n var circular = this.isCircular();\n var labelRadius = circular ? this.radius : this.getLabelDistance(point, dataLabel);\n var connectorLength = circular ? (dataLabel.connectorStyle.length || '4%') :\n '0px';\n labelRadius += stringToNumber(connectorLength, labelRadius);\n var previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (dataLabel.position === 'Inside') {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points)) || !circular && !containsRect(point.region, point.labelRegion)) {\n point.labelPosition = 'Outside';\n if (!circular) {\n labelRadius = this.getLabelDistance(point, dataLabel);\n }\n this.getLabelRegion(point, point.labelPosition, textSize, labelRadius, this.marginValue);\n previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (previousPoint && (isOverlap(point.labelRegion, previousPoint.labelRegion) ||\n this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n }\n else {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points) || this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n if (this.isOverlapping(point, points) || (this.titleRect && point.labelRegion && isOverlap(point.labelRegion, this.titleRect))) {\n this.setPointVisibileFalse(point);\n }\n if (this.accumulation.accumulationLegendModule && point.labelVisible && point.labelRegion) {\n var rect = this.accumulation.accumulationLegendModule.legendBounds;\n var padding = this.accumulation.legendSettings.border.width / 2;\n this.textTrimming(point, new Rect(rect.x - padding, rect.y - padding, rect.width + (2 * padding), rect.height + (2 * padding)), dataLabel.font, this.accumulation.accumulationLegendModule.position);\n }\n if (point.labelVisible && point.labelRegion) {\n var position = this.isCircular() ? (point.labelRegion.x >= this.center.x) ? 'InsideRight' : 'InsideLeft' :\n 'InsideRight';\n this.textTrimming(point, this.areaRect, dataLabel.font, position);\n }\n if (point.labelVisible && point.labelRegion && ((point.labelRegion.y + point.labelRegion.height >\n this.areaRect.y + this.areaRect.height || point.labelRegion.y < this.areaRect.y) || (point.labelRegion.x < this.areaRect.x ||\n point.labelRegion.x + point.labelRegion.width > this.areaRect.x + this.areaRect.width))) {\n this.setPointVisibileFalse(point);\n }\n };\n /**\n * To find trimmed datalabel tooltip needed.\n * @return {void}\n * @private\n */\n AccumulationDataLabel.prototype.move = function (e, x, y, isTouch) {\n var _this = this;\n if (e.target.textContent.indexOf('...') > -1) {\n var targetId = e.target.id.split(this.id);\n if (targetId.length === 2) {\n var seriesIndex = parseInt(targetId[1].split('_text_')[0], 10);\n var pointIndex = parseInt(targetId[1].split('_text_')[1], 10);\n if (!isNaN(seriesIndex) && !isNaN(pointIndex)) {\n if (isTouch) {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n var point = getSeriesFromIndex(seriesIndex, (this.accumulation).visibleSeries).points[pointIndex];\n showTooltip(point.text || point.y.toString(), x, y, this.areaRect.width, this.accumulation.element.id + '_EJ2_Datalabel_Tooltip', getElement(this.accumulation.element.id + '_Secondary_Element'));\n }\n }\n }\n else {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n if (isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(function () { removeElement(_this.accumulation.element.id + '_EJ2_Datalabel_Tooltip'); }, 1000);\n }\n };\n /**\n * To find previous valid label point\n */\n AccumulationDataLabel.prototype.findPreviousPoint = function (points, index, position) {\n var point = points[0];\n for (var i = index - 1; i >= 0; i--) {\n point = points[i];\n if (point.visible && point.labelVisible && point.labelRegion && point.labelPosition === position) {\n return point;\n }\n }\n return null;\n };\n /**\n * To find current point datalabel is overlapping with other points\n */\n AccumulationDataLabel.prototype.isOverlapping = function (currentPoint, points) {\n for (var i = currentPoint.index - 1; i >= 0; i--) {\n if (points[i].visible && points[i].labelVisible && points[i].labelRegion && currentPoint.labelRegion &&\n currentPoint.labelVisible && isOverlap(currentPoint.labelRegion, points[i].labelRegion)) {\n return true;\n }\n }\n return false;\n };\n /**\n * To get text trimmed while exceeds the accumulation chart area.\n */\n AccumulationDataLabel.prototype.textTrimming = function (point, rect, font, position) {\n if (isOverlap(point.labelRegion, rect)) {\n var size = point.labelRegion.width;\n if (position === 'Right') {\n size = rect.x - point.labelRegion.x;\n }\n else if (position === 'Left') {\n size = point.labelRegion.x - (rect.x + rect.width);\n if (size < 0) {\n size += point.labelRegion.width;\n point.labelRegion.x = rect.x + rect.width;\n }\n }\n else if (position === 'InsideRight') {\n size = (rect.x + rect.width) - point.labelRegion.x;\n }\n else if (position === 'InsideLeft') {\n size = (point.labelRegion.x + point.labelRegion.width) - rect.x;\n if (size < point.labelRegion.width) {\n point.labelRegion.x = rect.x;\n }\n }\n else {\n this.setPointVisibileFalse(point);\n }\n if (point.labelVisible && point.labelRegion) {\n if (size < point.labelRegion.width) {\n point.label = textTrim(size - (this.marginValue * 2), point.label, font);\n point.labelRegion.width = size;\n }\n if (point.label.length === 3 && point.label.indexOf('...') > -1) {\n this.setPointVisibileFalse(point);\n }\n }\n }\n };\n /**\n * To set point label visible and region to disable.\n */\n AccumulationDataLabel.prototype.setPointVisibileFalse = function (point) {\n point.labelVisible = false;\n point.labelRegion = null;\n };\n /**\n * To set datalabel angle position for outside labels\n */\n AccumulationDataLabel.prototype.setOuterSmartLabel = function (previousPoint, point, border, labelRadius, textsize, margin) {\n if (!this.isCircular()) {\n this.setSmartLabelForSegments(point, previousPoint, labelRadius, textsize, margin);\n }\n else {\n var labelAngle = this.getOverlappedAngle(previousPoint.labelRegion, point.labelRegion, point.midAngle, border * 2);\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n if (labelAngle > point.endAngle) {\n this.setPointVisibileFalse(point);\n }\n point.labelAngle = labelAngle;\n while (point.labelVisible && (isOverlap(previousPoint.labelRegion, point.labelRegion) || labelAngle <= previousPoint.labelAngle\n || this.isConnectorLineOverlapping(point, previousPoint))) {\n if (labelAngle > point.endAngle) {\n this.setPointVisibileFalse(point);\n break;\n }\n point.labelAngle = labelAngle;\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n labelAngle += 0.1;\n }\n }\n };\n /**\n * Sets smart label positions for funnel and pyramid series\n */\n AccumulationDataLabel.prototype.setSmartLabelForSegments = function (point, prevPoint, distance, textSize, margin) {\n var textRegion = point.labelRegion;\n //let overlapWidth: number = prevPoint.labelRegion.x + prevPoint.labelRegion.width - textRegion.x;\n var overlapHeight = this.accumulation.type === 'Funnel' ?\n prevPoint.labelRegion.y - (textRegion.y + textRegion.height) :\n point.labelRegion.y - (prevPoint.labelRegion.y + prevPoint.labelRegion.height);\n if (overlapHeight < 0) {\n point.labelRegion.y += this.accumulation.type === 'Funnel' ? overlapHeight : -overlapHeight;\n }\n };\n /**\n * To find connector line overlapping.\n */\n AccumulationDataLabel.prototype.isConnectorLineOverlapping = function (point, previous) {\n var start = this.getLabelLocation(point);\n var end = new ChartLocation(0, 0);\n this.getEdgeOfLabel(point.labelRegion, point.labelAngle, end);\n var previousstart = this.getLabelLocation(previous);\n var previousend = new ChartLocation(0, 0);\n this.getEdgeOfLabel(previous.labelRegion, previous.labelAngle, previousend);\n return this.isLineRectangleIntersect(start, end, point.labelRegion) ||\n this.isLineRectangleIntersect(start, end, previous.labelRegion) ||\n this.isLineRectangleIntersect(previousstart, previousend, point.labelRegion);\n };\n /**\n * To find two rectangle intersect\n */\n AccumulationDataLabel.prototype.isLineRectangleIntersect = function (line1, line2, rect) {\n var rectPoints = [\n new ChartLocation(Math.round(rect.x), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round((rect.y + rect.height))),\n new ChartLocation(Math.round(rect.x), Math.round((rect.y + rect.height)))\n ];\n line1.x = Math.round(line1.x);\n line1.y = Math.round(line1.y);\n line2.x = Math.round(line2.x);\n line2.y = Math.round(line2.y);\n for (var i = 0; i < rectPoints.length; i++) {\n if (this.isLinesIntersect(line1, line2, rectPoints[i], rectPoints[(i + 1) % rectPoints.length])) {\n return true;\n }\n }\n return false;\n };\n /**\n * To find two line intersect\n */\n AccumulationDataLabel.prototype.isLinesIntersect = function (point1, point2, point11, point12) {\n var a1 = point2.y - point1.y;\n var b1 = point1.x - point2.x;\n var c1 = a1 * point1.x + b1 * point1.y;\n var a2 = point12.y - point11.y;\n var b2 = point11.x - point12.x;\n var c2 = a2 * point11.x + b2 * point11.y;\n var delta = a1 * b2 - a2 * b1;\n if (delta !== 0) {\n var x = (b2 * c1 - b1 * c2) / delta;\n var y = (a1 * c2 - a2 * c1) / delta;\n var lies = Math.min(point1.x, point2.x) <= x && x <= Math.max(point1.x, point2.x);\n lies = lies && Math.min(point1.y, point2.y) <= y && y <= Math.max(point1.y, point2.y);\n lies = lies && Math.min(point11.x, point12.x) <= x && x <= Math.max(point11.x, point12.x);\n lies = lies && Math.min(point11.y, point12.y) <= y && y <= Math.max(point11.y, point12.y);\n return lies;\n }\n return false;\n };\n /**\n * To get two rectangle overlapping angles.\n */\n AccumulationDataLabel.prototype.getOverlappedAngle = function (first, second, angle, padding) {\n var x = first.x;\n if (angle >= 90 && angle <= 270) {\n second.y = first.y - (padding + second.height / 2);\n x = first.x + first.width;\n }\n else {\n second.y = first.y + first.height + padding;\n }\n return getAngle(this.center, new ChartLocation(x, second.y));\n };\n /**\n * To get connector line path\n */\n AccumulationDataLabel.prototype.getConnectorPath = function (label, point, dataLabel, end) {\n if (end === void 0) { end = 0; }\n var connector = dataLabel.connectorStyle;\n var labelRadius = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n var start = this.getConnectorStartPoint(point, connector);\n var labelAngle = end || point.midAngle;\n var middle = new ChartLocation(0, 0);\n var endPoint = this.getEdgeOfLabel(label, labelAngle, middle, connector.width);\n if (connector.type === 'Curve') {\n if (this.isCircular()) {\n var r = labelRadius - this.radius;\n middle = degreeToLocation(labelAngle, labelRadius - (r / 2), this.center);\n return 'M ' + start.x + ' ' + start.y + ' Q' + middle.x + ',' + middle.y + ' ' + endPoint.x + ',' + endPoint.y;\n }\n else {\n return this.getPolyLinePath(start, endPoint);\n }\n }\n else {\n return 'M ' + start.x + ' ' + start.y + ' L ' + middle.x + ' ' + middle.y + ' L ' + endPoint.x + ' ' + endPoint.y;\n }\n };\n /**\n * Finds the curved path for funnel/pyramid data label connectors\n */\n AccumulationDataLabel.prototype.getPolyLinePath = function (start, end) {\n var controlPoints = [start, end];\n if (start.y === end.y) {\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y;\n }\n var path = 'M';\n for (var i = 0; i <= 16; i++) {\n var t = i / 16;\n var points = this.getBezierPoint(t, controlPoints, 0, 2);\n path += points.x + ',' + points.y;\n if (i !== 16) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * Finds the bezier point for funnel/pyramid data label connectors\n */\n AccumulationDataLabel.prototype.getBezierPoint = function (t, controlPoints, index, count) {\n if (count === 1) {\n return controlPoints[index];\n }\n var p0 = this.getBezierPoint(t, controlPoints, index, count - 1);\n var p1 = this.getBezierPoint(t, controlPoints, index + 1, count - 1);\n var x = (p0.x) ? p0.x : p0.x;\n var y = (p0.y) ? p0.y : p0.y;\n var x1 = (p1.x) ? p1.x : p1.x;\n var y1 = (p1.y) ? p1.y : p1.y;\n var x2 = (1 - t) * x + t * x1;\n var y2 = (1 - t) * y + t * y1;\n if (p0.x) {\n return { x: x2, y: y2 };\n }\n else {\n return { x: x2, y: y2 };\n }\n };\n /**\n * To get label edges based on the center and label rect position.\n */\n AccumulationDataLabel.prototype.getEdgeOfLabel = function (labelshape, angle, middle, border) {\n if (border === void 0) { border = 1; }\n var edge = new ChartLocation(labelshape.x, labelshape.y);\n if (angle >= 90 && angle <= 270) {\n edge.x += labelshape.width + border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x + 10;\n middle.y = edge.y;\n }\n else {\n edge.x -= border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x - 10;\n middle.y = edge.y;\n }\n return edge;\n };\n /**\n * Finds the distance between the label position and the edge/center of the funnel/pyramid\n */\n AccumulationDataLabel.prototype.getLabelDistance = function (point, dataLabel) {\n if (point.labelPosition && dataLabel.position !== point.labelPosition || dataLabel.connectorStyle.length) {\n var length_1 = stringToNumber(dataLabel.connectorStyle.length || '70px', this.accumulation.initialClipRect.width);\n if (length_1 < this.accumulation.initialClipRect.width) {\n return length_1;\n }\n }\n var position = point.labelPosition || dataLabel.position;\n var series = this.accumulation.visibleSeries[0];\n var extraSpace = (this.accumulation.initialClipRect.width - series.triangleSize.width) / 2;\n var labelLocation;\n switch (position) {\n case 'Inside':\n return 0;\n case 'Outside':\n labelLocation = point.symbolLocation.x + point.labelOffset.x;\n return this.accumulation.initialClipRect.width - labelLocation - extraSpace;\n }\n };\n /**\n * Finds the label position / beginning of the connector(ouside funnel labels)\n */\n AccumulationDataLabel.prototype.getLabelLocation = function (point, position) {\n if (position === void 0) { position = 'Outside'; }\n if (this.accumulation.type !== 'Pie') {\n position = point.labelPosition || position;\n var location_1 = {\n x: point.symbolLocation.x,\n y: point.symbolLocation.y - point.labelOffset.y\n };\n switch (position) {\n case 'Inside':\n location_1.y = point.region.y + point.region.height / 2;\n break;\n case 'Outside':\n location_1.x += point.labelOffset.x;\n }\n return location_1;\n }\n else {\n return degreeToLocation(point.midAngle, this.radius, this.center);\n }\n };\n /**\n * Finds the beginning of connector line\n */\n AccumulationDataLabel.prototype.getConnectorStartPoint = function (point, connector) {\n return this.isCircular() ? degreeToLocation(point.midAngle, this.radius - connector.width, this.center) :\n this.getLabelLocation(point);\n };\n /**\n * To find area rect based on margin, available size.\n * @private\n */\n AccumulationDataLabel.prototype.findAreaRect = function () {\n this.areaRect = new Rect(0, 0, this.accumulation.availableSize.width, this.accumulation.availableSize.height);\n var margin = this.accumulation.margin;\n subtractThickness(this.areaRect, new Thickness(margin.left, margin.right, margin.top, margin.bottom));\n };\n /**\n * To render the data labels from series points.\n */\n AccumulationDataLabel.prototype.renderDataLabel = function (point, dataLabel, parent, points, series, templateElement) {\n var id = this.accumulation.element.id + '_datalabel_Series_' + series + '_';\n var datalabelGroup = this.accumulation.renderer.createGroup({ id: id + 'g_' + point.index });\n point.label = point.originalText || point.y.toString();\n var border = { width: dataLabel.border.width, color: dataLabel.border.color };\n var argsData = {\n cancel: false, name: textRender, series: this.accumulation.visibleSeries[0], point: point,\n text: point.label, border: border, color: dataLabel.fill, template: dataLabel.template\n };\n this.accumulation.trigger(textRender, argsData);\n var isTemplate = argsData.template !== null;\n point.labelVisible = !argsData.cancel;\n point.text = point.label = argsData.text;\n this.marginValue = argsData.border.width ? (5 + argsData.border.width) : 1;\n // Template element\n var childElement = createElement('div', {\n id: this.accumulation.element.id + '_Series_' + 0 + '_DataLabel_' + point.index,\n styles: 'position: absolute;background-color:' + argsData.color + ';' +\n getFontStyle(dataLabel.font) + ';border:' + argsData.border.width + 'px solid ' + argsData.border.color + ';'\n });\n var textSize = isTemplate ? this.getTemplateSize(childElement, point, argsData) :\n measureText(point.label, dataLabel.font);\n textSize.height += 4; // 4 for calculation with padding for smart label shape\n textSize.width += 4;\n this.getDataLabelPosition(point, dataLabel, textSize, points, datalabelGroup, id);\n if (point.labelVisible) {\n this.correctLabelRegion(point.labelRegion, textSize);\n if (isTemplate) {\n this.setTemplateStyle(childElement, point, templateElement, dataLabel.font.color, argsData.color);\n }\n else {\n datalabelGroup.appendChild(this.accumulation.renderer.drawRectangle(new RectOption(id + 'shape_' + point.index, argsData.color, argsData.border, 1, point.labelRegion, dataLabel.rx, dataLabel.ry)));\n textElement(new TextOption(id + 'text_' + point.index, point.labelRegion.x + this.marginValue, point.labelRegion.y + (textSize.height * 3 / 4) + this.marginValue, 'start', point.label, '', 'auto'), dataLabel.font, dataLabel.font.color || this.getSaturatedColor(point, argsData.color), datalabelGroup);\n }\n if (this.accumulation.accumulationLegendModule && (dataLabel.position === 'Outside' || this.accumulation.enableSmartLabels)) {\n this.accumulation.visibleSeries[0].findMaxBounds(this.accumulation.visibleSeries[0].labelBound, point.labelRegion);\n }\n if (point.labelPosition === 'Outside') {\n var path = this.getConnectorPath(extend({}, point.labelRegion, null, true), point, dataLabel, point.labelAngle);\n var pathElement = this.accumulation.renderer.drawPath(new PathOption(id + 'connector_' + point.index, 'transparent', dataLabel.connectorStyle.width, dataLabel.connectorStyle.color || point.color, 1, '', path));\n datalabelGroup.appendChild(pathElement);\n }\n parent.appendChild(datalabelGroup);\n }\n };\n /**\n * To find the template element size\n * @param element\n * @param point\n * @param argsData\n */\n AccumulationDataLabel.prototype.getTemplateSize = function (element, point, argsData) {\n var clientRect;\n element = createTemplate(element, point.index, argsData.template, this.accumulation, point, this.accumulation.visibleSeries[0]);\n clientRect = measureElementRect(element);\n return { width: clientRect.width, height: clientRect.height };\n };\n /**\n * To set the template element style\n * @param childElement\n * @param point\n * @param parent\n * @param labelColor\n * @param fill\n */\n AccumulationDataLabel.prototype.setTemplateStyle = function (childElement, point, parent, labelColor, fill) {\n childElement.style.left = (point.labelRegion.x) + 'px';\n childElement.style.top = (point.labelRegion.y) + 'px';\n childElement.style.color = labelColor ||\n this.getSaturatedColor(point, fill);\n if (childElement.childElementCount) {\n parent.appendChild(childElement);\n this.doTemplateAnimation(this.accumulation, childElement);\n }\n };\n /**\n * To find saturated color for datalabel\n */\n AccumulationDataLabel.prototype.getSaturatedColor = function (point, color) {\n var saturatedColor;\n if (this.marginValue >= 1) {\n saturatedColor = color === 'transparent' ? this.getLabelBackground(point) : color;\n }\n else {\n saturatedColor = this.getLabelBackground(point);\n }\n saturatedColor = (saturatedColor === 'transparent') ? window.getComputedStyle(document.body, null).backgroundColor : saturatedColor;\n var rgbValue = convertHexToColor(colorNameToHex(saturatedColor));\n var contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n return contrast >= 128 ? 'black' : 'white';\n };\n /**\n * Animates the data label template.\n * @return {void}.\n * @private\n */\n AccumulationDataLabel.prototype.doTemplateAnimation = function (accumulation, element) {\n var series = accumulation.visibleSeries[0];\n var delay = series.animation.delay + series.animation.duration;\n if (series.animation.enable && accumulation.animateSeries) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n };\n /**\n * To find background color for the datalabel\n */\n AccumulationDataLabel.prototype.getLabelBackground = function (point) {\n return point.labelPosition === 'Outside' ?\n this.accumulation.background || this.accumulation.themeStyle.background : point.color;\n };\n /**\n * To correct the padding between datalabel regions.\n */\n AccumulationDataLabel.prototype.correctLabelRegion = function (labelRegion, textSize, padding) {\n if (padding === void 0) { padding = 4; }\n labelRegion.height -= padding;\n labelRegion.width -= padding;\n labelRegion.x += padding / 2;\n labelRegion.y += padding / 2;\n textSize.height -= padding;\n textSize.width -= padding;\n };\n /**\n * To get the dataLabel module name\n */\n AccumulationDataLabel.prototype.getModuleName = function () {\n return 'AccumulationDataLabel';\n };\n /**\n * To destroy the data label.\n * @return {void}\n * @private\n */\n AccumulationDataLabel.prototype.destroy = function (accumulation) {\n /**\n * Destroy method performed here\n */\n };\n return AccumulationDataLabel;\n}(AccumulationBase));\nexport { AccumulationDataLabel };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * AccumulationChart Tooltip file\n */\nimport { Browser, Animation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { AccPointData, withInBounds, ChartLocation, PathOption, drawSymbol, Size, indexFinder } from '../../common/utils/helper';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\n/**\n * `AccumulationTooltip` module is used to render tooltip for accumulation chart.\n */\nvar AccumulationTooltip = /** @class */ (function (_super) {\n __extends(AccumulationTooltip, _super);\n function AccumulationTooltip(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.accumulation = accumulation;\n _this.addEventListener();\n return _this;\n }\n /**\n * @hidden\n */\n AccumulationTooltip.prototype.addEventListener = function () {\n if (this.accumulation.isDestroyed) {\n return;\n }\n this.accumulation.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseLeaveHandler, this);\n this.accumulation.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.accumulation.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n AccumulationTooltip.prototype.mouseLeaveHandler = function (e) {\n this.removeTooltip(1000);\n };\n AccumulationTooltip.prototype.mouseUpHandler = function (e) {\n var control = this.accumulation;\n if (control.tooltip.enable && control.isTouch && withInBounds(control.mouseX, control.mouseY, control.initialClipRect)) {\n this.tooltip(e);\n this.removeTooltip(2000);\n }\n };\n AccumulationTooltip.prototype.mouseMoveHandler = function (e) {\n var control = this.accumulation;\n // Tooltip for chart series. \n if (control.tooltip.enable && withInBounds(control.mouseX, control.mouseY, control.initialClipRect)) {\n this.tooltip(e);\n }\n };\n /**\n * Renders the tooltip.\n * @param {PointerEvent} event - Mouse move event.\n * @return {void}\n */\n AccumulationTooltip.prototype.tooltip = function (event) {\n var isTooltip = this.getElement(this.element.id + '_tooltip');\n var tooltipDiv = this.getTooltipElement(isTooltip);\n this.renderSeriesTooltip(event, this.accumulation, !isTooltip, tooltipDiv);\n };\n AccumulationTooltip.prototype.renderSeriesTooltip = function (e, chart, isFirst, tooltipDiv) {\n var data = this.getPieData(e, chart, chart.mouseX, chart.mouseY);\n var rect = chart.initialClipRect;\n this.currentPoints = [];\n var markerSide;\n if (data.point && (!this.previousPoints[0] || (this.previousPoints[0].point !== data.point))) {\n if (this.pushData(data, isFirst, tooltipDiv, false)) {\n var text = this.getTooltipText(data, chart.tooltip);\n if (!chart.tooltip.template) {\n if (this.header !== '') {\n this.findHeader(data);\n }\n markerSide = this.renderTooltip(data, rect, data.point.symbolLocation, text, isFirst, false);\n if (markerSide) {\n this.drawMarker(markerSide.isBottom, 10);\n }\n }\n else {\n this.renderTemplate(data, rect, data.point.symbolLocation, this.getTemplateText(data), isFirst);\n }\n this.isRemove = true;\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n }\n else {\n if (!data.point && this.isRemove) {\n this.removeTooltip(1000);\n this.isRemove = false;\n }\n }\n };\n AccumulationTooltip.prototype.drawMarker = function (isBottom, size) {\n var count = 0;\n var shapeOption;\n var groupElement = this.getElement(this.element.id + '_tooltip_group');\n var markerGroup = this.chart.renderer.createGroup({ id: this.element.id + '_tooltip_trackball_group' });\n var x = (this.padding * 2) + (size / 2);\n var y;\n var series;\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n series = data.series;\n y = this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : 0);\n shapeOption = new PathOption(this.element.id + '_Tooltip_Trackball_' + series.index, data.point.color, 1, '#cccccc', series.opacity, null);\n markerGroup.appendChild(drawSymbol(new ChartLocation(x, y), 'Circle', new Size(size, size), null, shapeOption, null));\n count++;\n }\n groupElement.appendChild(markerGroup);\n };\n AccumulationTooltip.prototype.getPieData = function (e, chart, x, y) {\n var target = e.target;\n var id = indexFinder(target.id, true);\n if (!isNaN(id.series)) {\n var seriesIndex = id.series;\n var pointIndex = id.point;\n if (!isNullOrUndefined(seriesIndex) && !isNaN(seriesIndex) && !isNullOrUndefined(pointIndex) && !isNaN(pointIndex)) {\n var series = this.getSeriesFromIndex(seriesIndex, chart.visibleSeries);\n if (series.enableTooltip) {\n return new AccPointData(series.points[pointIndex], series);\n }\n }\n }\n return new AccPointData(null, null);\n };\n /**\n * To get series from index\n */\n AccumulationTooltip.prototype.getSeriesFromIndex = function (index, visibleSeries) {\n return visibleSeries[0];\n };\n AccumulationTooltip.prototype.getTemplateText = function (data) {\n var point = extend({}, data.point);\n return point;\n };\n AccumulationTooltip.prototype.getTooltipText = function (data, tooltip) {\n var series = data.series;\n var format = tooltip.format ? tooltip.format : '${point.x} : ${point.y}';\n return this.parseTemplate(data.point, series, format);\n };\n AccumulationTooltip.prototype.findHeader = function (data) {\n this.header = this.parseTemplate(data.point, data.series, this.header);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n this.formattedText = this.formattedText.concat(this.header);\n }\n };\n AccumulationTooltip.prototype.parseTemplate = function (point, series, format) {\n var value;\n var textValue;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n value = new RegExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(value.source, point[dataValue]);\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n value = new RegExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(value.source, textValue);\n }\n return format;\n };\n /**\n * Removes the tooltip on mouse leave.\n * @return {void}\n * @private\n */\n AccumulationTooltip.prototype.removeTooltip = function (duration) {\n var _this = this;\n var chart = this.control;\n var tooltipElement = this.getElement(this.element.id + '_tooltip');\n this.stopAnimation();\n if (tooltipElement && this.previousPoints.length > 0) {\n var data_1 = this.previousPoints;\n this.toolTipInterval = setTimeout(function () {\n var series = data_1[0].series;\n var tooltipGroup = tooltipElement.firstChild;\n var opacity = parseFloat(tooltipGroup.getAttribute('opacity')) || 1;\n var element = _this.getElement(chart.element.id + '_Series_' + data_1[0].series.index\n + '_Point_' + data_1[0].point.index);\n var rectOpacity;\n if (element) {\n rectOpacity = parseFloat(element.getAttribute('opacity'));\n }\n new Animation({}).animate(tooltipGroup, {\n duration: 200,\n progress: function (args) {\n _this.progressAnimation(element, tooltipGroup, series, opacity, rectOpacity, (args.timeStamp / args.duration), series.isRectSeries, false);\n },\n end: function (model) {\n _this.previousPoints = [];\n _this.endAnimation(element, tooltipGroup, series, false);\n }\n });\n }, duration);\n }\n };\n /**\n * Get module name\n */\n AccumulationTooltip.prototype.getModuleName = function () {\n return 'AccumulationTooltip';\n };\n /**\n * To destroy the Tooltip.\n * @return {void}\n * @private\n */\n AccumulationTooltip.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return AccumulationTooltip;\n}(BaseTooltip));\nexport { AccumulationTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var 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 function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend } from '@syncfusion/ej2-base';\nimport { indexFinder } from '../../common/utils/helper';\nimport { pointByIndex } from '../model/acc-base';\nimport { Index } from '../../common/model/base';\nimport { BaseSelection } from '../../common/user-interaction/selection';\n/**\n * `AccumulationSelection` module handles the selection for accumulation chart.\n * @private\n */\nvar AccumulationSelection = /** @class */ (function (_super) {\n __extends(AccumulationSelection, _super);\n function AccumulationSelection(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.renderer = accumulation.renderer;\n return _this;\n }\n /**\n * To initialize the private variables\n */\n AccumulationSelection.prototype.initPrivateVariables = function (accumulation) {\n this.styleId = accumulation.element.id + '_ej2_chart_selection';\n this.unselected = accumulation.element.id + '_ej2_deselected';\n this.selectedDataIndexes = [];\n this.rectPoints = null;\n };\n /**\n * Invoke selection for rendered chart.\n * @param {AccumulationChart} chart - Define the chart to invoke the selection.\n * @return {void}\n */\n AccumulationSelection.prototype.invokeSelection = function (accumulation) {\n this.initPrivateVariables(accumulation);\n this.series = extend({}, accumulation.visibleSeries, null, true);\n this.seriesStyles();\n this.selectDataIndex(this.concatIndexes(accumulation.selectedDataIndexes, this.selectedDataIndexes), accumulation);\n };\n /**\n * To get series selection style by series.\n */\n AccumulationSelection.prototype.generateStyle = function (series) {\n return (series.selectionStyle || this.styleId + '_series_' + series.index);\n };\n /**\n * To get elements by index, series\n */\n AccumulationSelection.prototype.findElements = function (accumulation, series, index) {\n return [this.getElementByIndex(index)];\n };\n /**\n * To get series point element by index\n */\n AccumulationSelection.prototype.getElementByIndex = function (index) {\n var elementId = this.control.element.id + '_Series_' + index.series + '_Point_' + index.point;\n return document.getElementById(elementId);\n };\n /**\n * To calculate selected elements on mouse click or touch\n * @private\n */\n AccumulationSelection.prototype.calculateSelectedElements = function (accumulation, event) {\n if (event.target.id.indexOf(accumulation.element.id + '_') === -1) {\n return;\n }\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n this.performSelection(indexFinder(event.target.id), accumulation, event.target);\n }\n };\n /**\n * To perform the selection process based on index and element.\n */\n AccumulationSelection.prototype.performSelection = function (index, accumulation, element) {\n element = element.id.indexOf('datalabel') > -1 ?\n accumulation.getSeriesElement().childNodes[index.series].childNodes[index.point]\n : element;\n switch (accumulation.selectionMode) {\n case 'Point':\n if (!isNaN(index.point)) {\n this.selection(accumulation, index, [element]);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n }\n break;\n }\n };\n /**\n * To select the element by index. Adding or removing selection style class name.\n */\n AccumulationSelection.prototype.selection = function (accumulation, index, selectedElements) {\n if (!accumulation.isMultiSelect) {\n this.removeMultiSelectEelments(accumulation, this.selectedDataIndexes, index, accumulation.series);\n }\n var className = selectedElements[0] && (selectedElements[0].getAttribute('class') || '');\n if (selectedElements[0] && className.indexOf(this.getSelectionClass(selectedElements[0].id)) > -1) {\n this.removeStyles(selectedElements, index);\n this.addOrRemoveIndex(this.selectedDataIndexes, index);\n }\n else {\n this.applyStyles(selectedElements, index);\n this.addOrRemoveIndex(this.selectedDataIndexes, index, true);\n }\n };\n /**\n * To redraw the selection process on accumulation chart refresh.\n * @private\n */\n AccumulationSelection.prototype.redrawSelection = function (accumulation, oldMode) {\n var selectedDataIndexes = extend([], this.selectedDataIndexes, null, true);\n this.removeSelectedElements(accumulation, this.selectedDataIndexes);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n this.selectDataIndex(selectedDataIndexes, accumulation);\n };\n /**\n * To remove the selected elements style classes by indexes.\n */\n AccumulationSelection.prototype.removeSelectedElements = function (accumulation, indexes) {\n var seriesgroup = accumulation.getSeriesElement();\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\n var index = indexes_1[_i];\n this.removeStyles([this.getElementByIndex(index)], index);\n }\n };\n /**\n * To perform the selection for legend elements.\n * @private\n */\n AccumulationSelection.prototype.legendSelection = function (accumulation, series, pointIndex) {\n var element = accumulation.getSeriesElement().childNodes[series].childNodes[pointIndex];\n var seriesStyle = this.generateStyle(accumulation.visibleSeries[series]);\n var seriesElements = accumulation.getSeriesElement().childNodes[series].childNodes[pointIndex];\n this.selection(accumulation, new Index(series, pointIndex), [seriesElements]);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n };\n /**\n * To select the element by selected data indexes.\n */\n AccumulationSelection.prototype.selectDataIndex = function (indexes, accumulation) {\n var element;\n for (var _i = 0, indexes_2 = indexes; _i < indexes_2.length; _i++) {\n var index = indexes_2[_i];\n element = this.getElementByIndex(index);\n if (element) {\n this.performSelection(index, accumulation, element);\n }\n }\n };\n /**\n * To remove the selection styles for multi selection process.\n */\n AccumulationSelection.prototype.removeMultiSelectEelments = function (accumulation, index, currentIndex, seriesCollection) {\n var series;\n for (var i = 0; i < index.length; i++) {\n series = seriesCollection[index[i].series];\n if (!this.checkEquals(index[i], currentIndex)) {\n this.removeStyles(this.findElements(accumulation, series, index[i]), index[i]);\n index.splice(i, 1);\n i--;\n }\n }\n };\n /**\n * To apply the opacity effect for accumulation chart series elements.\n */\n AccumulationSelection.prototype.blurEffect = function (pieId, visibleSeries) {\n var visibility = this.checkPointVisibility(this.selectedDataIndexes); // legend click scenario\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (series.visible) {\n this.checkSelectionElements(document.getElementById(pieId + '_SeriesCollection'), this.generateStyle(series), visibility);\n }\n }\n };\n /**\n * To check selection elements by style class name.\n */\n AccumulationSelection.prototype.checkSelectionElements = function (element, className, visibility) {\n var children = (element.childNodes[0].childNodes);\n var legendShape;\n var elementClass;\n var parentClass;\n for (var i = 0; i < children.length; i++) {\n elementClass = children[i].getAttribute('class') || '';\n parentClass = children[i].parentNode.getAttribute('class') || '';\n if (elementClass.indexOf(className) === -1 && parentClass.indexOf(className) === -1 && visibility) {\n this.addSvgClass(children[i], this.unselected);\n }\n else {\n this.removeSvgClass(children[i], this.unselected);\n }\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + i);\n if (legendShape) {\n if (elementClass.indexOf(className) === -1 && parentClass.indexOf(className) === -1 && visibility) {\n this.addSvgClass(legendShape, this.unselected);\n }\n else {\n this.removeSvgClass(legendShape, this.unselected);\n }\n }\n }\n }\n };\n /**\n * To apply selection style for elements.\n */\n AccumulationSelection.prototype.applyStyles = function (elements, index) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n var legendShape = void 0;\n if (element) {\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);\n this.removeSvgClass(legendShape, this.unselected);\n this.addSvgClass(legendShape, this.getSelectionClass(legendShape.id));\n }\n this.removeSvgClass(element.parentNode, this.unselected);\n this.removeSvgClass(element, this.unselected);\n this.addSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n /**\n * To get selection style class name by id\n */\n AccumulationSelection.prototype.getSelectionClass = function (id) {\n return this.generateStyle(this.control.series[indexFinder(id).series]);\n };\n /**\n * To remove selection style for elements.\n */\n AccumulationSelection.prototype.removeStyles = function (elements, index) {\n var legendShape;\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n if (element) {\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);\n this.removeSvgClass(legendShape, this.getSelectionClass(legendShape.id));\n }\n this.removeSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n /**\n * To apply or remove selected elements index.\n */\n AccumulationSelection.prototype.addOrRemoveIndex = function (indexes, index, add) {\n for (var i = 0; i < indexes.length; i++) {\n if (this.checkEquals(indexes[i], index)) {\n indexes.splice(i, 1);\n i--;\n }\n }\n if (add) {\n indexes.push(index);\n }\n };\n /**\n * To check two index, point and series are equal\n */\n AccumulationSelection.prototype.checkEquals = function (first, second) {\n return ((first.point === second.point) && (first.series === second.series));\n };\n /**\n * To check selected points are visibility\n */\n AccumulationSelection.prototype.checkPointVisibility = function (selectedDataIndexes) {\n var visible = false;\n for (var _i = 0, selectedDataIndexes_1 = selectedDataIndexes; _i < selectedDataIndexes_1.length; _i++) {\n var data = selectedDataIndexes_1[_i];\n if (pointByIndex(data.point, this.control.visibleSeries[0].points).visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * Get module name.\n */\n AccumulationSelection.prototype.getModuleName = function () {\n return 'AccumulationSelection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n AccumulationSelection.prototype.destroy = function (accumulation) {\n // Destroy method performed here\n };\n return AccumulationSelection;\n}(BaseSelection));\nexport { AccumulationSelection };\n","/**\n * AccumulationChart annotation properties\n */\nvar __extends = (this && this.__extends) || (function () {\n var 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 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 { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `AccumulationAnnotation` module handles the annotation for accumulation chart.\n */\nvar AccumulationAnnotation = /** @class */ (function (_super) {\n __extends(AccumulationAnnotation, _super);\n /**\n * Constructor for accumulation chart annotation.\n * @private.\n */\n function AccumulationAnnotation(control, annotations) {\n var _this = _super.call(this, control) || this;\n _this.pie = control;\n _this.annotations = annotations;\n return _this;\n }\n /**\n * Method to render the annotation for accumulation chart\n * @param element\n */\n AccumulationAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.parentElement = createElement('div', {\n id: this.pie.element.id + '_Annotation_Collections'\n });\n this.annotations.map(function (annotation, index) {\n _this.processAnnotation(annotation, index, _this.parentElement);\n });\n appendElement(this.parentElement, element);\n };\n /**\n * Get module name.\n */\n AccumulationAnnotation.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotation';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n AccumulationAnnotation.prototype.destroy = function (control) {\n // Destroy method performed here\n };\n return AccumulationAnnotation;\n}(AnnotationBase));\nexport { AccumulationAnnotation };\n","import * as index from '@syncfusion/ej2-charts';\nindex.Chart.Inject( index.LineSeries,index.ScatterSeries,index.ColumnSeries,index.SplineSeries,index.SplineAreaSeries,index.StripLine,index.AreaSeries,index.StepLineSeries,index.StepAreaSeries,index.StackingColumnSeries,index.StackingAreaSeries,index.BarSeries,index.StackingBarSeries,index.RangeColumnSeries,index.BubbleSeries,index.Tooltip,index.Crosshair,index.Category,index.DateTime,index.Logarithmic,index.Legend,index.Zoom,index.DataLabel,index.Selection,index.ChartAnnotation,index.HiloSeries,index.HiloOpenCloseSeries,index.WaterfallSeries,index.RangeAreaSeries,index.CandleSeries,index.PolarSeries,index.RadarSeries,index.SmaIndicator,index.TmaIndicator,index.EmaIndicator,index.AccumulationDistributionIndicator,index.MacdIndicator,index.AtrIndicator,index.RsiIndicator,index.MomentumIndicator,index.StochasticIndicator,index.BollingerBands,index.BoxAndWhiskerSeries,index.ErrorBar,index.Trendlines,index.DateTimeCategory,index.MultiColoredLineSeries,index.MultiColoredAreaSeries,index.MultiLevelLabel);\nindex.AccumulationChart.Inject( index.PieSeries,index.FunnelSeries,index.PyramidSeries,index.AccumulationTooltip,index.AccumulationLegend,index.AccumulationSelection,index.AccumulationDataLabel,index.AccumulationAnnotation);\nexport * from '@syncfusion/ej2-charts';\n","/**\n * Specifies gauge Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisLineColor = null;\n /** @private */\n Theme.tickLineColor = null;\n /** @private */\n Theme.pointerColor = null;\n})(Theme || (Theme = {}));\n/** @private */\nexport function getRangePalette(theme) {\n var palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // switch (theme) {\n // case 'Material':\n // palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // break;\n // case 'Fabric':\n // palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // break;\n // }\n return palette;\n}\n","var __extends = (this && this.__extends) || (function () {\n var 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 function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Configures the borders in circular gauge.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the fonts in circular gauge.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the margin of circular gauge.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the tooltip in circular gauge.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#FFFFFF')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#686868', size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({ color: 'black', width: 2 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\nimport { Theme } from '../model/theme';\n/**\n * Configures the axis line.\n */\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(2)\n ], Line.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Line.prototype, \"dashArray\", void 0);\n __decorate([\n Property(Theme.axisLineColor)\n ], Line.prototype, \"color\", void 0);\n return Line;\n}(ChildProperty));\nexport { Line };\n/**\n * Configures the axis label.\n */\nvar Label = /** @class */ (function (_super) {\n __extends(Label, _super);\n function Label() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Label.prototype, \"font\", void 0);\n __decorate([\n Property('')\n ], Label.prototype, \"format\", void 0);\n __decorate([\n Property('Inside')\n ], Label.prototype, \"position\", void 0);\n __decorate([\n Property('None')\n ], Label.prototype, \"hiddenLabel\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"autoAngle\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"useRangeColor\", void 0);\n __decorate([\n Property(0)\n ], Label.prototype, \"offset\", void 0);\n return Label;\n}(ChildProperty));\nexport { Label };\n/**\n * Configures the ranges of an axis.\n */\nvar Range = /** @class */ (function (_super) {\n __extends(Range, _super);\n function Range() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Range.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"radius\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"startWidth\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"endWidth\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"color\", void 0);\n return Range;\n}(ChildProperty));\nexport { Range };\n/**\n * Configures the major and minor tick lines of an axis.\n */\nvar Tick = /** @class */ (function (_super) {\n __extends(Tick, _super);\n function Tick() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Tick.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"interval\", void 0);\n __decorate([\n Property(0)\n ], Tick.prototype, \"offset\", void 0);\n __decorate([\n Property(Theme.tickLineColor)\n ], Tick.prototype, \"color\", void 0);\n __decorate([\n Property('Inside')\n ], Tick.prototype, \"position\", void 0);\n __decorate([\n Property(false)\n ], Tick.prototype, \"useRangeColor\", void 0);\n return Tick;\n}(ChildProperty));\nexport { Tick };\n/**\n * Configures the needle cap in pointer.\n */\nvar Cap = /** @class */ (function (_super) {\n __extends(Cap, _super);\n function Cap() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#FFFFFF')\n ], Cap.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: Theme.pointerColor, width: 8 }, Border)\n ], Cap.prototype, \"border\", void 0);\n __decorate([\n Property(8)\n ], Cap.prototype, \"radius\", void 0);\n return Cap;\n}(ChildProperty));\nexport { Cap };\n/**\n * Configures the back needle in pointers.\n */\nvar NeedleTail = /** @class */ (function (_super) {\n __extends(NeedleTail, _super);\n function NeedleTail() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(Theme.pointerColor)\n ], NeedleTail.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: Theme.pointerColor, width: 0 }, Border)\n ], NeedleTail.prototype, \"border\", void 0);\n __decorate([\n Property('0%')\n ], NeedleTail.prototype, \"length\", void 0);\n return NeedleTail;\n}(ChildProperty));\nexport { NeedleTail };\n/**\n * Configures the animation of pointers.\n */\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(true)\n ], Animation.prototype, \"enable\", void 0);\n __decorate([\n Property(1000)\n ], Animation.prototype, \"duration\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * ‘Annotation’ module is used to handle annotation action for an axis.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(90)\n ], Annotation.prototype, \"angle\", void 0);\n __decorate([\n Property('50%')\n ], Annotation.prototype, \"radius\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Annotation.prototype, \"autoAngle\", void 0);\n __decorate([\n Complex({ size: '12px', color: '#686868' }, Font)\n ], Annotation.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"description\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Configures the pointers of an axis.\n */\nvar Pointer = /** @class */ (function (_super) {\n __extends(Pointer, _super);\n function Pointer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Pointer.prototype, \"value\", void 0);\n __decorate([\n Property('Needle')\n ], Pointer.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"radius\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"pointerWidth\", void 0);\n __decorate([\n Complex({}, Cap)\n ], Pointer.prototype, \"cap\", void 0);\n __decorate([\n Complex({}, NeedleTail)\n ], Pointer.prototype, \"needleTail\", void 0);\n __decorate([\n Property(Theme.pointerColor)\n ], Pointer.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Pointer.prototype, \"border\", void 0);\n __decorate([\n Complex(null, Animation)\n ], Pointer.prototype, \"animation\", void 0);\n __decorate([\n Property('Circle')\n ], Pointer.prototype, \"markerShape\", void 0);\n __decorate([\n Property(5)\n ], Pointer.prototype, \"markerHeight\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"description\", void 0);\n __decorate([\n Property(5)\n ], Pointer.prototype, \"markerWidth\", void 0);\n return Pointer;\n}(ChildProperty));\nexport { Pointer };\n/**\n * Configures an axis in a gauge.\n */\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Specifies the minimum value of an axis.\n * @default null\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n return _this;\n }\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"radius\", void 0);\n __decorate([\n Complex({}, Line)\n ], Axis.prototype, \"lineStyle\", void 0);\n __decorate([\n Collection([{}], Range)\n ], Axis.prototype, \"ranges\", void 0);\n __decorate([\n Collection([{}], Pointer)\n ], Axis.prototype, \"pointers\", void 0);\n __decorate([\n Collection([{}], Annotation)\n ], Axis.prototype, \"annotations\", void 0);\n __decorate([\n Complex({ width: 2, height: 10 }, Tick)\n ], Axis.prototype, \"majorTicks\", void 0);\n __decorate([\n Complex({ width: 2, height: 5 }, Tick)\n ], Axis.prototype, \"minorTicks\", void 0);\n __decorate([\n Property(200)\n ], Axis.prototype, \"startAngle\", void 0);\n __decorate([\n Property(160)\n ], Axis.prototype, \"endAngle\", void 0);\n __decorate([\n Property('ClockWise')\n ], Axis.prototype, \"direction\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"background\", void 0);\n __decorate([\n Complex({}, Label)\n ], Axis.prototype, \"labelStyle\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { stringToNumber, getLocationFromAngle, getFontStyle } from '../utils/helper';\nimport { getElement, getTemplateFunction, measureElementRect } from '../utils/helper';\nimport { annotationRender } from '../model/constants';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * Annotation Module handles the annotation of the axis.\n */\nvar Annotations = /** @class */ (function () {\n /**\n * Constructor for Annotation module.\n * @private.\n */\n function Annotations(gauge) {\n this.gauge = gauge;\n this.elementId = gauge.element.id;\n }\n /**\n * Method to render the annotation for circular gauge.\n */\n Annotations.prototype.renderAnnotation = function (axis, index) {\n var _this = this;\n var element = createElement('div', {\n id: this.elementId + '_Annotations_' + index\n });\n var parentElement = getElement(this.elementId + '_Secondary_Element');\n axis.annotations.map(function (annotation, annotationIndex) {\n if (annotation.content !== null) {\n _this.createTemplate(element, annotationIndex, index);\n }\n });\n if (parentElement && element.childElementCount) {\n parentElement.appendChild(element);\n }\n };\n /**\n * Method to create annotation template for circular gauge.\n */\n Annotations.prototype.createTemplate = function (element, annotationIndex, axisIndex) {\n var axis = this.gauge.axes[axisIndex];\n var annotation = axis.annotations[annotationIndex];\n var childElement = createElement('div', {\n id: this.elementId + '_Axis_' + axisIndex + '_Annotation_' + annotationIndex,\n styles: 'position: absolute; z-index:' + annotation.zIndex + ';transform:' +\n (annotation.autoAngle ? 'rotate(' + (annotation.angle - 90) + 'deg)' : 'rotate(0deg)') + ';'\n });\n var argsData = {\n cancel: false, name: annotationRender, content: annotation.content,\n axis: axis, annotation: annotation, textStyle: annotation.textStyle\n };\n this.gauge.trigger(annotationRender, argsData);\n var templateFn;\n var templateElement;\n if (!argsData.cancel) {\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(axis).length) {\n templateElement = templateFn(axis);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content,\n styles: getFontStyle(argsData.textStyle)\n }));\n }\n this.updateLocation(childElement, axis, annotation);\n element.appendChild(childElement);\n }\n };\n /**\n * Method to update the annotation location for circular gauge.\n */\n Annotations.prototype.updateLocation = function (element, axis, annotation) {\n var location = getLocationFromAngle(annotation.angle - 90, stringToNumber(annotation.radius, axis.currentRadius), this.gauge.midPoint);\n var elementRect = measureElementRect(element);\n element.style.left = (location.x - (elementRect.width / 2)) + 'px';\n element.style.top = (location.y - (elementRect.height / 2)) + 'px';\n element.setAttribute('aria-label', annotation.description || 'Annotation');\n };\n /**\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","/**\n * Specifies the gauge constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var annotationRender = 'annotationRender';\n/** @private */\nexport var gaugeMouseMove = 'gaugeMouseMove';\n/** @private */\nexport var gaugeMouseLeave = 'gaugeMouseLeave';\n/** @private */\nexport var gaugeMouseDown = 'gaugeMouseDown';\n/** @private */\nexport var gaugeMouseUp = 'gaugeMouseUp';\n/** @private */\nexport var dragStart = 'dragStart';\n/** @private */\nexport var dragMove = 'dragMove';\n/** @private */\nexport var dragEnd = 'dragEnd';\n/** @private */\nexport var resized = 'resized';\n","import { createElement, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getPointer, getTemplateFunction } from '../utils/helper';\nimport { getAngleFromValue, getLabelFormat, getElement, getLocationFromAngle } from '../utils/helper';\nimport { tooltipRender } from '../model/constants';\n/**\n * Tooltip Module handles the tooltip of the circular gauge\n */\nvar GaugeTooltip = /** @class */ (function () {\n /**\n * Constructor for Tooltip module.\n * @private.\n */\n function GaugeTooltip(gauge) {\n this.gauge = gauge;\n this.element = gauge.element;\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1000\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * Method to render the tooltip for circular gauge.\n */\n GaugeTooltip.prototype.renderTooltip = function (target) {\n var currentPointer = getPointer(target.id, this.gauge);\n var element;\n var angle;\n this.currentAxis = this.gauge.axes[currentPointer.axisIndex];\n this.currentPointer = (this.currentAxis.pointers)[currentPointer.pointerIndex];\n angle = getAngleFromValue(this.currentPointer.currentValue, this.currentAxis.visibleRange.max, this.currentAxis.visibleRange.min, this.currentAxis.startAngle, this.currentAxis.endAngle, this.currentAxis.direction === 'ClockWise') % 360;\n element = this.appendTargetElement(angle);\n if (element.getAttribute('data-tooltip-id') === null) {\n this.findPosition(angle);\n this.ejTooltip.open(element);\n }\n };\n /**\n * Method to append the target element for tooltip\n */\n GaugeTooltip.prototype.appendTargetElement = function (angle) {\n var location = getLocationFromAngle(angle, this.currentAxis.currentRadius, this.gauge.midPoint);\n var element = getElement(this.element.id + '_GaugeTooltip');\n if (element) {\n element.style.left = location.x + 'px';\n element.style.top = location.y + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_GaugeTooltip',\n styles: 'position:absolute;left:' + location.x + 'px;top:' + location.y +\n 'px;width:2px;height:2px;background:transparent'\n });\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n /**\n * Method to find the position of the tooltip anchor for circular gauge.\n */\n GaugeTooltip.prototype.findPosition = function (angle) {\n switch (true) {\n case (angle >= 0 && angle <= 45):\n this.ejTooltip.position = 'RightBottom';\n break;\n case (angle >= 45 && angle < 90):\n this.ejTooltip.position = 'BottomRight';\n break;\n case (angle >= 90 && angle < 135):\n this.ejTooltip.position = 'BottomLeft';\n break;\n case (angle >= 135 && angle < 180):\n this.ejTooltip.position = 'LeftBottom';\n break;\n case (angle >= 180 && angle < 225):\n this.ejTooltip.position = 'LeftTop';\n break;\n case (angle >= 225 && angle < 270):\n this.ejTooltip.position = 'TopLeft';\n break;\n case (angle >= 270 && angle < 315):\n this.ejTooltip.position = 'TopRight';\n break;\n default:\n this.ejTooltip.position = 'RightTop';\n break;\n }\n this.ejTooltip.dataBind();\n };\n /**\n * Method to perform the tooltip for circular gauge.\n */\n GaugeTooltip.prototype.onBeforeRender = function (args) {\n var tooltipFormat = this.gauge.tooltip.format || this.currentAxis.labelStyle.format;\n var customLabelFormat = tooltipFormat && tooltipFormat.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(tooltipFormat), useGrouping: this.gauge.useGroupingSeparator\n });\n var content = customLabelFormat ?\n tooltipFormat.replace(new RegExp('{value}', 'g'), format(this.currentPointer.currentValue)) :\n format(this.currentPointer.currentValue);\n content = this.tooltip.template ?\n getTemplateFunction(this.tooltip.template)(this.currentAxis)[0] : content;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: this.borderStyle,\n axis: this.currentAxis, pointer: this.currentPointer,\n textStyle: this.textStyle\n };\n this.gauge.trigger(tooltipRender, argsData);\n this.borderStyle = argsData.border;\n args.cancel = argsData.cancel;\n this.ejTooltip.content = argsData.content;\n this.textStyle = argsData.textStyle;\n this.ejTooltip.dataBind();\n };\n /**\n * Method to customize the tooltip elements for circular gauge.\n */\n GaugeTooltip.prototype.tooltipCustomization = function (args) {\n var font = this.textStyle;\n var borderColor = this.borderStyle.color;\n var border = this.borderStyle.width;\n var pointerSize = 5;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n args.element.classList.remove('e-popup-close');\n args.element.classList.add('e-popup-open');\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.tooltip.fill, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'opacity': font.opacity.toString(), 'fontStyle': font.fontStyle\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderBottomWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderTopWidth': innerWidth,\n 'left': border + 'px', 'top': '0'\n });\n }\n else if (arrowEle.classList.contains('e-tip-left')) {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': pointerSize + border + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderRightWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderRightWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': (pointerSize + border) + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderLeftWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderLeftWidth': innerWidth,\n 'left': (border <= 1 ? 0 : -1) + 'px', 'top': border + 'px'\n });\n }\n this.ejTooltip.refresh(args.target);\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': this.tooltip.enableAnimation ? '1000ms' : '0ms'\n });\n };\n /**\n * Get module name.\n */\n GaugeTooltip.prototype.getModuleName = function () {\n // Returns te module name\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n GaugeTooltip.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","import { getLocationFromAngle, PathOption, stringToNumber, TextOption, textElement, appendPath, toPixel } from '../utils/helper';\nimport { getAngleFromValue, isCompleteAngle, getPathArc, getRangeColor } from '../utils/helper';\nimport { getRangePalette } from '../model/theme';\n/**\n * Specifies the Axis rendering for circular gauge\n */\nvar AxisRenderer = /** @class */ (function () {\n /**\n * Constructor for axis renderer.\n * @private.\n */\n function AxisRenderer(gauge) {\n this.gauge = gauge;\n }\n /**\n * Method to render the axis element of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisOuterLine = function (axis, index, element, gauge) {\n var background = axis.background;\n this.setRangeColor(axis);\n if (background !== null) {\n appendPath(new PathOption(gauge.element.id + '_AxisOuterLine_' + index, background, 0, 'transparent', null, '0', getPathArc(gauge.midPoint, 0, 360, (Math.min(axis.rect.width, axis.rect.height) / 2)), '', 'pointer-events:none;'), element, gauge);\n }\n };\n /**\n * Method to render the axis line of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisLine = function (axis, index, element, gauge) {\n var startAngle = axis.startAngle;\n var endAngle = axis.endAngle;\n if (axis.lineStyle.width > 0) {\n startAngle = !isCompleteAngle(startAngle, endAngle) ? startAngle : [0, endAngle = 360][0];\n appendPath(new PathOption(gauge.element.id + '_AxisLine_' + index, 'transparent', axis.lineStyle.width, axis.lineStyle.color, null, axis.lineStyle.dashArray, getPathArc(gauge.midPoint, startAngle - 90, endAngle - 90, axis.currentRadius), '', 'pointer-events:none;'), element, gauge);\n }\n };\n /**\n * Method to render the axis labels of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisLabels = function (axis, index, element, gauge) {\n var labelElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Labels_' + index\n });\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var labelCollection = axis.visibleLabels;\n var location;\n var style = axis.labelStyle;\n var anchor;\n var angle;\n var label;\n var radius = axis.currentRadius;\n var labelPadding = 10;\n if (style.position === 'Outside') {\n radius += (axis.nearSize - (axis.maxLabelSize.height + axis.lineStyle.width / 2)) +\n (labelPadding / 2);\n }\n else {\n radius -= (axis.farSize - (axis.maxLabelSize.height + axis.lineStyle.width / 2) +\n (style.autoAngle ? labelPadding : 0));\n }\n for (var i = 0, length_1 = labelCollection.length; i < length_1; i++) {\n if ((i === 0 && style.hiddenLabel === 'First') ||\n (i === (length_1 - 1) && style.hiddenLabel === 'Last')) {\n continue;\n }\n label = labelCollection[i];\n angle = Math.round(getAngleFromValue(label.value, max, min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise'));\n location = getLocationFromAngle(angle, radius, gauge.midPoint);\n anchor = this.findAnchor(location, style, angle, label);\n textElement(new TextOption(gauge.element.id + '_Axis_' + index + '_Label_' + i, location.x, location.y, anchor, label.text, style.autoAngle ? 'rotate(' + (angle + 90) + ',' + (location.x) + ',' + location.y + ')' : '', 'auto'), style.font, style.useRangeColor ? getRangeColor(label.value, axis.ranges, style.font.color) : style.font.color, labelElement, 'pointer-events:none;');\n }\n element.appendChild(labelElement);\n };\n /**\n * Method to find the anchor of the axis label.\n * @private\n */\n AxisRenderer.prototype.findAnchor = function (location, style, angle, label) {\n if (style.autoAngle) {\n return 'middle';\n }\n var anchor = style.position === 'Inside' ?\n ((angle > 120 && angle < 240) ? 'start' : ((300 < angle || angle < 60) ? 'end' : 'middle')) :\n ((angle > 120 && angle < 240) ? 'end' : ((300 < angle || angle < 60) ? 'start' : 'middle'));\n location.y += style.position === 'Inside' ?\n ((angle >= 240 && angle <= 300) ? (label.size.height / 2) :\n (angle >= 60 && angle <= 120) ? 0 : label.size.height / 4) :\n ((angle >= 240 && angle <= 300) ? 0 :\n (angle >= 60 && angle <= 120) ? label.size.height / 2 : label.size.height / 4);\n return anchor;\n };\n /**\n * Method to render the axis minor tick lines of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawMinorTickLines = function (axis, index, element, gauge) {\n var minorTickElements = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_MinorTickLines_' + index\n });\n var minorLineStyle = axis.minorTicks;\n var minorInterval = minorLineStyle.interval !== null ?\n minorLineStyle.interval : (axis.visibleRange.interval / 2);\n var isRangeColor = minorLineStyle.useRangeColor;\n if (minorLineStyle.width && minorLineStyle.height && minorInterval) {\n for (var i = axis.visibleRange.min, max = axis.visibleRange.max; i <= max; i += minorInterval) {\n if (this.majorValues.indexOf(+i.toFixed(3)) < 0) {\n appendPath(new PathOption(gauge.element.id + '_Axis_Minor_TickLine_' + index + '_' + i, 'transparent', minorLineStyle.width, isRangeColor ? getRangeColor(i, axis.ranges, minorLineStyle.color) : minorLineStyle.color, null, '0', this.calculateTicks(i, minorLineStyle, axis), '', 'pointer-events:none;'), minorTickElements, gauge);\n }\n }\n element.appendChild(minorTickElements);\n }\n };\n /**\n * Method to render the axis major tick lines of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawMajorTickLines = function (axis, index, element, gauge) {\n var majorTickElements = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_MajorTickLines_' + index\n });\n var majorLineStyle = axis.majorTicks;\n var isRangeColor = majorLineStyle.useRangeColor;\n this.majorValues = [];\n if (majorLineStyle.width && majorLineStyle.height && axis.visibleRange.interval) {\n for (var i = axis.visibleRange.min, max = axis.visibleRange.max, interval = axis.visibleRange.interval; i <= max; i += interval) {\n this.majorValues.push(+i.toFixed(3));\n appendPath(new PathOption(gauge.element.id + '_Axis_Major_TickLine_' + index + '_' + i, 'transparent', majorLineStyle.width, isRangeColor ? getRangeColor(i, axis.ranges, majorLineStyle.color) : majorLineStyle.color, null, '0', this.calculateTicks(i, majorLineStyle, axis), '', 'pointer-events:none;'), majorTickElements, gauge);\n }\n element.appendChild(majorTickElements);\n }\n };\n /**\n * Method to calcualte the tick elements for the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.calculateTicks = function (value, options, axis) {\n var axisLineWidth = (axis.lineStyle.width / 2) + options.offset;\n var isOutside = options.position === 'Outside';\n var angle = getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise');\n var start = getLocationFromAngle(angle, axis.currentRadius +\n (isOutside ? axisLineWidth : -axisLineWidth), this.gauge.midPoint);\n var end = getLocationFromAngle(angle, axis.currentRadius +\n (isOutside ? axisLineWidth : -axisLineWidth) +\n (isOutside ? options.height : -options.height), this.gauge.midPoint);\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y + ' ';\n };\n /**\n * Method to render the axis range of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisRange = function (axis, index, element, gauge) {\n var _this = this;\n var rangeElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Ranges_' + index\n });\n var startAngle;\n var endAngle;\n var isClockWise = axis.direction === 'ClockWise';\n var startValue;\n var endValue;\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var startWidth;\n var endWidth;\n axis.ranges.map(function (range, rangeIndex) {\n _this.calculateRangeRadius(axis, range);\n startValue = Math.min(Math.max(range.start, min), range.end);\n endValue = Math.min(Math.max(range.start, range.end), max);\n if (startValue !== endValue) {\n startAngle = getAngleFromValue(startValue, max, min, axis.startAngle, axis.endAngle, isClockWise);\n endAngle = getAngleFromValue(endValue, max, min, axis.startAngle, axis.endAngle, isClockWise);\n if (range.startWidth.length > 0) {\n startWidth = toPixel(range.startWidth, range.currentRadius);\n }\n else {\n startWidth = range.startWidth;\n }\n if (range.endWidth.length > 0) {\n endWidth = toPixel(range.endWidth, range.currentRadius);\n }\n else {\n endWidth = range.endWidth;\n }\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n endWidth = isClockWise ? endWidth : [startWidth, startWidth = endWidth][0];\n appendPath(new PathOption(gauge.element.id + '_Axis_' + index + '_Range_' + rangeIndex, range.rangeColor, 0, range.rangeColor, 1, '0', getPathArc(gauge.midPoint, Math.round(startAngle), Math.round(endAngle), range.currentRadius, startWidth, endWidth), '', 'pointer-events:none;'), rangeElement, gauge);\n }\n });\n element.appendChild(rangeElement);\n };\n /**\n * Method to calculate the radius of the axis range.\n * @return {void}\n */\n AxisRenderer.prototype.calculateRangeRadius = function (axis, range) {\n var radius = range.radius !== null ? range.radius : '100%';\n range.currentRadius = stringToNumber(radius, axis.currentRadius);\n };\n /**\n * Method to get the range color of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.setRangeColor = function (axis) {\n var rangeColors = getRangePalette(this.gauge.theme);\n axis.ranges.map(function (range, index) {\n range.rangeColor = range.color ? range.color : rangeColors[index % rangeColors.length];\n });\n };\n return AxisRenderer;\n}());\nexport { AxisRenderer };\n","import { stringToNumber, Size, calculateShapes, appendPath } from '../utils/helper';\nimport { getLocationFromAngle, PathOption } from '../utils/helper';\nimport { linear, getAngleFromValue, getCompleteArc } from '../utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../model/constants';\n/**\n * Specifies the Axis rendering for circular gauge\n */\nvar PointerRenderer = /** @class */ (function () {\n /**\n * Constructor for pointer renderer.\n * @private.\n */\n function PointerRenderer(gauge) {\n this.gauge = gauge;\n }\n /**\n * Method to render the axis pointers of the circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.drawPointers = function (axis, axisIndex, element, gauge) {\n var _this = this;\n var pointerElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Pointers_' + axisIndex\n });\n var childElement;\n var range;\n axis.pointers.map(function (pointer, pointerIndex) {\n range = axis.visibleRange;\n pointer.pathElement = [];\n _this.calculatePointerRadius(axis, pointer);\n childElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_' + axisIndex + '_Pointer_' + pointerIndex\n });\n _this['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointerIndex, childElement, gauge);\n _this.setPointerValue(axis, pointer, pointer.currentValue);\n pointerElement.appendChild(childElement);\n _this.doPointerAnimation(pointer, axis);\n });\n element.appendChild(pointerElement);\n };\n /**\n * Measure the pointer length of the circular gauge.\n * @return {void}\n */\n PointerRenderer.prototype.calculatePointerRadius = function (axis, pointer) {\n var padding = 5;\n pointer.currentRadius = pointer.radius === null ?\n (axis.currentRadius - (axis.farSize + padding)) :\n stringToNumber(pointer.radius, axis.currentRadius);\n };\n /**\n * Method to render the needle pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawNeedlePointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n var pointerRadius;\n var location;\n var direction;\n var mid = gauge.midPoint;\n var width = pointer.pointerWidth / 2;\n var rectDirection;\n // To render the needle\n location = getLocationFromAngle(0, pointer.currentRadius, mid);\n direction = 'M ' + mid.x + ' ' + (mid.y - width) + ' L ' + (location.x) + ' ' + mid.y +\n ' L ' + (mid.x) + ' ' + (mid.y + width) + ' Z';\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_Needle_' + index, pointer.color, pointer.border.width, pointer.border.color, null, '0', direction), parentElement, gauge));\n pointerRadius = stringToNumber(pointer.needleTail.length, pointer.currentRadius);\n // To render the rect element for touch\n rectDirection = 'M ' + mid.x + ' ' + (mid.y - width) + ' L ' + (location.x) + ' ' + (mid.y - width) +\n ' L ' + location.x + ' ' + (mid.y + width) + ' L ' + mid.x + ' ' + (mid.y + width);\n // To render the needle tail\n if (pointerRadius) {\n location = getLocationFromAngle(180, pointerRadius, gauge.midPoint);\n direction = 'M ' + mid.x + ' ' + (mid.y - width) +\n ' L ' + (location.x) + ' ' + (mid.y - width) +\n ' L ' + (location.x) + ' ' + (mid.y + width) +\n ' L ' + (mid.x) + ' ' + (mid.y + width) + ' Z';\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleTail_' + index, pointer.needleTail.color, pointer.needleTail.border.width, pointer.needleTail.border.color, null, '0', direction), parentElement, gauge));\n rectDirection += ' L ' + location.x + ' ' + (mid.y + width) + ' L ' + location.x + ' ' + (mid.y - width);\n }\n // To render the cap\n if (pointer.cap.radius) {\n pointer.pathElement.push(appendPath(calculateShapes(mid, 'Circle', new Size(pointer.cap.radius * 2, pointer.cap.radius * 2), '', new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleCap_' + index, pointer.cap.color, pointer.cap.border.width, pointer.cap.border.color, null, '0', '', '')), parentElement, gauge, 'Ellipse'));\n }\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleRect_' + index, 'transparent', 0, 'transpanret', null, '0', rectDirection + ' Z'), parentElement, gauge));\n };\n /**\n * Method to set the pointer value of the circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.setPointerValue = function (axis, pointer, value) {\n var location = this.gauge.midPoint;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n element.setAttribute('d', getCompleteArc(location, startAngle, endAngle, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth)));\n }\n else {\n element.setAttribute('transform', 'rotate(' + getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise) + ',' + location.x + ',' + location.y + ')');\n }\n element.setAttribute('aria-label', pointer.description || 'Pointer:' + value.toString());\n });\n };\n /**\n * Method to render the marker pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawMarkerPointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n var location = getLocationFromAngle(0, pointer.currentRadius, gauge.midPoint);\n pointer.pathElement.push(appendPath(calculateShapes(location, pointer.markerShape, new Size(pointer.markerWidth, pointer.markerHeight), pointer.imageUrl, new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_Marker_' + index, pointer.color, pointer.border.width, pointer.border.color, null, '0', '', '')), parentElement, gauge, pointer.markerShape === 'Circle' ? 'Ellipse' : (pointer.markerShape === 'Image' ? 'Image' : 'Path')));\n };\n /**\n * Method to render the range bar pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawRangeBarPointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_RangeBar_' + index, pointer.color, pointer.border.width, pointer.border.color, 1, '0', ''), parentElement, gauge));\n };\n /**\n * Method to perform the animation of the pointer in circular gauge.\n * @return {void}\n */\n PointerRenderer.prototype.doPointerAnimation = function (pointer, axis) {\n var _this = this;\n var startValue = axis.visibleRange.min;\n var endValue = pointer.currentValue;\n if (pointer.animation.enable && startValue !== endValue && this.gauge.animatePointer) {\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n _this.performRangeBarAnimation(element, startValue, endValue, axis, pointer, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth));\n }\n else {\n _this.performNeedleAnimation(element, startValue, endValue, axis, pointer, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth));\n }\n });\n }\n };\n /**\n * Perform the needle and marker pointer animation for circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.performNeedleAnimation = function (element, start, end, axis, pointer, radius, innerRadius) {\n var _this = this;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(start, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var pointAngle = getAngleFromValue(end, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = startAngle > pointAngle ? (pointAngle + 360) : pointAngle;\n var sweepAngle;\n new Animation({}).animate(element, {\n duration: pointer.animation.duration,\n progress: function (args) {\n sweepAngle = (start < end || Math.round(startAngle) === Math.round(endAngle)) ?\n isClockWise ? (endAngle - startAngle) : (endAngle - startAngle - 360) :\n isClockWise ? (endAngle - startAngle - 360) : (endAngle - startAngle);\n element.style.animation = 'None';\n element.setAttribute('transform', 'rotate(' + linear(args.timeStamp, startAngle, sweepAngle, args.duration) + ',' +\n _this.gauge.midPoint.x.toString() + ',' + _this.gauge.midPoint.y.toString() + ')');\n },\n end: function (model) {\n _this.setPointerValue(axis, pointer, end);\n if (pointer.type === 'Marker' || (element.id.indexOf('_Pointer_NeedleCap') >= 0)) {\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n }\n });\n };\n /**\n * Perform the range bar pointer animation for circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.performRangeBarAnimation = function (element, start, end, axis, pointer, radius, innerRadius) {\n var _this = this;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(start, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var minAngle = getAngleFromValue(axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var pointAngle = getAngleFromValue(end, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var sweepAngle;\n var endAngle = startAngle > pointAngle ? (pointAngle + 360) : pointAngle;\n new Animation({}).animate(element, {\n duration: pointer.animation.duration,\n progress: function (arg) {\n element.style.animation = 'None';\n sweepAngle = (start < end || Math.round(startAngle) === Math.round(endAngle)) ?\n isClockWise ? (endAngle - startAngle) : (endAngle - startAngle - 360) :\n isClockWise ? (endAngle - startAngle - 360) : (endAngle - startAngle);\n if (isClockWise) {\n element.setAttribute('d', getCompleteArc(_this.gauge.midPoint, minAngle, linear(arg.timeStamp, startAngle, sweepAngle, arg.duration) + 0.0001, radius, innerRadius));\n }\n else {\n element.setAttribute('d', getCompleteArc(_this.gauge.midPoint, linear(arg.timeStamp, startAngle, sweepAngle, arg.duration), minAngle + 0.0001, radius, innerRadius));\n }\n },\n end: function (model) {\n _this.setPointerValue(axis, pointer, end);\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n return PointerRenderer;\n}());\nexport { PointerRenderer };\n","import { createElement } from '@syncfusion/ej2-base';\nimport { calculateSum, VisibleLabels, measureText } from '../utils/helper';\nimport { Size, Rect, stringToNumber, getLabelFormat } from '../utils/helper';\nimport { axisLabelRender } from '../model/constants';\nimport { AxisRenderer } from './axis-renderer';\nimport { PointerRenderer } from './pointer-renderer';\n/**\n * Specifies the CircularGauge Axis Layout\n */\nvar labelPadding = 10;\nvar AxisLayoutPanel = /** @class */ (function () {\n function AxisLayoutPanel(gauge) {\n this.gauge = gauge;\n this.axisRenderer = new AxisRenderer(gauge);\n this.pointerRenderer = new PointerRenderer(gauge);\n }\n /**\n * Measure the calculate the axis size and radius.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.measureAxis = function (rect) {\n this.measureAxisSize(this.gauge, rect);\n this.calculateAxesRadius();\n };\n /**\n * Measure to calculate the axis radius of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateAxesRadius = function () {\n var totalRadius;\n var currentRadius;\n var rangeMaximumRadius = 0;\n for (var _i = 0, _a = this.gauge.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n totalRadius = (Math.min(axis.rect.width, axis.rect.height) / 2);\n currentRadius = axis.radius != null ? stringToNumber(axis.radius, totalRadius) : totalRadius;\n rangeMaximumRadius = Math.max.apply(Math, axis.ranges.map(function (value) {\n return value.radius ?\n (value.radius.indexOf('%') < 0 ? 100 : parseInt(value.radius, 10)) : 0;\n }));\n currentRadius = (rangeMaximumRadius > 100 && axis.radius == null) ?\n (currentRadius * 100) / rangeMaximumRadius : currentRadius;\n axis.currentRadius = currentRadius - axis.nearSize;\n axis.visibleRange.interval = this.calculateNumericInterval(axis, axis.rect);\n this.calculateVisibleLabels(axis);\n }\n };\n /**\n * Measure to calculate the axis size.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.measureAxisSize = function (gauge, rect) {\n var _this = this;\n var sum;\n this.computeSize(gauge.axes, rect);\n gauge.axes.map(function (axis, index) {\n sum = calculateSum(index, _this.farSizes.length - 1, _this.farSizes);\n axis.rect = new Rect(rect.x + sum, rect.y + sum, rect.width - (sum * 2), rect.height - (sum * 2));\n });\n };\n /**\n * Calculate the axis values of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateAxisValues = function (rect) {\n for (var _i = 0, _a = this.gauge.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n this.calculateVisibleRange(axis, rect);\n this.calculateVisibleLabels(axis);\n }\n };\n /**\n * Calculate the visible range of an axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateVisibleRange = function (axis, rect) {\n var interval = axis.majorTicks.interval;\n var minimumValue = Math.min(axis.minimum === null ? 0 : axis.minimum, axis.maximum);\n var maximumValue = Math.max(axis.minimum, axis.maximum === null ? 100 : axis.maximum);\n axis.pointers.map(function (pointer) {\n pointer.currentValue = pointer.value !== null ?\n pointer.value < minimumValue ? minimumValue : pointer.value > maximumValue ? maximumValue : pointer.value\n : minimumValue;\n minimumValue = axis.minimum === null ? Math.min(pointer.currentValue, minimumValue) : minimumValue;\n maximumValue = axis.maximum === null ? Math.max(pointer.currentValue, maximumValue) : maximumValue;\n });\n minimumValue = (minimumValue === maximumValue) ?\n (interval !== null ? minimumValue - interval : minimumValue - 1) : minimumValue;\n axis.visibleRange = { min: minimumValue, max: maximumValue, interval: interval };\n axis.visibleRange.interval = this.calculateNumericInterval(axis, rect);\n };\n /**\n * Calculate the numeric intervals of an axis range.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateNumericInterval = function (axis, rect) {\n if (axis.majorTicks.interval !== null) {\n return axis.majorTicks.interval;\n }\n var totalAngle = axis.endAngle - axis.startAngle;\n totalAngle = totalAngle <= 0 ? (totalAngle + 360) : totalAngle;\n return this.calculateNiceInterval(axis.visibleRange.max, axis.visibleRange.min, axis.currentRadius ? axis.currentRadius : (rect.width / 2), totalAngle);\n };\n /**\n * Calculate the nice interval of an axis range.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateNiceInterval = function (maxValue, minValue, radius, degree) {\n var delta = maxValue - minValue;\n var circumference = 2 * Math.PI * radius * (degree / 360);\n var desiredIntervalsCount = Math.max((circumference * ((0.533 * 3) / 100)), 1);\n var niceInterval = delta / desiredIntervalsCount;\n var minInterval = Math.pow(10, Math.floor(Math.log(niceInterval) / Math.log(10)));\n for (var _i = 0, _a = [10, 5, 2, 1]; _i < _a.length; _i++) {\n var interval = _a[_i];\n var currentInterval = minInterval * interval;\n if (desiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Calculate the visible labels of an axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateVisibleLabels = function (axis) {\n var style = axis.labelStyle;\n var customLabelFormat = style.format && style.format.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(style.format), useGrouping: this.gauge.useGroupingSeparator\n });\n var argsData;\n axis.visibleLabels = [];\n for (var i = axis.visibleRange.min, interval = axis.visibleRange.interval, max = axis.visibleRange.max; (i <= max && interval); i += interval) {\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: customLabelFormat ? style.format.replace(new RegExp('{value}', 'g'), format(i)) :\n format(i),\n value: i\n };\n this.gauge.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n axis.visibleLabels.push(new VisibleLabels(argsData.text, i));\n }\n }\n this.getMaxLabelWidth(this.gauge, axis);\n };\n /**\n * Measure the axes available size.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.computeSize = function (axes, rect) {\n var lineSize;\n var outerHeight;\n var innerHeight;\n var isMajorTickOutside;\n var isMinorTickOutside;\n var isLabelOutside;\n var axisPadding = 5;\n var majorTickOffset = 0;\n var minorTickOffset = 0;\n var labelOffset = 0;\n this.farSizes = [];\n this.calculateAxisValues(rect);\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n lineSize = (axis.lineStyle.width / 2);\n outerHeight = 0;\n innerHeight = 0;\n isMajorTickOutside = axis.majorTicks.position === 'Outside';\n majorTickOffset = axis.majorTicks.offset;\n isMinorTickOutside = axis.minorTicks.position === 'Outside';\n minorTickOffset = axis.minorTicks.offset;\n isLabelOutside = axis.labelStyle.position === 'Outside';\n labelOffset = axis.labelStyle.offset;\n // Calculating the outer space of the axis\n outerHeight += !(isMajorTickOutside && isMinorTickOutside && isLabelOutside) ? axisPadding : 0;\n outerHeight += (isMajorTickOutside ? (axis.majorTicks.height + lineSize) : 0) +\n (isLabelOutside ? (axis.maxLabelSize.height + labelPadding + labelOffset) : 0) +\n ((isMinorTickOutside && !isMajorTickOutside) ? (axis.minorTicks.height + lineSize) : 0) + lineSize;\n outerHeight += (isMajorTickOutside && isMinorTickOutside) ? Math.max(majorTickOffset, minorTickOffset) :\n (isMajorTickOutside ? majorTickOffset : isMinorTickOutside ? minorTickOffset : 0);\n // Calculating the inner space of the axis\n innerHeight += (!isMajorTickOutside ? (axis.majorTicks.height + lineSize) : 0) +\n (!isLabelOutside ? (axis.maxLabelSize.height + labelPadding + labelOffset) : 0) +\n ((!isMinorTickOutside && isMajorTickOutside) ? (axis.minorTicks.height + lineSize) : 0) + lineSize;\n innerHeight += (!isMajorTickOutside && !isMinorTickOutside) ? Math.max(majorTickOffset, minorTickOffset) :\n (!isMajorTickOutside ? majorTickOffset : !isMinorTickOutside ? minorTickOffset : 0);\n if (this.farSizes[this.farSizes.length - 1]) {\n this.farSizes[this.farSizes.length - 1] += (innerHeight + outerHeight);\n }\n axis.nearSize = outerHeight - axisPadding;\n axis.farSize = innerHeight;\n outerHeight = (this.gauge.axes.length === (this.farSizes.length + 1)) ? 0 : outerHeight;\n this.farSizes.push(outerHeight);\n }\n };\n /**\n * To render the axis element of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.renderAxes = function () {\n var _this = this;\n var gauge = this.gauge;\n var renderer = this.axisRenderer;\n var element;\n var axesElements = gauge.renderer.createGroup({\n 'id': gauge.element.id + '_AxesCollection',\n 'clip-path': 'url(#' + gauge.element.id + '_GaugeAreaClipRect_' + ')'\n });\n // To append the secondary element for annotation and tooltip\n gauge.element.appendChild(createElement('div', {\n id: gauge.element.id + '_Secondary_Element',\n styles: 'position: relative'\n }));\n gauge.axes.map(function (axis, index) {\n element = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Group_' + index\n });\n renderer.drawAxisOuterLine(axis, index, element, gauge);\n renderer.drawAxisRange(axis, index, element, gauge);\n renderer.drawAxisLine(axis, index, element, gauge);\n renderer.drawMajorTickLines(axis, index, element, gauge);\n renderer.drawMinorTickLines(axis, index, element, gauge);\n renderer.drawAxisLabels(axis, index, element, gauge);\n _this.pointerRenderer.drawPointers(axis, index, element, gauge);\n if (gauge.annotationsModule) {\n gauge.annotationsModule.renderAnnotation(axis, index);\n }\n axesElements.appendChild(element);\n });\n // For append clip rect for axes\n gauge.svgObject.appendChild(gauge.renderer.drawClipPath({\n 'id': gauge.element.id + '_GaugeAreaClipRect_',\n 'x': 0, 'y': 0,\n 'width': gauge.availableSize.width,\n 'height': gauge.availableSize.height,\n 'fill': 'transparent', 'stroke': 'transparent'\n }));\n gauge.svgObject.appendChild(axesElements);\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n */\n AxisLayoutPanel.prototype.getMaxLabelWidth = function (gauge, axis) {\n axis.maxLabelSize = new Size(0, 0);\n for (var _i = 0, _a = axis.visibleLabels; _i < _a.length; _i++) {\n var label = _a[_i];\n label.size = measureText(label.text, axis.labelStyle.font);\n axis.maxLabelSize.width = label.size.width > axis.maxLabelSize.width ?\n label.size.width : axis.maxLabelSize.width;\n axis.maxLabelSize.height = label.size.height > axis.maxLabelSize.height ?\n label.size.height : axis.maxLabelSize.height;\n }\n };\n return AxisLayoutPanel;\n}());\nexport { AxisLayoutPanel };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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/**\n * Circular Gauge\n */\nimport { Property, NotifyPropertyChanges, Component, Complex, Browser } from '@syncfusion/ej2-base';\nimport { Event, SvgRenderer, EventHandler, Collection, Internationalization } from '@syncfusion/ej2-base';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport { TextOption, textElement, RectOption, getAngleFromLocation, getValueFromAngle, removeElement } from './utils/helper';\nimport { Size, stringToNumber, measureText, Rect, GaugeLocation, getElement, getPointer, setStyles, toPixel } from './utils/helper';\nimport { getAngleFromValue, getPathArc } from './utils/helper';\nimport { Border, Margin, Font, TooltipSettings } from './model/base';\nimport { Axis } from './axes/axis';\nimport { Annotations } from './annotations/annotations';\nimport { GaugeTooltip } from './user-interaction/tooltip';\nimport { load, loaded, gaugeMouseMove, gaugeMouseLeave, gaugeMouseDown } from './model/constants';\nimport { gaugeMouseUp, dragEnd, dragMove, dragStart, resized } from './model/constants';\nimport { AxisLayoutPanel } from './axes/axis-panel';\n/**\n * Represents the Circular gauge control.\n * ```html\n *
\n * \n * ```\n */\nvar CircularGauge = /** @class */ (function (_super) {\n __extends(CircularGauge, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function CircularGauge(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To create svg object, renderer and binding events for the container.\n */\n CircularGauge.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger(load, { gauge: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.setCulture();\n this.createSvg();\n this.wireEvents();\n };\n CircularGauge.prototype.themeEffect = function () {\n if (this.theme === 'Highcontrast') {\n this.titleStyle.color = this.titleStyle.color || '#FFFFFF';\n this.setThemeColors('#FFFFFF', '#FFFFFF');\n }\n else {\n this.titleStyle.color = this.titleStyle.color || '#424242';\n this.setThemeColors('#212121', '#757575');\n }\n };\n CircularGauge.prototype.setThemeColors = function (labelcolor, others) {\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.lineStyle.color = axis.lineStyle.color || others;\n axis.labelStyle.font.color = axis.labelStyle.font.color || labelcolor;\n axis.majorTicks.color = axis.majorTicks.color || others;\n axis.minorTicks.color = axis.minorTicks.color || others;\n for (var _b = 0, _c = axis.pointers; _b < _c.length; _b++) {\n var pointer = _c[_b];\n pointer.color = pointer.color || others;\n pointer.needleTail.color = pointer.needleTail.color || others;\n pointer.needleTail.border.color = pointer.needleTail.border.color || others;\n pointer.cap.color = pointer.cap.color || others;\n pointer.cap.border.color = pointer.cap.border.color || others;\n }\n }\n };\n /**\n * To render the circular gauge elements\n */\n CircularGauge.prototype.render = function () {\n this.calculateBounds();\n this.renderElements();\n };\n /**\n * Method to unbind events for circular gauge\n */\n CircularGauge.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'contextmenu', this.gaugeRightClick);\n EventHandler.remove(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize);\n };\n /**\n * Method to bind events for circular gauge\n */\n CircularGauge.prototype.wireEvents = function () {\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'contextmenu', this.gaugeRightClick, this);\n EventHandler.add(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize.bind(this));\n /*! Apply the style for circular gauge */\n this.setGaugeStyle(this.element);\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseMove = function (e) {\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseMove);\n this.trigger(gaugeMouseMove, args);\n var dragArgs;\n var tooltip = this.tooltipModule;\n if (!args.cancel) {\n if (this.tooltip.enable && tooltip) {\n if (args.target.id.indexOf('_Pointer_') >= 0 && !this.activePointer) {\n tooltip.renderTooltip(args.target);\n }\n else {\n tooltip.ejTooltip.close();\n }\n }\n if (this.enablePointerDrag && this.activePointer) {\n dragArgs = {\n axis: this.activeAxis,\n pointer: this.activePointer,\n previousValue: this.activePointer.currentValue,\n name: dragMove,\n currentValue: null\n };\n this.pointerDrag(new GaugeLocation(args.x, args.y));\n dragArgs.currentValue = this.activePointer.currentValue;\n this.trigger(dragMove, dragArgs);\n }\n }\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseLeave = function (e) {\n this.activeAxis = null;\n this.activePointer = null;\n this.svgObject.setAttribute('cursor', 'auto');\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseLeave);\n this.trigger(gaugeMouseLeave, args);\n if (this.tooltip.enable && this.tooltipModule) {\n this.tooltipModule.ejTooltip.close();\n }\n return false;\n };\n /**\n * Handles the mouse right click.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the pointer draf while mouse move on gauge.\n * @private\n */\n CircularGauge.prototype.pointerDrag = function (location) {\n var axis = this.activeAxis;\n var range = axis.visibleRange;\n var value = getValueFromAngle(getAngleFromLocation(this.midPoint, location), range.max, range.min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise');\n if (value >= range.min && value <= range.max) {\n this.activePointer.currentValue = value;\n this.activePointer.value = value;\n this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, this.activePointer, value);\n }\n };\n /**\n * Handles the mouse down on gauge.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeOnMouseDown = function (e) {\n var currentPointer;\n var args = this.getMouseArgs(e, 'touchstart', gaugeMouseDown);\n this.trigger(gaugeMouseDown, args);\n if (!args.cancel && args.target.id.indexOf('_Pointer_') >= 0 &&\n args.target.id.indexOf(this.element.id + '_Axis_') >= 0) {\n currentPointer = getPointer(args.target.id, this);\n this.activeAxis = this.axes[currentPointer.axisIndex];\n this.activePointer = this.activeAxis.pointers[currentPointer.pointerIndex];\n this.trigger(dragStart, {\n axis: this.activeAxis,\n name: dragStart,\n pointer: this.activePointer,\n currentValue: this.activePointer.currentValue\n });\n this.svgObject.setAttribute('cursor', 'pointer');\n }\n return false;\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseEnd = function (e) {\n var args = this.getMouseArgs(e, 'touchend', gaugeMouseUp);\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || e.type === 'touchend';\n var tooltipInterval;\n var tooltip = this.tooltipModule;\n this.trigger(gaugeMouseUp, args);\n if (this.activeAxis && this.activePointer) {\n this.trigger(dragEnd, {\n name: dragEnd,\n axis: this.activeAxis,\n pointer: this.activePointer,\n currentValue: this.activePointer.currentValue\n });\n if (!args.cancel && isTouch && this.tooltip.enable && tooltip) {\n if (args.target.id.indexOf('_Pointer_') >= 0) {\n tooltip.renderTooltip(args.target);\n tooltipInterval = setTimeout(function () {\n tooltip.ejTooltip.close();\n }, 2000);\n }\n }\n this.activeAxis = null;\n this.activePointer = null;\n }\n this.svgObject.setAttribute('cursor', 'auto');\n return false;\n };\n /**\n * Handles the mouse event arguments.\n * @return {IMouseEventArgs}\n * @private\n */\n CircularGauge.prototype.getMouseArgs = function (e, type, name) {\n var rect = this.element.getBoundingClientRect();\n var location = new GaugeLocation(-rect.left, -rect.top);\n var isTouch = (e.type === type);\n location.x += isTouch ? e.changedTouches[0].clientX : e.clientX;\n location.y += isTouch ? e.changedTouches[0].clientY : e.clientY;\n return {\n cancel: false, name: name,\n x: location.x, y: location.y,\n target: isTouch ? e.target : e.target\n };\n };\n /**\n * Handles the gauge resize.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeResize = function (e) {\n var _this = this;\n var args = {\n gauge: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n this.animatePointer = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-circulargauge')) {\n this.resizeTo = setTimeout(function () {\n _this.createSvg();\n _this.calculateBounds();\n _this.renderElements();\n args.currentSize = _this.availableSize;\n _this.trigger(resized, args);\n }, 500);\n }\n return false;\n };\n /**\n * Applying styles for circular gauge elements\n */\n CircularGauge.prototype.setGaugeStyle = function (element) {\n element.style.touchAction = this.enablePointerDrag ? 'none' : 'element';\n element.style.msTouchAction = this.enablePointerDrag ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Method to set culture for gauge\n */\n CircularGauge.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Methods to create svg element for circular gauge.\n */\n CircularGauge.prototype.createSvg = function () {\n this.removeSvg();\n this.calculateSvgSize();\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To Remove the SVG from circular gauge.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /**\n * To initialize the circular gauge private variable.\n * @private\n */\n CircularGauge.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.gaugeAxisLayoutPanel = new AxisLayoutPanel(this);\n this.animatePointer = true;\n };\n /**\n * To calculate the size of the circular gauge element.\n */\n CircularGauge.prototype.calculateSvgSize = function () {\n var containerWidth = this.element.offsetWidth;\n var containerHeight = this.element.offsetHeight;\n var width = stringToNumber(this.width, containerWidth) || containerWidth || 600;\n var height = stringToNumber(this.height, containerHeight) || containerHeight || 450;\n this.availableSize = new Size(width, height);\n };\n /**\n * Method to calculate the availble size for circular gauge.\n */\n CircularGauge.prototype.calculateBounds = function () {\n var padding = 5;\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n if (this.title) {\n titleHeight = measureText(this.title, this.titleStyle).height + padding;\n }\n var top = margin.top + titleHeight + this.border.width;\n var left = margin.left + this.border.width;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n var radius = Math.min(width, height) / 2;\n var rect = new Rect((left + (width / 2) - radius), (top + (height / 2) - radius), radius * 2, radius * 2);\n var centerX = this.centerX !== null ?\n stringToNumber(this.centerX, this.availableSize.width) : rect.x + (rect.width / 2);\n var centerY = this.centerY !== null ?\n stringToNumber(this.centerY, this.availableSize.height) : rect.y + (rect.height / 2);\n this.midPoint = new GaugeLocation(centerX, centerY);\n this.gaugeAxisLayoutPanel.measureAxis(rect);\n };\n /**\n * To render elements for circular gauge\n */\n CircularGauge.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.gaugeAxisLayoutPanel.renderAxes();\n this.element.appendChild(this.svgObject);\n this.trigger(loaded, { gauge: this });\n };\n /**\n * Method to render the title for circular gauge.\n */\n CircularGauge.prototype.renderTitle = function () {\n if (this.title) {\n var size = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_CircularGaugeTitle', this.availableSize.width / 2, this.margin.top + 3 * (size.height / 4), 'middle', this.title);\n var element = textElement(options, this.titleStyle, this.titleStyle.color, this.svgObject, '');\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n };\n /**\n * Method to render the border for circular gauge.\n */\n CircularGauge.prototype.renderBorder = function () {\n var borderWidth = this.border.width;\n if (borderWidth > 0 || (this.background !== null && this.background !== 'transparent')) {\n this.svgObject.appendChild(this.renderer.drawRectangle(new RectOption(this.element.id + '_CircularGaugeBorder', this.background, this.border, null, new Rect(borderWidth / 2, borderWidth / 2, this.availableSize.width - borderWidth, this.availableSize.height - borderWidth))));\n }\n };\n /**\n * Method to set the pointer value dynamically for circular gauge.\n */\n CircularGauge.prototype.setPointerValue = function (axisIndex, pointerIndex, value) {\n var _this = this;\n var axis = this.axes[axisIndex];\n var pointer = axis.pointers[pointerIndex];\n var pointerRadius = pointer.currentRadius;\n var enableAnimation = pointer.animation.enable;\n value = value < axis.visibleRange.min ? axis.visibleRange.min : value;\n value = value > axis.visibleRange.max ? axis.visibleRange.max : value;\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n setStyles(element, pointer.color, pointer.border);\n if (enableAnimation) {\n _this.gaugeAxisLayoutPanel.pointerRenderer.performRangeBarAnimation(element, pointer.currentValue, value, axis, pointer, pointerRadius, (pointerRadius - pointer.pointerWidth));\n }\n else {\n _this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, pointer, value);\n }\n }\n else {\n if (element.id.indexOf('_Pointer_NeedleCap_') >= 0) {\n setStyles(element, pointer.cap.color, pointer.cap.border);\n }\n else if (element.id.indexOf('_Pointer_NeedleTail_') >= 0) {\n setStyles(element, pointer.needleTail.color, pointer.needleTail.border);\n }\n else if (element.id.indexOf('_Pointer_NeedleRect_') >= 0) {\n setStyles(element, 'transparent', { color: 'transparent', width: 0 });\n }\n else {\n setStyles(element, pointer.color, pointer.border);\n }\n if (enableAnimation) {\n _this.gaugeAxisLayoutPanel.pointerRenderer.performNeedleAnimation(element, pointer.currentValue, value, axis, pointer, pointerRadius, (pointerRadius - pointer.pointerWidth));\n }\n else {\n _this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, pointer, value);\n }\n }\n });\n pointer.currentValue = value;\n pointer.value = value;\n };\n /**\n * Method to set the annotation content dynamically for circular gauge.\n */\n CircularGauge.prototype.setAnnotationValue = function (axisIndex, annotationIndex, content) {\n var isElementExist = getElement(this.element.id + '_Annotations_' + axisIndex) !== null;\n var element = getElement(this.element.id + '_Annotations_' + axisIndex) ||\n createElement('div', {\n id: this.element.id + '_Annotations_' + axisIndex\n });\n var annotation = this.axes[axisIndex].annotations[annotationIndex];\n if (content !== null) {\n removeElement(this.element.id + '_Axis_' + axisIndex + '_Annotation_' + annotationIndex);\n annotation.content = content;\n this.annotationsModule.createTemplate(element, annotationIndex, axisIndex);\n if (!isElementExist) {\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n }\n };\n /**\n * Method to set the range values dynamically for circular gauge.\n */\n CircularGauge.prototype.setRangeValue = function (axisIndex, rangeIndex, start, end) {\n var element = getElement(this.element.id + '_Axis_' + axisIndex + '_Range_' + rangeIndex);\n var axis = this.axes[axisIndex];\n var range = axis.ranges[rangeIndex];\n var axisRange = axis.visibleRange;\n var isClockWise = axis.direction === 'ClockWise';\n var startValue = Math.min(Math.max(start, axisRange.min), end);\n var endValue = Math.min(Math.max(start, end), axisRange.max);\n var startAngle = getAngleFromValue(startValue, axisRange.max, axisRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = getAngleFromValue(endValue, axisRange.max, axisRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var startWidth;\n if (range.startWidth.length > 0) {\n startWidth = toPixel(range.startWidth, range.currentRadius);\n }\n else {\n startWidth = range.startWidth;\n }\n var endWidth;\n if (range.endWidth.length > 0) {\n endWidth = toPixel(range.endWidth, range.currentRadius);\n }\n else {\n endWidth = range.endWidth;\n }\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n endWidth = isClockWise ? endWidth : [startWidth, startWidth = endWidth][0];\n element.setAttribute('d', getPathArc(this.midPoint, Math.round(startAngle), Math.round(endAngle), range.currentRadius, startWidth, endWidth));\n setStyles(element, (range.color ? range.color : range.rangeColor), {\n color: (range.color ? range.color : range.rangeColor),\n width: 0\n });\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @member of Circular-Gauge\n */\n CircularGauge.prototype.destroy = function () {\n this.unWireEvents();\n this.removeSvg();\n _super.prototype.destroy.call(this);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n CircularGauge.prototype.requiredModules = function () {\n var modules = [];\n var annotationEnable = false;\n var axes = this.axes;\n axes.map(function (axis) {\n axis.annotations.map(function (annotation) {\n annotationEnable = annotationEnable || annotation.content !== null;\n });\n });\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this, GaugeTooltip]\n });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n CircularGauge.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n CircularGauge.prototype.onPropertyChanged = function (newProp, oldProp) {\n // property method calculated\n var renderer = false;\n var refreshBounds = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n case 'width':\n case 'centerX':\n case 'centerY':\n case 'margin':\n this.createSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = (newProp.title === '' || oldProp.title === '');\n renderer = !(newProp.title === '' || oldProp.title === '');\n break;\n case 'titleStyle':\n if (newProp.titleStyle && newProp.titleStyle.size) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'background':\n renderer = true;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderElements();\n }\n if (refreshBounds) {\n this.removeSvg();\n this.calculateBounds();\n this.renderElements();\n }\n };\n /**\n * Get component name for circular gauge\n * @private\n */\n CircularGauge.prototype.getModuleName = function () {\n return 'circulargauge';\n };\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"height\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], CircularGauge.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], CircularGauge.prototype, \"background\", void 0);\n __decorate([\n Property('')\n ], CircularGauge.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '15px', color: null }, Font)\n ], CircularGauge.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Margin)\n ], CircularGauge.prototype, \"margin\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], CircularGauge.prototype, \"axes\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], CircularGauge.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], CircularGauge.prototype, \"enablePointerDrag\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"centerX\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"centerY\", void 0);\n __decorate([\n Property('Material')\n ], CircularGauge.prototype, \"theme\", void 0);\n __decorate([\n Property(false)\n ], CircularGauge.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], CircularGauge.prototype, \"tabIndex\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragMove\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragEnd\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseMove\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseLeave\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseDown\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseUp\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"resized\", void 0);\n CircularGauge = __decorate([\n NotifyPropertyChanges\n ], CircularGauge);\n return CircularGauge;\n}(Component));\nexport { CircularGauge };\n","import * as index from '@syncfusion/ej2-circulargauge';\nindex.CircularGauge.Inject( index.GaugeTooltip,index.Annotations);\nexport * from '@syncfusion/ej2-circulargauge';\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, createElement, prepend, isNullOrUndefined, detach, getValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, rippleEffect, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { DataManager, Query } 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 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) {\n var value = null;\n var dataSource = this.listData;\n var fields = this.fields;\n var type = this.typeOfData(dataSource).typeof;\n if (ignoreCase) {\n if (type === 'string' || type === 'number') {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n if (!isNullOrUndefined(item) && String(item).toLowerCase() === text.toString().toLowerCase()) {\n value = type === 'string' ? String(item) : this.getFormattedValue(String(item));\n break;\n }\n }\n }\n else {\n dataSource.filter(function (item) {\n var itemText = getValue(fields.text, item).toString();\n if (itemText.toLowerCase() === text.toLowerCase()) {\n value = getValue(fields.value, item);\n }\n });\n }\n }\n else {\n if (type === 'string' || type === 'number') {\n for (var _a = 0, dataSource_2 = dataSource; _a < dataSource_2.length; _a++) {\n var item = dataSource_2[_a];\n if (!isNullOrUndefined(item) && String(item) === text.toString()) {\n value = type === 'string' ? text : this.getFormattedValue(text);\n break;\n }\n }\n }\n else {\n dataSource.filter(function (item) {\n if (getValue(fields.text, item) === text) {\n value = getValue(fields.value, item);\n }\n });\n }\n }\n return value;\n };\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 var dataSource = this.listData;\n var fields = this.fields;\n var type = this.typeOfData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n for (var _i = 0, dataSource_3 = dataSource; _i < dataSource_3.length; _i++) {\n var item = dataSource_3[_i];\n if (!isNullOrUndefined(item) && item.toString() === value.toString()) {\n text = item.toString();\n break;\n }\n }\n }\n else {\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && itemValue.toString() === value.toString()) {\n text = getValue(fields.text, item);\n }\n });\n }\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 }\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 if (this.enabled) {\n this.element.setAttribute('aria-disabled', 'false');\n }\n else {\n this.element.setAttribute('aria-disabled', 'true');\n }\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 };\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 this.showSpinner();\n if (dataSource instanceof DataManager) {\n this.isRequested = true;\n this.trigger('actionBegin');\n dataSource.executeQuery(this.getQuery(query)).then(function (e) {\n _this.trigger('actionComplete', e);\n var listItems = e.result;\n ulElement = _this.renderItems(listItems, fields);\n _this.onActionComplete(ulElement, listItems, e);\n _this.isRequested = false;\n _this.hideSpinner();\n }).catch(function (e) {\n _this.isRequested = false;\n _this.onActionFailure(e);\n _this.hideSpinner();\n });\n }\n else {\n var dataManager = new DataManager(dataSource);\n var listItems = (this.getQuery(query)).executeLocal(dataManager);\n ulElement = this.renderItems(listItems, fields);\n this.onActionComplete(ulElement, listItems);\n this.hideSpinner();\n }\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 addClass([focusItem], 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 dataSource = ListBase.groupDataSource(dataSource, fields.properties);\n }\n addClass([this.list], dropDownBaseClasses.grouping);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n var options = this.listOption(dataSource, fields);\n return ListBase.createList(dataSource, options, true);\n };\n ;\n DropDownBase.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var options = (fields.text !== null || fields.value !== null) ? {\n fields: fields.properties,\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 = 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.display = 'block';\n break;\n }\n else {\n this.fixedHeaderElement.style.display = '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 dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n ulElement = this.templateListItem(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.itemTemplate, dataSource, fields.properties, option);\n };\n DropDownBase.prototype.typeOfData = function (items) {\n var item = { typeof: null, item: null };\n for (var i = 0; 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 var fields = this.fields;\n if (this.fields.value && !this.fields.text) {\n this.fields.text = this.fields.value;\n }\n else if (!fields.value && 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 (prop) {\n this.resetList(this.dataSource);\n };\n DropDownBase.prototype.setUpdateInitial = function (props, newProp) {\n if (!isNullOrUndefined(newProp.fields)) {\n this.setFields();\n }\n for (var j = 0; props.length > j; j++) {\n if (newProp[props[j]]) {\n this.updateDataSource(props[j]);\n }\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 this.setUpdateInitial(['query', 'sortOrder', 'dataSource', '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 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 = 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 = document.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 var liCollections = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var li = createElement('li', { className: dropDownBaseClasses.li, id: 'option-add-' + i });\n li.setAttribute('data-value', getValue(fields.value, item));\n li.setAttribute('role', 'option');\n li.appendChild(document.createTextNode(getValue(fields.text, item)));\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.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 var type = this.typeOfData(this.listData).typeof;\n if (type === 'string' || type === 'number') {\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 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 DropDownBase = __decorate([\n NotifyPropertyChanges\n ], DropDownBase);\n return DropDownBase;\n}(Component));\nexport { DropDownBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, createElement, append } 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};\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 return _super.call(this, options, element) || 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.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 };\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, property) {\n this.resetSelection();\n var dataItem = this.getItemData();\n if (this.previousValue === dataItem.value) {\n return;\n }\n this.onChangeEvent(e);\n };\n DropDownList.prototype.resetSelection = function () {\n if (this.list) {\n if (this.allowFiltering && this.getModuleName() !== 'autocomplete') {\n this.onActionComplete(this.actionCompleteData.ulElement.cloneNode(true), this.actionCompleteData.list);\n }\n this.resetFocusElement();\n }\n this.hiddenElement.innerHTML = '';\n this.inputElement.value = '';\n this.value = null;\n this.text = null;\n this.index = null;\n this.activeIndex = null;\n this.item = null;\n this.itemData = 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', 'name', 'placeholder', 'required'];\n 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 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 };\n DropDownList.prototype.focusOutAction = function () {\n this.isInteracted = false;\n this.focusOut();\n this.onFocusOut();\n };\n DropDownList.prototype.onFocusOut = function () {\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.inputWrapper.clearButton) {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n this.trigger('blur');\n };\n DropDownList.prototype.onFocus = function () {\n if (!this.isInteracted) {\n this.isInteracted = true;\n this.trigger('focus');\n }\n this.updateIconState();\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 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 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 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 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 });\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();\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();\n this.floatLabelChange();\n this.queryString = this.inputElement.value.trim() === '' ? null : this.inputElement.value;\n this.isDropDownClick = true;\n this.showPopup();\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 this.item = li;\n this.itemData = this.getDataByValue(value);\n if (!this.initial && !preventSelect) {\n this.isSelected = true;\n var eventArgs = {\n e: e,\n item: this.item,\n itemData: this.itemData,\n isInteracted: e ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\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 };\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.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 this.updateSelectedItem(li, e, false);\n }\n if (this.list) {\n this.removeHover();\n }\n this.selectedLI = li;\n if (this.setValue(e)) {\n return;\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.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 = 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 = {};\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.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 this.setHiddenValue();\n var eventArgs = {\n e: eve,\n item: this.item,\n itemData: this.itemData,\n isInteracted: eve ? true : false,\n value: this.value\n };\n this.trigger('change', eventArgs);\n }\n };\n DropDownList.prototype.setHiddenValue = function () {\n if (!isNullOrUndefined(this.value)) {\n this.hiddenElement.innerHTML = '';\n }\n else {\n this.hiddenElement.innerHTML = '';\n }\n };\n /**\n * Filter bar implementation\n */\n DropDownList.prototype.onFilterUp = function (e) {\n this.isValidKey = e.keyCode === 40 || e.keyCode === 38 || this.isValidKey;\n if (this.isValidKey) {\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 };\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 if (this.isFiltering()) {\n var eventArgs = {\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n _this.isCustomFilter = true;\n _this.filteringAction(dataSource, query, fields);\n },\n baseEventArgs: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs);\n if (!this.isCustomFilter) {\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 this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list);\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 = createElement('span', {\n className: dropDownListClasses.filterParent\n });\n this.filterInput = 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 });\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) {\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 this.actionCompleteData.list.push(item);\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 popupEle = createElement('div', { id: this.element.id + '_popup', className: 'e-ddl e-popup' });\n var searchBox = this.setSearchBox(popupEle);\n this.listHeight = formatUnit(this.popupHeight);\n if (this.headerTemplate) {\n var compiledString = void 0;\n this.header = document.createElement('div');\n addClass([this.header], dropDownListClasses.header);\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 append([this.header], 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 _b = 0, scrollParentElements_1 = scrollParentElements; _b < scrollParentElements_1.length; _b++) {\n var element = scrollParentElements_1[_b];\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 addClass([this.inputWrapper.container], [dropDownListClasses.iconAnimation]);\n var animModel = { name: 'FadeIn', duration: 100 };\n this.beforePopupOpen = true;\n var eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.popupObj.show(new Animation(animModel));\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 eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n if (this.getModuleName() === 'autocomplete') {\n this.rippleFun();\n }\n if (this.isPopupOpen) {\n this.popupObj.hide(new Animation(animModel));\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 = 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 });\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 var name = this.element.getAttribute('name') ? this.element.getAttribute('name') : this.element.getAttribute('id');\n this.hiddenElement = createElement('select', {\n attrs: { 'name': name, 'aria-hidden': 'true' }, styles: 'display:none'\n });\n prepend([this.hiddenElement], this.inputWrapper.container);\n this.element.removeAttribute('name');\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 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 };\n ;\n DropDownList.prototype.setFooterTemplate = function (popupEle) {\n var compiledString;\n if (this.footer) {\n this.footer.innerHTML = '';\n }\n else {\n this.footer = document.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.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 (prop) {\n this.clear(null, prop);\n this.resetList(this.dataSource);\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n DropDownList.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.setUpdateInitial(['query', 'dataSource'], 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 '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 Input.setPlaceholder(newProp.filterBarPlaceholder, this.filterInput);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.inputElement);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.element.classList.add(newProp.cssClass);\n }\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 return;\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.isValidLI(li)) {\n this.setSelection(li, null);\n }\n else {\n this.setOldText(oldProp.text);\n }\n }\n break;\n case 'value':\n if (newProp.value === null) {\n this.clear();\n return;\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 item = this.getElementByValue(newProp.value);\n if (this.isValidLI(item)) {\n this.setSelection(item, null);\n }\n else {\n this.setOldValue(oldProp.value);\n }\n }\n break;\n case 'index':\n if (newProp.index === null) {\n this.clear();\n return;\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.isValidLI(element)) {\n this.setSelection(element, null);\n }\n else {\n this.index = oldProp.index;\n }\n }\n break;\n case 'footerTemplate':\n if (this.popupObj) {\n this.setFooterTemplate(this.popupObj.element);\n }\n break;\n case 'floatLabelType':\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, newProp.floatLabelType, this.placeholder);\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 /**\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.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_1 = this;\n window.onpopstate = function () {\n proxy_1.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 () {\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();\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 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 ['readonly', 'aria-disabled', 'aria-placeholder', 'placeholder'].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 __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, \"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","var __extends = (this && this.__extends) || (function () {\n var 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 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 } 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 */\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.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 ComboBox.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = 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 });\n showSpinner(this.spinnerElement);\n }\n };\n ComboBox.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n this.spinnerElement.innerHTML = '';\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\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.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);\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 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 this.setUpdateInitial(['query', 'dataSource'], newProp);\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 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 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 _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 (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 = 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 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, addClass, EventHandler, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { Event, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, attributes, NotifyPropertyChanges, Browser } 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';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n/* tslint:enable */\nvar SPINNER_CLASS = 'e-atc-spinner-icon';\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 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('', this.filterType, this.queryString, this.ignoreCase, this.ignoreAccent);\n }\n else {\n var mapping = !isNullOrUndefined(this.fields.value) ? this.fields.value : '';\n filterQuery.where(mapping, this.filterType, this.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.isSelectCustom = false;\n if (isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this, true);\n }\n var isDownUpKey = e.keyCode === 40 || e.keyCode === 38;\n this.queryString = this.filterInput.value;\n if (isDownUpKey) {\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 || this.isFiltered)) {\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) || 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.queryString !== null && this.queryString !== '' && this.highlight) {\n highlightSearch(this.list, this.queryString, this.ignoreCase, this.filterType);\n }\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.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = this.inputWrapper.buttons[0] || this.inputWrapper.clearButton ||\n Input.appendSpan('e-input-group-icon ' + SPINNER_CLASS, this.inputWrapper.container);\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n });\n showSpinner(this.spinnerElement);\n }\n };\n AutoComplete.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 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 if (this.highlight) {\n highlightSearch(this.list, this.queryString, this.ignoreCase, this.filterType);\n }\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.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 this.setUpdateInitial(['query', 'dataSource'], newProp);\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);\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","var __extends = (this && this.__extends) || (function () {\n var 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 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 } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } 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 { createElement, 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 } from '@syncfusion/ej2-data';\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 e-icon';\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-icon 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 destroy = 'destroy';\nvar dropdownIcon = 'e-input-group-icon e-ddl-icon';\nvar iconAnimation = 'e-icon-anim';\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.mobFilter = true;\n _this.isFiltered = false;\n _this.isValidKey = false;\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 case 'name':\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n break;\n default:\n var defaultAttr = ['title', 'id', 'required'];\n if (defaultAttr.indexOf(htmlAttr) > -1) {\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.overAllWrapper.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 eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var animModel = { name: 'FadeIn', duration: 100 };\n this.focusAtFirstListItem();\n document.body.appendChild(this.popupObj.element);\n this.refreshPopup();\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], [iconAnimation]);\n }\n this.popupObj.show(animModel);\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 this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\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 element = this.list.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\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 attributes(this.inputElement, this.getAriaAttributes());\n var li;\n li = this.list.querySelectorAll('li.' + dropDownBaseClasses.li);\n var temp = li.length;\n if (li && li.length) {\n while (temp > 0) {\n if (li[temp - 1].getAttribute('aria-selected') !== 'true') {\n li[temp - 1].setAttribute('aria-selected', 'false');\n }\n temp--;\n }\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 this.removeValue(value, e);\n this.removeChipSelection();\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n if (this.allowFiltering && this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n this.refreshSelection();\n }\n this.focusAtLastListItem(value);\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.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (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 && this.allowCustomValue && this.inputFocus && !this.allowFiltering) {\n this.checkForCustomValue(this.tempQuery, this.fields);\n return;\n }\n if (this.value && this.value.length) {\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 this.initialValueUpdate();\n this.initialUpdate();\n this.refreshPlaceHolder();\n this.updateValueState(null, this.value, null);\n }\n this.renderPopup();\n this.refreshPopup();\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; this.value[index]; index++) {\n value = this.value[index];\n element = this.ulElement.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 && 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.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.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.showSelectAll) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'check' });\n }\n if ((searchCount !== searchActiveCount) && 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) {\n if (this.targetElement() !== '') {\n this.showPopup();\n }\n else {\n this.hidePopup();\n }\n }\n };\n MultiSelect.prototype.KeyUp = function (e) {\n var _this = this;\n this.isValidKey = e.keyCode === 8 || this.isValidKey;\n if (this.isValidKey) {\n this.isValidKey = false;\n this.expandTextbox();\n switch (e.keyCode) {\n default:\n if (!this.isPopupOpen() && this.openOnClick) {\n this.showPopup();\n }\n this.openClick(e);\n if (this.liCollections) {\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.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, true, 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.getBoundingClientRect().height * activeElement.index;\n }\n else {\n this.removeFocus();\n }\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(), true, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.targetElement(), true, 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 if (this.targetElement().trim() === '') {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\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 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 };\n MultiSelect.prototype.checkForCustomValue = function (query, fields) {\n var dataChecks = !this.getValueByText(this.inputElement.value, this.ignoreCase);\n if (this.allowCustomValue && dataChecks) {\n var text = this.fields.text;\n var value = this.fields.value;\n var data = {};\n var customData = (!isNullOrUndefined(this.mainData) && this.mainData.length > 0) ?\n this.mainData[0] : this.mainData;\n if (typeof (customData) !== 'string') {\n var dataSource = Object.keys(customData);\n for (var i = 0; i < dataSource.length; i++) {\n data[dataSource[i]] = '';\n }\n data[value] = data[text] = this.inputElement.value;\n var tempData = JSON.parse(JSON.stringify(this.listData));\n tempData.splice(0, 0, data);\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 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.inputElement.focus();\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() && this.openOnClick) {\n this.showPopup();\n }\n else {\n this.hidePopup();\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 = !isNullOrUndefined(eve) && eve.relatedTarget;\n if (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.scrollFocusStatus) {\n eve.preventDefault();\n this.inputElement.focus();\n this.scrollFocusStatus = false;\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 this.makeTextBoxEmpty();\n }\n this.trigger('blur');\n if (Browser.isDevice && this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.removeChipFocus();\n }\n this.removeChipSelection();\n this.refreshInputHight();\n this.refreshPlaceHolder();\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.validateValues(newValue, oldValue)) {\n var eventArgs = {\n e: event,\n oldValue: oldVal,\n value: newVal,\n isInteracted: event ? true : false\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.getBoundingClientRect().height / parseInt(height, 10));\n };\n MultiSelect.prototype.pageUpSelection = function (steps) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-reorder-hide)');\n var previousItem;\n if (this.mode === 'CheckBox') {\n previousItem = steps >= 0 ? collection[steps + 1] : collection[0];\n }\n else {\n previousItem = steps >= 0 ? this.liCollections[steps + 1] : this.liCollections[0];\n }\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(.e-reorder-hide)');\n var previousItem;\n if (this.mode === 'CheckBox') {\n previousItem = steps <= collection.length ? collection[steps - 1] : collection[collection.length - 1];\n }\n else {\n previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];\n }\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n MultiSelect.prototype.focusIn = function () {\n if (this.enabled && !this.readonly) {\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 this.trigger('focus');\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\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 if (!Browser.isIE) {\n this.popupObj.show();\n }\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 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 e.preventDefault();\n this.moveByList(-1);\n this.updateAriaAttribute();\n break;\n case 40:\n e.preventDefault();\n this.moveByList(1);\n this.updateAriaAttribute();\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 if (this.mode === 'CheckBox') {\n e.preventDefault();\n this.selectByKey(e);\n }\n return;\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 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);\n break;\n case 39://right arrow \n e.preventDefault();\n this.moveBy(1);\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 this.expandTextbox();\n this.refreshPopup();\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.getBoundingClientRect().height;\n var nextBottom = selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - this.list.scrollTop);\n boxRange = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.getBoundingClientRect().height : 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.getBoundingClientRect().height > 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.getBoundingClientRect().height - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.getBoundingClientRect().height : nextOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - 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.getBoundingClientRect().height > boxRange)) {\n this.list.scrollTop = selectedLI.offsetTop - (this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.getBoundingClientRect().height : 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.updateValueState(e, this.value, this.tempValues);\n this.refreshInputHight();\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.makeTextBoxEmpty();\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(li.getAttribute('data-Value'));\n }\n this.refreshPopup();\n if (this.value && this.value.length) {\n this.removeListSelection();\n this.refreshSelection();\n }\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 = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\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 temp = selectedElem.nextElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp);\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) {\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]);\n }\n }\n else {\n if (position < 0) {\n temp = selectedElem.previousElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp);\n }\n }\n else {\n temp = selectedElem.nextElementSibling;\n this.removeChipSelection();\n if (temp !== null) {\n this.addChipSelection(temp);\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);\n this.trigger('chipSelection', e);\n }\n };\n MultiSelect.prototype.removeChipSelection = function () {\n if (this.chipCollectionWrapper) {\n this.removeChipFocus();\n }\n };\n MultiSelect.prototype.addChipSelection = function (element) {\n addClass([element], CHIP_SELECTED);\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 value = this.getFormattedValue(element.getAttribute('data-value'));\n if (this.isPopupOpen() && this.mode !== 'CheckBox') {\n this.hidePopup();\n }\n this.removeValue(value, e);\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n if (!this.inputFocus) {\n this.inputElement.focus();\n }\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) {\n if (this.value && this.value.length) {\n this.inputElement.placeholder = '';\n }\n else {\n this.inputElement.placeholder = this.placeholder;\n }\n }\n this.expandTextbox();\n };\n MultiSelect.prototype.removeValue = function (value, eve) {\n var index = this.value.indexOf(this.getFormattedValue(value));\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 eventArgs = {\n e: eve,\n item: element,\n itemData: this.getDataByValue(value),\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 element.setAttribute('aria-selected', 'false');\n removeClass([element], className);\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.showSelectAll) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\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 }\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 }\n else {\n element2.setAttribute('aria-selected', 'true');\n addClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\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 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) {\n if (this.initStatus && !isNotTrigger) {\n var eventArgs = {\n e: eve,\n item: element,\n itemData: this.getDataByValue(value),\n isInteracted: eve ? true : false\n };\n this.trigger('select', eventArgs);\n }\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 = createElement('span', {\n className: CHIP,\n attrs: { 'data-value': value, 'title': data }\n });\n var chipContent = createElement('span', { className: CHIP_CONTENT });\n var chipClose = createElement('span', { className: CHIP_CLOSE });\n if (this.mainData) {\n itemData = this.getDataByValue(value);\n }\n if (this.valueTemplate && 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.getBoundingClientRect().width) * 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 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 document.body.appendChild(this.popupWrapper);\n var overAllHeight = parseInt(this.popupHeight, 10);\n this.popupWrapper.style.visibility = 'hidden';\n if (this.headerTemplate) {\n var compiledString = void 0;\n this.header = document.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 overAllHeight -= this.header.getBoundingClientRect().height;\n }\n append([this.list], this.popupWrapper);\n if (this.footerTemplate) {\n var compiledString = void 0;\n this.footer = document.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 overAllHeight -= this.footer.getBoundingClientRect().height;\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) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n }\n if (this.mode === 'CheckBox') {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n popupElement: this.popupWrapper\n };\n this.notify('searchBox', args);\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.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.ClearAll = function (e) {\n if (this.enabled && !this.readonly) {\n var temp = void 0;\n var tempValues = this.value ? this.value.slice() : [];\n for (temp = this.value[0]; this.value.length !== 0; temp = this.value[0]) {\n this.removeValue(temp, e);\n }\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 this.removeFocus();\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.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 EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'blur', this.onBlur, this);\n EventHandler.add(this.componentWrapper, 'mousemove', this.mouseIn, this);\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.isFirstClick = false;\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; 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.text = text.toString();\n if (delim) {\n this.delimiterWrapper.innerHTML = data;\n }\n this.listData = tempData;\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; this.value[index]; index++) {\n value = this.value[index];\n element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n if (element && (element.getAttribute('aria-selected') !== 'true')) {\n text = this.getTextByValue(value);\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 }\n else {\n this.updateDelimeter(this.delimiterChar);\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) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n var text = this.getTextByValue(value);\n this.removeHover();\n if (!this.value || this.value.indexOf(value) === -1) {\n this.dispatchSelect(value, e, li, (li.getAttribute('aria-selected') === 'true'));\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(this.getDataByValue(value));\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);\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 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 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 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 this.focusAtLastListItem(li.getAttribute('data-value'));\n this.refreshSelection();\n }\n else {\n this.makeTextBoxEmpty();\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\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 this.makeTextBoxEmpty();\n }\n else {\n e.preventDefault();\n }\n }\n else {\n e.preventDefault();\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.wireListEvents = function () {\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 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) {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.showOverAllClear = function () {\n if (this.value && this.value.length) {\n this.overAllClear.style.display = '';\n }\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 = createElement('span', { className: CLOSEICON_CLASS + ' ' + SPINNER_CLASS });\n this.componentWrapper.appendChild(this.spinnerElement);\n }\n addClass([this.spinnerElement], DISABLE_ICON);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n });\n showSpinner(this.spinnerElement);\n }\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 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 this.viewWrapper.innerHTML = '';\n var l10nLocale = {\n noRecordsTemplate: 'No Records Found',\n actionFailureTemplate: 'The Request Failed',\n overflowCountTemplate: '+${count} more..'\n };\n var l10n = new L10n('dropdowns', l10nLocale, this.locale);\n var remainContent = l10n.getConstant('overflowCountTemplate');\n var raminElement = createElement('span', {\n className: REMAIN_WRAPPER\n });\n var compiledString = compile(remainContent);\n raminElement.appendChild(compiledString({ 'count': this.value.length })[0]);\n this.viewWrapper.appendChild(raminElement);\n var remainSize = raminElement.getBoundingClientRect().width;\n remove(raminElement);\n this.viewWrapper.innerHTML = '';\n var inputleng = this.searchWrapper.getBoundingClientRect().width;\n var overAllContainer = parseInt(window.getComputedStyle(this.componentWrapper).width, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingLeft, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingRight, 10);\n var remainValue = void 0;\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; this.value[index]; index++) {\n data += (index === 0) ? '' : this.delimiterChar + ' ';\n if (this.mainData && this.mainData.length) {\n if (this.mode === 'CheckBox') {\n remainValue = 110;\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 remainValue = 0;\n temp = this.getTextByValue(this.value[index]);\n }\n }\n else {\n temp = this.value[index];\n }\n data += temp;\n temp = this.viewWrapper.innerHTML;\n this.viewWrapper.innerHTML = data;\n wrapperleng = this.viewWrapper.getBoundingClientRect().width;\n if ((wrapperleng) > overAllContainer - remainValue) {\n if (tempData !== undefined) {\n temp = tempData;\n index = tempIndex + 1;\n }\n this.viewWrapper.innerHTML = temp;\n remaining = this.value.length - index;\n break;\n }\n else if ((wrapperleng + remainSize) <= 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 raminElement.innerHTML = '';\n raminElement.appendChild(compiledString({ 'count': remaining })[0]);\n this.viewWrapper.appendChild(raminElement);\n }\n }\n else {\n this.viewWrapper.innerHTML = '';\n this.viewWrapper.style.display = 'none';\n }\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 EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.KeyUp);\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) {\n var li;\n li = this.list.querySelectorAll(state ?\n 'li[aria-selected=\"false\"]: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], null);\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.updateValueState(null, this.value, this.tempValues);\n this.refreshInputHight();\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 this.resetList(this.dataSource);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.onLoadSelect = function () {\n this.setDynValue = true;\n this.renderPopup();\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 this.setUpdateInitial(['query', 'dataSource'], 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 'dataSource':\n break;\n case 'htmlAttributes':\n this.updateHTMLAttribute();\n break;\n case 'showClearButton':\n this.updateClearButton(newProp.showClearButton);\n break;\n case 'value':\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.onLoadSelect();\n }\n }\n else if (!this.inputFocus) {\n this.initialValueUpdate();\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.refreshInputHight();\n this.refreshPlaceHolder();\n this.updateValueState(null, this.value, oldProp.value);\n }\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 '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 this.popupObj.destroy();\n this.popupObj = null;\n this.renderPopup();\n break;\n case 'showDropDownIcon':\n this.dropDownIcon();\n break;\n case 'enableSelectionOrder':\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 /**\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 eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n this.beforePopupOpen = false;\n this.overAllWrapper.classList.remove(iconAnimation);\n this.popupObj.hide(new Animation(animModel));\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 }\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.ulElement) {\n this.beforePopupOpen = true;\n _super.prototype.render.call(this);\n return;\n }\n var mainLiLength = this.mainList.querySelectorAll('li.' + 'e-list-item').length;\n var liLength = this.ulElement.querySelectorAll('li.' + HIDE_LIST).length;\n if (mainLiLength > 0 && (mainLiLength === liLength)) {\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 var _this = this;\n if (isNullOrUndefined(this.list)) {\n this.selectAllAction = function () {\n if (_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);\n _this.selectAllAction = null;\n };\n _super.prototype.render.call(this);\n }\n else {\n this.selectAllAction = null;\n if (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);\n }\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.initStatus = false;\n this.setDynValue = false;\n this.searchWrapper = createElement('span', { className: SEARCHBOX_WRAPPER });\n this.viewWrapper = createElement('span', { className: DELIMITER_VIEW + ' ' + DELIMITER_WRAPPER, styles: 'display:none;' });\n var iconClass;\n this.overAllClear = createElement('span', {\n className: CLOSEICON_CLASS, styles: 'display:none;'\n });\n this.componentWrapper = createElement('div', { className: ELEMENT_WRAPPER });\n this.overAllWrapper = 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 = createElement('div', { id: this.element.id + '_popup', className: POPUP_WRAPPER });\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.delimiterWrapper = createElement('span', { className: DELIMITER_WRAPPER, styles: 'display:none' });\n this.componentWrapper.appendChild(this.delimiterWrapper);\n }\n else {\n this.chipCollectionWrapper = 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 = createElement('input', {\n className: INPUT_ELEMENT,\n attrs: {\n spellcheck: 'false',\n type: 'text',\n autocomplete: 'off',\n tabindex: '0'\n }\n });\n this.refreshPlaceHolder();\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 var name = this.element.getAttribute('name') ? this.element.getAttribute('name') : this.element.getAttribute('id');\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.element.style.opacity = '';\n this.hiddenElement = createElement('select', {\n attrs: { 'name': name, 'aria-hidden': 'true', 'multiple': 'true' }, styles: 'display:none'\n });\n this.element.removeAttribute('name');\n this.searchWrapper.appendChild(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.dataSource instanceof DataManager)) {\n this.renderPopup();\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.initialValueUpdate();\n _this.initialUpdate();\n _this.setInitialValue = null;\n };\n _super.prototype.render.call(this);\n }\n }\n else {\n this.initialUpdate();\n }\n this.initStatus = true;\n };\n ;\n MultiSelect.prototype.dropDownIcon = function () {\n if (this.mode === 'CheckBox' && this.showDropDownIcon) {\n this.dropIcon = 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.remove();\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(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, \"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 { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { EventHandler, select, removeClass, addClass, detach, compile, L10n } from '@syncfusion/ej2-base';\nimport { Browser, attributes, isNullOrUndefined, append, closest, createElement, prepend } from '@syncfusion/ej2-base';\nimport { dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nvar ICON = 'e-icons';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECK = 'e-check';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar INDETERMINATE = 'e-stop';\nvar checkAllParent = 'e-selectall-parent';\nvar searchBackIcon = 'e-input-group-icon e-back-icon e-icons';\nvar filterBarClearIcon = 'e-input-group-icon e-clear-icon e-icons';\nvar filterInput = 'e-input-filter';\nvar filterParent = 'e-filter-parent';\nvar mobileFilter = 'e-ddl-device-filter';\nvar clearIcon = 'e-clear-icon';\nvar popupFullScreen = 'e-popup-full-page';\nvar device = 'e-ddl-device';\nvar FOCUS = 'e-input-focus';\n/**\n * The Multiselect enable CheckBoxSelection call this inject module.\n */\nvar CheckBoxSelection = /** @class */ (function () {\n function CheckBoxSelection(parent) {\n this.activeLi = [];\n this.activeEle = [];\n this.parent = parent;\n this.addEventListener();\n }\n CheckBoxSelection.prototype.getModuleName = function () {\n return 'CheckBoxSelection';\n };\n CheckBoxSelection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('updatelist', this.listSelection, this);\n this.parent.on('listoption', this.listOption, this);\n this.parent.on('selectAll', this.setSelectAll, this);\n this.parent.on('checkSelectAll', this.checkSelectAll, this);\n this.parent.on('searchBox', this.setSearchBox, this);\n this.parent.on('blur', this.onBlur, this);\n this.parent.on('targetElement', this.targetElement, this);\n this.parent.on('deviceSearchBox', this.setDeviceSearchBox, this);\n this.parent.on('inputFocus', this.getFocus, this);\n this.parent.on('reOrder', this.setReorder, this);\n this.parent.on('activeList', this.getActiveList, this);\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n };\n CheckBoxSelection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updatelist', this.listSelection);\n this.parent.off('listoption', this.listOption);\n this.parent.off('selectAll', this.setSelectAll);\n this.parent.off('checkSelectAll', this.checkSelectAll);\n this.parent.off('searchBox', this.setSearchBox);\n this.parent.off('blur', this.onBlur);\n this.parent.off('targetElement', this.targetElement);\n this.parent.off('deviceSearchBox', this.setDeviceSearchBox);\n this.parent.off('inputFocus', this.getFocus);\n this.parent.off('reOrder', this.setReorder);\n this.parent.off('activeList', this.getActiveList);\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n };\n CheckBoxSelection.prototype.listOption = function (args) {\n var _this = this;\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n };\n };\n ;\n CheckBoxSelection.prototype.checboxCreate = function (e) {\n var item;\n if (!isNullOrUndefined(e.item)) {\n item = e.item;\n }\n else {\n item = e;\n }\n if (item.className !== 'e-list-group-item ' && item.className !== 'e-list-group-item') {\n var checkboxEle = createCheckBox(true);\n var icon = select('div.' + ICON, item);\n var id = item.getAttribute('data-uid');\n item.insertBefore(checkboxEle, item.childNodes[isNullOrUndefined(icon) ? 0 : 1]);\n select('.' + CHECKBOXFRAME, checkboxEle);\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n return item;\n }\n else {\n return item;\n }\n };\n CheckBoxSelection.prototype.setSelectAll = function () {\n if (this.parent.showSelectAll) {\n if (isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent = createElement('div', {\n className: checkAllParent\n });\n this.selectAllSpan = createElement('span', {\n className: 'e-all-text'\n });\n this.selectAllSpan.textContent = '';\n this.checkAllParent.appendChild(this.selectAllSpan);\n this.setLocale();\n this.checboxCreate(this.checkAllParent);\n if (this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.filterParent)) {\n append([this.checkAllParent], this.filterParent);\n }\n else {\n append([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n if (!this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.filterParent)) {\n append([this.checkAllParent], this.filterParent);\n }\n else {\n prepend([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n EventHandler.add(this.checkAllParent, 'mousedown', this.clickHandler, this);\n }\n if (this.parent.list.classList.contains('e-nodata')) {\n this.checkAllParent.style.display = 'none';\n }\n else {\n this.checkAllParent.style.display = 'block';\n }\n this.parent.selectAllHeight = this.checkAllParent.getBoundingClientRect().height;\n }\n else if (!isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent.remove();\n this.checkAllParent = null;\n }\n };\n CheckBoxSelection.prototype.destroy = function () {\n this.removeEventListener();\n };\n CheckBoxSelection.prototype.listSelection = function (args) {\n var target;\n if (!isNullOrUndefined(args.e)) {\n target = !isNullOrUndefined(args.e.target) ?\n args.e.target.classList.contains('e-frame') ?\n args.e.target : args.li.querySelector('.e-checkbox-wrapper').childNodes[1]\n : args.li.querySelector('.e-checkbox-wrapper').childNodes[1];\n }\n else {\n target = args.li.lastElementChild.childNodes[1];\n }\n if (this.parent.itemTemplate) {\n target = args.li.firstElementChild.childNodes[1];\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n var selectAll = false;\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), args.li, args.e, selectAll);\n }\n };\n CheckBoxSelection.prototype.validateCheckNode = function (checkWrap, isCheck, li, e, selectAll) {\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true, selectAll);\n };\n CheckBoxSelection.prototype.clickHandler = function (e) {\n var target;\n if (e.currentTarget.classList.contains(this.checkAllParent.className)) {\n target = e.currentTarget.firstElementChild.lastElementChild;\n }\n else {\n target = e.currentTarget;\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n var selectAll = true;\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), null, e, selectAll);\n }\n e.preventDefault();\n };\n CheckBoxSelection.prototype.changeState = function (wrapper, state, e, isPrevent, selectAll) {\n var ariaState;\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n ariaState = 'true';\n if (selectAll) {\n this.parent.selectAll(true);\n this.setLocale(true);\n }\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n ariaState = 'false';\n if (selectAll) {\n this.parent.selectAll(false);\n this.setLocale();\n }\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNullOrUndefined(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n };\n CheckBoxSelection.prototype.setSearchBox = function (args) {\n if (isNullOrUndefined(this.filterParent)) {\n this.filterParent = createElement('span', {\n className: filterParent\n });\n this.filterInput = createElement('input', {\n attrs: { type: 'text' },\n className: filterInput\n });\n this.parent.element.parentNode.insertBefore(this.filterInput, this.parent.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n this.parent.mobFilter = false;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ? [searchBackIcon, filterBarClearIcon] : [filterBarClearIcon],\n properties: { placeholder: this.parent.filterBarPlaceholder }\n });\n append([this.filterInputObj.container], this.filterParent);\n prepend([this.filterParent], args.popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'aria-owns': this.parent.element.id + '_options',\n 'role': 'listbox',\n 'aria-activedescendant': null,\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'mousedown', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n EventHandler.add(this.filterInput, 'input', this.parent.onInput, this.parent);\n EventHandler.add(this.filterInput, 'keyup', this.parent.KeyUp, this.parent);\n EventHandler.add(this.filterInput, 'keydown', this.parent.onKeyDown, this.parent);\n EventHandler.add(this.filterInput, 'blur', this.onBlur, this);\n this.parent.searchBoxHeight = (this.filterInputObj.container.parentElement).getBoundingClientRect().height;\n return this.filterInputObj;\n }\n };\n ;\n CheckBoxSelection.prototype.clickOnBackIcon = function (e) {\n this.parent.hidePopup();\n removeClass([document.body, this.parent.popupObj.element], popupFullScreen);\n };\n CheckBoxSelection.prototype.clearText = function (e) {\n this.parent.targetInputElement.value = '';\n this.parent.refreshPopup();\n this.parent.refreshListItems(null);\n this.clearIconElement.style.visibility = 'hidden';\n this.filterInput.focus();\n this.setReorder(e);\n e.preventDefault();\n };\n CheckBoxSelection.prototype.setDeviceSearchBox = function () {\n this.parent.popupObj.element.classList.add(device);\n this.parent.popupObj.element.classList.add(mobileFilter);\n this.parent.popupObj.position = { X: 0, Y: 0 };\n this.parent.popupObj.dataBind();\n attributes(this.parent.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, this.parent.popupObj.element], popupFullScreen);\n this.setSearchBoxPosition();\n this.backIconElement = this.filterInputObj.container.querySelector('.e-back-icon');\n this.clearIconElement = this.filterInputObj.container.querySelector('.' + clearIcon);\n this.clearIconElement.style.visibility = 'hidden';\n EventHandler.add(this.backIconElement, 'click', this.clickOnBackIcon, this);\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n };\n CheckBoxSelection.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.parent.popupObj.element.style.maxHeight = '100%';\n this.parent.popupObj.element.style.width = '100%';\n this.parent.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.parent.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n CheckBoxSelection.prototype.targetElement = function () {\n this.parent.targetInputElement = this.filterInput;\n this.clearIconElement.style.visibility = this.parent.targetInputElement.value === '' ? 'hidden' : 'visible';\n return this.parent.targetInputElement.value;\n };\n CheckBoxSelection.prototype.onBlur = function (e) {\n var target;\n if (Browser.isIE) {\n target = !isNullOrUndefined(e) && e.target;\n }\n if (!Browser.isIE) {\n target = !isNullOrUndefined(e) && e.relatedTarget;\n }\n if (document.body.contains(this.parent.popupObj.element) && this.parent.popupObj.element.contains(target) && !Browser.isIE) {\n this.filterInput.focus();\n return;\n }\n this.parent.inputFocus = false;\n this.parent.updateValueState(e, this.parent.value, this.parent.tempValues);\n this.parent.dispatchEvent(this.parent.hiddenElement, 'change');\n if (document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close') && !Browser.isDevice) {\n this.parent.hidePopup();\n }\n this.parent.trigger('blur');\n };\n CheckBoxSelection.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!(!isNullOrUndefined(this.parent.popupObj) && closest(target, '#' + this.parent.popupObj.element.id)) &&\n !this.parent.overAllWrapper.contains(e.target)) {\n if (this.parent.overAllWrapper.classList.contains(dropDownBaseClasses.focus) || this.parent.isPopupOpen()) {\n this.parent.hidePopup();\n }\n }\n };\n CheckBoxSelection.prototype.getFocus = function (e) {\n this.parent.overAllWrapper.classList.remove(FOCUS);\n if (e.value === 'focus') {\n this.filterInput.focus();\n }\n if (e.value === 'clear') {\n this.filterInput.value = '';\n this.clearIconElement.style.visibility = 'hidden';\n }\n };\n CheckBoxSelection.prototype.checkSelectAll = function (e) {\n if (e.value === 'check' && this.checkAllParent.getAttribute('aria-checked') !== 'true') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale(true);\n }\n if (e.value === 'uncheck') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale();\n }\n };\n CheckBoxSelection.prototype.setLocale = function (unSelect) {\n if (this.parent.selectAllText !== 'Select All' || this.parent.unSelectAllText !== 'Unselect All') {\n var template = unSelect ? this.parent.unSelectAllText : this.parent.selectAllText;\n var compiledString = void 0;\n this.selectAllSpan.textContent = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.selectAllSpan.textContent = item.textContent;\n }\n }\n else {\n var l10nLocale = { selectAllText: 'Select All', unSelectAllText: 'Unselect All' };\n var l10n = new L10n('dropdowns', l10nLocale, this.parent.locale);\n this.selectAllSpan.textContent = unSelect ? l10n.getConstant('unSelectAllText') : l10n.getConstant('selectAllText');\n }\n };\n CheckBoxSelection.prototype.getActiveList = function (args) {\n if (args.li.classList.contains('e-active')) {\n this.activeLi.push(args.li.cloneNode(true));\n }\n else {\n this.activeLi.splice(args.index, 1);\n }\n };\n CheckBoxSelection.prototype.setReorder = function (args) {\n if (this.parent.enableSelectionOrder && !isNullOrUndefined(this.parent.value)) {\n var activeLiCount = this.parent.ulElement.querySelectorAll('li.e-active').length;\n var remLi = void 0;\n var ulEle = createElement('ul', {\n className: 'e-list-parent e-ul e-reorder'\n });\n var removeEle = createElement('div');\n if (activeLiCount > 0) {\n append(this.parent.ulElement.querySelectorAll('li.e-active'), ulEle);\n remLi = this.parent.ulElement.querySelectorAll('li.e-active');\n addClass(remLi, 'e-reorder-hide');\n prepend([ulEle], this.parent.list);\n }\n this.parent.focusAtFirstListItem();\n }\n };\n return CheckBoxSelection;\n}());\nexport { CheckBoxSelection };\n","import * as index from '@syncfusion/ej2-dropdowns';\nindex.MultiSelect.Inject( index.CheckBoxSelection);\nexport * from '@syncfusion/ej2-dropdowns';\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})(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","/**\n * CellStyle class\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.numberFormat = 'GENERAL';\n this.type = 'datetime';\n this.borders = new Borders();\n this.isGlobalStyle = false;\n }\n return CellStyle;\n}());\nexport { CellStyle };\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 };\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\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 */\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 * Border class\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 = 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 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 */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Rows class\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 */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\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 = 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 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 */\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 = 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 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 */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n }\n return Worksheet;\n}());\nexport { Worksheet };\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\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 inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(mergeCell);\n }\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","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 * @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 // 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 */\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([this.csvStr], { type: 'text/plain' });\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([this.csvStr], { type: 'text/csv' });\n };\n return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\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 } 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) {\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 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 cellStyles = new CellStyles();\n cellStyles.name = cellStyle.name;\n cellStyles.xfId = cellStyle.index;\n this.cellStyles.set(cellStyles.name, cellStyles);\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.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 //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 };\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 this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\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 //Cell value\n if (jsonCell.value !== null && jsonCell.value !== undefined) {\n cell.value = jsonCell.value;\n cell.type = this.getCellValueType(cell.value);\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 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 index = this.cellStyles.get(json.name).xfId;\n var cellStyleXfs = this.mCellStyleXfs[index - 1];\n cellStyle.name = json.name;\n var compareResult = this.compareStyleXfs(cellStyleXfs);\n if (!compareResult.result) {\n var cellXfs = new CellXfs();\n cellXfs.alignment = cellStyleXfs.alignment;\n cellXfs.applyAlignment = cellStyleXfs.applyAlignment;\n cellXfs.borderId = cellStyleXfs.borderId;\n cellXfs.fillId = cellStyleXfs.fillId;\n cellXfs.fontId = cellStyleXfs.fontId;\n cellXfs.numFmtId = cellStyleXfs.numFmtId;\n cellXfs.xfId = index;\n this.mCellXfs.push(cellXfs);\n this.mStyles.push(cellStyle);\n cellStyle.index = this.mCellXfs.length;\n }\n else {\n cellStyle.index = compareResult.index;\n }\n }\n };\n Workbook.prototype.compareStyleXfs = function (toCompareStyle) {\n var result = false;\n var index = 1;\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.alignment === toCompareStyle.alignment &&\n baseStyle.borderId === toCompareStyle.borderId &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.fillId === toCompareStyle.fillId &&\n baseStyle.fontId === toCompareStyle.fontId;\n if (result) {\n break;\n }\n else {\n index++;\n }\n }\n return { index: index, result: result };\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;\n }\n //vAlign\n if (json.vAlign !== null && json.vAlign !== undefined) {\n cellStyle.vAlign = json.vAlign;\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 });\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 var compareResult = this.compareStyle(style);\n if (!compareResult.result) {\n this.mStyles.push(style);\n var cellXfs = undefined;\n if (style.isGlobalStyle) {\n cellXfs = new CellStyleXfs();\n }\n else {\n cellXfs = new CellXfs();\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 cellXfs.xfId = 0;\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.hAlign !== 'left' || style.vAlign !== 'bottom' || style.wrapText) {\n cellXfs.applyAlignment = 1;\n cellXfs.alignment = new Alignment();\n cellXfs.alignment.horizontal = style.hAlign;\n cellXfs.alignment.vertical = style.vAlign;\n cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n }\n if (style.isGlobalStyle) {\n this.mCellStyleXfs.push(cellXfs);\n return (this.mCellStyleXfs.length);\n }\n else {\n //Add cellxfs\n this.mCellXfs.push(cellXfs);\n return (this.mCellXfs.length);\n }\n }\n else {\n //Return the index of the already existing style.\n return compareResult.index;\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.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.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 break;\n }\n else if (!baseStyle.isGlobalStyle) {\n index++;\n }\n else {\n globalStyleIndex++;\n }\n }\n if (toCompareStyle.isGlobalStyle) {\n index = globalStyleIndex + 1;\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 if (sheet.freezePanes !== undefined) {\n sheetString += (this.saveFreezePanes(sheet));\n }\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.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.saveFreezePanes = 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 /* 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.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 // \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 else {\n cellXfsStyle += ' />';\n }\n // \n // \n // \n }\n }\n return cellXfsStyle + '';\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 mergeCells.add(mCell);\n }\n return mergeCells;\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 };\nvar BuiltInProperties = /** @class */ (function () {\n function BuiltInProperties() {\n }\n return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, createElement as buildTag } 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';\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 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 control rendering\n * @private\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this) });\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = buildTag('div', { className: CLS_HSCROLLCON });\n var scrollDiv = buildTag('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 var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\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 detach(nav[1]);\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 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 = buildTag('div', { id: id.concat('_right'), className: clsRight });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = buildTag('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n var navEle = buildTag('div', { id: id.concat('_left'), className: clsLeft + ' ' + CLS_DISABLE });\n navEle.setAttribute('aria-disabled', 'true');\n var navLeftItem = buildTag('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);\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 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);\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) {\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 element.scrollLeft = scrlLeft + scrollDis;\n }\n else {\n element.scrollLeft = scrlLeft - scrollDis;\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n element.scrollLeft = scrlLeft + scrollDis;\n }\n else {\n element.scrollLeft = scrlLeft - scrollDis;\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target);\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 addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n clearInterval(this.timeout);\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\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 scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\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(40)\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 = 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 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 { createElement as buildTag, 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';\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_TBARSCROLL = 'e-hscroll-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';\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 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 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 this.trigger('beforeCreate');\n this.scrollModule = null;\n this.popObj = null;\n this.tbarItemsCol = this.items;\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 if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && isVisible(this.popObj.element)) {\n this.popObj.hide({ name: 'SlideUp', 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.destroyHScroll();\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) {\n this.popObj.hide({ name: 'SlideUp', duration: 100 });\n }\n };\n Toolbar.prototype.destroyHScroll = 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.destroyHScroll();\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);\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: 'SlideUp', duration: 100 };\n switch (e.action) {\n case 'moveRight':\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 (!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 = 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 (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 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) {\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: 'SlideDown', 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') {\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 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 }\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') && (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 this.trigger('clicked', eventArgs);\n if (isPopupElement && !eventArgs.cancel) {\n this.popObj.hide({ name: 'SlideUp', 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: 'SlideUp', 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.element.style.top = this.element.offsetHeight + 'px';\n popupNav.classList.add(CLS_TBARNAVACT);\n popObj.show({ name: 'SlideDown', 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.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') {\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', 'aria-orientation': 'horizontal',\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 Toolbar.prototype.initHScroll = 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 this.scrollModule = new HScroll({ scrollStep: 50, enableRtl: this.enableRtl }, innerItems[0]);\n this.remove(this.scrollModule.element, CLS_TBARPOS);\n setStyle(this.element, { overflow: 'hidden' });\n }\n };\n Toolbar.prototype.itemWidthCal = function (items) {\n var width = 0;\n [].slice.call(selectAll('.' + CLS_ITEM, items)).forEach(function (el) {\n if (isVisible(el)) {\n width += (el.offsetWidth + parseFloat(window.getComputedStyle(el).marginRight));\n }\n });\n return width;\n };\n Toolbar.prototype.checkOverflow = function (element, innerItem) {\n if (isNOU(element) || isNOU(innerItem) || !isVisible(element)) {\n return false;\n }\n var eleWidth = element.offsetWidth;\n var itemWidth;\n if (this.tbarAlign || this.scrollModule) {\n itemWidth = this.itemWidthCal(this.scrollModule ? innerItem.querySelector('.e-hscroll-content') : innerItem);\n }\n else {\n itemWidth = innerItem.offsetWidth;\n }\n var popNav = element.querySelector('.' + CLS_TBARNAV);\n var scrollNav = element.querySelector('.' + CLS_TBARSCRLNAV);\n if (itemWidth > eleWidth - (popNav ? popNav.offsetWidth : (scrollNav ? scrollNav.offsetWidth * 2 : 0))) {\n return true;\n }\n else {\n return false;\n }\n };\n /** @hidden */\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 switch (this.overflowMode) {\n case 'Scrollable':\n this.destroyHScroll();\n this.initHScroll(ele, ele.getElementsByClassName(CLS_ITEMS));\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 }\n }\n };\n Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n if (!innerNav) {\n this.createPopupIcon(ele);\n }\n innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var eleWidth = (ele.offsetWidth - (innerNav.offsetWidth));\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) {\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 setStyle(el, { display: '', height: eleHeight + 'px' });\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)) {\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 eleItem = element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_POPUP + ' )');\n eleHeight = (element.style.height === 'auto' || element.style.height === '') ? null : 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 ele = buildTag('div', { id: element.id + '_popup', className: CLS_POPUPCLASS });\n }\n this.pushingPoppedEle(this, popupPri, ele, eleHeight);\n this.popupInit(element, ele);\n };\n Toolbar.prototype.popupInit = function (element, ele) {\n if (!this.popObj) {\n element.appendChild(ele);\n setStyle(this.element, { overflow: '' });\n var popup = new Popup(null, {\n relateTo: this.element,\n offsetY: (element.offsetHeight),\n enableRtl: this.enableRtl,\n open: this.popupOpen.bind(this),\n close: this.popupClose,\n position: this.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }\n });\n popup.appendTo(ele);\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 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.popupOpen = function (e) {\n var popObj = this.popObj;\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 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 var scrollVal = isNOU(window.scrollY) ? 0 : window.scrollY;\n if ((window.innerHeight + scrollVal) < popupElePos) {\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 };\n Toolbar.prototype.popupClose = function (e) {\n var element = this.element.parentElement;\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 };\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 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 = parseFloat((window.getComputedStyle(inEle[i])).marginRight);\n mrgn += parseFloat((window.getComputedStyle(inEle[i])).marginLeft);\n var fstEleCheck = inEle[i] === this.tbarEle[0];\n if (fstEleCheck) {\n this.tbarEleMrgn = mrgn;\n }\n var eleWid_1 = fstEleCheck ? (inEle[i].offsetWidth + mrgn) : inEle[i].offsetWidth;\n if (checkClass(inEle[i], [CLS_POPPRI]) && popPriority) {\n inEle[i].classList.add(CLS_POPUP);\n setStyle(inEle[i], { display: 'none', minWidth: eleWid_1 + 'px' });\n itemPopCount++;\n }\n if ((inEle[i].offsetLeft + inEle[i].offsetWidth + mrgn) > eleWidth) {\n if (inEle[i].classList.contains(CLS_SEPARATOR)) {\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 else {\n itemCount++;\n }\n if (inEle[i].classList.contains(CLS_TBAROVERFLOW) && pre) {\n eleWidth -= (inEle[i].offsetWidth + (mrgn));\n }\n else if (!checkClass(inEle[i], [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[i].classList.add(CLS_POPUP);\n setStyle(inEle[i], { display: 'none', minWidth: eleWid_1 + 'px' });\n itemPopCount++;\n }\n else {\n eleWidth -= (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 var nav = buildTag('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 = buildTag('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 ele = this.element;\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 width = ele.offsetWidth - (popNav.offsetWidth + innerEle.offsetWidth);\n this.popupEleRefresh(width, 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 = 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 = el.offsetWidth;\n btn.style.minWidth = '';\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 el.style.minWidth = '';\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 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 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 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 innerItem = [].slice.call(item.querySelector('.' + CLS_TBARSCROLL).children);\n }\n else {\n innerItem = [].slice.call(item.childNodes);\n }\n var margin = innerItem[0].offsetWidth + innerItem[2].offsetWidth;\n var tbarWid = this.element.offsetWidth;\n if (popupNav) {\n tbarWid -= popupNav.offsetWidth;\n var popWid = popupNav.offsetWidth + 'px';\n innerItem[2].removeAttribute('style');\n this.enableRtl ? innerItem[2].style.left = popWid : innerItem[2].style.right = popWid;\n }\n if (tbarWid <= margin) {\n return;\n }\n var value = (((tbarWid - margin)) - innerItem[1].offsetWidth) / 2;\n innerItem[1].removeAttribute('style');\n var mrgn = (innerItem[0].offsetWidth + value) + 'px';\n this.enableRtl ? innerItem[1].style.marginRight = mrgn : innerItem[1].style.marginLeft = mrgn;\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(buildTag('div', { className: CLS_TBARLEFT }));\n alignDiv.push(buildTag('div', { className: CLS_TBARCENTER }));\n alignDiv.push(buildTag('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 = buildTag('div', { className: CLS_ITEMS });\n }\n for (var i = 0; i < items.length; i++) {\n innerItem = this.renderSubComponent(items[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 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);\n if (this.tbarEle.length >= index && innerItems.length > 0) {\n this.destroyMode();\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 {\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) {\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 (document.querySelectorAll(val).length) {\n var ele = document.querySelector(val);\n var tempStr = ele.outerHTML.trim();\n templateFn = templateCompiler(tempStr);\n detach(ele);\n item.template = tempStr;\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 = buildTag('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 = buildTag('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 = buildTag('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 new Button({ iconCss: iconCss, iconPosition: iconPos }, dom);\n if (item.width) {\n setStyle(dom, { 'width': formatUnit(item.width) });\n }\n return dom;\n };\n Toolbar.prototype.renderSubComponent = function (item) {\n var innerEle;\n var dom;\n innerEle = buildTag('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 innerEle.setAttribute('title', item.tooltipText);\n }\n if (item.cssClass) {\n innerEle.className = innerEle.className + ' ' + item.cssClass;\n }\n if (item.template) {\n this.templateRender(item.template, innerEle, item);\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) {\n this.popObj.hide();\n }\n var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n if (!checkOverflow) {\n this.destroyHScroll();\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.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 };\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 if ((popupPriCheck) || (this.items[index].showAlwaysInPopup) && property === 'overflow' && this.popupPriCount !== 0) {\n --this.popupPriCount;\n }\n this.destroyMode();\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 = 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 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 { createElement as buildTag, 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 document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\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.removeAttribute('style');\n ['aria-disabled', 'aria-multiselectable', 'role'].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(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 = buildTag('div', { className: CLS_TOOGLEICN });\n var hdrColIcon = buildTag('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 if (trgt.tagName === 'INPUT') {\n return;\n }\n e.preventDefault();\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 = buildTag('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 = buildTag('div', { className: CLS_ITEM });\n innerEle.id = getUniqueID('acrdn_item');\n if (item.header) {\n var ctnEle = this.headerEleGenerate();\n var hdrEle = buildTag('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 = buildTag('div', { className: CLS_HEADERICN });\n var icon = buildTag('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 if (!isNOU(templateFn) && templateFn().length > 0 && !(isNOU(templateFn()[0].tagName) && templateFn().length === 1)) {\n [].slice.call(templateFn()).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 = buildTag('div', { className: CLS_CONTENT + ' ' + CLS_CTNHIDE, id: getUniqueID('acrdn_panel') });\n attributes(itemcnt, { 'aria-hidden': 'true' });\n var ctn = buildTag('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 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 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 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 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 [].slice.call(this.element.children).forEach(function (el) {\n _this.itemExpand(isExpand, el, _this.getIndexByItem(el));\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 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 item = selectAll('.' + CLS_ITEM, this.element)[index];\n if (property === 'header' || property === 'iconCss' || property === 'expanded') {\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 = 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 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 { attributes, Animation } from '@syncfusion/ej2-base';\nimport { Browser, Collection, setValue, getValue, getUniqueID, getInstance } from '@syncfusion/ej2-base';\nimport { select, selectAll, closest, createElement, detach, append, rippleEffect, isVisible } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { calculatePosition, isCollide, fit, getScrollableParent } from '@syncfusion/ej2-popups';\nvar DOWNARROW = 'downarrow';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar RTL = 'e-rtl';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar WRAPPER = 'e-contextmenu-wrapper';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\n/**\n * Specifies context 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('')\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 * 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 var _this = _super.call(this, options, element) || this;\n _this.animation = new Animation({});\n _this.navIdx = [];\n _this.isTapHold = false;\n return _this;\n }\n /**\n * Initialized animation with parent menu animation settings.\n * @private\n */\n ContextMenu.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 = 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 };\n /**\n * Initialize the control rendering\n * @private\n */\n ContextMenu.prototype.render = function () {\n this.initWrapper();\n this.renderItems();\n this.wireEvents();\n };\n ContextMenu.prototype.initWrapper = function () {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n wrapper = createElement('div', { className: WRAPPER });\n document.body.appendChild(wrapper);\n }\n if (this.cssClass) {\n wrapper.classList.add(this.cssClass);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n attributes(this.element, { 'role': 'menu', 'tabindex': '0' });\n wrapper.appendChild(this.element);\n this.element.style.zIndex = this.getZIndex();\n };\n ContextMenu.prototype.renderItems = function () {\n if (!this.items.length) {\n this.items = ListBase.createJsonFromElement(this.element);\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 };\n ContextMenu.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 EventHandler.add(wrapper, 'mouseover', this.moverHandler, this);\n EventHandler.add(document, 'mousedown', this.mouseDownHandler, this);\n }\n this.delegateClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.delegateClickHandler, this);\n new KeyboardEvents(wrapper, {\n keyAction: this.keyBoardHandler.bind(this),\n keyConfigs: {\n downarrow: DOWNARROW,\n uparrow: UPARROW,\n enter: ENTER,\n leftarrow: LEFTARROW,\n rightarrow: RIGHTARROW,\n escape: ESCAPE\n }\n });\n rippleEffect(wrapper, { selector: '.' + ITEM });\n };\n ContextMenu.prototype.mouseDownHandler = function (e) {\n if (closest(e.target, '.' + WRAPPER) !== this.getWrapper()) {\n this.closeMenu(this.navIdx.length, e);\n }\n };\n ContextMenu.prototype.keyBoardHandler = function (e) {\n e.preventDefault();\n switch (e.action) {\n case DOWNARROW:\n case UPARROW:\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 };\n ContextMenu.prototype.upDownKeyHandler = function (e) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n var defaultIdx = e.action === DOWNARROW ? 0 : cul.childElementCount - 1;\n var fliIdx = defaultIdx;\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n fliIdx = this.getIdx(cul, fli);\n fli.classList.remove(FOCUSED);\n e.action === DOWNARROW ? fliIdx++ : fliIdx--;\n if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n fliIdx = defaultIdx;\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 ContextMenu.prototype.isValidLI = function (cli, index, action) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\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 ContextMenu.prototype.rightEnterKeyHandler = function (e) {\n var eventArgs;\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\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 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 = wrapper.children[this.navIdx.length];\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 fli.classList.remove(FOCUSED);\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 ContextMenu.prototype.leftEscKeyHandler = function (e) {\n if (this.navIdx.length) {\n var wrapper = this.getWrapper();\n this.closeMenu(this.navIdx.length, e);\n var cul = wrapper.children[this.navIdx.length];\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 ContextMenu.prototype.scrollHandler = function (e) {\n this.closeMenu(null, e);\n };\n ContextMenu.prototype.touchHandler = function (e) {\n this.isTapHold = true;\n this.cmenuHandler(e.originalEvent);\n };\n ContextMenu.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].clientY + 1, e.changedTouches[0].clientX + 1, e);\n }\n else {\n this.openMenu(null, null, e.clientY + 1, e.clientX + 1, e);\n }\n }\n };\n /**\n * Closes the ContextMenu if it is opened.\n */\n ContextMenu.prototype.close = function () {\n this.closeMenu();\n };\n ContextMenu.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 item = void 0;\n var items = void 0;\n var closeArgs = void 0;\n var beforeCloseArgs = void 0;\n var wrapper = this.getWrapper();\n for (var cnt = wrapper.childElementCount; cnt > ulIndex; cnt--) {\n item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items = item ? item.items : this.items;\n ul = wrapper.children[cnt - 1];\n beforeCloseArgs = { element: ul, parentItem: item, items: items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.toggleAnimation(ul, false);\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 ContextMenu.prototype.isMenuVisible = function () {\n return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n };\n ContextMenu.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 = target.classList.length; i < len; i++) {\n if (filter.indexOf(target.classList[i]) > -1) {\n canOpen = true;\n break;\n }\n }\n }\n return canOpen;\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 * @returns void\n */\n ContextMenu.prototype.open = function (top, left) {\n this.openMenu(null, null, top, left);\n };\n ContextMenu.prototype.openMenu = function (li, item, top, left, e) {\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (e === void 0) { e = null; }\n var ul;\n var navIdx;\n var wrapper = this.getWrapper();\n if (li) {\n ul = this.createItems(item.items);\n if (Browser.isDevice) {\n wrapper.lastChild.style.display = 'none';\n var data = { text: item.text, iconCss: ICONS + ' e-previous' };\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 ul.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(ul);\n }\n else {\n ul = this.element;\n }\n navIdx = this.getIndex(li ? li.textContent : null);\n var items = li ? item.items : this.items;\n var eventArgs = { element: ul, items: items, parentItem: item, event: e, cancel: false };\n this.trigger('beforeOpen', eventArgs);\n if (eventArgs.cancel) {\n this.navIdx.pop();\n }\n else {\n this.setPosition(li, ul, top, left);\n this.toggleAnimation(ul);\n }\n };\n ContextMenu.prototype.setPosition = function (li, ul, top, left) {\n var px = 'px';\n this.toggleVisiblity(ul);\n if (ul === this.element) {\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 = fit(ul, null, { X: false, Y: true }, { top: top, left: left });\n top = offset.top;\n }\n collide = isCollide(ul, null, left, top);\n if (collide.indexOf('left') > -1) {\n var offset = fit(ul, null, { X: true, Y: false }, { top: top, left: 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 = fit(ul, null, { X: false, Y: true }, { top: top, left: 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 ContextMenu.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 ContextMenu.prototype.createItems = function (items) {\n var _this = this;\n var showIcon = this.hasField(items, 'iconCss');\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n itemCreating: function (args) {\n args.curData.htmlAttributes = {\n role: 'menuitem',\n tabindex: '-1'\n };\n },\n itemCreated: function (args) {\n if (args.curData.separator) {\n args.item.classList.add(SEPARATOR);\n args.item.removeAttribute('role');\n }\n if (showIcon && !args.curData.iconCss && !args.curData.separator) {\n args.item.classList.add('e-blankicon');\n }\n if (args.curData.items && args.curData.items.length) {\n var span = createElement('span', { className: ICONS + ' ' + CARET });\n args.item.appendChild(span);\n args.item.setAttribute('aria-haspopup', 'true');\n args.item.setAttribute('aria-expanded', 'false');\n args.item.removeAttribute('role');\n args.item.classList.add('e-menu-caret-icon');\n }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n var ul = ListBase.createList(this.toRawObject(items.slice()), listBaseOptions, true);\n ul.setAttribute('tabindex', '0');\n return ul;\n };\n ContextMenu.prototype.toRawObject = function (items) {\n var item;\n var menuItems = [];\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i].properties;\n menuItems.push(item);\n }\n return menuItems;\n };\n ContextMenu.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, '.' + WRAPPER)) {\n var fli = select('.' + FOCUSED, wrapper);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n cli.classList.add(FOCUSED);\n if (!this.showItemOnClick) {\n this.clickHandler(e);\n }\n }\n };\n ContextMenu.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 ContextMenu.prototype.getWrapper = function () {\n return closest(this.element, '.' + WRAPPER);\n };\n ContextMenu.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, '.' + WRAPPER) : null;\n var isInstLI = cli && cliWrapper && wrapper.firstElementChild.id === cliWrapper.firstElementChild.id;\n if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n this.setLISelected(cli);\n var navIdx = this.getIndex(cli.textContent);\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 (!Browser.isDevice) {\n var culIdx = 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.items.length) {\n if (e.type === 'mouseover') {\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 (trgt.tagName !== 'UL' || trgt.parentElement !== wrapper) {\n if (!cli || !cli.querySelector('.' + CARET)) {\n this.closeMenu(null, e);\n }\n }\n }\n }\n };\n ContextMenu.prototype.setLISelected = function (li) {\n var sli = this.getLIByClass(li.parentElement, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n li.classList.remove(FOCUSED);\n li.classList.add(SELECTED);\n };\n ContextMenu.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 ContextMenu.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 ContextMenu.prototype.getItems = function (navIdx) {\n var items = this.items;\n for (var i = 0; i < navIdx.length; i++) {\n items = items[navIdx[i]].items;\n }\n return items;\n };\n ContextMenu.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 ContextMenu.prototype.getLI = function (elem) {\n if (elem.tagName === 'LI') {\n return elem;\n }\n return closest(elem, 'li');\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 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 'cssClass':\n if (oldProp.cssClass) {\n wrapper.classList.remove(oldProp.cssClass);\n }\n if (newProp.cssClass) {\n wrapper.classList.add(newProp.cssClass);\n }\n break;\n case 'enableRtl':\n wrapper.classList.toggle(RTL);\n break;\n case 'filter':\n this.closeMenu();\n this.filter = newProp.filter;\n break;\n case 'showItemOnClick':\n this.unWireEvents();\n this.showItemOnClick = newProp.showItemOnClick;\n this.wireEvents();\n break;\n case 'target':\n this.unWireEvents();\n this.target = newProp.target;\n this.wireEvents();\n break;\n case 'items':\n var idx = void 0;\n var navIdx = void 0;\n var item = void 0;\n var keys = Object.keys(newProp.items);\n for (var i = 0; i < keys.length; i++) {\n navIdx = this.getChangedItemIndex(newProp, [], Number(keys[i]));\n if (navIdx.length <= this.getWrapper().children.length) {\n idx = navIdx.pop();\n item = this.getItems(navIdx);\n this.insertAfter([item[idx]], item[idx].text);\n this.removeItem(item, navIdx, idx);\n }\n navIdx.length = 0;\n }\n break;\n }\n }\n };\n ContextMenu.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 ContextMenu.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 ContextMenu.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(wrapper, 'mouseover', this.moverHandler);\n EventHandler.remove(document, 'mousedown', this.mouseDownHandler);\n }\n EventHandler.remove(document, 'click', this.delegateClickHandler);\n var keyboardModule = getInstance(wrapper, KeyboardEvents);\n if (keyboardModule) {\n keyboardModule.destroy();\n }\n };\n ContextMenu.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 ContextMenu.prototype.end = function (ul, isMenuOpen) {\n if (isMenuOpen) {\n ul.style.display = 'block';\n ul.style.maxHeight = '';\n var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n var eventArgs = { element: ul, parentItem: item, items: item ? item.items : this.items };\n this.trigger('onOpen', eventArgs);\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 ContextMenu.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.getIndex = function (data, items, navIdx, isCallBack) {\n if (items === void 0) { items = this.items; }\n if (navIdx === void 0) { navIdx = []; }\n if (isCallBack === void 0) { isCallBack = false; }\n var item;\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i];\n if (item.text === data) {\n navIdx.push(i);\n break;\n }\n else if (item.items.length) {\n navIdx = this.getIndex(data, item.items, navIdx, true);\n if (navIdx[navIdx.length - 1] === -1) {\n if (i !== len - 1) {\n navIdx.pop();\n }\n }\n else {\n navIdx.unshift(i);\n break;\n }\n }\n else {\n if (i === len - 1) {\n navIdx.push(-1);\n }\n }\n }\n return (!isCallBack && navIdx[0] === -1) ? [] : navIdx;\n };\n /**\n * This method is used to enable or disable the menu items in the ContextMenu 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 * @returns void\n */\n ContextMenu.prototype.enableItems = function (items, enable) {\n if (enable === void 0) { enable = true; }\n var ul;\n var idx;\n var navIdx;\n var disabled = DISABLED;\n var wrapper = this.getWrapper();\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i]);\n idx = navIdx.pop();\n ul = wrapper.children[navIdx.length];\n if (ul) {\n if (enable) {\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 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 * This method is used to show the menu items in the ContextMenu based on the items text.\n * @param items Text items that needs to be shown.\n * @returns void\n */\n ContextMenu.prototype.showItems = function (items) {\n this.showHideItems(items, false);\n };\n /**\n * This method is used to hide the menu items in the ContextMenu based on the items text.\n * @param items Text items that needs to be hidden.\n * @returns void\n */\n ContextMenu.prototype.hideItems = function (items) {\n this.showHideItems(items, true);\n };\n ContextMenu.prototype.showHideItems = function (items, ishide) {\n var ul;\n var idx;\n var navIdx;\n var wrapper = this.getWrapper();\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i]);\n idx = navIdx.pop();\n ul = wrapper.children[navIdx.length];\n if (ul) {\n if (ishide) {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(HIDE);\n }\n else {\n ul.children[idx].classList.add(HIDE);\n }\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(HIDE);\n }\n else {\n ul.children[idx].classList.remove(HIDE);\n }\n }\n }\n }\n };\n /**\n * It is used to remove the menu items from the ContextMenu based on the items text.\n * @param items Text items that needs to be removed.\n * @returns void\n */\n ContextMenu.prototype.removeItems = function (items) {\n var idx;\n var navIdx;\n var iitems;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i]);\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 ContextMenu.prototype.insertAfter = function (items, text) {\n this.insertItems(items, text);\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 * @returns void\n */\n ContextMenu.prototype.insertBefore = function (items, text) {\n this.insertItems(items, text, false);\n };\n ContextMenu.prototype.insertItems = function (items, text, 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);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n menuitem = new MenuItem(iitems[0], null, items[i], true);\n iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n idx = isAfter ? idx + 1 : idx;\n showIcon = this.hasField(iitems, 'iconCss');\n li = this.createItems(iitems).children[idx];\n uls[navIdx.length].insertBefore(li, uls[navIdx.length].children[idx]);\n }\n }\n };\n ContextMenu.prototype.getZIndex = function () {\n var index;\n var position;\n var props;\n var zIndex = ['999'];\n for (var i = 0, len = document.body.children.length; i < len; i++) {\n props = document.defaultView.getComputedStyle(document.body.children[i]);\n index = props.getPropertyValue('z-index');\n position = props.getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n zIndex.push(index);\n }\n }\n return (Math.max.apply(Math, zIndex) + 1).toString();\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n ContextMenu.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) {\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 (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n _this.element.removeAttribute(key);\n }\n });\n wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n detach(wrapper);\n }\n };\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"filter\", void 0);\n __decorate([\n Property(false)\n ], ContextMenu.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], ContextMenu.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"target\", void 0);\n __decorate([\n Property({ duration: 400, easing: 'ease', effect: 'SlideDown' })\n ], ContextMenu.prototype, \"animationSettings\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"onOpen\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"onClose\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"select\", void 0);\n ContextMenu = __decorate([\n NotifyPropertyChanges\n ], ContextMenu);\n return ContextMenu;\n}(Component));\nexport { ContextMenu };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { createElement as buildTag, setStyleAttribute as setStyle, isNullOrUndefined as isNOU, selectAll } 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_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_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 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.prevIndex = 0;\n _this.show = { name: 'SlideDown', duration: 100 };\n _this.hide = { name: 'SlideUp', duration: 100 };\n _this.animateOptions = {};\n _this.animObj = new Animation(_this.animateOptions);\n _this.maxHeight = 0;\n _this.title = 'Close';\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.isNested = false;\n this.isPopup = false;\n this.initRender = true;\n this.isSwipeed = false;\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 };\n /**\n * Initialize the component rendering\n * @private\n */\n Tab.prototype.render = function () {\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(buildTag('div', { className: CLS_CONTENT }));\n this.setOrientation(this.headerPlacement, buildTag('div', { className: CLS_HEADER }));\n this.isTemplate = false;\n }\n else if (this.element.children.length > 0) {\n this.isTemplate = true;\n ele.classList.add(CLS_TEMPLATE);\n var header = ele.querySelector('.' + CLS_HEADER);\n if (header && this.headerPlacement === 'Bottom') {\n this.setOrientation(this.headerPlacement, header);\n }\n }\n if (!isNOU(select('.' + CLS_HEADER, this.element)) && !isNOU(select('.' + CLS_CONTENT, this.element))) {\n this.renderHeader();\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n if (!isNOU(this.tbItems)) {\n rippleEffect(this.tbItems, { selector: '.e-tab-wrap' });\n }\n this.renderContent();\n if (selectAll('.' + CLS_TB_ITEM, this.element).length > 0) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.bdrLine = buildTag('div', { className: CLS_INDICATOR + ' ' + CLS_HIDDEN + ' ' + CLS_IGNORE });\n var scrCnt = select('.e-hscroll-content', 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 tabItems = [];\n this.hdrEle = select('.' + CLS_HEADER, this.element);\n this.btnCls = buildTag('span', { className: CLS_ICONS + ' ' + CLS_ICON_CLOSE, attrs: { title: this.title } }).outerHTML;\n if (!this.isTemplate) {\n tabItems = this.parseObject(this.items, 0);\n }\n else {\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(buildTag('div', { className: CLS_ITEMS }));\n hdrItems.forEach(function (item, 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 = buildTag('span', { className: CLS_TEXT, innerHTML: item, attrs: { 'role': 'presentation' } }).outerHTML;\n var cont = buildTag('div', { className: CLS_TEXT_WRAP, innerHTML: txt + _this.btnCls }).outerHTML;\n var wrap = buildTag('div', { className: CLS_WRAP, innerHTML: cont, attrs: { tabIndex: '-1' } });\n select('.' + CLS_ITEMS, _this.element).appendChild(buildTag('div', attr));\n selectAll('.' + CLS_ITEM, _this.element)[index].appendChild(wrap);\n });\n }\n }\n this.tbObj = new Toolbar({\n width: '100%',\n overflowMode: this.overflowMode,\n items: (tabItems.length !== 0) ? tabItems : [],\n clicked: this.clickHandler.bind(this)\n });\n this.tbObj.appendTo(this.hdrEle);\n attributes(this.element, { 'aria-orientation': 'horizontal' });\n this.setCloseButton(this.showCloseButton);\n this.setProperties({ headerPlacement: (this.element.children.item(0).classList.contains(CLS_HEADER)) ? 'Top' : 'Bottom' }, true);\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.parseObject = function (items, index) {\n var _this = this;\n var inHTML = '';\n var tbCount = selectAll('.' + CLS_TB_ITEM, this.element).length;\n var tItems = [];\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 var txt = item.header.text;\n var id = ((tbCount === 0) ? i : (_this.isReplace === true) ? (i + index) : tbCount + i);\n var disabled = (item.disabled) ? ' ' + CLS_DISABLE + ' ' + CLS_OVERLAY : '';\n var tHtml = ((txt instanceof Object) ? txt.outerHTML : txt);\n var txtEmpty = (!isNOU(tHtml) && tHtml !== '');\n var tEle = (txtEmpty) ? buildTag('div', {\n className: CLS_TEXT, innerHTML: tHtml, attrs: { 'role': 'presentation' }\n }).outerHTML : '';\n var icon = buildTag('span', {\n className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n }).outerHTML;\n if ((txt === '' || txt === undefined) && css === '') {\n return;\n }\n else {\n if ((txt !== '' && txt !== undefined) && css !== '') {\n inHTML = (pos === 'left' || pos === 'top') ? icon + '' + tEle : tEle + '' + icon;\n }\n else {\n inHTML = (css === '') ? tEle : icon;\n }\n }\n var wrapAttrs = (item.disabled) ? {} : { tabIndex: '-1' };\n var tCont = buildTag('div', { className: CLS_TEXT_WRAP, innerHTML: inHTML + '' + _this.btnCls }).outerHTML;\n var wrap = buildTag('div', { className: CLS_WRAP, innerHTML: tCont, attrs: wrapAttrs });\n var attrObj = {\n id: CLS_ITEM + '_' + id, role: 'tab', 'aria-selected': 'false'\n };\n var tItem = { htmlAttributes: attrObj, template: wrap.outerHTML };\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 });\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 var no = this.extIndex(hdrActEle.id);\n var trg = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\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 if ((this.enableRtl && ((popIcon.offsetLeft + popIcon.offsetWidth) > tbrItems.offsetLeft))\n || (!this.enableRtl && popIcon.offsetLeft < tbrItems.offsetWidth)) {\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 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.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 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 };\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 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) {\n this.triggerPrevAnimation(oldCnt, prevIndex);\n }\n this.prevActiveEle = newCnt.id;\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 document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n });\n };\n Tab.prototype.templateCompile = function (ele, cnt) {\n var tempEle = buildTag('div');\n var templateFn = compile(cnt);\n if (!isNOU(templateFn) && templateFn().length > 0) {\n [].slice.call(templateFn()).forEach(function (el) {\n tempEle.appendChild(el);\n });\n ele.appendChild(tempEle);\n }\n };\n Tab.prototype.getContent = function (ele, index, callType) {\n var eleStr;\n var cnt = this.items[Number(index)].content;\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.innerHTML = cnt.outerHTML;\n }\n if (!isNOU(eleStr)) {\n this.templateEle.push(cnt.toString());\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.setOrientation = function (place, ele) {\n (place === 'Bottom') ? this.element.appendChild(ele) : this.element.insertBefore(ele, select('.' + CLS_CONTENT, this.element));\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 height;\n var hdrEle = select('.' + CLS_HEADER, this.element);\n if (this.heightAdjustMode === 'None') {\n if (this.height === 'auto') {\n return;\n }\n else {\n setStyle(this.cntEle, { 'height': (this.element.offsetHeight - hdrEle.offsetHeight) + 'px' });\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(buildTag('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, i, 'clone');\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(ele));\n ele.innerHTML = '';\n }\n this.templateEle = [];\n this.getContent(ele, 0, '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 = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element);\n if (this.headerPlacement === 'Bottom') {\n trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element.children[1]);\n }\n if (trg === null) {\n return;\n }\n var root = closest(trg, '.' + CLS_TAB);\n if (this.element !== root) {\n return;\n }\n var hsCnt = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS + ' .e-hscroll-content', this.element.children[0]);\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n var bar = select('.' + CLS_HEADER + ' .' + CLS_INDICATOR, this.element);\n if (this.headerPlacement === 'Bottom') {\n hsCnt = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS + ' .e-hscroll-content', this.element.children[1]);\n }\n var tbWidth = (isNOU(hsCnt)) ? this.tbItems.offsetWidth : hsCnt.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 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 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(buildTag('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 this.getContent(eleTrg, Number(this.extIndex(id)), '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 isSwiped: this.isSwipeed\n };\n this.trigger('selected', eventArg);\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.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 };\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 {\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') {\n this.select(this.selectedItem - 1);\n }\n else {\n if (e.swipeDirection === 'Left' && (this.selectedItem !== selectAll('.' + CLS_TB_ITEM, this.element).length - 1)) {\n this.select(this.selectedItem + 1);\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_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 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('.e-hscroll-content', this.tbItems);\n if (!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 /**\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 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 this.trigger('adding', { addedItems: items });\n if (isNOU(index)) {\n index = selectAll('.' + CLS_TB_ITEM).length - 1;\n }\n if (this.isTemplate === true || selectAll('.' + CLS_TB_ITEM).length - 1 < index || index < 0 || isNaN(index)) {\n return;\n }\n this.bdrLine.classList.add(CLS_HIDDEN);\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n var tabItems = this.parseObject(items, index);\n items.forEach(function (item, place) {\n if (_this.isReplace === true) {\n var hdrItem = select('.' + CLS_TB_ITEMS + ' #' + CLS_ITEM + '_' + index, _this.element);\n detach(hdrItem);\n _this.items.splice((index + place), 0, item);\n }\n else {\n _this.items.push(item);\n }\n });\n this.tbObj.addItems(tabItems, index);\n this.trigger('added', { addedItems: items });\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 removingArgs = { removedItem: trg, removedIndex: index };\n this.trigger('removing', removingArgs);\n if (isNOU(trg)) {\n return;\n }\n this.tbObj.removeItems(index);\n this.refreshActiveBorder();\n var no = this.extIndex(trg.id);\n var cntTrg = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\n if (!isNOU(cntTrg)) {\n cntTrg.outerHTML = '';\n }\n var removedArgs = { removedItem: trg, removedIndex: index };\n this.trigger('removed', removedArgs);\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.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 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 if (item.classList.contains(CLS_ACTIVE)) {\n this.select((index !== 0) ? index - 1 : index + 1);\n }\n }\n else {\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.prevItem = this.tbItem[this.prevIndex];\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 isSwiped: this.isSwipeed\n };\n this.trigger('selecting', eventArg);\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 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 arr = [];\n arr.push(this.items[index]);\n this.items.splice(index, 1);\n this.tbObj.items.splice(index, 1);\n this.isReplace = true;\n this.addTab(arr, index);\n this.isReplace = false;\n }\n if (property === 'content') {\n if (!isNOU(cntItem)) {\n (cntItem.classList.contains('e-active') ? (cntItem.innerHTML = newVal) : cntItem.remove());\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 if (isNOU(this.tbObj)) {\n this.renderContainer();\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n }\n else {\n this.setItems(newProp.items);\n select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element).innerHTML = '';\n this.select(this.selectedItem);\n }\n }\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 var tempHdrEle = select('.' + CLS_HEADER, this.element);\n this.setOrientation(newProp.headerPlacement, tempHdrEle);\n this.select(this.selectedItem);\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 = 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 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, createElement, 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 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.mouseDownStatus = false;\n return _this;\n }\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 fields: this.fields.properties,\n showIcon: true,\n expandIconClass: EXPANDABLE,\n ariaAttributes: treeAriaAttr,\n expandIconPosition: 'Left',\n itemCreated: function (e) {\n _this.beforeNodeCreate(e);\n },\n };\n this.listBaseOption.fields.url = this.fields.navigateUrl;\n this.aniObj = new Animation({});\n this.treeList = [];\n this.isLoaded = false;\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 };\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'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TreeView.prototype.render = function () {\n this.isAnimate = 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 };\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 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 else {\n this.treeList.pop();\n if (isNOU(this.fields.dataSource)) {\n this.rootData = this.treeData = [];\n }\n else {\n this.treeData = this.fields.dataSource;\n this.setRootData();\n }\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(isSorted ? this.rootData : this.getSortedData(this.rootData), this.listBaseOption);\n this.element.appendChild(this.ulElement);\n this.finalizeNode(this.element);\n };\n TreeView.prototype.beforeNodeCreate = function (e) {\n if (this.showCheckBox) {\n var checkboxEle = createCheckBox(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 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 cNodes[j].setAttribute('aria-expanded', 'false');\n addClass([cNodes[j]], NODECOLLAPSED);\n }\n }\n var eNodes = selectAll('.' + EXPANDED, element);\n for (var i = 0; i < eNodes.length; i++) {\n this.renderChildNodes(eNodes[i]);\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.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 }\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)) {\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.doSelectionAction();\n this.updateCheckedProp();\n this.isLoaded = true;\n this.isAnimate = 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 this.selectNode(sNodes[i], null, true);\n if (!this.allowMultiSelection) {\n break;\n }\n }\n };\n TreeView.prototype.clickHandler = function (e) {\n var target = e.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) {\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, e);\n this.triggerClickEvent(e, li);\n return;\n }\n }\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(li, target, e);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, target, e);\n }\n else {\n if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, e, false);\n }\n }\n this.triggerClickEvent(e, 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) {\n var _this = this;\n if (icon.classList.contains(LOAD)) {\n this.hideSpinner(icon);\n }\n removeClass([icon], EXPANDABLE);\n addClass([icon], COLLAPSIBLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n this.setHeight(liEle, ul);\n if (!this.isAnimate) {\n this.aniObj.animate(ul, {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n start = liEle.offsetHeight;\n end = select('.' + TEXTWRAP, currLi).offsetHeight;\n },\n progress: function (args) {\n args.element.style.display = 'block';\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n args.element.style.display = 'block';\n _this.expandedNode(liEle, ul, icon);\n }\n });\n }\n else {\n this.expandedNode(liEle, ul, icon);\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 currLi.setAttribute('aria-expanded', 'true');\n removeClass([currLi], NODECOLLAPSED);\n if (this.isLoaded && this.expandArgs) {\n this.trigger('nodeExpanded', this.expandArgs);\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 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 addClass([currLi], NODECOLLAPSED);\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 liEle.style.overflow = '';\n args.element.style.display = 'none';\n liEle.style.height = '';\n removeClass([icon], PROCESS);\n currLi.setAttribute('aria-expanded', 'false');\n if (_this.isLoaded) {\n _this.trigger('nodeCollapsed', colArgs);\n }\n }\n });\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) {\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 parentLi.removeAttribute('aria-expanded');\n return;\n }\n this.treeList.push('false');\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.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n parentLi.removeAttribute('aria-expanded');\n }\n else {\n var prop = _this.getActualProperties(mapper_1);\n _this.listBaseOption.fields = prop;\n _this.listBaseOption.fields.url = prop.navigateUrl;\n var id = parentLi.getAttribute('data-uid');\n var nodeData = _this.getNodeObject(id);\n setValue('child', childItems, nodeData);\n _this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(childItems, _this.listBaseOption));\n _this.expandNode(parentLi, eicon);\n _this.ensureCheckNode(parentLi);\n _this.finalizeNode(parentLi);\n _this.renderSubChild(parentLi, expandChild);\n }\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\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 parentLi.removeAttribute('aria-expanded');\n return;\n }\n else {\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.getSortedData(childItems), this.listBaseOption));\n this.expandNode(parentLi, eicon);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.renderSubChild(parentLi, expandChild);\n }\n }\n };\n TreeView.prototype.ensureCheckNode = function (element) {\n if (this.showCheckBox) {\n this.ensureChildCheckState(element);\n this.ensureParentCheckState(element);\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) {\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 var curLi = closest(icon, '.' + LISTITEM);\n this.renderChildNodes(curLi, expandChild);\n }\n }\n };\n TreeView.prototype.toggleSelect = function (li, e, multiSelect) {\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 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)) {\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 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 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.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) {\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 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);\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) {\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 this.validateCheckNode(checkWrap, isChecked, focusedNode, e);\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 this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n this.ensureChildCheckState(li);\n this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n this.nodeCheckedEvent(checkWrap, isCheck, e);\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 this.setFocus(focusedNode, parentLi);\n this.navigateToFocus(true);\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 this.setFocus(focusedNode, rootNode);\n this.navigateToFocus(isBackwards);\n };\n TreeView.prototype.getFocusedNode = function () {\n var fNode = select('.' + LISTITEM + '.' + FOCUS, this.element);\n return isNOU(fNode) ? select('.' + LISTITEM, this.element) : 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 };\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 addClass([nextNode], [HOVER, FOCUS]);\n this.updateIdAttr(preNode, nextNode);\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 this.setHover(currentLi);\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 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 };\n };\n TreeView.prototype.reRenderNodes = function () {\n this.element.innerHTML = '';\n this.setTouchClass();\n this.setProperties({ selectedNodes: [] }, 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 = 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 });\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 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 this.trigger('nodeEdited', this.getEditEvent(liEle, newText, null));\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.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 this.dragObj = new Draggable(this.element, {\n enableTailMode: 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)) {\n return false;\n }\n var cloneEle = (dragWrap.cloneNode(true));\n if (isNOU(select('div.' + ICON, cloneEle))) {\n var icon = createElement('div', { className: ICON + ' ' + EXPANDABLE });\n cloneEle.insertBefore(icon, cloneEle.children[0]);\n }\n var cssClass = DRAGITEM + ' ' + ROOT + ' ' + (_this.enableRtl ? RTL : '');\n virtualEle = 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 = 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 eventArgs = _this.getDragEvent(e.event, _this, null, e.target);\n _this.trigger('nodeDragStart', eventArgs);\n if (eventArgs.cancel) {\n detach(virtualEle);\n removeClass([_this.element], DRAGGING);\n }\n _this.dragStartAction = true;\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 dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n if (!dropTarget || !dropRoot || dropTarget.classList.contains(ROOT)) {\n detach(e.helper);\n document.body.style.cursor = '';\n }\n var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget);\n _this.trigger('nodeDragStop', eventArgs);\n if (eventArgs.cancel) {\n detach(e.helper);\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 (e && (e.event.offsetY < 7)) {\n addClass([icon], DROPNEXT);\n var virEle = createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (1) : (0);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else if (e && (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10))) {\n addClass([icon], DROPNEXT);\n var virEle = 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 this.trigger('nodeDragging', this.getDragEvent(e.event, this, e.target, e.target));\n };\n TreeView.prototype.dropAction = function (e) {\n var offsetY = e.event.offsetY;\n var dropTarget = e.target;\n var dragObj = e.dragData.draggable.ej2_instances[0];\n var dragTarget = dragObj.dragTarget;\n var dragLi = (closest(dragTarget, '.' + LISTITEM));\n var dropLi = (closest(dropTarget, '.' + LISTITEM));\n detach(e.droppedElement);\n document.body.style.cursor = '';\n if (!dropLi || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n return;\n }\n if (dragObj.allowMultiSelection && (dragLi.classList.contains(ACTIVE) || (offsetY < 7 ||\n (e.target.offsetHeight > 0 && offsetY > (e.target.offsetHeight - 10))))) {\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 this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target));\n };\n TreeView.prototype.appendNode = function (dropTarget, dragLi, dropLi, e, dragObj, offsetY) {\n if (dropTarget.nodeName === 'LI') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY);\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.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 }\n else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10))) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n }\n else {\n var dropUl = this.expandParent(dropLi);\n dropUl.insertBefore(dragLi, dropUl.childNodes[index]);\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.expandParent = function (dropLi) {\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE)) {\n this.expandAction(dropLi, dropIcon, null);\n }\n var dropUl = select('.' + PARENTITEM, dropLi);\n if (isNOU(dropUl)) {\n ListBase.generateIcon(dropLi, COLLAPSIBLE, this.listBaseOption);\n var icon = select('div.' + ICON, dropLi);\n removeClass([icon], EXPANDABLE);\n dropUl = ListBase.generateUL([], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n dropLi.setAttribute('aria-expanded', 'true');\n removeClass([dropLi], NODECOLLAPSED);\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 dragParentLi.removeAttribute('aria-expanded');\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 = 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) {\n var dropLi = dropTarget ? closest(dropTarget, '.' + LISTITEM) : null;\n var dropData = dropLi ? this.getNodeData(dropLi) : null;\n return {\n cancel: false,\n event: event,\n draggedNode: obj.dragLi,\n draggedNodeData: obj.dragData,\n droppedNode: dropLi,\n droppedNodeData: dropData,\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 = 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 };\n TreeView.prototype.updateInstance = function () {\n this.updateList();\n this.updateSelectedNodes();\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.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) {\n var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n if (isRemote) {\n this.updateMapper(level);\n }\n var li = ListBase.createListItemFromJson(nodes, this.listBaseOption, level);\n var dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n var refNode = dropUl.childNodes[index];\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[i], refNode);\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 var prop = this.getActualProperties(mapper);\n this.listBaseOption.fields = prop;\n this.listBaseOption.fields.url = prop.navigateUrl;\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 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 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.wireInputEvents = function (inpEle) {\n EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n };\n TreeView.prototype.wireEditingEvents = function (toBind) {\n if (toBind) {\n var proxy_1 = this;\n this.touchEditObj = new Touch(this.element, {\n tap: function (e) {\n if (e.tapCount === 2) {\n e.originalEvent.preventDefault();\n proxy_1.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_2 = this;\n this.touchClickObj = new Touch(this.element, {\n tap: function (e) {\n proxy_2.clickHandler(e.originalEvent);\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_3 = 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_3.expandHandler(e.originalEvent);\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 this.wireExpandOnEvent(true);\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 });\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();\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 'cssClass':\n this.setCssClass(oldProp.cssClass, newProp.cssClass);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'expandOn':\n this.wireExpandOnEvent(false);\n this.setExpandOnType();\n this.wireExpandOnEvent(true);\n break;\n case 'fields':\n this.listBaseOption.fields = this.fields.properties;\n this.listBaseOption.fields.url = this.fields.navigateUrl;\n this.reRenderNodes();\n break;\n case 'fullRowSelect':\n this.setFullRow(this.fullRowSelect);\n this.addFullRow(this.fullRowSelect);\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 { 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 */\n TreeView.prototype.addNodes = function (nodes, target, index) {\n if (isNOU(nodes)) {\n return;\n }\n var dropLi = this.getElement(target);\n nodes = this.getSortedData(nodes);\n if (this.fields.dataSource instanceof DataManager) {\n this.addGivenNodes(nodes, dropLi, index, true);\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 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 }\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 * 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 * 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 */\n TreeView.prototype.moveNodes = function (sourceNodes, target, index) {\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.dropAsChildNode(dragLi, dropLi, this, index);\n }\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 }\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 __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('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()\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 Event()\n ], TreeView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataBound\", 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 = __decorate([\n NotifyPropertyChanges\n ], TreeView);\n return TreeView;\n}(Component));\nexport { TreeView };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, createElement, 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 and 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.setContext();\n this.addClass();\n this.setZindex();\n if (this.enableDock) {\n this.setDock();\n }\n this.setMediaQuery();\n this.setType(this.type);\n this.setCloseOnDocumentClick();\n };\n Sidebar.prototype.setContext = function () {\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector('.' + this.target) }, true);\n }\n if (this.target) {\n this.target.insertAdjacentElement('afterbegin', this.element);\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': formatUnit(this.dockSize) });\n }\n else if (this.enableDock && this.position === 'Right') {\n setStyle(this.element, { 'width': formatUnit(this.dockSize) });\n }\n else if (!this.enableDock) {\n setStyle(this.element, { 'width': formatUnit(this.width) });\n }\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.\n * @returns void\n */\n Sidebar.prototype.hide = function () {\n if (this.element.classList.contains(CLOSE)) {\n return;\n }\n if (this.element.classList.contains(OPEN)) {\n this.eventArguments = { name: 'change', element: this.element };\n this.trigger('change', this.eventArguments);\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.eventArguments = { name: 'change', element: this.element };\n this.trigger('close', this.eventArguments);\n this.destroyBackDrop();\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.remove('e-sidebar-overflow');\n }\n };\n /**\n * Shows the Sidebar component.\n * @returns void\n */\n Sidebar.prototype.show = function () {\n removeClass([this.element], VISIBILITY);\n if (this.element.classList.contains(OPEN)) {\n return;\n }\n if (this.element.classList.contains(CLOSE)) {\n this.eventArguments = { name: 'open', element: this.element };\n this.trigger('change', this.eventArguments);\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.eventArguments.name = 'open';\n this.eventArguments.element = this.element;\n this.trigger('open', this.eventArguments);\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.add('e-sidebar-overflow');\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.isOpen()) {\n setStyle(this.element, { 'transform': 'translateX(' + -100 + '%) translateX(' + formatUnit(this.dockSize) + ')' });\n }\n else if (this.enableDock && this.position === 'Right' && !this.isOpen()) {\n setStyle(this.element, { 'transform': 'translateX(' + 100 + '%) translateX(' + '-' + formatUnit(this.dockSize) + ')' });\n }\n if (this.element.classList.contains(CLOSE) && this.enableDock) {\n setStyle(this.element, { 'width': formatUnit(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.isOpen()) {\n this.modal = 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']);\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 /**\n * Specifies the current state of the Sidebar component.\n * @returns boolean\n */\n Sidebar.prototype.isOpen = 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.isOpen()) {\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 'width':\n this.setWidth();\n if (!this.isOpen()) {\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.isOpen()) {\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 }\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.isOpen()) {\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 }\n this.createBackDrop();\n }\n };\n /**\n * Removes the control from the DOM and removes all its related events\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(true)\n ], Sidebar.prototype, \"enableGestures\", 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","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') {\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, getValue } from '@syncfusion/ej2-base';\nimport { Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getUid, templateCompiler, getForeignData } 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 `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 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 if (!this.field) {\n this.allowFiltering = false;\n this.allowGrouping = false;\n this.allowSorting = false;\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.filter.itemTemplate) {\n this.fltrTemplateFn = templateCompiler(this.filter.itemTemplate);\n }\n if (this.isForeignColumn() && isNullOrUndefined(this.editType)) {\n this.editType = 'dropdownedit';\n this.edit.params = {\n dataSource: this.dataSource,\n query: new Query(), fields: { value: this.foreignKeyField || this.field, text: this.foreignKeyValue }\n };\n }\n if (this.sortComparer) {\n var a_1 = this.sortComparer;\n this.sortComparer = function comparer(x, y) {\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 = getValue(_this.foreignKeyValue, getForeignData(_this, {}, x)[0]);\n y = getValue(_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.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 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 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 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/**\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 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 beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var pdfExportComplete = 'pdfExportComplete';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\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","/* tslint:disable-next-line:max-line-length */\nimport { EventHandler, L10n, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, appendChildren, getDatePredicate } from '../base/util';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getForeignData } from '../base/util';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { getFilterMenuPostion, toogleCheckbox, createCboxWithWrap, removeAddCboxClasses, getColumnByForeignKeyValue } from '../base/util';\n/**\n * @hidden\n * `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.filterState = true;\n this.defaultConstants = {\n Search: 'Search',\n OK: 'OK',\n Cancel: 'Cancel',\n Filter: 'Filter',\n Clear: 'Clear',\n SelectAll: 'Select All',\n Blanks: 'Blanks',\n True: 'True',\n False: 'False',\n NoResult: 'No Matches Found'\n };\n this.values = {};\n this.cBoxTrue = createCheckBox(false, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(false, { checked: false, label: ' ' });\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.initLocale(this.defaultConstants);\n this.cBoxTrue.insertBefore(createElement('input', {\n className: 'e-chk-hidden', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(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 CheckBoxFilter.prototype.initLocale = function (constants) {\n this.localeObj = new L10n(this.getModuleName(), this.defaultConstants, this.parent.locale || 'en-US');\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 EventHandler.add(this.dlg.querySelector('.e-searchinput'), 'keyup', this.searchBoxKeyUp, 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.searchBoxKeyUp);\n }\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 if (!(dataSource instanceof DataManager)) {\n for (var i = 0; i < dataSource.length; i++) {\n if (typeof dataSource !== 'object') {\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.isFiltered = options.filteredColumns.length;\n extend(this.defaultConstants, options.localizedStrings);\n };\n CheckBoxFilter.prototype.getAndSetChkElem = function (options) {\n this.dlg = createElement('div', {\n id: this.id + this.options.type + '_excelDlg',\n className: 'e-checkboxfilter e-filter-popup'\n });\n this.sBox = createElement('div', { className: 'e-searchcontainer' });\n if (!options.hideSearchbox) {\n this.sInput = createElement('input', {\n id: this.id + '_SearchBox',\n className: 'e-searchinput'\n });\n this.sIcon = createElement('span', {\n className: 'e-searchclear e-search-icon e-icons e-input-group-icon', attrs: {\n type: 'text', placeholder: this.getLocalizedLabel('Search')\n }\n });\n this.searchBox = createElement('span', { className: 'e-searchbox e-fields' });\n this.searchBox.appendChild(this.sInput);\n this.sBox.appendChild(this.searchBox);\n Input.createInput({\n element: this.sInput, floatLabelType: 'Never', properties: {\n placeholder: this.getLocalizedLabel('Search')\n }\n });\n this.searchBox.querySelector('.e-input-group').appendChild(this.sIcon);\n }\n this.spinner = createElement('div', { className: 'e-spinner' }); //for spinner\n this.cBox = 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: { content: this.getLocalizedLabel(this.isExcel ? 'OK' : 'Filter'), cssClass: 'e-primary', isPrimary: true }\n },\n {\n click: this.btnClick.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.getLocalizedLabel(this.isExcel ? 'Cancel' : 'Clear') }\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 });\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 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 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 args = {\n action: 'filtering', filterCollection: {\n field: this.options.field,\n operator: this.options.column.type === 'date' || this.options.column.type === 'datetime' ? 'equal' : 'contains',\n value: e.target.value, matchCase: false, type: this.options.column.type\n },\n field: this.options.field\n };\n e.target.value ? this.options.handler(args) : this.closeDialog();\n }\n else {\n var text = e.target.firstChild.textContent.toLowerCase();\n if (this.getLocalizedLabel(this.isExcel ? 'OK' : 'Filter').toLowerCase() === text) {\n this.fltrBtnHandler();\n }\n else if (this.getLocalizedLabel('Clear').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, 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 coll.push(fObj);\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 val = this.sInput.value;\n var query = this.options.query.clone();\n var parsed = (this.options.type !== 'string' && parseFloat(val)) ? parseFloat(val) : val;\n var operator = 'contains';\n var matchCase = true;\n var ignoreAccent = this.parent.filterSettings.ignoreAccent;\n parsed = (parsed === '' || parsed === undefined) ? undefined : parsed;\n var predicte;\n if (this.options.type === 'boolean') {\n if (parsed !== undefined &&\n this.getLocalizedLabel('True').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'true';\n }\n else if (parsed !== undefined &&\n this.getLocalizedLabel('False').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'false';\n }\n }\n predicte = new Predicate(this.options.field, operator, parsed, matchCase, 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 predicte = getDatePredicate({\n field: this.options.field, operator: operator, value: parsed, matchCase: matchCase,\n ignoreAccent: ignoreAccent\n });\n }\n if (val.length) {\n query.where(predicte);\n }\n this.processDataSource(query);\n };\n CheckBoxFilter.prototype.getPredicateFromCols = function (columns) {\n var predicate;\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 _this = this;\n var query = new Query();\n query.requiresCount(); //consider take query\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()) {\n allPromise.push(this.options.column.dataSource.executeQuery(new Query()));\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 var res = CheckBoxFilter.getDistinct(result, this.options.field, col, this.foreignKeyData);\n this.filteredData = res.records;\n this.processDataSource(null, true);\n this.dialogObj.element.querySelector('.e-searchinput').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) {\n showSpinner(this.spinner);\n query = query ? query : this.options.query.clone();\n query.requiresCount();\n var args = {\n requestType: events.filterChoiceRequest, filterModel: this, query: query,\n dataSource: this.filteredData\n };\n this.parent.trigger(events.actionBegin, args);\n var result = new DataManager(args.dataSource).executeLocal(args.query);\n var res = result;\n this.updateResult();\n this.createFilterItems(res.result, isInitial);\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) {\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 if (this.options.template) {\n label.innerHTML = '';\n var args = {};\n args[this.options.field] = value;\n appendChildren(label, this.options.template(args));\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.dlg.querySelector('.e-footer-content').querySelector('.e-btn').ej2_instances[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 cBoxes = createElement('div');\n var btn = this.dlg.querySelector('.e-footer-content').querySelector('.e-btn').ej2_instances[0];\n this.itemsCnt = data.length;\n if (data.length) {\n var selectAll = createCboxWithWrap(getUid('cbox'), this.createCheckbox(this.getLocalizedLabel('SelectAll'), false), '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 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 cBoxes.appendChild(createCboxWithWrap(uid, this.createCheckbox(value, this.getCheckedState(isColFiltered, this.values[uid])), 'e-ftrchk'));\n }\n this.cBox.innerHTML = cBoxes.innerHTML;\n this.updateIndeterminatenBtn();\n btn.disabled = false;\n }\n else {\n cBoxes.appendChild(createElement('span', { innerHTML: this.getLocalizedLabel('NoResult') }));\n this.cBox.innerHTML = cBoxes.innerHTML;\n btn.disabled = true;\n }\n this.filterState = !btn.disabled;\n btn.dataBind();\n var args = { requestType: events.filterChoiceRequest, filterModel: this, dataSource: 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 (!isNullOrUndefined(value)) {\n if (!(value in lookup)) {\n var obj = {};\n obj[ejValue] = value;\n lookup[value] = true;\n value = isForeignKey ? getValue(column.foreignKeyValue, getForeignData(column, {}, value, foreignKeyData)[0]) : value;\n setValue(field, value || null, obj);\n result.push(obj);\n }\n }\n }\n return DataUtil.group(DataUtil.sort(result, field, DataUtil.fnAscending), 'ejValue');\n };\n CheckBoxFilter.getPredicate = function (columns) {\n var cols = CheckBoxFilter.getDistinct(columns, 'field').records;\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);\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]));\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].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 } 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) {\n return;\n }\n this.parent.on(events.rowsAdded, this.addRows, 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 /**\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.query.clone();\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 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 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 col.setSortDirection(columns[i].direction);\n var fn = col.sortComparer && !this.isRemote() ? col.sortComparer.bind(col) : 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 if (this.parent.searchSettings.key.length) {\n var predicate = void 0;\n if (this.parent.getForeignKeyColumns().length) {\n fields.forEach(function (columnName) {\n var column = _this.getColumnByField(columnName);\n var sQuery = new Query();\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, _this.parent.filterSettings.ignoreAccent));\n }\n });\n query.where(Predicate.or(predicateList));\n }\n else {\n query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, this.parent.filterSettings.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.columns; _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));\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 switch (args.requestType) {\n case 'delete':\n query = query ? query : this.generateQuery();\n this.dataManager.remove(key, args.data[0], null, query);\n break;\n case 'save':\n query = query ? query : this.generateQuery();\n args.index = isNullOrUndefined(args.index) ? 0 : args.index;\n this.dataManager.insert(args.data, null, query, args.index);\n break;\n }\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 };\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, null, this.generateQuery());\n break;\n }\n args[pr] = promise;\n this.parent.notify(events.crudAction, args);\n };\n /** @hidden */\n Data.prototype.saveChanges = function (changes, key) {\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, null, this.generateQuery().requiresCount());\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.dataSourceModified, 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 return JSON.parse(state.data);\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) {\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 });\n _this.parent.trigger(events.dataStateChange, state);\n });\n }\n else {\n this.setState({ isPending: true, resolver: def.resolve, group: state.group });\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 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 span = row.cells[i].cellSpan ? row.cells[i].cellSpan :\n (cellArgs.colSpan + i) <= row.cells.length ? cellArgs.colSpan : row.cells.length - i;\n var visible = 0;\n for (var j = i + 1; j < i + span && 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 + span; j < i + span + visible && j < row.cells.length; j++) {\n row.cells[j].isSpanned = true;\n }\n if (i + span + visible >= row.cells.length) {\n span -= (i + span + 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 (span > 1) {\n attributes(td, { 'colSpan': span.toString(), 'aria-colSpan': span.toString() });\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 } from '@syncfusion/ej2-base';\nimport { createElement, attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes } 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.element = createElement('tr', { attrs: { role: 'row' } });\n this.cellType = cellType;\n this.serviceLocator = serviceLocator;\n this.parent = parent;\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 if (row.isDataRow) {\n row.isSelected = this.parent.getSelectedRowIndexes().indexOf(row.index) > -1;\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 for (var i = 0, len = row.cells.length; i < len; i++) {\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'] = '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.parent.trigger(queryCellInfo, extend(cellArgs, {\n cell: td, column: cell.column, colSpan: 1,\n foreignKeyData: row.cells[i].foreignKeyData\n }));\n if (cellArgs.colSpan > 1 || row.cells[i].cellSpan > 1) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.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 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) {\n tr.style.height = this.parent.rowHeight + 'px';\n }\n if (row.cssClass) {\n tr.classList.add(row.cssClass);\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 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 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 = this.parent.getColumnIndexByField(column.field);\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 = 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 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 } 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) {\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 indentLength = this.parent.groupSettings.columns.length + (this.parent.detailTemplate ? 1 : 0);\n this.getColumns(start, end).forEach(function (value, index) { return tmp.push(_this.getGeneratedCell(value, summaryRow, index >= indentLength ? _this.getCellType() : CellType.Indent, indents[index])); });\n var row = new Row({ data: data, attributes: { class: 'e-summaryrow' } });\n row.cells = tmp;\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) {\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 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 = group.aggregates && !isNullOrUndefined(group.aggregates[key]) ? 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] = 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 = 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 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 } 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 ? (this.parent.pageSettings.currentPage - 1) * data.records.length : 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 level = raw;\n if (isNullOrUndefined(data.items)) {\n if (isNullOrUndefined(data.GroupGuid)) {\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 var _a;\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 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 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 { createElement, setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf } 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 }\n _this.parent.hideSpinner();\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 = createElement('div', { className: 'e-gridcontent' });\n var innerDiv = 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 = 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(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 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 modelData = this.generator.generateRows(dataSource, args);\n var idx = modelData[0].cells[0].index;\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 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 if (!gObj.rowTemplate) {\n tr = row.render(modelData[i], columns);\n }\n else {\n var elements = gObj.getRowTemplate()(extend({ index: i }, dataSource[i]), gObj, 'rowTemplate');\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 }\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n this.rows.push(modelData[i]);\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 getUpdateUsingRaf(function () {\n remove(_this.tbody);\n _this.tbody = createElement('tbody');\n if (frzCols) {\n _this.tbody.appendChild(frag);\n if (idx === 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(createElement('tr').appendChild(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 }, 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 return ContentRender;\n}());\nexport { ContentRender };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, 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 } 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.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 = 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');\n var col;\n if (headercelldiv) {\n col = gObj.getColumnByUid(headercelldiv.getAttribute('e-mappinguid'));\n _this.column = col;\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.textContent = 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 = createElement('div', { className: 'e-gridheader' });\n var innerDiv = 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 = 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 = createElement('tbody', { className: this.parent.frozenRows ? '' : 'e-hide' });\n this.caption = createElement('caption', { innerHTML: this.parent.element.id + '_header_table', className: 'e-hide' });\n var colGroup = createElement('colgroup');\n var rowBody = createElement('tr');\n var bodyCell;\n var rows = this.rows = findHeaderRow.rows;\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header);\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 = 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 = createElement('thead');\n var colHeader = 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 = this.getObjDepth();\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) {\n headerRow.style.height = this.parent.rowHeight + 'px';\n }\n thead.appendChild(headerRow);\n }\n var findHeaderRow = {\n thead: thead,\n rows: rows\n };\n return findHeaderRow;\n };\n HeaderRender.prototype.updateColGroup = function (colGroup) {\n var cols = this.parent.getColumns();\n var col;\n var indexes = this.parent.getColumnIndexesInView();\n if (this.parent.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 = createElement('col');\n colGroup.appendChild(col);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n col = createElement('col');\n colGroup.appendChild(col);\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n col = 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 }\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 for (var i = 0, len = cols.length; i < len; i++) {\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 || (frzCols\n && ((!isMovable && (this.frzIdx < this.parent.frozenColumns || cols.isFrozen))\n || (isMovable && this.frzIdx >= this.parent.frozenColumns && !cols.isFrozen)))) {\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 this.frzIdx++;\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 if (!frzCols || (frzCols\n && ((!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)\n }));\n }\n }\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 return rows;\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) {\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 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 remove(this.getTable());\n table.removeChild(table.firstChild);\n table.removeChild(table.childNodes[0]);\n var colGroup = 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 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 HeaderRender.prototype.appendContent = function (table) {\n this.getPanel().firstChild.appendChild(table);\n };\n HeaderRender.prototype.getObjDepth = function () {\n var max = 0;\n var cols = this.parent.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n var depth = this.checkDepth(cols[i], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n };\n HeaderRender.prototype.checkDepth = function (col, index) {\n if (col.columns) {\n index++;\n for (var i = 0, len = col.columns.length; i < len; i++) {\n index = this.checkDepth(col.columns[i], index);\n }\n }\n return index;\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 { createElement } from '@syncfusion/ej2-base';\nimport { doesImplementInterface, setStyleAndAttributes, appendChildren } from '../base/util';\nimport { CheckBox, 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.element = createElement('TD', { className: 'e-rowcell', attrs: { role: 'gridcell', tabindex: '-1' } });\n this.rowChkBox = createElement('input', { className: 'e-checkselect', attrs: { 'type': 'checkbox' } });\n this.localizer = locator.getService('localization');\n this.formatter = locator.getService('valueFormatter');\n this.parent = parent;\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 result;\n if (cell.column.template) {\n var literals = ['index'];\n var dummyData = extend({}, 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 node.setAttribute('aria-label', node.innerText + ' is template cell' + ' column header ' +\n cell.column.headerText);\n return false;\n }\n return true;\n var _a;\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 node = this.element.cloneNode();\n var column = cell.column;\n var fData;\n if (cell.isForeignKey) {\n fData = cell.foreignKeyData[0];\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' && !isNullOrUndefined(value)) {\n value = new Date(value);\n }\n value = this.format(column, value, data);\n innerHtml = value.toString();\n if (column.type === 'boolean') {\n if (column.displayAsCheckBox) {\n node.classList.add('e-checkbox');\n innerHtml = '';\n }\n else {\n var localeStr = (value !== 'true' && value !== 'false') ? null : value === 'true' ? 'True' : 'False';\n innerHtml = localeStr ? this.localizer.getConstant(localeStr) : innerHtml;\n }\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(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') {\n var obj = new CheckBox({\n disabled: true,\n checked: isNaN(parseInt(value, 10)) ? value === 'true' : parseInt(value, 10) > 0\n });\n obj.appendTo(node.firstElementChild);\n node.setAttribute('aria-label', obj.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 = 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 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 { createElement, attributes } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { AriaService } from '../services/aria-service';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\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 = createElement('TH', { className: 'e-headercell', attrs: { role: 'columnheader', tabindex: '-1' } });\n _this.ariaService = new AriaService();\n _this.hTxtEle = createElement('span', { className: 'e-headertext' });\n _this.sortEle = createElement('div', { className: 'e-sortfilterdiv e-icons' });\n _this.gui = createElement('div');\n _this.chkAllBox = 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 = 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 = 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 //TODO: Header Template support.\n headerText[column.getDomSetter()] = value;\n innerDIV.appendChild(headerText);\n }\n else {\n column.editType = 'booleanedit';\n var checkAllWrap = createCheckBox(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 if (!isNullOrUndefined(column.headerTemplate)) {\n if (column.headerTemplate.indexOf('#') !== -1) {\n innerDIV.innerHTML = document.querySelector(column.headerTemplate).innerHTML.trim();\n }\n else {\n innerDIV.innerHTML = column.headerTemplate;\n }\n }\n this.ariaService.setOptions(node, ariaAttr);\n if (!isNullOrUndefined(column.headerTextAlign) || !isNullOrUndefined(column.textAlign)) {\n var alignment = column.headerTextAlign || column.textAlign;\n innerDIV.style.textAlign = alignment;\n if (alignment === 'Right' || alignment === 'Left') {\n node.classList.add(alignment === 'Right' ? 'e-rightalign' : 'e-leftalign');\n }\n else if (alignment === 'Center') {\n node.classList.add('e-centeralign');\n }\n }\n if (column.clipMode === 'Clip') {\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 return node;\n };\n HeaderCellRenderer.prototype.extendPrepareHeader = function (column, node) {\n if (this.parent.showColumnMenu && column.showColumnMenu && !isNullOrUndefined(column.field)) {\n var element = (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 = 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 = 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 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 { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\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 = 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 = createElement('div', { className: 'e-stackedheadercelldiv' });\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 return node;\n };\n return StackedHeaderCellRenderer;\n}(CellRenderer));\nexport { StackedHeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { 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 = 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 = 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 function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, isNullOrUndefined } 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 = createElement('TD', { className: 'e-groupcaption', attrs: { 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 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 if (gObj.groupSettings.captionTemplate.indexOf('#') !== -1) {\n result = templateCompiler(document.querySelector(gObj.groupSettings.captionTemplate).innerHTML.trim())(data);\n }\n else {\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data);\n }\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 = 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 = 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 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 { 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(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 = 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 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 * 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 = 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(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 = 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 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 DetailHeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(DetailHeaderIndentCellRenderer, _super);\n function DetailHeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = 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(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 = 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 function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, isNullOrUndefined } 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 = 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(createElement('div', { className: 'e-icons e-dtdiagonaldown e-icon-gdownarrow' }));\n }\n else {\n node.appendChild(createElement('div', { className: 'e-icons e-dtdiagonalright e-icon-grightarrow' }));\n }\n return node;\n };\n return DetailExpandCellRenderer;\n}(CellRenderer));\nexport { DetailExpandCellRenderer };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RenderType, CellType } from '../base/enum';\nimport { Data } from '../actions/data';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport * as events from '../base/constant';\nimport { prepareColumns, calculateAggregate, setFormatter, getDatePredicate } 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';\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.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 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.parent.isEdit = false;\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 .catch(function (e) { _this.parent.trigger(events.actionFailure, e); return e; });\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 }).catch(function (e) { _this.parent.trigger(events.actionFailure, e); return e; });\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); });\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 var promise = this.data.saveChanges(args.changes, this.parent.getPrimaryKeyFieldNames()[0]);\n if (this.data.dataManager.dataSource.offline) {\n this.refreshDataManager({ requestType: 'batchsave' });\n return;\n }\n else {\n promise.then(function (e) { return _this.dmSuccess(e, args); })\n .catch(function (e) { return _this.dmFailure(e); });\n }\n };\n Render.prototype.dmSuccess = function (e, args) {\n this.dataManagerSuccess(e, args);\n };\n Render.prototype.dmFailure = function (e) {\n this.dataManagerFailure(e);\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 remove(tbody);\n tbody = createElement('tbody');\n tr = createElement('tr', { className: 'e-emptyrow' });\n tr.appendChild(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.updateColumnType = function (record) {\n var columns = this.parent.getColumns();\n var value;\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 = columns[i].isForeignColumn() ? getValue(columns[i].foreignKeyValue || '', columns[i].columnData[0]) :\n getValue(columns[i].field || '', data);\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 Render.prototype.dataManagerSuccess = function (e, args) {\n var gObj = this.parent;\n gObj.trigger(events.beforeDataBound, e);\n var len = Object.keys(e.result).length;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.notify(events.tooltipDestroy, {});\n gObj.currentViewData = e.result;\n if (!len && e.count && gObj.allowPaging) {\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) {\n this.updatesOnInitialRender(e);\n }\n if (!this.isColTypeDef && gObj.getCurrentViewRecords()) {\n this.updateColumnType(gObj.getCurrentViewRecords()[0]);\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.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) {\n this.ariaService.setOptions(this.parent.getContent().firstChild, { busy: false, invalid: true });\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.currentViewData = [];\n this.renderEmptyRow();\n this.parent.hideSpinner();\n };\n Render.prototype.updatesOnInitialRender = function (e) {\n this.buildColumns(e.result[0]);\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.DetailExpand, new DetailExpandCellRenderer(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(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 };\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;\n element.aggregates[key] = calculateAggregate(type, itemGroup.level ? uGroupItem.records : uGroup.items, column);\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 }\n this.parent.getColumns().forEach(function (column, index) {\n _this.setColumnWidth(column, wFlag ? undefined : index);\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 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 edit.querySelector('colgroup').children[index].style.width = fWidth;\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 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 = 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 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.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 matrix = cFocus.matrix.generate(updateRow, cFocus.selector);\n cFocus.matrix.generate(rows, cFocus.selector);\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 };\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 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) {\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));\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 = this.getTable().rows[rowIndex].cells[cellIndex];\n if (!info.element) {\n return info;\n }\n info.elementToFocus = !info.element.classList.contains('e-unboundcell') && !info.element.classList.contains('e-detailcell')\n && !info.element.classList.contains('e-templatecell') ? this.getFocusable(info.element) : info.element;\n info.outline = true;\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) {\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.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 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 var _a;\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.frozenColumns ? 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 current = [];\n if (action === 'upArrow' || action === 'shiftEnter') {\n current[0] = this.matrix.matrix.length;\n current[1] = previous[1];\n }\n else if (action === 'rightArrow' || action === 'tab') {\n current[0] = previous[0];\n current[1] = -1;\n }\n return current;\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, rIndex = _a[0], cIndex = _a[1];\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 === '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 current = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current[0] = previous[0];\n current[1] = active.matrix.columns + 1;\n }\n else if (action === 'downArrow' || action === 'enter') {\n current[0] = -1;\n current[1] = previous[1];\n }\n return current;\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 current = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current[0] = previous[0];\n current[1] = active.matrix.columns + 1;\n }\n else if (action === 'upArrow' || action === 'shiftEnter') {\n current[0] = this.matrix.matrix.length;\n current[1] = previous[1];\n }\n return current;\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 = 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 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) || 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};\nimport { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, createElement, 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';\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 variables \n /**\n * @hidden\n */\n this.selectedRowIndexes = [];\n /**\n * @hidden\n */\n this.selectedRowCellIndexes = [];\n /**\n * @hidden\n */\n this.selectedRecords = [];\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.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 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 /**\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 var gObj = this.parent;\n var selectedRow = gObj.getRowByIndex(index);\n var selectedMovableRow = this.getSelectedMovableRow(index);\n var selectData = gObj.getCurrentViewRecords()[index];\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 : index === this.prevRowIndex && isRowSelected;\n var args;\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, row: selectedRow,\n previousRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex, target: this.target\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n }\n this.clearRow();\n if (!isToggle) {\n this.updateRowSelection(selectedRow, index);\n if (gObj.getFrozenColumns()) {\n this.updateRowSelection(selectedMovableRow, index);\n }\n gObj.selectedRowIndex = index;\n }\n this.updateRowProps(index);\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index,\n row: selectedRow, previousRow: gObj.getRows()[this.prevRowIndex],\n previousRowIndex: this.prevRowIndex, target: this.target\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n }\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 selectedData = gObj.getCurrentViewRecords()[rowIndexes[0]];\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n var args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.target,\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 this.clearRow();\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.target,\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 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]);\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], [selectedMovableRow]);\n }\n else {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.target,\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 (this.isSingleSel()) {\n this.clearRow();\n }\n this.updateRowSelection(selectedRow, rowIndex);\n if (frzCols) {\n this.updateRowSelection(selectedMovableRow, rowIndex);\n }\n }\n this.updateRowProps(rowIndex);\n if (!isUnSelected) {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.target,\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 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 if (this.parent.isPersistSelection && !isNullOrUndefined(selectedRow)) {\n var rowObj = this.getRowObj(selectedRow);\n var pKey = rowObj.data ? rowObj.data[this.primaryKey] : null;\n if (pKey === null) {\n return;\n }\n rowObj.isSelected = chkState;\n if (chkState) {\n this.selectedRowState[pKey] = chkState;\n if (this.persistSelectedData.indexOf(rowObj.data) < 0) {\n this.persistSelectedData.push(rowObj.data);\n }\n }\n else {\n delete (this.selectedRowState[pKey]);\n if (this.persistSelectedData.indexOf(rowObj.data) >= 0) {\n this.persistSelectedData.splice(this.persistSelectedData.indexOf(rowObj.data), 1);\n }\n }\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();\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 currentViewData = this.parent.getCurrentViewRecords();\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var currentRow = 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, mRow);\n rows.filter(function (record) { return record.hasAttribute('aria-selected'); }).forEach(function (ele) {\n ele.removeAttribute('aria-selected');\n _this.addRemoveClassesForRow(ele, false, true, 'e-selectionbackground', 'e-active');\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 movableRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(movableRow, false, true, 'e-selectionbackground', 'e-active');\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, mRow);\n }\n };\n Selection.prototype.rowDeselect = function (type, rowIndex, data, row, foreignKeyData, mRow) {\n this.updatePersistCollection(row[0], false);\n var rowDeselectObj = { rowIndex: rowIndex, data: data, row: row, foreignKeyData: foreignKeyData };\n this.parent.trigger(type, this.parent.getFrozenColumns() ? __assign({}, rowDeselectObj, { mRow: mRow }) : rowDeselectObj);\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 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 = gObj.getCurrentViewRecords()[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 this.onActionBegin({\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 }, events.cellSelecting);\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 selectedData = gObj.getCurrentViewRecords()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n this.onActionBegin({\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 }, events.cellSelecting);\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 !== 'Box') {\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 = gObj.getCurrentViewRecords()[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 = gObj.getCurrentViewRecords()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\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 if (cells[0] && cells[0].classList.contains('e-gridchkbox')) {\n this.updateCheckBoxes(closest(cells[0], 'tr'));\n }\n this.parent.trigger(type, {\n cells: cells, data: data, cellIndexes: cellIndexes, foreignKeyData: foreignKeyData\n });\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 = gObj.getCurrentViewRecords();\n var selectedTable = void 0;\n var frzCols = gObj.getFrozenColumns();\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 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 }\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.selectRowsByRange(this.startIndex, rowIndex);\n }\n else {\n var td = parentsUntil(e.target, 'e-rowcell');\n if (td) {\n this.selectLikeExcel(rowIndex, parseInt(td.getAttribute('aria-colindex'), 10));\n }\n }\n }\n };\n Selection.prototype.selectLikeExcel = function (rowIndex, cellIndex) {\n this.clearCellSelection();\n this.selectCellsByRange({ rowIndex: this.startIndex, cellIndex: this.startCellIndex }, { rowIndex: rowIndex, cellIndex: cellIndex });\n };\n Selection.prototype.mouseUpHandler = function (e) {\n document.body.classList.remove('e-disableuserselect');\n if (this.element) {\n remove(this.element);\n }\n EventHandler.remove(this.parent.getContent(), 'mousemove', this.mouseMoveHandler);\n EventHandler.remove(document.body, 'mouseup', this.mouseUpHandler);\n this.isDragged = false;\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 (target.classList.contains('e-rowcell') && !e.shiftKey && !e.ctrlKey) {\n if (gObj.selectionSettings.cellSelectionMode === 'Box' && !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 = createElement('div', { className: 'e-griddragarea' });\n gObj.getContent().appendChild(this.element);\n }\n if (isDrag) {\n var tr = closest(e.target, 'tr');\n this.startIndex = parseInt(tr.getAttribute('aria-rowindex'), 10);\n this.startCellIndex = parseInt(parentsUntil(target, 'e-rowcell').getAttribute('aria-colindex'), 10);\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 }\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.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.dataReady, 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.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.dataReady, 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.dataReady = 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.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 };\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.parent.getCurrentViewRecords().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.parent.getCurrentViewRecords().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 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 };\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.parent.getCurrentViewRecords().length) {\n this.selectRowsByRange(cRenderer.getVirtualRowIndex(0), cRenderer.getVirtualRowIndex(this.parent.getCurrentViewRecords().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 = [];\n }\n else if (this.parent.checkAllRows === 'Check') {\n this.setRowSelection(true);\n this.persistSelectedData = this.getData().slice();\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 state = this.getCheckAllStatus(checkBox) === 'Check';\n this.checkSelectAllAction(!state);\n this.target = null;\n if (this.parent.getCurrentViewRecords().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.setCheckAllState = function (isInteraction) {\n if (this.parent.isCheckBoxSelection) {\n var checkedLen = Object.keys(this.selectedRowState).length;\n if (!this.parent.isPersistSelection) {\n checkedLen = this.selectedRecords.length;\n this.totalRecordsCount = this.parent.getCurrentViewRecords().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) {\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.parent.getCurrentViewRecords().length === 0) {\n addClass([spanEle], ['e-uncheck']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, false, true);\n }\n this.parent.checkAllRows = 'Uncheck';\n }\n else {\n addClass([spanEle], ['e-stop']);\n this.parent.checkAllRows = 'Intermediate';\n }\n }\n }\n };\n Selection.prototype.clickHandler = function (e) {\n var target = e.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 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 this.target = closest(target, '.e-rowcell');\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 this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\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 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 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 }\n else if (this.isMultiShiftRequest) {\n this.selectRowsByRange(isUndefined(this.prevRowIndex) ? rowIndex : this.prevRowIndex, rowIndex);\n this.selectCellsByRange(isUndefined(this.prevCIdxs) ? { rowIndex: rowIndex, cellIndex: cellIndex } : this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n else {\n this.addRowsToSelection([rowIndex]);\n this.addCellsToSelection([{ rowIndex: rowIndex, cellIndex: cellIndex }]);\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) {\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 };\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') {\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 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 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 };\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.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 };\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 };\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 /**\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.getSelectedRecords().length) {\n this.parent.clearSelection();\n }\n this.parent.notify(events.columnVisibilityChanged, columns);\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 } from '../base/util';\nimport { scroll, contentReady, uiUpdate, onEmpty } 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 };\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 };\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) {\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 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 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 if (table.scrollHeight < this.parent.getContent().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.enableVirtualization) {\n this.content.scrollLeft = this.header.scrollLeft;\n this.content.scrollTop = this.previousValues.top;\n }\n if (!this.parent.enableColumnVirtualization) {\n this.content.scrollLeft = this.header.scrollLeft;\n }\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 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","import { print as printWindow, createElement, detach } from '@syncfusion/ej2-base';\nimport { removeElement, getActualProperties, getActualPropFromColl } from '../base/util';\nimport { Grid } from '../base/grid';\nimport * as events from '../base/constant';\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.printing = 'isPrinting';\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.contentReady.bind(this));\n this.parent.addEventListener(events.actionBegin, this.actionBegin.bind(this));\n this.parent.on(events.onEmpty, this.onEmpty.bind(this));\n this.scrollModule = scrollModule;\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 elem = 'element';\n var printGridModel = {};\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 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] = this.parent.printMode === 'CurrentPage';\n }\n else {\n printGridModel[key] = getActualProperties(gObj[key]);\n }\n }\n var printGrid = new Grid(printGridModel);\n printGrid.appendTo(element);\n printGrid[this.printing] = true;\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 };\n if (!this.isAsyncPrint) {\n gObj.trigger(events.beforePrint, args);\n }\n if (args.cancel) {\n detach(gObj.element);\n return;\n }\n else if (!this.isAsyncPrint) {\n this.printGrid();\n }\n }\n };\n Print.prototype.printGrid = function () {\n var gObj = this.parent;\n // Pager eleement process based on primt mode\n if (gObj.allowPaging && gObj.printMode === 'CurrentPage') {\n gObj.element.querySelector('.e-gridpager').style.display = 'none';\n }\n // Height adjustment on print grid\n if (gObj.height !== 'auto') {\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.groupSettings.columns.length, gObj.element);\n removeElement(gObj.element, '.e-grouptopleftcell');\n removeElement(gObj.element, '.e-recordpluscollapse');\n removeElement(gObj.element, '.e-indentcell');\n removeElement(gObj.element, '.e-recordplusexpand');\n }\n }\n // hide horizontal scroll\n gObj.element.querySelector('.e-content').style.overflowX = 'hidden';\n //hide filter bar in print grid\n if (gObj.allowFiltering && gObj.filterSettings.type === 'FilterBar') {\n gObj.element.querySelector('.e-filterbar').style.display = 'none';\n }\n // Hide the waiting popup\n var waitingPop = gObj.element.querySelectorAll('.e-spin-show');\n if (waitingPop.length > 0) {\n waitingPop[0].classList.add('e-spin-hide');\n waitingPop[0].classList.remove('e-spin-show');\n }\n if (gObj[this.printing]) {\n detach(gObj.element);\n }\n gObj.element.classList.remove('e-print-grid');\n this.printWind = printWindow(gObj.element, this.printWind);\n gObj[this.printing] = false;\n var args = {\n element: gObj.element\n };\n gObj.trigger(events.printComplete, args);\n };\n Print.prototype.removeColGroup = function (depth, element) {\n var groupCaption = element.querySelectorAll('.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');\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[this.printing];\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 };\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 = [\n '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',\n 'rowHeight', 'rowTemplate', 'sortSettings', 'textWrapSettings', 'allowPaging',\n events.beforePrint, events.printComplete\n ];\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 () {\n var valueFormatter = new ValueFormatter();\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, createElement, remove } from '@syncfusion/ej2-base';\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 };\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 };\n Clipboard.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n this.clipBoardTextArea = createElement('textarea', {\n className: 'e-clipboard',\n styles: 'opacity: 0',\n attrs: { readonly: 'true', 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 remove(this.clipBoardTextArea);\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 = 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 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 { createElement, addClass, removeClass, append, classList } 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 * 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 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 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 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.freezeRefresh = Component.prototype.refresh;\n _this.needsID = true;\n setValue('mergePersistData', _this.mergePersistGridData, _this);\n return _this;\n }\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'];\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 });\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.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.isMediaQuery = false;\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 };\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 });\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.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 this.isMediaQuery = true;\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 if (this.isMediaQuery) {\n this.refresh();\n this.isMediaQuery = false;\n }\n this.isInitialLoad = true;\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 this.unwireEvents();\n this.removeListener();\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n _super.prototype.destroy.call(this);\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 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 /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n Grid.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n var requireGridRefresh = false;\n var checkCursor;\n var args = { requestType: 'refresh' };\n if (this.isDestroyed) {\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 '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 requireRefresh = true;\n }\n break;\n case 'currencyCode':\n case 'locale':\n _super.prototype.refresh.call(this);\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 '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 if (!(isNullOrUndefined(newProp.groupSettings.showDropArea))) {\n this.headerModule.refreshUI();\n requireRefresh = true;\n checkCursor = true;\n }\n this.notify(events.inBoundModelChanged, { module: 'group', properties: newProp.groupSettings });\n break;\n case 'aggregates':\n this.notify(events.uiUpdate, { module: 'aggregate', properties: newProp });\n break;\n case 'columns':\n this.updateColumnObject();\n requireGridRefresh = true;\n break;\n case 'frozenColumns':\n case 'frozenRows':\n this.freezeRefresh();\n break;\n default:\n this.extendedPropertyChange(prop, newProp);\n }\n }\n if (checkCursor) {\n this.updateDefaultCursor();\n }\n if (requireGridRefresh) {\n this.refresh();\n }\n else if (requireRefresh) {\n this.notify(events.modelChanged, args);\n requireRefresh = false;\n }\n };\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) {\n this.toolbarModule.getToolbar().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.toolbarModule.getToolbar().ej2_instances[0].dataBind();\n }\n if (this.contextMenuItems) {\n this.contextMenuModule.getContextMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.contextMenuModule.getContextMenu().ej2_instances[0].dataBind();\n }\n if (this.showColumnMenu) {\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 var gResult_1 = this.dataSource.result;\n if (pending_1.isPending) {\n (pending_1.group || []).forEach(function (name) { gResult_1 = DataUtil.group(gResult_1, name); });\n this.dataSource = { result: gResult_1, count: this.dataSource.count };\n pending_1.resolver(this.dataSource);\n }\n else {\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 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.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 };\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 /**\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.getColumnIndexesInView = function () {\n return this.inViewIndexes;\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 pkName = this.getPrimaryKeyFieldNames()[0];\n var cell = new CellRenderer(this, this.serviceLocator);\n var selectedRow = {};\n var rowObjects = this.contentModule.getRows();\n fieldIdx = this.getColumnIndexByField(field);\n col = this.getColumnByField(field);\n selectedRow = rowObjects.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 if (!isNullOrUndefined(tr)) {\n setValue(field, value, selectedRow[rowData]);\n var td = tr.childNodes[fieldIdx];\n if (!isNullOrUndefined(td)) {\n cell.refreshTD(td, selectedRow[cells][fieldIdx], selectedRow[rowData]);\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 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 }\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 * 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 index = iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -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(), function (item, index) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\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 * 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 key = 0, col = this.columns, cLen = col.length; key < cLen; key++) {\n if (col[key].isPrimaryKey) {\n keys.push(col[key].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.updateDefaultCursor();\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.selectedRowCellIndexes;\n };\n /**\n * Gets the collection of selected records.\n * @return {Object[]}\n */\n Grid.prototype.getSelectedRecords = function () {\n return 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 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 this.pagerModule.goToPage(pageNo);\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 this.pagerModule.updateExternalMessage(message);\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 this.sortModule.sortColumn(columnName, direction, isMultiSort);\n };\n /**\n * Clears all the sorted columns of the Grid.\n * @return {void}\n */\n Grid.prototype.clearSorting = function () {\n this.sortModule.clearSorting();\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 this.sortModule.removeSortColumn(field);\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 this.filterModule.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n Grid.prototype.clearFiltering = function () {\n this.filterModule.clearFiltering();\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 this.filterModule.removeFilteredColsByField(field, isClearFilterBar);\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 this.selectionModule.selectRow(index, isToggle);\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 this.selectionModule.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n * @return {void}\n */\n Grid.prototype.clearSelection = function () {\n this.selectionModule.clearSelection();\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 this.selectionModule.selectCell(cellIndex, isToggle);\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 this.searchModule.search(searchString);\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 this.printModule.print();\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 this.editModule.deleteRecord(fieldname, data);\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 this.editModule.startEdit();\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n */\n Grid.prototype.endEdit = function () {\n this.editModule.endEdit();\n };\n /**\n * Cancels edited state.\n */\n Grid.prototype.closeEdit = function () {\n this.editModule.closeEdit();\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 this.editModule.addRecord(data, index);\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 this.editModule.deleteRow(tr);\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 this.clipboardModule.copy(withHeader);\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()) ||\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 }\n this.getHeaderTable().querySelector('.e-emptycell').setAttribute('indentRefreshed', 'true');\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 this.reorderModule.reorderColumns(fromFName, toFName);\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 this.resizeModule.autoFitColumns(fieldNames);\n };\n /**\n * @hidden\n */\n Grid.prototype.createColumnchooser = function (x, y, target) {\n this.columnChooserModule.renderColumnChooser(x, y, target);\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 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 };\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 = createElement('div', { className: 'e-gridpopup', styles: 'display:none;' });\n var content = createElement('div', { className: 'e-content', attrs: { tabIndex: '-1' } });\n append([content, createElement('div', { className: 'e-uptail e-tail' })], popup);\n content.appendChild(createElement('span'));\n append([content, 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.refreshTooltip = function () {\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 all = this.element.querySelectorAll('.e-ellipsistooltip');\n var allele = [];\n for (var i = 0; i < all.length; i++) {\n allele[i] = all[i];\n }\n allele.forEach(function (element) {\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 if (width > element.getBoundingClientRect().width && !element.classList.contains('e-tooltip')) {\n var tooltip = new Tooltip({ content: element.innerHTML }, element);\n }\n else if (width < element.getBoundingClientRect().width && element.classList.contains('e-tooltip')) {\n element.ej2_instances[0].destroy();\n }\n });\n document.body.removeChild(htable);\n document.body.removeChild(ctable);\n };\n /**\n * To create table for ellipsiswithtooltip\n * @hidden\n */\n Grid.prototype.createTable = function (table, tag, type) {\n var myTableDiv = createElement('div');\n myTableDiv.className = this.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = createElement('div');\n mySubDiv.className = tag;\n var myTable = 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 = createElement('tr');\n var mytd = 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 /**\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 };\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 };\n /**\n * @hidden\n */\n Grid.prototype.addListener = function () {\n var _this = this;\n if (this.isDestroyed) {\n return;\n }\n this.on(events.dataReady, this.dataReady, this);\n this.on(events.contentReady, this.recalcIndentWidth, this);\n [events.updateData, events.modelChanged, events.contentReady, events.columnWidthChanged].forEach(function (event) {\n return _this.on(event, _this.refreshTooltip, _this);\n });\n this.on(events.headerRefreshed, this.recalcIndentWidth, this);\n this.dataBoundFunction = this.refreshMediaCol.bind(this);\n this.addEventListener(events.dataBound, this.dataBoundFunction);\n };\n /**\n * @hidden\n */\n Grid.prototype.removeListener = function () {\n var _this = this;\n if (this.isDestroyed) {\n return;\n }\n this.off(events.dataReady, this.dataReady);\n this.off(events.contentReady, this.recalcIndentWidth);\n [events.updateData, events.modelChanged, events.contentReady, events.columnWidthChanged].forEach(function (event) {\n return _this.off(event, _this.refreshTooltip);\n });\n this.off(events.headerRefreshed, this.recalcIndentWidth);\n this.removeEventListener(events.dataBound, this.dataBoundFunction);\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) ?\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 };\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_1 = JSON.parse(data);\n var keys = Object.keys(dataObj_1);\n this.isProtectedOnChange = true;\n var _loop_2 = function (key) {\n if ((typeof this_2[key] === 'object') && !isNullOrUndefined(this_2[key])) {\n if (Array.isArray(this_2[key])) {\n this_2[key].forEach(function (element, index) {\n extend(element, dataObj_1[key][index]);\n });\n }\n else {\n extend(this_2[key], dataObj_1[key]);\n }\n }\n else {\n this_2[key] = dataObj_1[key];\n }\n };\n var this_2 = this;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n _loop_2(key);\n }\n this.isProtectedOnChange = false;\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 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 * Refreshes the Grid column changes.\n */\n Grid.prototype.refreshColumns = function () {\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.Map(this, excelExportProperties, isMultipleExport, workbook, false, isBlob);\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.Map(this, excelExportProperties, isMultipleExport, workbook, true, isBlob);\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.Map(this, pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\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 this.groupModule.groupColumn(columnName);\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 this.groupModule.ungroupColumn(columnName);\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 __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(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([])\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 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, \"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, \"excelQueryCellInfo\", 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, \"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, \"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, \"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 = __decorate([\n NotifyPropertyChanges\n ], Grid);\n return Grid;\n}(Component));\nexport { Grid };\nGrid.Inject(Selection);\n","import { Browser } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, closest, classList } from '@syncfusion/ej2-base';\nimport { setCssInGridPopUp, getActualPropFromColl, isActionPrevent } 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.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.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 };\n this.parent.notify(events.modelChanged, args);\n }\n this.removeSortIcons();\n this.addSortIcons();\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.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; _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 };\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 };\n /**\n * To destroy the sorting\n * @return {void}\n * @hidden\n */\n Sort.prototype.destroy = function () {\n this.isModelChanged = false;\n if (this.parent.element.querySelector('.e-gridpopup').querySelectorAll('.e-sortdirect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n this.clearSorting();\n this.isModelChanged = true;\n this.removeEventListener();\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(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 if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1) {\n continue;\n }\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\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 () {\n this.removeSortIcons();\n this.isMultiSort = true;\n this.removeSortIcons();\n this.addSortIcons();\n this.isMultiSort = false;\n this.updateAriaAttr();\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 = 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 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 };\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()) {\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 this.refresh();\n break;\n case 'pageSizes':\n if (this.checkpagesizes()) {\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) {\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","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 ? pageSizesModule : [5, 10, 12, 20]);\n var defaultValue = (pageSizesArray).indexOf(this.pagerModule.pageSize) > -1 ? this.pagerModule.pageSize : pageSizesArray[0];\n this.dropDownListObject = new DropDownList({\n dataSource: pageSizesArray,\n value: defaultValue,\n change: this.onChange.bind(this)\n });\n this.dropDownListObject.appendTo(input);\n pagerObj.pageSize = defaultValue;\n pagerObj.dataBind();\n pagerObj.trigger('dropDownChanged', { pageSize: defaultValue });\n };\n /**\n * For internal use only - Get the pagesize.\n * @private\n * @hidden\n */\n PagerDropDown.prototype.onChange = function (e) {\n this.pagerModule.pageSize = this.dropDownListObject.value;\n this.pagerModule.dataBind();\n this.pagerModule.trigger('dropDownChanged', { pageSize: this.dropDownListObject.value });\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.dropDownListObject.destroy();\n remove(this.pagerDropDownDiv);\n }\n };\n return PagerDropDown;\n}());\nexport { PagerDropDown };\n","import { createElement, remove } 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 this.element.style.display = 'none';\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, createElement, 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';\nPager.Inject(ExternalMessage, PagerDropDown);\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 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 = 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 = 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 var numericContainerDiv = createElement('div');\n numericContainerDiv.appendChild(links[i]);\n frag.appendChild(numericContainerDiv);\n }\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)) {\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 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 };\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 = 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 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 { createElement, attributes } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { Input } from '@syncfusion/ej2-inputs';\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 = 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 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 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 = 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 = 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 = 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 Input.createInput({\n element: input, floatLabelType: 'Never',\n properties: {\n enableRtl: this.parent.enableRtl, showClearButton: true\n }\n });\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 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 { createElement } 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 = createElement('div', { className: 'e-flm_optrdiv' });\n dlgConetntEle.appendChild(optrDiv);\n var optrInput = 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) {\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 === '') {\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 { createElement, 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 = 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 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 !== '') {\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';\nimport { createElement } from '@syncfusion/ej2-base';\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 = 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 { distinctStringValues, getZIndexCalcualtion } from '../base/util';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { createElement, 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 data;\n this.elem = 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: this.parent.dataSource instanceof DataManager ?\n this.parent.dataSource : new DataManager(this.parent.dataSource),\n query: new Query().select(args.column.field),\n fields: { text: args.column.field, value: args.column.field },\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: this.ddActionComplete\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 drpuiObj.text = !isNullOrUndefined(args.filteredValue) ? args.filteredValue : '';\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.ddActionComplete = function (e) {\n e.result = distinctStringValues(e.result);\n };\n BooleanFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return BooleanFilterUI;\n}());\nexport { BooleanFilterUI };\n","import { DatePicker } from '@syncfusion/ej2-calendars';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\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 intl = new Internationalization();\n var colFormat = args.column.format;\n var format = intl.getDatePattern({ type: 'date', skeleton: colFormat }, false);\n this.dialogObj = args.dialogObj;\n this.inputElem = createElement('input', { className: 'e-flmenu-input', id: 'dateui-' + args.column.uid });\n args.target.appendChild(this.inputElem);\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 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 { createElement, 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 } 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 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 = createElement('div', { className: 'e-flmenu-maindiv', id: column.uid + '-flmenu' });\n this.dlgDiv = 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 this.writeMethod(column, this.dlgObj.element.querySelector('#' + column.uid + '-flmenu'));\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 = createElement('div', { className: 'e-flmenu-valuediv' });\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 (!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 column.filter.ui.create({\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 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 col.filter.ui.write({ 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 (!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 = col.filter.ui.read({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n }\n else {\n instanceofFilterUI.read(targ, col, flOptrValue, this.filterObj);\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 = 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 function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend, createElement, EventHandler, remove, Browser } from '@syncfusion/ej2-base';\nimport { parentsUntil } from '../base/util';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { isNullOrUndefined, } from '@syncfusion/ej2-base';\nimport { Internationalization } 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 } from '../base/util';\nimport { generateQuery } from '../base/constant';\nimport { DatePicker } 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.localeConstants = {\n ClearFilter: 'Clear Filter',\n NumberFilter: 'Number Filters',\n TextFilter: 'Text Filters',\n DateFilter: 'Date Filters',\n MatchCase: 'Match Case',\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 Between: 'Between',\n CustomFilter: 'Custom Filter',\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\n OK: 'OK',\n Cancel: 'Cancel',\n CustomFilterPlaceHolder: 'Enter the value',\n CustomFilterDatePlaceHolder: 'Choose a date',\n AND: 'AND',\n OR: 'OR',\n ShowRowsWhere: 'Show rows where:'\n };\n _this.customFilterOperators = customFltrOperators;\n extend(_this.defaultConstants, _this.localeConstants);\n _this.isExcel = true;\n _this.initLocale(_this.defaultConstants);\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] ? '' : '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.parentElement) {\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.createMenu = function (type, isFiltered, isCheckIcon) {\n var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateFilter', number: 'NumberFilter' };\n this.menu = 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 = 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 = createElement('li', { className: className + ' e-menu-item' });\n li.innerHTML = val;\n li.insertBefore(createElement('span', { className: 'e-menu-icon e-icons ' + iconName }), li.firstChild);\n if (isSubMenu) {\n li.appendChild(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 submenu.classList.remove('e-selected');\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 = client.top;\n pos.left = this.getCMenuYPosition(this.dlg, this.menuObj);\n }\n this.menuObj.open(pos.top, pos.left);\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 = this.getSelectedText(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 = 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 target = e.element;\n var column = this.options.field;\n var mainDiv = createElement('div', { className: 'e-xlfl-maindiv', id: column + '-xlflmenu' });\n this.dlgDiv = createElement('div', { className: 'e-xlflmenu', id: column + '-xlfldlg' });\n this.parent.element.appendChild(this.dlgDiv);\n this.dlgObj = new Dialog({\n header: 'Custom Filter',\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 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('OK'), isPrimary: true, cssClass: 'e-xlfl-okbtn'\n }\n },\n {\n click: this.removeDialog.bind(this),\n buttonModel: { content: this.getLocalizedLabel('Cancel'), 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.actObj, this.numericTxtObj, this.dlgObj]);\n remove(this.dlgDiv);\n };\n ExcelFilter.prototype.clearBtnClick = function (field) {\n this.clearFilter();\n this.removeDialog();\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 = createElement('div', { innerHTML: this.getLocalizedLabel('ShowRowsWhere'), className: 'e-xlfl-dlgfields' });\n dlgConetntEle.appendChild(dlgFields);\n //column name\n var fieldSet = 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 fValue = this.dlgDiv.querySelector('#' + col + '-xlfl-frstvalue').ej2_instances[0];\n var fOperator = this.dlgDiv.querySelector('#' + col + '-xlfl-frstoptr').ej2_instances[0];\n var sValue = this.dlgDiv.querySelector('#' + col + '-xlfl-secndvalue').ej2_instances[0];\n var sOperator = this.dlgDiv.querySelector('#' + col + '-xlfl-secndoptr').ej2_instances[0];\n var checkBoxValue;\n if (this.options.type === 'string') {\n var checkBox = this.dlgDiv.querySelector('#' + col + '-xlflmtcase').ej2_instances[0];\n checkBoxValue = checkBox.checked;\n }\n var andRadio = this.dlgDiv.querySelector('#' + col + 'e-xlfl-frstpredicate').ej2_instances[0];\n var orRadio = this.dlgDiv.querySelector('#' + col + '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 _this = this;\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 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 var fPredicate = {};\n var filterCollection = [];\n if (col.isForeignColumn()) {\n this.options.column.dataSource.\n executeQuery(new Query().where(mPredicate)).then(function (e) {\n _this.options.column.columnData = e.result;\n _this.parent.notify(generateQuery, { predicate: fPredicate, column: col });\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 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 = createElement('tr', { className: 'e-xlfl-fields' });\n table.appendChild(fieldElement);\n var xlfloptr = createElement('td', { className: 'e-xlfl-optr' });\n fieldElement.appendChild(xlfloptr);\n var optrDiv = createElement('div', { className: 'e-xlfl-optrdiv' });\n var optrInput = createElement('input', { id: 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 = createElement('table', { className: 'e-xlfl-table' });\n dlgConetntEle.appendChild(table);\n var colGroup = 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 = 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 = createElement('td', { className: 'e-xlfl-radio', attrs: { 'colSpan': '2' } });\n tr.appendChild(td);\n var radioDiv = createElement('div', { className: 'e-xlfl-radiodiv', attrs: { 'style': 'display: inline-block' } });\n /* tslint:disable-next-line:max-line-length */\n var frstpredicate = createElement('input', { id: column + 'e-xlfl-frstpredicate', attrs: { 'type': 'radio' } });\n /* tslint:disable-next-line:max-line-length */\n var secndpredicate = createElement('input', { id: 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 = createElement('td', { className: 'e-xlfl-value' });\n optr.fieldElement.appendChild(value);\n var valueDiv = createElement('div', { className: 'e-xlfl-valuediv' });\n var valueInput = createElement('input', { id: column + elementId });\n valueDiv.appendChild(valueInput);\n value.appendChild(valueDiv);\n var flValue;\n var predicate;\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.renderDate.bind(this)\n };\n types[this.options.type](this.options, column, valueInput, flValue, this.parent.enableRtl);\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 = createElement('div', { className: 'e-xlfl-matchcasediv', attrs: { 'style': 'display: inline-block' } });\n var matchCaseInput = createElement('input', { id: 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({ label: 'Match Case', enableRtl: this.parent.enableRtl, checked: flValue });\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 intl = new Internationalization();\n var format = intl.getDatePattern({ type: 'date', skeleton: options.format }, false);\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 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 sortOrder: 'Ascending',\n locale: this.parent.locale,\n autofill: true,\n focus: function () {\n actObj.filterType = _this.dlgDiv.querySelector('#' + column +\n (inputValue.id === (column + '-xlfl-frstvalue') ?\n '-xlfl-frstoptr' :\n '-xlfl-secndoptr')).ej2_instances[0].value;\n actObj.ignoreCase = options.type === 'string' ?\n !_this.dlgDiv.querySelector('#' + column + '-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 e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObject) {\n return mapObject[actObj.fields.value];\n }).indexOf(obj[_this.actObj.fields.value]) === index;\n });\n },\n value: fValue\n });\n actObj.appendTo(inputValue);\n this.actObj = actObj;\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, createElement, 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.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 = createElement('tr', { className: 'e-filterbar' });\n row = this.generateRow();\n row.data = this.values;\n this.parent.getHeaderContent().querySelector('thead').appendChild(rowRenderer.element);\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 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 if (this.filterModule) {\n this.filterModule.destroy();\n }\n this.filterSettings.columns = [];\n this.updateFilterMsg();\n this.removeEventListener();\n this.unWireEvents();\n if (this.element) {\n remove(this.element);\n if (this.parent.getFrozenColumns()) {\n remove(this.parent.getHeaderContent().querySelector('.e-filterbar'));\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 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, currentFilteringColumn: this.column.field,\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 (this.filterSettings.type === 'FilterBar' && filterCell.value !== filterValue) {\n filterCell.value = filterValue;\n }\n if (this.checkAlreadyColFiltered(this.column.field)) {\n return;\n }\n if (!isNullOrUndefined(this.column.format)) {\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 else {\n this.values[this.column.field] = filterValue; //this line should be above updateModel\n }\n this.updateModel();\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.updateFilterMsg();\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 break;\n }\n }\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\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 delete this.values[field];\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 this.parent.notify(events.modelChanged, {\n requestType: 'filtering', type: events.actionBegin\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 this.column = gObj.getColumnByField(target.id.split('_')[0]);\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 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 var getFormatFlValue = this.setFormatForFlColumn(flValue, column);\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 = JSON.parse(JSON.stringify(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 this.value = templateRead.call(this, filterElement);\n }\n if (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 this.getOperator(value);\n if (this.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 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.refresh(); //hot-fix onpropertychanged not working for object { array } \n }\n this.parent.dataBind();\n };\n return Filter;\n}());\nexport { Filter };\n","import { EventHandler, createElement, detach, formatUnit, Browser, closest } from '@syncfusion/ej2-base';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as events from '../base/constant';\nimport { getScrollBarWidth } from '../base/util';\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 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 (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 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 + parseInt(element.width, 10);\n }\n });\n }\n var calcTableWidth = tWidth + indentWidth;\n if (tWidth > 0 && !gObj.getFrozenColumns()) {\n headerTable.style.width = formatUnit(calcTableWidth);\n contentTable.style.width = formatUnit(calcTableWidth);\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 };\n /**\n * To destroy the resize\n * @return {void}\n * @hidden\n */\n Resize.prototype.destroy = function () {\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 = createElement('div');\n myTableDiv.className = this.parent.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = createElement('div');\n mySubDiv.className = tag;\n var myTable = createElement('table');\n myTable.className = table.className;\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var myTr = 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.render, 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.render);\n };\n /**\n * @hidden\n */\n Resize.prototype.render = function () {\n this.unwireEvents();\n this.wireEvents();\n this.setHandlerHeight();\n };\n Resize.prototype.wireEvents = function () {\n var _this = this;\n this.getResizeHandlers().forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n EventHandler.add(ele, Browser.touchStartEvent, _this.resizeStart, _this);\n EventHandler.add(ele, events.dblclick, _this.callAutoFit, _this);\n });\n };\n Resize.prototype.unwireEvents = function () {\n var _this = this;\n this.getResizeHandlers().forEach(function (ele) {\n EventHandler.remove(ele, Browser.touchStartEvent, _this.resizeStart);\n EventHandler.remove(ele, events.dblclick, _this.callAutoFit);\n });\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 var col = this.getTargetColumn(e);\n this.resizeColumn(col.field, this.parent.getNormalizedColumnIndex(col.uid), col.uid);\n };\n Resize.prototype.resizeStart = function (e) {\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.element = e.target;\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 = parseInt(this.column.width.toString(), 10)\n - (this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0);\n }\n else {\n this.minMove = (this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0)\n - parseInt(this.column.width.toString(), 10);\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 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.resizing = function (e) {\n if (this.parent.allowTextWrap) {\n if (this.parent.getFrozenColumns()) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\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 = {\n width: parseInt(this.widthService.getWidth(this.column).toString(), 10) + mousemove,\n minWidth: this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : null,\n maxWidth: this.column.maxWidth ? parseInt(this.column.maxWidth.toString(), 10) : null\n };\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 ? parseInt(this.column.minWidth.toString(), 10) : 0;\n this.pageX = pageX = this.minMove;\n }\n if (width !== parseInt(this.column.width.toString(), 10)) {\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 this.widthService.setColumnWidth(this.column, null, 'resize');\n this.updateHelper();\n }\n this.isDblClk = false;\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 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_1 = columns; _b < columns_1.length; _b++) {\n var column = columns_1[_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.getTargetColumn = function (e) {\n var cell = closest(e.target, resizeClassList.header);\n var uid = cell.querySelector('.e-headercelldiv').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 = 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, createElement, 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 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;\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 if (!closestElement(e.target, 'th')) {\n return;\n }\n var destElem = closestElement(e.target, '.e-headercell');\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 = 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);\n }\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 = columns[oldIdx];\n var newIndex = this.targetParentContainerIndex(this.element, destElem);\n this.moveColumns(newIndex, column);\n }\n }\n };\n Reorder.prototype.isActionPrevent = function (gObj) {\n return isActionPrevent(gObj);\n };\n Reorder.prototype.moveColumns = function (destIndex, column) {\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 (!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 if (this.parent.getFrozenColumns()) {\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 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 fHeaders = fHeaders.concat(fTh);\n for (var j = 0; j < mTh.length; j++) {\n if (!fTh.length || j !== 0 || fTh[fTh.length - 1].innerText !== mTh[0].innerText) {\n fHeaders.push(mTh[j]);\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 /**\n * Changes the position of the Grid columns 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 Reorder.prototype.reorderColumns = function (fromFName, toFName) {\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));\n }\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(createElement('div', { className: 'e-icons e-icon-reorderuparrow e-reorderuparrow', attrs: { style: 'display:none' } }));\n this.downArrow = header.appendChild(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 if (this.parent.isDestroyed) {\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 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 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 { extend } from '@syncfusion/ej2-base';\nimport { remove, createElement, closest as closestElement, classList } from '@syncfusion/ej2-base';\nimport { parentsUntil, removeElement, getPosition } from '../base/util';\nimport * as events from '../base/constant';\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 //Internal variables \n this.selectedRows = [];\n this.helper = function (e) {\n var gObj = _this.parent;\n if (document.getElementsByClassName('e-griddragarea').length ||\n (!e.sender.target.classList.contains('e-selectionbackground') && gObj.selectionSettings.type !== 'Single')) {\n return false;\n }\n var visualElement = 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 = createElement('table', { styles: 'width:' + gObj.element.offsetWidth });\n var tbody = createElement('tbody');\n if (gObj.selectionSettings.mode === 'Row' && gObj.selectionSettings.type === 'Single') {\n var index = parseInt(e.sender.target.parentElement.getAttribute('aria-rowindex'), 10);\n gObj.selectRow(index);\n }\n var selectedRows = gObj.getSelectedRows();\n for (var i = 0, len = selectedRows.length; i < len; i++) {\n var selectedRow = selectedRows[i].cloneNode(true);\n removeElement(selectedRow, '.e-indentcell');\n removeElement(selectedRow, '.e-detailrowcollapse');\n removeElement(selectedRow, '.e-detailrowexpand');\n tbody.appendChild(selectedRow);\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 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].getContent().classList.add('e-allowRowDrop');\n }\n _this.isDragStop = false;\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']);\n gObj.trigger(events.rowDrag, {\n rows: gObj.getSelectedRows(),\n target: target, draggableType: 'rows', data: gObj.getSelectedRecords()\n });\n gObj.element.classList.add('e-rowdrag');\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 };\n this.dragStop = function (e) {\n var gObj = _this.parent;\n if (_this.parent.isDestroyed) {\n return;\n }\n var target = _this.getElementFromPosition(e.helper, e.event);\n gObj.element.classList.remove('e-rowdrag');\n var dropElem = document.getElementById(gObj.rowDropSettings.targetID);\n if (gObj.rowDropSettings.targetID && dropElem && dropElem.ej2_instances) {\n dropElem.ej2_instances[0].getContent().classList.remove('e-allowRowDrop');\n }\n gObj.trigger(events.rowDrop, {\n target: target, draggableType: 'rows',\n rows: gObj.getSelectedRows(), data: gObj.getSelectedRecords()\n });\n if (!parentsUntil(target, 'e-gridcontent')) {\n remove(e.helper);\n return;\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.parent.on(events.rowDragAndDropComplete, this.onActionComplete, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\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-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.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 /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n RowDD.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.columnDrop = function (e) {\n var gObj = this.parent;\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.parentElement.id !== gObj.element.id) {\n srcControl = e.droppedElement.parentElement.ej2_instances[0];\n }\n else {\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.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 if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeDrag);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.rowDragAndDropComplete, this.onActionComplete);\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';\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 }\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 };\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 };\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 = 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 () {\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)) {\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 = createElement('div', { className: 'e-grid-icon e-groupheadercell' });\n var childDiv = 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(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(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(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(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(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 this.isAppliedUnGroup = false;\n }\n };\n Group.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 var args = void 0;\n if (this.contentRefresh) {\n if (!this.isAppliedUnGroup) {\n if (!this.isAppliedGroup) {\n this.updateGroupDropArea();\n for (var i = 0; i < this.groupSettings.columns.length; i++) {\n this.colName = this.groupSettings.columns[i];\n var col = this.parent.getColumnByField(this.colName);\n col.visible = this.parent.groupSettings.showGroupedColumn;\n this.groupAddSortingQuery(this.colName);\n if (i < this.groupSettings.columns.length - 1) {\n this.addColToGroupDrop(this.groupSettings.columns[i]);\n }\n }\n }\n args = { columnName: this.colName, requestType: 'grouping', type: events.actionBegin };\n }\n else {\n args = { requestType: 'ungrouping', type: events.actionBegin };\n }\n this.parent.notify(events.modelChanged, args);\n }\n break;\n case 'showDropArea':\n this.updateGroupDropArea();\n this.groupSettings.showDropArea ? this.element.style.display = '' : this.element.style.display = 'none';\n break;\n case 'showGroupedColumn':\n this.updateGroupedColumn(this.groupSettings.showGroupedColumn);\n this.parent.notify(events.modelChanged, { requestType: 'refresh' });\n break;\n case 'showUngroupButton':\n this.updateButtonVisibility(this.groupSettings.showUngroupButton, 'e-ungroupbutton');\n break;\n case 'showToggleButton':\n this.updateButtonVisibility(this.groupSettings.showToggleButton, 'e-togglegroupbutton ');\n this.parent.refreshHeader();\n break;\n }\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 this.clearGrouping();\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 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(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 return Group;\n}());\nexport { Group };\n","import { createElement, 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 }\n DetailRow.prototype.clickHandler = function (e) {\n this.toogleExpandcollapse(closest(e.target, 'td'));\n };\n DetailRow.prototype.toogleExpandcollapse = function (target) {\n var gObj = this.parent;\n var parent = 'parentDetails';\n if (target && (target.classList.contains('e-detailrowcollapse') || target.classList.contains('e-detailrowexpand'))) {\n var tr = target.parentElement;\n var uid_1 = tr.getAttribute('data-uid');\n var nextRow = this.parent.getContentTable().querySelector('tbody').children[tr.rowIndex + 1];\n if (target.classList.contains('e-detailrowcollapse')) {\n var key = 'records';\n var currentViewData = gObj.allowGrouping && gObj.groupSettings.columns.length ?\n gObj.currentViewData[key] : gObj.currentViewData;\n var data = currentViewData[tr.getAttribute('aria-rowindex')];\n if (this.isDetailRow(nextRow)) {\n nextRow.style.display = '';\n }\n else if (gObj.getDetailTemplate() || gObj.childGrid) {\n var detailRow = createElement('tr', { className: 'e-detailrow' });\n var detailCell = 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 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(createElement('td', { className: 'e-indentcell' }));\n row.cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n detailRow.appendChild(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 gObj.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 var grid = new Grid(gObj.childGrid);\n var modules = grid.getInjectedModules();\n var injectedModues = gObj.getInjectedModules();\n if (!modules || modules.length !== injectedModues.length) {\n grid.setInjectedModules(injectedModues);\n }\n var gridElem = createElement('div', {\n id: 'child' + parents(tr, 'e-grid').length +\n '_grid' + tr.rowIndex + getUid('')\n });\n detailCell.appendChild(gridElem);\n grid.appendTo(gridElem);\n }\n detailRow.appendChild(detailCell);\n tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n var idx_1;\n this.parent.getRowsObject().some(function (r, rIndex) { idx_1 = rIndex; return r.uid === uid_1; });\n gObj.getRows().splice(tr.rowIndex + 1, 0, detailRow);\n this.parent.getRowsObject().splice(idx_1 + 1, 0, row);\n gObj.trigger(events.detailDataBound, { detailElement: detailCell, data: data });\n gObj.notify(events.detailDataBound, { rows: this.parent.getRowsObject() });\n }\n classList(target, ['e-detailrowexpand'], ['e-detailrowcollapse']);\n classList(target.firstElementChild, ['e-dtdiagonaldown', 'e-icon-gdownarrow'], ['e-dtdiagonalright', 'e-icon-grightarrow']);\n this.parent.getRowsObject()[tr.rowIndex].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 this.parent.getRowsObject()[tr.rowIndex].isExpand = false;\n this.aria.setExpand(target, false);\n }\n }\n };\n DetailRow.prototype.isDetailRow = function (row) {\n return row && row.classList.contains('e-detailrow');\n };\n DetailRow.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\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 };\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 } from '@syncfusion/ej2-base';\nimport { createElement, 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: '
    \\\r\n \\\r\n \\\r\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: 'Columns', tooltipText: 'columns', 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.isDestroyed) {\n this.unWireEvent();\n this.toolbar.destroy();\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 = 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 if (!args.item) {\n gObj.trigger(events.toolbarClick, args);\n return;\n }\n switch (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 default:\n gObj.trigger(events.toolbarClick, args);\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 = 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 function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { colGroupRefresh, columnWidthChanged, scroll, columnVisibilityChanged } from '../base/constant';\nimport { ContentRender } from './content-renderer';\nimport { RowRenderer } from './row-renderer';\nimport { SummaryModelGenerator } from '../services/summary-model-generator';\nimport { renderMovable } from '../base/util';\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 = createElement('div', { className: 'e-gridfooter' });\n var innerDiv = createElement('div', { className: 'e-summarycontent' });\n var movableContent = innerDiv;\n if (this.parent.getFrozenColumns()) {\n var fDiv = createElement('div', { className: 'e-frozenfootercontent' });\n var mDiv = 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 = 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 = 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 };\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 };\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 return FooterRenderer;\n}(ContentRender));\nexport { FooterRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { createElement } from '@syncfusion/ej2-base';\nimport { appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\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 = 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 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 return SummaryCellRenderer;\n}(CellRenderer));\nexport { SummaryCellRenderer };\n","import { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { uiUpdate, initialEnd, dataReady, modelChanged } 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();\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 };\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 };\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n remove(this.parent.element.querySelector('.e-gridfooter'));\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 { 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 });\n }\n if (check) {\n var fn = _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 }\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 = 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 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, closest } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { getRowHeight } from '../base/util';\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.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();\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.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 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 });\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 var info = 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 translate = this.getTranslateY(this.content.scrollTop, this.content.getBoundingClientRect().height, 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, this.parent.enableColumnVirtualization || Browser.isIE);\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 this.refreshOffsets();\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) {\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 return translate > sTop ? this.getOffset(block - 1) : endTranslate < (sTop + cHeight) ? this.getOffset(block + 1) : translate;\n };\n VirtualContentRenderer.prototype.getOffset = function (block) {\n return Math.min(this.offsets[block] | 0, this.offsets[this.maxBlock]);\n };\n VirtualContentRenderer.prototype.onEntered = function () {\n var _this = this;\n return function (element, current, direction, e) {\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);\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.getRowHeight();\n };\n VirtualContentRenderer.prototype.isEndBlock = function (index) {\n var totalBlocks = this.getTotalBlocks();\n return index >= totalBlocks || index === totalBlocks - 1;\n };\n VirtualContentRenderer.prototype.getRowHeight = function () {\n return this.parent.rowHeight ? this.parent.rowHeight : getRowHeight();\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.getRowHeight() : rem && block === total ? rem * _this.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 () {\n this.wrapper = createElement('div', { className: 'e-virtualtable' });\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 { getRowHeight } from '../base/util';\nimport { 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 = getRowHeight(this.parent.element);\n this.blockSize = ~~(this.parent.height / 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 { createElement, isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\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 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 = createElement('tr', { className: 'e-row e-addedrow' });\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n tbody.insertBefore(args.row, tbody.firstChild);\n args.row.appendChild(this.getEditElement(elements, false));\n if (this.parent.getFrozenColumns()) {\n var mEle = this.renderMovableform(args.row);\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 mTbody.insertBefore(mEle, mTbody.firstChild);\n args.row.querySelector('.e-normaledit').setAttribute('colspan', this.parent.getFrozenColumns() + '');\n mEle.setAttribute('colspan', '' + (this.parent.getColumns().length - this.parent.getFrozenColumns()));\n }\n };\n InlineEditRender.prototype.renderMovableform = function (ele) {\n var mEle = ele.cloneNode(true);\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 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 td = td.concat([].slice.call(mCont.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (mCont.contains(row)) {\n td = td.concat([].slice.call(fCont.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (fHdr.contains(row)) {\n td = td.concat([].slice.call(mHdr.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (mHdr.contains(row)) {\n td = td.concat([].slice.call(fHdr.children[idx].querySelectorAll('td.e-rowcell')));\n }\n }\n return td;\n };\n InlineEditRender.prototype.update = function (elements, args) {\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));\n args.row.classList.add('e-editedrow');\n this.refreshFreezeEdit(args.row);\n };\n InlineEditRender.prototype.refreshFreezeEdit = function (row) {\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 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 this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n ele.setAttribute('colspan', this.parent.getFrozenColumns() + '');\n mEle.setAttribute('colspan', this.parent.getColumns().length - this.parent.getFrozenColumns() + '');\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) {\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 = createElement('td', {\n className: 'e-editcell e-normaledit',\n attrs: { colspan: (gObj.getVisibleColumns().length + gLen + isDetail).toString() }\n });\n var form = createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n var table = createElement('table', { className: 'e-table e-inline-edit', attrs: { cellspacing: '0.25' } });\n table.appendChild(gObj.getContentTable().querySelector('colgroup').cloneNode(true));\n var tbody = createElement('tbody');\n var tr = createElement('tr');\n var i = 0;\n if (isDetail) {\n tr.insertBefore(createElement('td', { className: 'e-detailrowcollapse' }), tr.firstChild);\n }\n while (i < gLen) {\n tr.appendChild(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 = 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 return InlineEditRender;\n}());\nexport { InlineEditRender };\n","import { createElement, 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 = 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, createElement } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { changeButtonType } 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 = createElement('div', { id: gObj.element.id + '_dialogEdit_wrapper' });\n gObj.element.appendChild(this.dialog);\n this.setLocaleObj();\n var position = this.parent.element.getBoundingClientRect().height < 400 ?\n { X: 'center', Y: 'top' } : { X: 'center', Y: 'center' };\n this.dialogObj = 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),\n showCloseIcon: true,\n allowDragging: true,\n position: position,\n close: this.dialogClose.bind(this),\n closeOnEscape: true, width: '330px', target: gObj.element, 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 this.dialogObj.element.style.maxHeight = '400px';\n changeButtonType(this.dialogObj.element);\n };\n DialogEditRender.prototype.btnClick = function (e) {\n if (this.l10n.getConstant('CancelButton').toLowerCase() === e.target.innerText.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) {\n var gObj = this.parent;\n var div = createElement('div', { className: this.isEdit ? 'e-editedrow' : 'e-insertedrow' });\n var form = createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n var table = createElement('table', { className: 'e-table', attrs: { cellspacing: '6px' } });\n var tbody = createElement('tbody');\n var cols = gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (!cols[i].visible || cols[i].commands || cols[i].commandsTemplate) {\n continue;\n }\n var tr = createElement('tr');\n var dataCell = createElement('td', {\n className: 'e-rowcell', attrs: {\n style: 'text-align:' + (this.parent.enableRtl ? 'right' : 'left') + ';width:190px'\n }\n });\n var label = 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, getValue } from '@syncfusion/ej2-base';\nimport { InlineEditRender } from './inline-edit-renderer';\nimport { BatchEditRender } from './batch-edit-renderer';\nimport { DialogEditRender } from './dialog-edit-renderer';\nimport { createElement, attributes, classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\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.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 (!col.visible || 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 col.edit.write({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getValue(col.field, args.foreignKeyData)\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 for (var i = 0, len = cols.length; i < len; i++) {\n var col = cols[i];\n if (!col.visible) {\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 td = cellRenderer.render(cells[i], 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 input = col.edit.create(tArgs);\n if (typeof input === 'string') {\n var div = createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n var isInput = input.tagName !== 'input' && input.querySelectorAll('input').length;\n attributes(isInput ? input.querySelector('input') : input, {\n name: col.field, 'e-mappinguid': col.uid,\n id: gObj.element.id + col.field,\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 input.setAttribute('disabled', 'true');\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 { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { extend } from '@syncfusion/ej2-base';\nimport { isEditable, addRemoveActiveClasses } 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 return createElement('input', {\n className: classNames, attrs: {\n type: 'checkbox', value: args.value, 'e-mappinguid': col.uid,\n id: this.parent.element.id + col.field, name: col.field\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 if (!isNullOrUndefined(args.row)) {\n selectChkBox = args.row.querySelector('.e-edit-checkselect');\n }\n if (args.rowData[args.column.field]) {\n chkState = JSON.parse(args.rowData[args.column.field].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 { createElement } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { isEditable } 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 return createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + args.column.field, name: args.column.field, 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 }, value: args.rowData[args.column.field],\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 args.element.setAttribute('name', 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.column.isForeignColumn() ? this.column.foreignKeyField : this.column.field, 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 (!isNullOrUndefined(dlgElement)) {\n var dlgObj = this.parent.element.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 } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { isEditable } 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 return createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + args.column.field, name: args.column.field, 'e-mappinguid': args.column.uid\n }\n });\n };\n NumericEditCell.prototype.read = function (element) {\n element.blur();\n return element.ej2_instances[0].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(args.rowData[col.field]), 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', col.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 { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { isEditable } 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 = 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 + col.field, name: col.field, 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 Input.createInput({\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 };\n return DefaultEditCell;\n}());\nexport { DefaultEditCell };\n","import { extend } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { parentsUntil, refreshForeignData } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\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.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.selectRow(this.editRowIndex);\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'delete',\n type: events.actionComplete\n }));\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\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 gObj.clearSelection();\n if (gObj.editSettings.mode === 'Dialog') {\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 if (this.parent.allowTextWrap) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n };\n NormalEdit.prototype.endEdit = function () {\n var gObj = this.parent;\n if (!this.parent.isEdit || !gObj.editModule.formObj.validate() ||\n (gObj.editModule.mFormObj && !gObj.editModule.mFormObj.validate())) {\n return;\n }\n var editedData = extend({}, this.previousData);\n var args = {\n requestType: 'save', type: events.actionBegin, data: editedData, cancel: false,\n previousData: this.previousData, selectedRow: gObj.selectedRowIndex, foreignKeyData: {}\n };\n editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-gridform'), 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 (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 this.destroyElements();\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 this.destroyElements();\n }\n this.stopEditStatus();\n if (gObj.editSettings.mode === 'Dialog' && args.action !== 'add') {\n gObj.element.querySelector('.e-dlgeditrow').classList.remove('e-dlgeditrow');\n }\n };\n NormalEdit.prototype.destroyElements = function () {\n var gObj = this.parent;\n gObj.editModule.destroyWidgets();\n gObj.editModule.destroyForm();\n gObj.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);\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.editSuccess = function (e, args) {\n if (e.result) {\n this.parent.trigger(events.beforeDataBound, e);\n args.data = e.result;\n }\n else {\n this.parent.trigger(events.beforeDataBound, args);\n }\n args.type = events.actionComplete;\n this.parent.isEdit = false;\n this.refreshRow(args.data);\n this.parent.trigger(events.actionComplete, args);\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);\n }\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.editFailure = function (e) {\n this.parent.trigger(events.actionFailure, e);\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 if (rowObj.cells.length === frzCols) {\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 = {\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 gObj.selectRow(this.rowIndex);\n gObj.trigger(events.actionComplete, args);\n };\n NormalEdit.prototype.addRecord = function (data, index) {\n var gObj = this.parent;\n this.addedRowIndex = !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 for (var _i = 0, _a = gObj.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n this.previousData[col.field] = data && data[col.field] ? data[col.field] : col.defaultValue;\n }\n var args = {\n cancel: false, foreignKeyData: {},\n requestType: 'add', data: this.previousData, type: events.actionBegin, index: index\n };\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n this.renderer.addNew({ rowData: args.data, requestType: 'add' });\n gObj.editModule.applyFormValidation();\n args.type = events.actionComplete;\n args.row = gObj.element.querySelector('.e-addedrow');\n gObj.trigger(events.actionComplete, args);\n };\n NormalEdit.prototype.deleteRecord = function (fieldname, data) {\n this.editRowIndex = this.parent.selectedRowIndex;\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.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.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 = 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 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.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 } from '@syncfusion/ej2-base';\nimport { remove, classList, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { parentsUntil, inArray, refreshForeignData } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { Cell } from '../models/cell';\nimport { RowModelGenerator } from '../services/row-model-generator';\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 };\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 };\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 this.saveCell();\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 this.editCell(parseInt(tr.getAttribute('aria-rowindex'), 10), this.parent.getColumns()[parseInt(target.getAttribute('aria-colindex'), 10)].field);\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 (!document.querySelectorAll('.e-popup-open').length) {\n isEdit = isEdit && !this.validateFormObj();\n switch (e.keyArgs.action) {\n case 'tab':\n case 'shiftTab':\n if (isEdit) {\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);\n };\n BatchEdit.prototype.closeEdit = function () {\n var gObj = this.parent;\n var rows = this.parent.getRowsObject();\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this.parent);\n var tr;\n var mTr;\n if (gObj.isEdit) {\n this.saveCell(true);\n }\n gObj.clearSelection();\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].isDirty) {\n tr = gObj.getContentTable().querySelector('[data-uid=' + rows[i].uid + ']');\n if (gObj.frozenRows) {\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 }\n else {\n mTr = gObj.getContent().querySelector('.e-movablecontent')\n .querySelector('[data-uid=' + rows[i].uid + ']');\n }\n }\n if (tr) {\n if (tr.classList.contains('e-insertedrow')) {\n remove(tr);\n if (gObj.frozenRows && mTr) {\n remove(mTr);\n }\n this.removeRowObjectFromUID(rows[i].uid);\n i--;\n }\n else {\n delete rows[i].changes;\n rows[i].isDirty = false;\n classList(tr, [], ['e-hiddenrow', 'e-updatedtd']);\n rowRenderer.refresh(rows[i], gObj.getColumns(), false);\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 gObj.notify(events.batchCancel, { rows: this.parent.getRowsObject() });\n gObj.selectRow(this.cellDetails.rowIndex);\n this.refreshRowIdx();\n gObj.notify(events.toolbarRefresh, {});\n this.parent.notify(events.tooltipDestroy, {});\n };\n BatchEdit.prototype.deleteRecord = function (fieldname, data) {\n this.saveCell();\n if (this.validateFormObj()) {\n this.saveCell(true);\n }\n this.bulkDelete(fieldname, data);\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 this.saveCell();\n if (gObj.isEdit) {\n return;\n }\n var changes = this.getBatchChanges();\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 });\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(mRow.changes).forEach(function (key) {\n if (i_1 < frzCols) {\n delete mRow.changes[key];\n }\n i_1++;\n });\n extend(row.changes, mRow.changes);\n }\n }\n else if (mRow.isDirty) {\n extend(row, mRow);\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.getRowsObject().unshift(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 gObj.clearSelection();\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) {\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) {\n gObj.getHeaderContent().querySelector('tbody').appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n this.refreshRowIdx();\n gObj.selectRow(index);\n delete args.row;\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] = 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 }\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 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(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 mTbody.insertBefore(mTr, mTbody.firstChild);\n addClass(mTr.querySelectorAll('.e-rowcell'), ['e-updatedtd']);\n }\n if (gObj.frozenRows) {\n tbody = gObj.getHeaderContent().querySelector('tbody');\n }\n tbody.insertBefore(tr, tbody.firstChild);\n addClass(tr.querySelectorAll('.e-rowcell'), ['e-updatedtd']);\n modelData[0].isDirty = true;\n modelData[0].changes = extend({}, modelData[0].data);\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 gObj.selectRow(0);\n if (!data) {\n index = this.findNextEditableCell(0, true);\n col = gObj.getColumns()[index];\n this.editCell(0, col.field, true);\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) {\n var cols = this.parent.getColumns();\n var endIndex = cols.length;\n for (var i = columnIndex; i < endIndex; i++) {\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 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.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n data[col.field] = col.defaultValue ? col.defaultValue : dValues[col.type];\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 colIdx = gObj.getColumnIndexByField(field);\n var frzCols = gObj.getFrozenColumns();\n if (frzCols && colIdx >= frzCols) {\n row = gObj.getMovableDataRows()[index];\n }\n else {\n row = gObj.getDataRows()[index];\n }\n if ((keys[0] === col.field && !row.classList.contains('e-insertedrow')) || col.template || col.columns) {\n return;\n }\n var rowObj = gObj.getRowObjectFromUID(row.getAttribute('data-uid'));\n var rowData = extend({}, this.getDataByIndex(index));\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: rowData[col.field], 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 if (col && !col.isPrimaryKey) {\n var td = this.parent.getDataRows()[rowIndex].cells[this.parent.getColumnIndexByField(field)];\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);\n }\n rowObj.changes[field] = value;\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 this.setChanges(rowObj, column.field, value);\n var frzCols = this.parent.getFrozenColumns();\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n cell.refreshTD(td, rowObj.cells[this.getCellIdx(column.uid) - (this.getCellIdx(column.uid) >= frzCols ? frzCols : 0)], rowObj.changes);\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.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 editedData = extend(this.cellDetails.rowData, editedData);\n var args = {\n columnName: column.field,\n value: editedData[column.field],\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 }\n if (args.cancel) {\n return;\n }\n gObj.editModule.destroyForm();\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 gObj.isEdit = false;\n if (!isNullOrUndefined(args.value) && args.value.toString() ===\n (!isNullOrUndefined(this.cellDetails.value) ? this.cellDetails.value : '').toString() && !this.isColored) {\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.notify(events.toolbarRefresh, {});\n this.isColored = false;\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 return BatchEdit;\n}());\nexport { BatchEdit };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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.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","import { extend } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { isEditable } 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 return createElement('input', {\n className: 'e-field', attrs: {\n id: this.parent.element.id + args.column.field, name: args.column.field, 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 var isInline = this.parent.editSettings.mode !== 'Dialog';\n this.obj = new DatePicker(extend({\n floatLabelType: isInline ? 'Never' : 'Always',\n value: new Date(args.rowData[args.column.field]), placeholder: isInline ?\n '' : args.column.headerText, enableRtl: this.parent.enableRtl,\n enabled: isEditable(args.column, args.type, args.element),\n }, args.column.edit.params));\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 };\n","import { EventHandler, closest } from '@syncfusion/ej2-base';\nimport { extend, getValue } from '@syncfusion/ej2-base';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue } 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, changeButtonType } from '../base/util';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { DatePickerEditCell } from '../renderer/datepicker-edit-cell';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\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, 'booleanedit': BooleanEditCell, 'defaultedit': DefaultEditCell\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 for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\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 * 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 (isNullOrUndefined(gObj.selectedRowIndex) || gObj.selectedRowIndex === -1) {\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.showDialog('BatchSaveConfirm', this.dialogObj);\n return;\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') ? true : false;\n }\n break;\n case 'date':\n case 'datetime':\n if (col.editType !== 'datepicker' && value && value.length) {\n val = new Date(value);\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 = 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 changeButtonType(obj.element);\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 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 gObj = this.parent;\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 var value = void 0;\n if (col && col.field) {\n var temp = col.edit.read;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n if (col.type !== 'checkbox') {\n value = gObj.editModule.getValueFromType(col, col.edit.read(inputs[i]));\n }\n else {\n value = inputs[i].checked;\n }\n setValue(col.field, value, editedData);\n }\n }\n return editedData;\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.destroyForm();\n this.destroyWidgets();\n }\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyWidgets = function (cols) {\n cols = cols ? cols : this.parent.getColumns();\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n if (col.edit.destroy) {\n col.edit.destroy();\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 this.destroyForm();\n this.removeEventListener();\n var elem = this.dialogObj.element;\n this.dialogObj.destroy();\n remove(elem);\n elem = this.alertDObj.element;\n this.alertDObj.destroy();\n remove(elem);\n this.unwireEvents();\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' && !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);\n };\n /**\n * @hidden\n */\n Edit.prototype.applyFormValidation = function (cols) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var form = gObj.element.querySelector('.e-gridform');\n var mForm = gObj.element.querySelectorAll('.e-gridform')[1];\n var rules = {};\n var mRules = {};\n cols = cols ? cols : gObj.columns;\n for (var _i = 0, cols_2 = cols; _i < cols_2.length; _i++) {\n var col = cols_2[_i];\n if (col.validationRules && form.querySelectorAll('#' + gObj.element.id + col.field).length) {\n rules[col.field] = col.validationRules;\n }\n else if (frzCols && col.validationRules\n && mForm.querySelectorAll('#' + gObj.element.id + col.field).length) {\n mRules[col.field] = col.validationRules;\n }\n }\n this.parent.editModule.formObj = this.createFormObj(form, rules);\n if (frzCols && this.parent.editSettings.mode !== 'Dialog') {\n this.parent.editModule.mFormObj = this.createFormObj(mForm, mRules);\n }\n };\n Edit.prototype.createFormObj = function (form, rules) {\n var _this = this;\n return new FormValidator(form, {\n rules: rules,\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.innerHTML;\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 this.parent.element.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;\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 this.parent.element.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 = parentsUntil(element, 'e-rowcell');\n var inputClient = input.getBoundingClientRect();\n var td = closest(element, 'td').getBoundingClientRect();\n var div = 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:' + td.width + 'px;text-align:center;'\n });\n var content = createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow = createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\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 < td.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 };\n return Edit;\n}());\nexport { Edit };\n/** @hidden */\nexport var Global;\n(function (Global) {\n Global.timer = null;\n})(Global || (Global = {}));\n","import { createElement, 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 { changeButtonType, 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.cBoxTrue = createCheckBox(true, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(true, { checked: false, label: ' ' });\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n this.cBoxTrue.insertBefore(createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(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 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 }\n }\n else {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible && !targetElement.classList.contains('e-toolbar-items')) {\n this.dlgObj.hide();\n this.refreshCheckboxState();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n }\n }\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) {\n var pos = { X: null, Y: null };\n var args1 = {\n requestType: 'beforeOpenColumnChooser', element: this.parent.element,\n columns: this.getColumns(), cancel: false\n };\n this.parent.trigger(events.beforeOpenColumnChooser, args1);\n if (args1.cancel) {\n return;\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 };\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.type === 'checkbox' && column.field !== undefined; });\n return columns;\n };\n ColumnChooser.prototype.renderDlgContent = function () {\n var y;\n this.dlgDiv = 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 changeButtonType(this.dlgObj.element);\n this.wireEvents();\n };\n ColumnChooser.prototype.renderChooserList = function () {\n this.mainDiv = createElement('div', { className: 'e-main-div e-cc' });\n var searchDiv = createElement('div', { className: 'e-cc-searchdiv e-cc e-input-group' });\n var ccsearchele = createElement('input', {\n className: 'e-ccsearch e-cc e-input',\n attrs: { placeholder: this.l10n.getConstant('Search') }\n });\n var ccsearchicon = createElement('span', { className: 'e-ccsearch-icon e-icons e-cc e-input-group-icon' });\n var conDiv = createElement('div', { className: 'e-cc-contentdiv' });\n this.innerDiv = 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 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', 'startswith', 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 }\n }\n else {\n var nMatchele = 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 }\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 }\n };\n ColumnChooser.prototype.refreshCheckboxList = function (gdCol, searchVal) {\n this.ulElement = 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 for (var i = 0; i < this.parent.element.querySelectorAll('.e-cc-chbox').length; i++) {\n var element = this.parent.element.querySelectorAll('.e-cc-chbox')[i];\n var columnUID = parentsUntil(element, 'e-ccheck').getAttribute('uid');\n var column = this.parent.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 = 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 return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Row } from './../models/row';\nimport { CellType } from '../base/enum';\nimport { isNullOrUndefined, Internationalization, getValue } from '@syncfusion/ej2-base';\nimport { Cell } from '../models/cell';\nimport { ValueFormatter } from './../services/value-formatter';\nimport { Query } from '@syncfusion/ej2-data';\nimport { getForeignData } from '../base/util';\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.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 /* tslint:disable:no-any */\n ExportHelper.prototype.getHeaders = function (column, isHideColumnInclude) {\n if (isHideColumnInclude) {\n this.hideColumnInclude = true;\n }\n else {\n this.hideColumnInclude = false;\n }\n var cols = column;\n this.colDepth = this.measureColumnDepth(cols);\n var rows = [];\n var actualColumns = [];\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 for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n for (var i = 0; i < row.cells.length; i++) {\n var cell = row.cells[i];\n if (cell.visible === undefined && cell.cellType !== CellType.StackedHeader) {\n row.cells = this.removeCellFromRow(row.cells, i);\n i = i - 1;\n }\n if ((!isHideColumnInclude) && cell.visible !== undefined && (!cell.visible)) {\n row.cells = this.removeCellFromRow(row.cells, i);\n i = i - 1;\n }\n }\n }\n for (var i = 0; i < cols.length; i++) {\n this.generateActualColumns(cols[i], actualColumns);\n }\n return { rows: rows, columns: actualColumns };\n };\n ExportHelper.prototype.getConvertedWidth = function (input) {\n var value = parseFloat(input);\n /* tslint:disable-next-line:max-line-length */\n return (input.indexOf('%') !== -1) ? (this.parent.element.getBoundingClientRect().width * value / 100) : value;\n };\n ExportHelper.prototype.generateActualColumns = function (column, actualColumns) {\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 for (var i = 0; i < column.columns.length; i++) {\n /* tslint:disable-next-line:max-line-length */\n this.generateActualColumns(column.columns[i], actualColumns);\n }\n }\n }\n }\n };\n ExportHelper.prototype.removeCellFromRow = function (cells, cellIndex) {\n var resultCells = [];\n for (var i = 0; i < cellIndex; i++) {\n resultCells.push(cells[i]);\n }\n for (var i = (cellIndex + 1); i < cells.length; i++) {\n resultCells.push(cells[i]);\n }\n return resultCells;\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 rows = this.appendGridCells(columns[i], rows, 0, i === 0, false, i === (columns.length - 1));\n }\n return rows;\n };\n /* tslint:disable */\n ExportHelper.prototype.appendGridCells = function (cols, gridRows, index, isFirstObj, isFirstColumn, isLastColumn) {\n /* tslint:enable */\n var lastCol = isLastColumn ? 'e-lastcell' : '';\n if (!cols.columns) {\n gridRows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstColumn ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n }\n else {\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 isFirstCell = void 0;\n var isIgnoreFirstCell = void 0;\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n isFirstCell = false;\n if (cols.columns[i].visible && !isIgnoreFirstCell) {\n isFirstCell = true;\n isIgnoreFirstCell = true;\n }\n /* tslint:disable-next-line:max-line-length */\n gridRows = this.appendGridCells(cols.columns[i], gridRows, index + 1, isFirstObj, i === 0, i === (len - 1) && isLastColumn);\n }\n }\n return gridRows;\n };\n ExportHelper.prototype.generateCell = function (gridColumn, cellType, rowSpan, className, rowIndex, columnIndex) {\n var option = {\n 'visible': gridColumn.visible,\n 'isDataCell': false,\n 'isTemplate': !isNullOrUndefined(gridColumn.headerTemplate),\n 'rowID': '',\n 'column': gridColumn,\n 'cellType': cellType,\n 'rowSpan': rowSpan,\n 'className': className,\n 'index': rowIndex,\n 'colIndex': columnIndex\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 = this.parent.getColumnIndexesInView();\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 (this.parent.enableColumnVirtualization && columnIndexes.indexOf(j) === -1) {\n continue;\n }\n rows[i].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gridObj.detailTemplate || gridObj.childGrid) {\n rows[i].cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n }\n return rows;\n };\n /* tslint:disable:no-any */\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 /* tslint:disable:no-any */\n ExportHelper.prototype.measureColumnDepth = function (column) {\n var max = 0;\n for (var i = 0; i < column.length; i++) {\n var depth = this.checkDepth(column[i], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.checkDepth = function (col, index) {\n if (col.columns) {\n index++;\n for (var i = 0; i < col.columns.length; i++) {\n index = this.checkDepth(col.columns[i], index);\n }\n }\n return index;\n };\n ;\n return ExportHelper;\n}());\nexport { ExportHelper };\n/**\n * @hidden\n * `ExportValueFormatter` for `PdfExport` & `ExcelExport`\n */\nvar ExportValueFormatter = /** @class */ (function () {\n function ExportValueFormatter() {\n this.valueFormatter = new ValueFormatter();\n this.internationalization = new Internationalization();\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 (args.column.type === undefined || args.column.type === null) {\n return '';\n }\n else {\n return (args.value).toString();\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, extend, getValue } 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';\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 /* tslint:disable-next-line:no-any */\n this.workSheet = [];\n /* tslint:disable-next-line:no-any */\n this.rows = [];\n /* tslint:disable-next-line:no-any */\n this.columns = [];\n /* tslint:disable-next-line:no-any */\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.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 /* tslint:disable-next-line:no-any */\n this.workSheet = [];\n /* tslint:disable-next-line:no-any */\n this.rows = [];\n /* tslint:disable-next-line:no-any */\n this.columns = [];\n /* tslint:disable-next-line:no-any */\n this.styles = [];\n this.rowLength = 1;\n /* tslint:disable-next-line:no-any */\n this.footer = undefined;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.exportValueFormatter = new ExportValueFormatter();\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 gObj.trigger(events.beforeExcelExport);\n this.data = new Data(gObj);\n this.isExporting = true;\n this.isBlob = isBlob;\n if (isCsv) {\n this.isCsvExport = isCsv;\n }\n else {\n this.isCsvExport = false;\n }\n return this.processRecords(gObj, exportProperties, isMultipleExport, workbook);\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 /* tslint:disable-next-line:no-any */\n var promise = void 0;\n return promise = new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\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);\n resolve(_this.book);\n });\n });\n }\n else {\n /* tslint:disable-next-line:no-any */\n var promise = void 0;\n var allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(gObj, this.data)));\n allPromise.push(this.helper.getColumnData(gObj));\n var bool_1 = true;\n return Promise.all(allPromise).then(function (e) {\n if (bool_1) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, e[0]);\n bool_1 = false;\n }\n }).catch(function (e) {\n _this.parent.trigger(events.actionFailure, e);\n });\n }\n };\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processInnerRecords = function (gObj, exportProperties, isMultipleExport, workbook, r) {\n var blankRows = 5;\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 /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n var headerRow = this.helper.getHeaders(gObj.columns, this.includeHiddenColumn);\n var groupIndent = 0;\n /* tslint:disable:no-any */\n if (!isNullOrUndefined((r.result).level)) {\n groupIndent += (r.result).level;\n groupIndent += (r.result).childLevels;\n }\n /* tslint:enable:no-any */\n this.processHeaderContent(gObj, headerRow, exportProperties, groupIndent);\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) && !(exportProperties.dataSource instanceof DataManager)) {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, exportProperties.dataSource);\n }\n else if (!isNullOrUndefined(exportProperties) && exportProperties.exportType === 'CurrentPage') {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, gObj.getCurrentViewRecords());\n }\n else {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport);\n }\n this.isExporting = false;\n gObj.trigger(events.excelExportComplete, this.isBlob ? { promise: this.blobPromise } : {});\n };\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecordContent = function (gObj, returnType, headerRow, isMultipleExport, currentViewRecords) {\n /* tslint:disable-next-line:no-any */\n var column = gObj.columns;\n /* tslint:disable-next-line:no-any */\n var record = undefined;\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);\n }\n else {\n this.processRecordRows(gObj, record, headerRow, 0);\n }\n if (!isNullOrUndefined(returnType.aggregates)) {\n if (!isNullOrUndefined(currentViewRecords)) {\n this.processAggregates(gObj, returnType.result, currentViewRecords);\n }\n else {\n this.processAggregates(gObj, returnType.result);\n }\n }\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 /* tslint:disable-next-line:no-any */\n var sheet = {};\n if (this.columns.length > 0) {\n sheet.columns = this.columns;\n }\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');\n if (!this.isBlob) {\n book.save('Export.csv');\n }\n else {\n this.blobPromise = book.saveAsBlob('text/csv');\n }\n }\n else {\n var book = new Workbook(this.book, 'xlsx');\n if (!this.isBlob) {\n book.save('Export.xlsx');\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 }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processGroupedRows = function (gObj, dataSource, headerRow, level) {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n /* tslint:disable-next-line:no-any */\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 = item.field + ': ' + 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, this.rowLength);\n cells.push(cell);\n if (this.rows[this.rows.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 = this.rows[this.rows.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 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)) {\n /* tslint:disable-next-line:no-any */\n var sCell = {};\n if (dataSource.childLevels === 0) {\n sCell.index = (hIndex);\n }\n else {\n sCell.index = (hIndex + 1);\n }\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 this.rows[this.rows.length - 1].cells = cells;\n this.rowLength++;\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processGroupedRows(gObj, item.items, headerRow, item.items.level);\n }\n else {\n this.processRecordRows(gObj, item.items, headerRow, (level));\n this.processAggregates(gObj, item, undefined, (level), true);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecordRows = function (gObj, record, headerRow, level) {\n var rLen = Object.keys(record).length;\n var index = 1;\n /* tslint:disable-next-line:no-any */\n var cells = [];\n for (var r = 0; r < rLen; r++) {\n cells = [];\n index = 1;\n for (var c = 0, len = headerRow.columns.length; c < len; c++) {\n /* tslint:disable-next-line:no-any */\n var value = !isNullOrUndefined(headerRow.columns[c].field) ? getValue(headerRow.columns[c].field, record[r]) : '';\n var column = headerRow.columns[c];\n var foreignKeyData = void 0;\n // tslint:disable-next-line:max-line-length\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = this.helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n if (!isNullOrUndefined(value)) {\n /* tslint:disable-next-line:no-any */\n var excelCellArgs = { data: record[r], column: headerRow.columns[c], foreignKeyData: foreignKeyData };\n gObj.trigger(events.excelQueryCellInfo, extend(excelCellArgs, {\n column: headerRow.columns[c], data: record[r],\n value: value, style: undefined, colSpan: 1\n }));\n /* tslint:disable-next-line:no-any */\n var cell = {};\n cell.index = index + level;\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 this.rows.push({ index: this.rowLength++, cells: cells });\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processAggregates = function (gObj, rec, currentViewRecords, indent, byGroup) {\n var summaryModel = new SummaryModelGenerator(gObj);\n /* tslint:disable-next-line:no-any */\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 this.fillAggregates(gObj, groupSummaryRows, indent);\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 this.fillAggregates(gObj, sRows, indent);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.fillAggregates = function (gObj, cells, indent, customIndex) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var row = cells_1[_i];\n /* tslint:disable-next-line:no-any */\n var cells_2 = [];\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.visible || this.includeHiddenColumn)) {\n index++;\n if (cell.isDataCell) {\n eCell.index = index + indent;\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 if (cell.attributes.style.textAlign) {\n eCell.style.hAlign = cell.attributes.style.textAlign;\n }\n cells_2.push(eCell);\n }\n else {\n if (customIndex === undefined) {\n eCell.index = index + indent;\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n cells_2.push(eCell);\n }\n }\n }\n }\n if (!isNullOrUndefined(customIndex)) {\n this.rows.push({ index: customIndex, cells: cells_2 });\n }\n else {\n this.rows.push({ index: this.rowLength++, cells: cells_2 });\n }\n }\n };\n /* tslint:disable-next-line:no-any */\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].wholeText;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.mergeOptions = function (JSON1, JSON2) {\n /* tslint:disable-next-line:no-any */\n var result = {};\n /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processHeaderContent = function (gObj, headerRow, exportProperties, indent) {\n /* tslint:disable-next-line:no-any */\n var column = gObj.columns;\n var rowIndex = 1;\n /* tslint:disable-next-line:no-any */\n var returnValue = headerRow;\n /* tslint:enable:no-any */\n var gridRows = returnValue.rows;\n // Column collection with respect to the records in the grid\n var gridColumns = returnValue.columns;\n /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\n var cells = [];\n for (var column_1 = 0; column_1 < gridRows[row].cells.length; column_1++) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n /* tslint:disable-next-line:no-any */\n var cell = {};\n /* tslint:disable-next-line:no-any */\n var gridCell = gridRows[row].cells[column_1];\n /* tslint:disable-next-line:no-any */\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;\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 /* tslint:disable-next-line:no-any */\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 if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.theme)) {\n this.theme = exportProperties.theme;\n }\n style = this.getHeaderThemeStyle(this.theme);\n if (!isNullOrUndefined(gridCell.column.textAlign)) {\n style.hAlign = gridCell.column.textAlign;\n }\n if (!isNullOrUndefined(gridCell.column.headerTextAlign)) {\n style.hAlign = gridCell.column.headerTextAlign;\n }\n cell.style = style;\n cells.push(cell);\n currentCellIndex++;\n }\n this.rows.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 };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getHeaderThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n style.fontSize = 12;\n style.borders = { color: '#E0E0E0' };\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.header)) {\n style = this.updateThemeStyle(theme.header, style);\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.updateThemeStyle = function (themestyle, style) {\n if (!isNullOrUndefined(themestyle.fontColor)) {\n style.fontColor = themestyle.fontColor;\n }\n if (!isNullOrUndefined(themestyle.fontName)) {\n style.fontName = themestyle.fontName;\n }\n if (!isNullOrUndefined(themestyle.fontSize)) {\n style.fontSize = themestyle.fontSize;\n }\n if (!isNullOrUndefined(themestyle.borders)) {\n if (!isNullOrUndefined(themestyle.borders.color)) {\n style.borders.color = themestyle.borders.color;\n }\n if (!isNullOrUndefined(themestyle.borders.lineStyle)) {\n style.borders.lineStyle = themestyle.borders.lineStyle;\n }\n }\n if (themestyle.bold !== false) {\n style.bold = themestyle.bold;\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getCaptionThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getRecordThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.updatedCellIndex = function (json) {\n var cellsLength = json.cells.length;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.parseStyles = function (gObj, col, style, index) {\n if (!isNullOrUndefined(col.format)) {\n if (!isNullOrUndefined(col.format.skeleton)) {\n style.numberFormat = col.format.skeleton;\n if (!isNullOrUndefined(col.format.type)) {\n style.type = col.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;\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 /* tslint:disable-next-line:max-line-length */\n this.columns.push({ index: index, width: typeof col.width === 'number' ? 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","import * as events from '../base/constant';\nimport { PdfDocument, PdfGrid, PdfBorders, PdfPen } 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 } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { getValue } from '@syncfusion/ej2-base';\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 }\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();\n this.pdfDocument = undefined;\n this.hideColumnInclude = false;\n this.currentViewData = false;\n this.parent = parent;\n var gObj = parent;\n this.isGrouping = false;\n this.isExporting = true;\n gObj.trigger(events.beforePdfExport);\n };\n /**\n * Used to map the input data\n * @return {void}\n */\n /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource) && pdfExportProperties.dataSource instanceof DataManager) {\n var promise = void 0;\n return promise = new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n new DataManager({ url: pdfExportProperties.dataSource.dataSource.url, adaptor: pdfExportProperties.dataSource.adaptor }).executeQuery(new Query()).then(function (returnType) {\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);\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n resolve(_this.pdfDocument);\n });\n });\n }\n else {\n var promise = void 0;\n var allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(parent, this.data)));\n allPromise.push(this.helper.getColumnData(parent));\n var bool_1 = true;\n return Promise.all(allPromise).then(function (e) {\n if (bool_1) {\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);\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n bool_1 = false;\n }\n // tslint:disable-next-line:no-any\n });\n }\n };\n /* tslint:disable:no-any */\n PdfExport.prototype.processExport = function (gObj, returnType, pdfExportProperties, isMultipleExport) {\n if (!isNullOrUndefined(pdfExportProperties)) {\n this.gridTheme = pdfExportProperties.theme;\n }\n var columns = gObj.columns;\n var dataSource = returnType.result;\n /* tslint:enable:no-any */\n var section = this.pdfDocument.sections.add();\n /* tslint:disable-next-line:no-any */\n var result = this.processExportProperties(pdfExportProperties, dataSource, section);\n dataSource = result.dataSource;\n /* tslint:disable-next-line:no-any */\n if (!isNullOrUndefined(dataSource.GroupGuid)) {\n this.isGrouping = true;\n }\n section = result.section;\n var pdfPage = section.pages.add();\n // create a grid\n var pdfGrid = new PdfGrid();\n // get header theme style\n /* tslint:disable-next-line:no-any */\n var headerThemeStyle = this.getHeaderThemeStyle();\n var border = headerThemeStyle.border;\n var headerFont = headerThemeStyle.font;\n var headerBrush = headerThemeStyle.brush;\n /* tslint:disable-next-line:no-any */\n var returnValue = this.helper.getHeaders(columns, this.hideColumnInclude);\n var rows = returnValue.rows;\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(dataSource.childLevels, pdfGrid, rows, gridColumns, border, headerFont, headerBrush);\n // set alignment, width and type of the values of the column\n this.setColumnProperties(gridColumns, pdfGrid);\n /* tslint:disable-next-line:no-any */\n var captionThemeStyle = this.getSummaryCaptionThemeStyle();\n if (!isNullOrUndefined(dataSource) && dataSource.length > 0) {\n if (this.isGrouping) {\n /* tslint:disable-next-line:max-line-length */\n this.processGroupedRecords(pdfGrid, dataSource, gridColumns, gObj, border, 0, captionThemeStyle.font, captionThemeStyle.brush, captionThemeStyle.backgroundBrush, returnType);\n }\n else {\n this.processRecord(border, gridColumns, gObj, dataSource, pdfGrid);\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 (this.isGrouping) {\n sRows = summaryModel.generateRows(dataSource.records, returnType.aggregates);\n }\n else {\n sRows = summaryModel.generateRows(returnType.result, returnType.aggregates);\n }\n /* tslint:disable-next-line:max-line-length */\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 // draw the grid\n pdfGrid.draw(pdfPage, 20, 20);\n if (!isMultipleExport) {\n // save the PDF\n if (!this.isBlob) {\n this.pdfDocument.save('Export.pdf');\n }\n else {\n this.blobPromise = this.pdfDocument.save();\n }\n this.pdfDocument.destroy();\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getSummaryCaptionThemeStyle = function () {\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.caption) && this.gridTheme.caption !== null) {\n var fontSize = !isNullOrUndefined(this.gridTheme.caption.fontSize) ? this.gridTheme.caption.fontSize : 9.75;\n var pdfColor = new PdfColor();\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 /* tslint:disable-next-line:max-line-length */\n return { font: new PdfStandardFont(PdfFontFamily.Helvetica, 10.5), brush: new PdfSolidBrush(new PdfColor(pdfColor)), backgroundBrush: new PdfSolidBrush(new PdfColor(246, 246, 246)) };\n }\n else {\n //Material theme\n /* tslint:disable-next-line:max-line-length */\n return { font: new PdfStandardFont(PdfFontFamily.Helvetica, 9.75), brush: new PdfSolidBrush(new PdfColor(0, 0, 0)), backgroundBrush: new PdfSolidBrush(new PdfColor(246, 246, 246)) };\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getHeaderThemeStyle = function () {\n var border = new PdfBorders();\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.header)) {\n if (!isNullOrUndefined(this.gridTheme.header.borders) && !isNullOrUndefined(this.gridTheme.header.borders.color)) {\n var borderColor = this.hexToRgb(this.gridTheme.header.borders.color);\n border.all = new PdfPen(new PdfColor(borderColor.r, borderColor.g, borderColor.b));\n }\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 /* tslint:disable-next-line:max-line-length */\n return { border: border, font: new PdfStandardFont(PdfFontFamily.Helvetica, fontSize), brush: new PdfSolidBrush(pdfColor) };\n }\n else {\n //Material theme\n border.all = new PdfPen(new PdfColor(234, 234, 234));\n /* tslint:disable-next-line:max-line-length */\n return { border: border, font: new PdfStandardFont(PdfFontFamily.Helvetica, 10.5), brush: new PdfSolidBrush(new PdfColor(102, 102, 102)) };\n }\n };\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processGroupedRecords = function (pdfGrid, dataSource, gridColumns, gObj, border, level, font, brush, backgroundBrush, returnType) {\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 = dataSourceItems.field + ': ' + 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, returnType.aggregates);\n }\n else {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items, returnType.aggregates);\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 /* tslint:disable-next-line:max-line-length */\n this.processGroupedRecords(pdfGrid, dataSourceItems.items, gridColumns, gObj, border, (groupIndex + 1), font, brush, backgroundBrush, returnType);\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items.records, returnType.aggregates);\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 this.processRecord(border, gridColumns, gObj, dataSourceItems.items, pdfGrid, (groupIndex + 1));\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items, returnType.aggregates);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processGridHeaders = function (childLevels, pdfGrid, rows, gridColumns, border, headerFont, headerBrush) {\n var columnCount = gridColumns.length;\n if (this.isGrouping) {\n columnCount += (childLevels + 1);\n }\n // add columns\n pdfGrid.columns.add(columnCount);\n if (this.isGrouping) {\n for (var i = 0; i < (childLevels + 1); i++) {\n pdfGrid.columns.getColumn(i).width = 20;\n }\n }\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 cellIndex = this.isGrouping ? (childLevels + 1) : 0;\n if (rows[i].cells.length === 0) {\n for (var j = 0; j < gridHeader.cells.count; j++) {\n var cell = gridHeader.cells.getCell(j);\n cell.value = '';\n }\n }\n else {\n for (var j = 0; j < cellIndex; j++) {\n var cell = gridHeader.cells.getCell(j);\n cell.value = '';\n }\n for (var j = 0; j < rows[i].cells.length; j++) {\n var cell = gridHeader.cells.getCell(cellIndex);\n if (cell.value !== null) {\n cell.value = rows[i].cells[j].column.headerText;\n if (!isNullOrUndefined(rows[i].cells[j].column.headerTextAlign)) {\n cell.style.stringFormat = this.getHorizontalAlignment(rows[i].cells[j].column.headerTextAlign);\n }\n if (!isNullOrUndefined(rows[i].cells[j].rowSpan)) {\n cell.rowSpan = rows[i].cells[j].rowSpan;\n /* tslint:disable-next-line:max-line-length */\n cell.style.stringFormat = this.getVerticalAlignment('Bottom', cell.style.stringFormat, rows[i].cells[j].column.textAlign);\n for (var k = 1; k < rows[i].cells[j].rowSpan; k++) {\n pdfGrid.headers.getHeader(i + k).cells.getCell(cellIndex).value = null;\n }\n }\n if (!isNullOrUndefined(rows[i].cells[j].colSpan)) {\n cell.columnSpan = rows[i].cells[j].colSpan;\n }\n cellIndex += cell.columnSpan;\n }\n else {\n cell.value = '';\n cellIndex += cell.columnSpan;\n j = j - 1;\n }\n }\n }\n }\n if (pdfGrid.columns.count >= 6) {\n pdfGrid.style.allowHorizontalOverflow = true;\n }\n return pdfGrid;\n };\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processExportProperties = function (pdfExportProperties, dataSource, section) {\n if (!isNullOrUndefined(pdfExportProperties)) {\n if (!isNullOrUndefined(pdfExportProperties.theme)) {\n this.gridTheme = pdfExportProperties.theme;\n }\n if (!isNullOrUndefined(pdfExportProperties.pageOrientation) || !isNullOrUndefined(pdfExportProperties.pageSize)) {\n var pdfPageSettings = new PdfPageSettings();\n /* tslint:disable-next-line:max-line-length */\n pdfPageSettings.orientation = (pdfExportProperties.pageOrientation === 'Landscape') ? PdfPageOrientation.Landscape : PdfPageOrientation.Portrait;\n pdfPageSettings.size = this.getPageSize(pdfExportProperties.pageSize);\n section.setPageSettings(pdfPageSettings);\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.getCurrentViewRecords();\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: dataSource, section: section };\n };\n /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\n var cell = row.cells[index];\n if (!this.hideColumnInclude) {\n while (cell.visible === undefined) {\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].wholeText);\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 // Set alignment, width and type of the values of the column\n /* tslint:disable:no-any */\n /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.setColumnProperties = function (gridColumns, pdfGrid) {\n var startIndex = this.isGrouping ? (pdfGrid.columns.count - gridColumns.length) : 0;\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 /* tslint:disable-next-line:max-line-length */\n pdfGrid.columns.getColumn(i + startIndex).width = typeof gridColumns[i].width === 'number' ? gridColumns[i].width * 0.75 : this.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) && this.gridTheme.record !== null) {\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 row.style.setBorder(border);\n return row;\n };\n /**\n * generate the formatted cell values\n * @private\n */\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processRecord = function (border, columns, gObj, dataSource, pdfGrid, groupIndex) {\n var startIndex = this.isGrouping ? groupIndex : 0;\n for (var _i = 0, _a = dataSource; _i < _a.length; _i++) {\n var items = _a[_i];\n // create a new row and set default style properties\n var gridRow = this.setRecordThemeStyle(pdfGrid.rows.addRow(), border);\n for (var j = 0; j < columns.length; j++) {\n /* tslint:disable:no-any */\n var value = (!isNullOrUndefined(columns[j].field) && getValue(columns[j].field, items)) || '';\n var column = columns[j];\n var foreignKeyData = void 0;\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = this.helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n var data = items;\n var args = {\n data: data,\n value: value,\n column: column,\n style: undefined,\n colSpan: 1\n };\n /* tslint:enable:no-any */\n gObj.trigger(events.pdfQueryCellInfo, args);\n var cell = gridRow.cells.getCell(j + startIndex);\n cell.value = this.exportValueFormatter.formatCellValue(args);\n if (!isNullOrUndefined(args.style)) {\n this.processCellStyle(cell, args);\n }\n if (args.colSpan > 1) {\n if ((j + startIndex + 1 + args.colSpan) > gridRow.cells.count) {\n args.colSpan = gridRow.cells.count - (j + startIndex + 1);\n }\n cell.columnSpan = args.colSpan;\n for (var i = 1; i < cell.columnSpan; i++) {\n var spanCell = gridRow.cells.getCell(j + startIndex + i);\n spanCell.value = '';\n }\n j += (args.colSpan - 1);\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processCellStyle = function (cell, args) {\n if (!isNullOrUndefined(args.style.backgroundColor)) {\n /* tslint:disable-next-line:max-line-length */\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.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 /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(args.style.fontFamily) || !isNullOrUndefined(args.style.fontSize) || !isNullOrUndefined(args.style.bold) || !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 };\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 var fontSize = (!isNullOrUndefined(content.style.fontSize)) ? (content.style.fontSize * 0.75) : 9.75;\n /* tslint:disable-next-line:max-line-length */\n var fontFamily = (!isNullOrUndefined(content.style.fontFamily)) ? (this.getFontFamily(content.style.fontFamily)) : PdfFontFamily.Helvetica;\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 /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\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 /* tslint:disable-next-line:no-any */\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 /**\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 = 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 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, addClass, removeClass, attributes } 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 = createElement('button', {});\n _this.unbounDiv = createElement('div', { className: 'e-unboundcelldiv', styles: 'display: inline-block' });\n _this.element = 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: buttonOption.buttonOption.content || 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) {\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 { createElement, 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 = 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.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 break;\n case 'Delete':\n if (this.parent.editSettings.mode !== 'Batch') {\n this.parent.editModule.endEdit();\n }\n this.parent.editModule.deleteRow(this.row);\n break;\n case 'Save':\n this.parent.editModule.endEdit();\n break;\n case 'Cancel':\n this.parent.editModule.closeEdit();\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 this.selectRow(args.event, this.parent.selectionSettings.type !== 'Multiple');\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.editSettings.mode === 'Batch' && ((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 this.hiddenItems.push(item.text);\n }\n }\n this.contextMenu.enableItems(this.disableItems, false);\n this.contextMenu.hideItems(this.hiddenItems);\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 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 cell.classList.add('e-resized');\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) {\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 = 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 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, remove } 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 } 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 = createElement('div', { className: 'e-frozencontent' });\n var mDiv = 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 };\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 = createElement('div', { className: 'e-frozenheader' });\n var mDiv = 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 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 };\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 this.setWrapHeight(fRows, mRows, obj.isModeChg, false, this.colDepth > 1);\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 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 = fRows[i].offsetHeight;\n mRowHgt = mRows[i].offsetHeight;\n if (fRows[i].childElementCount && ((isWrap && fRowHgt < mRowHgt) || (!isWrap && fRowHgt > mRowHgt))) {\n fRows[i].style.height = mRowHgt + 'px';\n }\n else if (mRows[i].childElementCount && ((isWrap && fRowHgt > mRowHgt) || (!isWrap && fRowHgt < mRowHgt))) {\n mRows[i].style.height = fRowHgt + 'px';\n }\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].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 { createElement, 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 */\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 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 = 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(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(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 || parentsUntil(args.event.target, 'e-popup') ||\n (parentsUntil(args.event.target, 'e-popup-wrapper')))) {\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 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) {\n this.parent.sortSettings.columns.forEach(function (ele) {\n if (ele.field === _this.targetColumn.field\n && ele.direction === item.replace('sort', '').toLocaleLowerCase()) {\n status = true;\n }\n });\n }\n else if (!this.parent.allowSorting || !this.parent.ensureModuleInjected(Sort)) {\n status = true;\n }\n break;\n case 'Filter':\n status = !(this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar')\n && this.parent.ensureModuleInjected(Filter));\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 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 = 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 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 if (gObj.allowPaging || gObj.enableVirtualization || fromData) {\n e = new DataManager(((gObj.allowGrouping && gObj.groupSettings.columns.length) ?\n e.records : e)).executeLocal(new Query().select(column.field));\n var filteredValue = DataUtil.distinct(e, column.field, false);\n filteredValue.forEach(function (obj) {\n if (obj.getDay) {\n predicates.push(getDatePredicate({ field: column.field, operator: 'equal', value: obj, matchCase: false }));\n }\n else {\n predicates.push(new Predicate(column.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 = gObj.query.clone();\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 _super.prototype.destroy.call(this);\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","import * as index from '@syncfusion/ej2-grids';\nindex.Grid.Inject( index.Filter,index.Page,index.Selection,index.Sort,index.Group,index.Reorder,index.RowDD,index.DetailRow,index.Toolbar,index.Aggregate,index.Search,index.VirtualScroll,index.Edit,index.Resize,index.ExcelExport,index.PdfExport,index.CommandColumn,index.ContextMenu,index.Freeze,index.ColumnMenu,index.ColumnChooser,index.ForeignKey);\nexport * from '@syncfusion/ej2-grids';\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * Options for customizing the fonts.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Regular')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the margin of linear gauge.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the border in linear gauge.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Options for customizing the annotation.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(0)\n ], Annotation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Annotation.prototype, \"y\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n __decorate([\n Complex({ size: '12px', color: null }, Font)\n ], Annotation.prototype, \"font\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"axisIndex\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"axisValue\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Options for customizing the container of linear gauge.\n */\nvar Container = /** @class */ (function (_super) {\n __extends(Container, _super);\n function Container() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Normal')\n ], Container.prototype, \"type\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"height\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], Container.prototype, \"roundedCornerRadius\", void 0);\n __decorate([\n Property('transparent')\n ], Container.prototype, \"backgroundColor\", void 0);\n __decorate([\n Complex({ width: 1, color: '#bfbfbf' }, Border)\n ], Container.prototype, \"border\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"offset\", void 0);\n return Container;\n}(ChildProperty));\nexport { Container };\n/**\n * Options for customizing the tooltip in linear gauge.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#FFFFFF')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#686868', size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({ color: 'black', width: 2 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\n/** Options for customizing the axis line. */\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Line.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], Line.prototype, \"height\", void 0);\n __decorate([\n Property(2)\n ], Line.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Line.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Line.prototype, \"offset\", void 0);\n return Line;\n}(ChildProperty));\nexport { Line };\n/**\n * Options for customizing the axis labels appearance.\n */\nvar Label = /** @class */ (function (_super) {\n __extends(Label, _super);\n function Label() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ size: '12px', color: null }, Font)\n ], Label.prototype, \"font\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"useRangeColor\", void 0);\n __decorate([\n Property('')\n ], Label.prototype, \"format\", void 0);\n __decorate([\n Property(0)\n ], Label.prototype, \"offset\", void 0);\n return Label;\n}(ChildProperty));\nexport { Label };\n/**\n * Options for customizing the ranges of an axis.\n */\nvar Range = /** @class */ (function (_super) {\n __extends(Range, _super);\n function Range() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Range.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"end\", void 0);\n __decorate([\n Property('Outside')\n ], Range.prototype, \"position\", void 0);\n __decorate([\n Property('')\n ], Range.prototype, \"color\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"startWidth\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"endWidth\", void 0);\n __decorate([\n Property(0)\n ], Range.prototype, \"offset\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], Range.prototype, \"border\", void 0);\n return Range;\n}(ChildProperty));\nexport { Range };\n/**\n * Options for customizing the minor tick lines.\n */\nvar Tick = /** @class */ (function (_super) {\n __extends(Tick, _super);\n function Tick() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(20)\n ], Tick.prototype, \"height\", void 0);\n __decorate([\n Property(2)\n ], Tick.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"interval\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"offset\", void 0);\n return Tick;\n}(ChildProperty));\nexport { Tick };\n/**\n * Options for customizing the pointers of an axis.\n */\nvar Pointer = /** @class */ (function (_super) {\n __extends(Pointer, _super);\n function Pointer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.animationComplete = true;\n /** @private */\n _this.currentValue = null;\n return _this;\n }\n __decorate([\n Property('Marker')\n ], Pointer.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"value\", void 0);\n __decorate([\n Property('InvertedTriangle')\n ], Pointer.prototype, \"markerType\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"imageUrl\", void 0);\n __decorate([\n Complex({ color: '#808080' }, Border)\n ], Pointer.prototype, \"border\", void 0);\n __decorate([\n Property(10)\n ], Pointer.prototype, \"roundedCornerRadius\", void 0);\n __decorate([\n Property('Far')\n ], Pointer.prototype, \"placement\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"height\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Pointer.prototype, \"opacity\", void 0);\n __decorate([\n Property(0)\n ], Pointer.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(false)\n ], Pointer.prototype, \"enableDrag\", void 0);\n __decorate([\n Property(0)\n ], Pointer.prototype, \"offset\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"description\", void 0);\n return Pointer;\n}(ChildProperty));\nexport { Pointer };\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Specifies the minimum value of an axis.\n * @default 0\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n return _this;\n }\n __decorate([\n Property(0)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(100)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Complex({}, Line)\n ], Axis.prototype, \"line\", void 0);\n __decorate([\n Collection([{}], Range)\n ], Axis.prototype, \"ranges\", void 0);\n __decorate([\n Collection([{}], Pointer)\n ], Axis.prototype, \"pointers\", void 0);\n __decorate([\n Complex({ width: 2, height: 20 }, Tick)\n ], Axis.prototype, \"majorTicks\", void 0);\n __decorate([\n Complex({ width: 1, height: 10 }, Tick)\n ], Axis.prototype, \"minorTicks\", void 0);\n __decorate([\n Complex({}, Label)\n ], Axis.prototype, \"labelStyle\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { axisLabelRender } from '../model/constant';\nimport { VisibleLabels, Size, measureText, getLabelFormat, Rect } from '../utils/helper';\nimport { valueToCoefficient, Align, getRangePalette, VisibleRange, withInRange, calculateNiceInterval } from '../utils/helper';\n/**\n * @private\n * To calculate the overall axis bounds for gauge.\n */\nvar AxisLayoutPanel = /** @class */ (function () {\n function AxisLayoutPanel(gauge) {\n this.gauge = gauge;\n }\n /**\n * To calculate the axis bounds\n */\n AxisLayoutPanel.prototype.calculateAxesBounds = function () {\n var axis;\n var bounds;\n var pointer;\n this.gauge.nearSizes = [];\n this.gauge.farSizes = [];\n var x;\n var y;\n var width;\n var height;\n var axisPadding = 8;\n var containerRect = this.gauge.containerBounds;\n this.checkThermometer();\n for (var i = 0; i < this.gauge.axes.length; i++) {\n axis = this.gauge.axes[i];\n axis.checkAlign = new Align(i, ((!axis.opposedPosition) ? 'Near' : 'Far'));\n (!axis.opposedPosition) ? this.gauge.nearSizes.push(1) : this.gauge.farSizes.push(1);\n this.calculateLineBounds(axis, i);\n this.calculateTickBounds(axis, i);\n this.calculateLabelBounds(axis, i);\n if (axis.pointers.length > 0) {\n this.calculatePointerBounds(axis, i);\n }\n if (axis.ranges.length > 0) {\n this.calculateRangesBounds(axis, i);\n }\n bounds = axis.labelBounds;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition) ? bounds.x - axisPadding : axis.lineBounds.x;\n y = axis.lineBounds.y;\n height = axis.lineBounds.height;\n width = Math.abs((!axis.opposedPosition) ? (axis.lineBounds.x - x) : ((bounds.x + bounds.width + axisPadding) - x));\n }\n else {\n y = (!axis.opposedPosition) ? bounds.y - bounds.height - axisPadding : axis.lineBounds.y;\n x = axis.lineBounds.x;\n width = axis.lineBounds.width;\n height = Math.abs((!axis.opposedPosition) ? Math.abs(axis.lineBounds.y - y) : (bounds.y + axisPadding) - y);\n }\n axis.bounds = new Rect(x, y, width, height);\n }\n };\n /**\n * Calculate axis line bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateLineBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var index;\n var prevAxis;\n var lineHeight = axis.line.height;\n var orientation = this.gauge.orientation;\n var containerRect = this.gauge.containerBounds;\n lineHeight = (axis.line.width > 0) ? lineHeight : null;\n if (orientation === 'Vertical') {\n y = (isNullOrUndefined(lineHeight)) ? containerRect.y :\n containerRect.y + ((containerRect.height / 2) - (lineHeight / 2));\n width = axis.line.width;\n height = (isNullOrUndefined(lineHeight)) ? containerRect.height : lineHeight;\n }\n else {\n x = (isNullOrUndefined(lineHeight)) ? containerRect.x :\n containerRect.x + ((containerRect.width / 2) - (lineHeight / 2));\n height = axis.line.width;\n width = (isNullOrUndefined(lineHeight)) ? containerRect.width : lineHeight;\n }\n index = this.checkPreviousAxes(axis, axisIndex);\n if (isNullOrUndefined(index)) {\n if (orientation === 'Vertical') {\n x = (!axis.opposedPosition ? containerRect.x : containerRect.x + containerRect.width) + axis.line.offset;\n }\n else {\n y = (!axis.opposedPosition ? containerRect.y : containerRect.y + containerRect.height) + axis.line.offset;\n }\n }\n else {\n prevAxis = this.gauge.axes[index];\n if (orientation === 'Vertical') {\n x = ((!axis.opposedPosition) ? prevAxis.bounds.x : (prevAxis.bounds.x + prevAxis.bounds.width)) + axis.line.offset;\n }\n else {\n y = ((!axis.opposedPosition) ? prevAxis.bounds.y : (prevAxis.bounds.y + prevAxis.bounds.height)) + axis.line.offset;\n }\n }\n axis.lineBounds = new Rect(x, y, width, height);\n };\n /**\n * Calculate axis tick bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateTickBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var major;\n var minor;\n var min = Math.min(axis.minimum, axis.maximum);\n var max = Math.max(axis.minimum, axis.maximum);\n min = (min === max) ? max - 1 : min;\n var interval = axis.majorTicks.interval;\n var bounds = axis.lineBounds;\n major = axis.majorTicks;\n minor = axis.minorTicks;\n axis.majorInterval = major.interval;\n axis.minorInterval = minor.interval;\n var size = (this.gauge.orientation === 'Vertical' ? bounds.height : bounds.width);\n var lineSize = (this.gauge.orientation === 'Vertical' ? bounds.width : bounds.height) / 2;\n axis.majorInterval = isNullOrUndefined(axis.majorInterval) ? calculateNiceInterval(min, max, size, this.gauge.orientation)\n : major.interval;\n axis.visibleRange = new VisibleRange(min, max, axis.majorInterval, (max - min));\n axis.minorInterval = (isNullOrUndefined(axis.minorInterval)) ? axis.majorInterval / 2 : axis.minorInterval;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition ? (bounds.x - lineSize - major.height) : bounds.x + lineSize) + major.offset;\n axis.majorTickBounds = new Rect(x, bounds.y, major.height, bounds.height);\n x = (!axis.opposedPosition ? (bounds.x - lineSize - minor.height) : bounds.x + lineSize) + minor.offset;\n axis.minorTickBounds = new Rect(x, bounds.y, minor.height, bounds.height);\n }\n else {\n y = (!axis.opposedPosition ? (bounds.y - lineSize - major.height) : bounds.y + lineSize) + major.offset;\n axis.majorTickBounds = new Rect(bounds.x, y, bounds.width, major.height);\n y = (!axis.opposedPosition ? (bounds.y - lineSize - minor.height) : bounds.y + lineSize) + minor.offset;\n axis.minorTickBounds = new Rect(bounds.x, y, bounds.width, minor.height);\n }\n };\n /**\n * To Calculate axis label bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateLabelBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var padding = 5;\n var bounds = axis.majorTickBounds;\n var offset = axis.labelStyle.offset;\n this.calculateVisibleLabels(axis);\n width = axis.maxLabelSize.width;\n height = axis.maxLabelSize.height / 2;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition ? (bounds.x - width - padding) : (bounds.x + bounds.width + padding)) + offset;\n y = axis.lineBounds.y;\n }\n else {\n y = (!axis.opposedPosition ? (bounds.y - padding) : ((bounds.y + bounds.height + padding) + height)) + offset;\n x = axis.lineBounds.x;\n }\n axis.labelBounds = new Rect(x, y, width, height);\n };\n /**\n * Calculate pointer bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculatePointerBounds = function (axis, axisIndex) {\n var pointer;\n var actualValue;\n var length;\n var val = [];\n var range = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var bounds;\n var line = axis.lineBounds;\n var label = axis.labelBounds;\n var currentVal;\n var type;\n var markerType;\n var nearX;\n var farX;\n var nearY;\n var farY;\n var minimumValue = Math.min(range.min, range.max);\n var maximumValue = Math.max(range.min, range.max);\n for (var i = 0; i < axis.pointers.length; i++) {\n pointer = axis.pointers[i];\n pointer.currentValue = pointer.value !== null ?\n pointer.value < minimumValue ? minimumValue : pointer.value > maximumValue ? maximumValue : pointer.value\n : minimumValue;\n if (pointer.width > 0 && withInRange(pointer.currentValue, null, null, range.max, range.min, 'pointer')) {\n this['calculate' + pointer.type + 'Bounds'](axisIndex, axis, i, pointer);\n }\n }\n };\n /**\n * Calculate marker pointer bounds\n * @param axisIndex\n * @param axis\n * @param pointerIndex\n * @param pointer\n */\n AxisLayoutPanel.prototype.calculateMarkerBounds = function (axisIndex, axis, pointerIndex, pointer) {\n var x;\n var y;\n var line = axis.lineBounds;\n var offset = pointer.offset;\n var range = axis.visibleRange;\n var placement = pointer.placement;\n var tick = axis.majorTickBounds;\n var label = axis.labelBounds;\n var border = pointer.border.width;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition) ? (placement === 'Near') ? label.x : (placement === 'Center') ? tick.x : line.x :\n placement === 'Far' ? label.x + label.width : (placement === 'Center' ? tick.x + tick.width : line.x);\n x = !axis.opposedPosition ? ((pointer.placement === 'Far' ? x + border : x - border) + (offset)) :\n ((pointer.placement === 'Near' ? x - border : x + border) + (offset));\n y = ((valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * line.height) + line.y);\n }\n else {\n y = (!axis.opposedPosition) ? (placement === 'Near') ? label.y - label.height : (placement === 'Center') ? tick.y :\n line.y : (placement === 'Far') ? label.y : (placement === 'Center') ? tick.y + tick.height : line.y;\n y = !axis.opposedPosition ? ((pointer.placement === 'Far' ? y + border : y - border) + (offset)) :\n ((pointer.placement === 'Near' ? y - border : y + border) + (offset));\n x = ((valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * line.width) + line.x);\n }\n pointer.bounds = new Rect(x, y, pointer.width, pointer.height);\n };\n /**\n * Calculate bar pointer bounds\n * @param axisIndex\n * @param axis\n * @param pointerIndex\n * @param pointer\n */\n AxisLayoutPanel.prototype.calculateBarBounds = function (axisIndex, axis, pointerIndex, pointer) {\n var x1;\n var x2;\n var y1;\n var y2;\n var height;\n var width;\n var line = axis.lineBounds;\n var padding = 10;\n var range = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var offset = pointer.offset;\n var container = this.gauge.containerBounds;\n if (orientation === 'Vertical') {\n x1 = (container.width > 0) ? container.x + ((container.width / 2) - (pointer.width / 2)) :\n (!axis.opposedPosition) ? (line.x + padding) : (line.x - pointer.width - padding);\n x1 += (offset);\n y1 = ((valueToCoefficient(pointer.currentValue, axis, orientation, range) * line.height) + line.y);\n y2 = ((valueToCoefficient(range.min, axis, orientation, range) * line.height) + line.y);\n height = Math.abs(y2 - y1);\n y1 = (!axis.isInversed) ? y1 : y2;\n width = pointer.width;\n }\n else {\n x1 = ((valueToCoefficient(range.min, axis, orientation, range) * line.width) + line.x);\n y1 = (container.height > 0) ? (container.y + (container.height / 2) - (pointer.height) / 2) :\n (!axis.opposedPosition) ? (line.y + padding) : (line.y - pointer.height - padding);\n y1 += (offset);\n height = pointer.height;\n x2 = ((valueToCoefficient(pointer.currentValue, axis, orientation, range) * line.width) + line.x);\n width = Math.abs(x2 - x1);\n x1 = (!axis.isInversed) ? x1 : x2;\n }\n pointer.bounds = new Rect(x1, y1, width, height);\n };\n /**\n * Calculate ranges bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateRangesBounds = function (axis, axisIndex) {\n var range;\n var start;\n var end;\n var line = axis.lineBounds;\n var visibleRange = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var startVal;\n var endVal;\n var pointX;\n var pointY;\n var width;\n var height;\n var position;\n var startWidth;\n var endWidth;\n var colors;\n for (var i = 0; i < axis.ranges.length; i++) {\n range = axis.ranges[i];\n if (withInRange(null, range.start, range.end, visibleRange.max, visibleRange.min, 'range')) {\n start = Math.min(range.start, range.end);\n end = Math.max(range.start, range.end);\n position = range.position;\n startWidth = range.startWidth;\n endWidth = range.endWidth;\n colors = this.gauge.rangePalettes.length ? this.gauge.rangePalettes : getRangePalette();\n range.interior = range.color ? range.color : colors[i % colors.length];\n if (this.gauge.orientation === 'Vertical') {\n pointX = line.x + (range.offset);\n pointY = (valueToCoefficient(end, axis, orientation, visibleRange) * line.height) + line.y;\n height = (valueToCoefficient(start, axis, orientation, visibleRange) * line.height) + line.y;\n height -= pointY;\n startVal = !axis.opposedPosition ? position === 'Inside' ? (pointX + startWidth) : (pointX - startWidth)\n : position === 'Inside' ? (pointX - startWidth) : (pointX + startWidth);\n endVal = !axis.opposedPosition ? position === 'Inside' ? (pointX + endWidth) : (pointX - endWidth) :\n position === 'Inside' ? (pointX - endWidth) : (pointX + endWidth);\n range.path = 'M' + pointX + ' ' + pointY + ' L ' + pointX + ' ' + (pointY + height) +\n ' L ' + startVal + ' ' + (pointY + height) + ' L ' + endVal + ' ' + pointY +\n ' L ' + pointX + ' ' + pointY + ' z ';\n }\n else {\n pointX = (valueToCoefficient(end, axis, orientation, visibleRange) * line.width) + line.x;\n pointY = axis.lineBounds.y + (range.offset);\n width = (valueToCoefficient(start, axis, orientation, visibleRange) * line.width) + line.x;\n width = pointX - width;\n startVal = !axis.opposedPosition ? position === 'Inside' ? (pointY + startWidth) :\n (pointY - startWidth) : (position === 'Inside') ? (pointY - startWidth) :\n (pointY + startWidth);\n endVal = !axis.opposedPosition ? position === 'Inside' ? (pointY + endWidth) : (pointY - endWidth) :\n (position === 'Inside') ? (pointY - endWidth) : (pointY + endWidth);\n range.path = 'M' + pointX + ' ' + pointY + ' L ' + (pointX - width) + ' ' + pointY +\n ' L ' + (pointX - width) + ' ' + startVal + ' L ' + pointX + ' ' + endVal +\n ' L ' + pointX + ' ' + pointY + ' z ';\n }\n }\n }\n };\n AxisLayoutPanel.prototype.checkPreviousAxes = function (currentAxis, axisIndex) {\n var index = axisIndex - 1;\n var prevAxis;\n var isPositive = (index >= 0) ? true : false;\n if (isPositive) {\n prevAxis = this.gauge.axes[index];\n index = (prevAxis.checkAlign.align === currentAxis.checkAlign.align) ? index : this.checkPreviousAxes(currentAxis, index);\n }\n else {\n index = null;\n }\n return index;\n };\n /**\n *\n * @param axis To calculate the visible labels\n */\n AxisLayoutPanel.prototype.calculateVisibleLabels = function (axis) {\n axis.visibleLabels = [];\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var interval = axis.visibleRange.interval;\n var format;\n var argsData;\n var style = axis.labelStyle;\n var text;\n var labelSize;\n var customLabelFormat = style.format && style.format.match('{value}') !== null;\n format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(style.format), useGrouping: this.gauge.useGroupingSeparator\n });\n for (var i = min; (i <= max && interval > 0); i += interval) {\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: customLabelFormat ? style.format.replace(new RegExp('{value}', 'g'), format(i)) :\n format(i),\n value: i\n };\n this.gauge.trigger(axisLabelRender, argsData);\n labelSize = measureText(argsData.text, axis.labelStyle.font);\n if (!argsData.cancel) {\n axis.visibleLabels.push(new VisibleLabels(argsData.text, i, labelSize));\n }\n }\n this.getMaxLabelWidth(this.gauge, axis);\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.getMaxLabelWidth = function (gauge, axis) {\n axis.maxLabelSize = new Size(0, 0);\n var label;\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n label = axis.visibleLabels[i];\n label.size = measureText(label.text, axis.labelStyle.font);\n if (label.size.width > axis.maxLabelSize.width) {\n axis.maxLabelSize.width = label.size.width;\n }\n if (label.size.height > axis.maxLabelSize.height) {\n axis.maxLabelSize.height = label.size.height;\n }\n }\n };\n AxisLayoutPanel.prototype.checkThermometer = function () {\n if (this.gauge.container.type === 'Thermometer') {\n this.gauge.axes.map(function (axis, index) {\n if (axis.isInversed) {\n axis.pointers.map(function (pointer, index) {\n if (pointer.type === 'Bar') {\n axis.isInversed = false;\n }\n });\n }\n });\n }\n };\n return AxisLayoutPanel;\n}());\nexport { AxisLayoutPanel };\n","import { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../model/constant';\nimport { Size, valueToCoefficient, PathOption } from '../utils/helper';\nimport { calculateShapes, getBox } from '../utils/helper';\n/**\n * @private\n * To handle the animation for gauge\n */\nvar Animations = /** @class */ (function () {\n function Animations(gauge) {\n this.gauge = gauge;\n }\n /**\n * To do the marker pointer animation.\n * @return {void}\n * @private\n */\n Animations.prototype.performMarkerAnimation = function (element, axis, pointer) {\n var _this = this;\n var markerElement = element;\n var options;\n var timeStamp;\n var range = axis.visibleRange;\n var rectHeight = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.height : axis.lineBounds.width;\n var rectY = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.y : axis.lineBounds.x;\n if (this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * rectHeight) + rectY;\n }\n else {\n pointer.bounds.x = (valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * rectHeight) + rectY;\n }\n options = new PathOption(markerElement.id, null, null, null);\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.gauge.orientation, axis, pointer);\n var currentValue;\n var start = pointer.startValue;\n var end = pointer.currentValue;\n start = (start === end) ? range.min : start;\n var val = Math.abs(start - end);\n var currentPath = options.d;\n new Animation({}).animate(markerElement, {\n duration: pointer.animationDuration,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n timeStamp = ((args.timeStamp - args.delay) / args.duration);\n currentValue = (start < end) ? start + (timeStamp * val) : start - (timeStamp * val);\n if (_this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) *\n rectHeight) + rectY;\n }\n else {\n pointer.bounds.x = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) *\n rectHeight) + rectY;\n }\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, _this.gauge.orientation, axis, pointer);\n markerElement.setAttribute('d', options.d);\n }\n },\n end: function (model) {\n markerElement.setAttribute('d', currentPath);\n pointer.startValue = pointer.currentValue;\n pointer.animationComplete = true;\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n /**\n * Perform the bar pointer animation\n * @param element\n * @param axis\n * @param pointer\n */\n Animations.prototype.performBarAnimation = function (element, axis, pointer) {\n var _this = this;\n var val;\n var radix = 10;\n var timeStamp;\n var value2;\n var value1;\n var height;\n var currentValue;\n var clipHeight;\n var clipY;\n var clipX;\n var clipVal;\n var rectHeight;\n var rectY;\n var rectX;\n var rectWidth;\n var clipWidth;\n var currentHeight;\n var clipElement;\n var range = axis.visibleRange;\n var pointerElement = element;\n var pathElement;\n var svgPathElement;\n var clipRect;\n var lineHeight = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.height : axis.lineBounds.width;\n var lineY = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.y : axis.lineBounds.x;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var start = pointer.startValue;\n var end = pointer.currentValue;\n start = (start === end) ? range.min : start;\n var path = '';\n var currentPath = '';\n var tagName = pointerElement.tagName;\n val = Math.abs(start - end);\n var pointerValue = (valueToCoefficient(end, axis, this.gauge.orientation, range) * lineHeight) + lineY;\n var startPointerVal = (valueToCoefficient(range.min, axis, this.gauge.orientation, range) *\n lineHeight) + lineY;\n rectY = (this.gauge.orientation === 'Vertical') ? !axis.isInversed ? pointerValue : startPointerVal :\n axis.isInversed ? pointerValue : startPointerVal;\n rectHeight = Math.abs(startPointerVal - pointerValue);\n if (this.gauge.container.type === 'Thermometer' && start === 0) {\n clipElement = pointerElement.parentElement.childNodes[1].childNodes[0].childNodes[0];\n if (this.gauge.orientation === 'Vertical') {\n clipY = clipElement.getAttribute('y');\n clipHeight = clipElement.getAttribute('height');\n clipVal = parseInt(clipY, radix) + parseInt(clipHeight, radix);\n clipElement.setAttribute('y', clipVal.toString());\n }\n else {\n clipX = clipElement.getAttribute('x');\n clipWidth = clipElement.getAttribute('width');\n clipVal = parseInt(clipX, radix) + parseInt(clipWidth, radix);\n clipElement.setAttribute('width', '0');\n }\n }\n path = getBox(pointer.bounds, this.gauge.container.type, this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.gauge.container.width, axis, pointer.roundedCornerRadius);\n new Animation({}).animate(pointerElement, {\n duration: pointer.animationDuration,\n progress: function (animate) {\n if (animate.timeStamp >= animate.delay) {\n timeStamp = ((animate.timeStamp - animate.delay) / animate.duration);\n currentValue = (start < end) ? start + (timeStamp * val) : start - (timeStamp * val);\n value2 = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) * lineHeight) + lineY;\n value1 = (valueToCoefficient(range.min, axis, _this.gauge.orientation, range) * lineHeight) + lineY;\n currentHeight = Math.abs(value2 - value1);\n if (_this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (!axis.isInversed) ? value2 : value1;\n pointer.bounds.height = currentHeight;\n }\n else {\n pointer.bounds.x = (axis.isInversed) ? value2 : value1;\n pointer.bounds.width = currentHeight;\n }\n if (tagName === 'path') {\n if (start === 0 && _this.gauge.container.type === 'Thermometer') {\n (_this.gauge.orientation === 'Vertical') ?\n clipElement.setAttribute('y', (clipVal - (timeStamp * parseInt(clipHeight, radix))).toString()) :\n clipElement.setAttribute('width', (timeStamp * parseInt(clipWidth, radix)).toString());\n }\n currentPath = getBox(pointer.bounds, _this.gauge.container.type, _this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', _this.gauge.container.width, axis, pointer.roundedCornerRadius);\n pointerElement.setAttribute('d', currentPath);\n }\n else {\n if (_this.gauge.orientation === 'Vertical') {\n pointerElement.setAttribute('y', pointer.bounds.y.toString());\n pointerElement.setAttribute('height', pointer.bounds.height.toString());\n }\n else {\n pointerElement.setAttribute('x', pointer.bounds.x.toString());\n pointerElement.setAttribute('width', pointer.bounds.width.toString());\n }\n }\n }\n },\n end: function (model) {\n if (tagName === 'path') {\n if (start === 0 && _this.gauge.container.type === 'Thermometer') {\n pointerElement.parentElement.children[1].remove();\n }\n else {\n pointerElement.setAttribute('d', path);\n }\n }\n else {\n if (_this.gauge.orientation === 'Vertical') {\n pointerElement.setAttribute('y', rectY.toString());\n pointerElement.setAttribute('height', rectHeight.toString());\n }\n else {\n pointerElement.setAttribute('x', rectY.toString());\n pointerElement.setAttribute('width', rectHeight.toString());\n }\n }\n pointer.startValue = pointer.currentValue;\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n return Animations;\n}());\nexport { Animations };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { Animations } from './animation';\nimport { Size, valueToCoefficient, PathOption, textElement, getElement } from '../utils/helper';\nimport { TextOption, RectOption, calculateShapes, getBox, getPathToRect, getRangeColor } from '../utils/helper';\n/**\n * @private\n * To render the axis elements\n */\nvar AxisRenderer = /** @class */ (function (_super) {\n __extends(AxisRenderer, _super);\n function AxisRenderer(gauge) {\n return _super.call(this, gauge) || this;\n }\n AxisRenderer.prototype.renderAxes = function () {\n var _this = this;\n var axis;\n var major;\n var minor;\n this.axisElements = [];\n this.axisObject = this.gauge.renderer.createGroup({\n id: this.gauge.element.id + '_Axis_Collections',\n transform: 'translate( 0, 0 )'\n });\n for (var i = 0; i < this.gauge.axes.length; i++) {\n axis = this.gauge.axes[i];\n major = axis.majorTicks;\n minor = axis.minorTicks;\n this.htmlObject = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_Axis_Group_' + i });\n this.drawAxisLine(axis, this.htmlObject, i);\n this.drawRanges(axis, this.htmlObject, i);\n this.drawTicks(axis, major, this.htmlObject, 'MajorTicks', axis.majorTickBounds);\n this.drawTicks(axis, minor, this.htmlObject, 'MinorTicks', axis.minorTickBounds);\n this.drawAxisLabels(axis, this.htmlObject);\n this.drawPointers(axis, this.htmlObject, i);\n this.axisElements.push(this.htmlObject);\n }\n this.axisElements.forEach(function (axisElement) {\n _this.axisObject.appendChild(axisElement);\n });\n this.gauge.svgObject.appendChild(this.axisObject);\n if (this.gauge.nearSizes.length !== this.gauge.farSizes.length && this.gauge.axes.length > 1) {\n this.axisAlign(this.gauge.axes);\n }\n };\n AxisRenderer.prototype.axisAlign = function (axes) {\n var nearAxisWidth = 0;\n var farAxisWidth = 0;\n var axis;\n var tranX;\n var transY;\n if (this.gauge.orientation === 'Vertical') {\n axes.forEach(function (axis, axisIndex) {\n if (!axis.opposedPosition) {\n nearAxisWidth += axis.bounds.width;\n }\n else {\n farAxisWidth += axis.bounds.width;\n }\n });\n nearAxisWidth += this.gauge.containerBounds.width / 2;\n farAxisWidth += this.gauge.containerBounds.width / 2;\n tranX = (nearAxisWidth / 2) - (farAxisWidth / 2);\n this.axisObject.setAttribute('transform', 'translate(' + tranX + ',0)');\n if (!(isNullOrUndefined(this.gauge.containerObject))) {\n this.gauge.containerObject.setAttribute('transform', 'translate(' + tranX + ',0)');\n }\n }\n else {\n axes.forEach(function (axis, axisIndex) {\n if (!axis.opposedPosition) {\n nearAxisWidth += axis.bounds.height;\n }\n else {\n farAxisWidth += axis.bounds.height;\n }\n });\n nearAxisWidth += (this.gauge.containerBounds.height / 2);\n farAxisWidth += (this.gauge.containerBounds.height / 2);\n transY = (nearAxisWidth / 2) - (farAxisWidth / 2);\n this.axisObject.setAttribute('transform', 'translate(0,' + transY + ')');\n if (!(isNullOrUndefined(this.gauge.containerObject))) {\n this.gauge.containerObject.setAttribute('transform', 'translate(0,' + transY + ')');\n }\n }\n };\n AxisRenderer.prototype.drawAxisLine = function (axis, axisObject, axisIndex) {\n var options;\n var rect = axis.lineBounds;\n var path = '';\n if (axis.line.width > 0) {\n path = 'M' + rect.x + ' ' + rect.y + ' L ' + (this.gauge.orientation === 'Vertical' ? rect.x : rect.x + rect.width) +\n ' ' + (this.gauge.orientation === 'Vertical' ? rect.y + rect.height : rect.y) + 'z';\n options = new PathOption(this.gauge.element.id + '_AxisLine_' + axisIndex, axis.line.color, axis.line.width, axis.line.color, 1, axis.line.dashArray, path);\n axisObject.appendChild(this.gauge.renderer.drawPath(options));\n }\n };\n AxisRenderer.prototype.drawTicks = function (axis, ticks, axisObject, tickID, tickBounds) {\n var tickPath = '';\n var pointY;\n var pointX;\n var options;\n var range = axis.visibleRange;\n var line = axis.lineBounds;\n var interval = ((tickID === 'MajorTicks') ? axis.majorInterval : axis.minorInterval);\n for (var i = range.min; (i <= range.max && interval > 0); i += interval) {\n if ((tickID === 'MajorTicks') || (tickID === 'MinorTicks' && i !== range.min && i !== range.max\n && (i % axis.majorInterval) !== 0)) {\n if (this.gauge.orientation === 'Vertical') {\n pointX = tickBounds.x;\n pointY = (valueToCoefficient(i, axis, this.gauge.orientation, range) * line.height) + line.y;\n tickPath = tickPath.concat('M' + pointX + ' ' + pointY + ' ' + 'L' + (pointX + ticks.height) + ' ' + pointY + ' ');\n }\n else {\n pointX = (valueToCoefficient(i, axis, this.gauge.orientation, range) * line.width) + line.x;\n pointY = tickBounds.y;\n tickPath = tickPath.concat('M' + pointX + ' ' + pointY + ' ' + 'L' + pointX + ' ' + (pointY + ticks.height) + ' ');\n }\n }\n }\n options = new PathOption(this.gauge.element.id + '_' + tickID + 'Line_' + 0, ticks.color, ticks.width, ticks.color, 1, null, tickPath);\n axisObject.appendChild(this.gauge.renderer.drawPath(options));\n };\n AxisRenderer.prototype.drawAxisLabels = function (axis, axisObject) {\n var options;\n var pointX;\n var pointY;\n var rect = axis.lineBounds;\n var bounds = axis.labelBounds;\n var tick = axis.majorTickBounds;\n var labelSize;\n var range = axis.visibleRange;\n var anchor;\n var baseline;\n var padding = 5;\n var labelColor;\n var offset = axis.labelStyle.offset;\n var labelElement = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_AxisLabelsGroup' });\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n labelSize = axis.visibleLabels[i].size;\n labelColor = axis.labelStyle.useRangeColor ? getRangeColor(axis.visibleLabels[i].value, axis.ranges) :\n null;\n labelColor = isNullOrUndefined(labelColor) ? axis.labelStyle.font.color : labelColor;\n if (this.gauge.orientation === 'Vertical') {\n pointY = (valueToCoefficient(axis.visibleLabels[i].value, axis, this.gauge.orientation, range) *\n rect.height) + rect.y;\n pointX = (!axis.opposedPosition ? (tick.x - labelSize.width - padding) + offset : bounds.x);\n pointY += (labelSize.height / 4);\n }\n else {\n pointX = (valueToCoefficient(axis.visibleLabels[i].value, axis, this.gauge.orientation, range) *\n rect.width) + rect.x;\n pointY = bounds.y;\n anchor = 'middle';\n baseline = '';\n }\n options = new TextOption(this.gauge.element.id + '_AxisLabel_' + i, pointX, pointY, anchor, axis.visibleLabels[i].text, null, baseline);\n textElement(options, axis.labelStyle.font, labelColor, labelElement);\n }\n axisObject.appendChild(labelElement);\n };\n AxisRenderer.prototype.drawPointers = function (axis, axisObject, axisIndex) {\n var pointer;\n var clipId;\n var pointesGroup;\n var pointerClipRectGroup;\n pointesGroup = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_PointersGroup' });\n for (var i = 0; i < axis.pointers.length; i++) {\n pointer = axis.pointers[i];\n clipId = 'url(#' + this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + '_' + pointer.type + 'ClipRect_' + i + ')';\n if (!(isNullOrUndefined(pointer.bounds))) {\n pointerClipRectGroup = this.gauge.renderer.createGroup({\n 'id': this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer_' + i,\n 'clip-path': clipId\n });\n if (isNullOrUndefined(pointer.startValue)) {\n pointer.startValue = axis.visibleRange.min;\n }\n this['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointer, i, pointerClipRectGroup);\n pointesGroup.appendChild(pointerClipRectGroup);\n }\n }\n axisObject.appendChild(pointesGroup);\n };\n AxisRenderer.prototype.drawMarkerPointer = function (axis, axisIndex, pointer, pointerIndex, parentElement) {\n var options;\n var pointerID = this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer' + '_' + pointerIndex;\n var transform = 'translate( 0, 0 )';\n var pointerElement;\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n remove(getElement(pointerID));\n }\n options = new PathOption(pointerID, pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, null, transform);\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.gauge.orientation, axis, pointer);\n pointerElement = ((pointer.markerType === 'Circle' ? this.gauge.renderer.drawCircle(options)\n : (pointer.markerType === 'Image') ? this.gauge.renderer.drawImage(options) :\n this.gauge.renderer.drawPath(options)));\n parentElement.appendChild(pointerElement);\n if (pointer.animationDuration > 0 && !this.gauge.gaugeResized) {\n pointer.animationComplete = false;\n this.performMarkerAnimation(pointerElement, axis, pointer);\n }\n pointerElement.setAttribute('aria-label', pointer.description || 'Pointer:' + Number(pointer.currentValue).toString());\n };\n AxisRenderer.prototype.drawBarPointer = function (axis, axisIndex, pointer, pointerIndex, parentElement) {\n var rectOptions;\n var clipRectElement;\n var pointerElement;\n var path = '';\n var options;\n var box;\n var radius;\n var bottomRadius;\n var topRadius;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var pointerID = this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer' + '_' + pointerIndex;\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n remove(getElement(pointerID));\n }\n if (this.gauge.container.type === 'Normal') {\n rectOptions = new RectOption(pointerID, pointer.color, pointer.border, pointer.opacity, pointer.bounds, null, null);\n box = pointer.bounds;\n pointerElement = this.gauge.renderer.drawRectangle(rectOptions);\n }\n else {\n path = getBox(pointer.bounds, this.gauge.container.type, this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.gauge.container.width, axis, pointer.roundedCornerRadius);\n options = new PathOption(pointerID, pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, path);\n pointerElement = this.gauge.renderer.drawPath(options);\n box = getPathToRect(pointerElement.cloneNode(true), size, this.gauge.element);\n }\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n var element = getElement(pointerID).firstElementChild;\n if (this.gauge.container.type === 'Normal') {\n element.setAttribute('x', rectOptions.x + '');\n element.setAttribute('y', rectOptions.y + '');\n element.setAttribute('width', rectOptions.width + '');\n element.setAttribute('height', rectOptions.height + '');\n }\n else {\n element.setAttribute('d', options.d);\n }\n }\n else {\n parentElement.appendChild(pointerElement);\n }\n pointerElement.setAttribute('aria-label', pointer.description || 'Pointer:' + Number(pointer.currentValue).toString());\n if (pointer.animationDuration > 0 && !this.gauge.gaugeResized) {\n if (this.gauge.container.type === 'Thermometer' && pointer.startValue === 0) {\n clipRectElement = this.gauge.renderer.drawClipPath(new RectOption(this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + '_' + pointer.type + 'ClipRect_' + pointerIndex, 'transparent', { width: 1, color: 'Gray' }, 1, box));\n parentElement.appendChild(clipRectElement);\n }\n this.performBarAnimation(pointerElement, axis, pointer);\n }\n };\n AxisRenderer.prototype.drawRanges = function (axis, axisObject, axisIndex) {\n var range;\n var options;\n var rangeElement = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_RangesGroup' });\n for (var j = 0; j < axis.ranges.length; j++) {\n range = axis.ranges[j];\n if (!(isNullOrUndefined(range.path))) {\n options = new PathOption(this.gauge.element.id + '_AxisIndex_' + axisIndex + '_Range_' + j, range.interior, range.border.width, range.border.color, 1, null, range.path);\n rangeElement.appendChild(this.gauge.renderer.drawPath(options));\n }\n }\n axisObject.appendChild(rangeElement);\n };\n return AxisRenderer;\n}(Animations));\nexport { AxisRenderer };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, getElement, getElementOffset } from '../utils/helper';\nimport { getFontStyle, valueToCoefficient } from '../utils/helper';\nimport { annotationRender } from '../model/constant';\n/**\n * Represent the annotation rendering for gauge\n */\nvar Annotations = /** @class */ (function () {\n function Annotations(gauge) {\n this.gauge = gauge;\n }\n /**\n * To render annotation elements\n */\n Annotations.prototype.renderAnnotationElements = function () {\n var _this = this;\n var secondaryID = this.gauge.element.id + '_Secondary_Element';\n var annotationGroup = createElement('div', { id: this.gauge.element.id + '_AnnotationsGroup' });\n annotationGroup.style.position = 'absolute';\n annotationGroup.style.top = '0px';\n annotationGroup.style.left = '0px';\n this.gauge.annotations.map(function (annotation, index) {\n if (annotation.content !== null) {\n _this.createAnnotationTemplate(annotationGroup, index);\n }\n });\n if (annotationGroup.childElementCount > 0 && !(isNullOrUndefined(getElement(secondaryID)))) {\n getElement(secondaryID).appendChild(annotationGroup);\n }\n };\n /**\n * To create annotation elements\n */\n Annotations.prototype.createAnnotationTemplate = function (element, annotationIndex) {\n var left;\n var top;\n var templateFn;\n var renderAnnotation = false;\n var templateElement;\n var axis;\n var axisIndex;\n var axisValue;\n var id = this.gauge.element.id + '_Annotation_' + annotationIndex;\n var annotation = this.gauge.annotations[annotationIndex];\n var childElement;\n childElement = createElement('div', {\n id: this.gauge.element.id + '_Annotation_' + annotationIndex, styles: 'position: absolute; z-index:' + annotation.zIndex + ';'\n });\n var argsData = {\n cancel: false, name: annotationRender, content: annotation.content,\n annotation: annotation, textStyle: annotation.font\n };\n this.gauge.trigger(annotationRender, argsData);\n if (!argsData.cancel) {\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(this.gauge).length) {\n templateElement = templateFn(this.gauge);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content,\n styles: getFontStyle(argsData.textStyle)\n }));\n }\n var offset = getElementOffset(childElement.cloneNode(true), this.gauge.element);\n if (!(isNullOrUndefined(annotation.axisValue))) {\n axisIndex = isNullOrUndefined(annotation.axisIndex) ? 0 : annotation.axisIndex;\n axis = this.gauge.axes[axisIndex];\n var range = axis.visibleRange;\n renderAnnotation = (annotation.axisValue >= range.min && annotation.axisValue <= range.max) ? true : false;\n var line = axis.lineBounds;\n if (this.gauge.orientation === 'Vertical') {\n left = line.x + annotation.x;\n top = ((valueToCoefficient(annotation.axisValue, axis, this.gauge.orientation, range) * line.height) + line.y);\n top += annotation.y;\n }\n else {\n left = ((valueToCoefficient(annotation.axisValue, axis, this.gauge.orientation, range) * line.width) + line.x);\n left += annotation.x;\n top = line.y + annotation.y;\n }\n left -= (offset.width / 2);\n top -= (offset.height / 2);\n }\n else {\n var elementRect = this.gauge.element.getBoundingClientRect();\n var bounds = this.gauge.svgObject.getBoundingClientRect();\n renderAnnotation = true;\n left = Math.abs(bounds.left - elementRect.left);\n top = Math.abs(bounds.top - elementRect.top);\n left = (annotation.horizontalAlignment === 'None') ? (left + annotation.x) : left;\n top = (annotation.verticalAlignment === 'None') ? top + annotation.y : top;\n switch (annotation.verticalAlignment) {\n case 'Near':\n top = top + annotation.y;\n break;\n case 'Center':\n top = top + annotation.y + ((bounds.height / 2) - (offset.height / 2));\n break;\n case 'Far':\n top = (top + bounds.height) + annotation.y - offset.height;\n break;\n }\n switch (annotation.horizontalAlignment) {\n case 'Near':\n left = left + annotation.x;\n break;\n case 'Center':\n left = left + annotation.x + ((bounds.width / 2) - (offset.width / 2));\n break;\n case 'Far':\n left = (left + bounds.width) + annotation.x - offset.width;\n break;\n }\n }\n childElement.style.left = left + 'px';\n childElement.style.top = top + 'px';\n if (renderAnnotation) {\n element.appendChild(childElement);\n }\n }\n };\n /*\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","import { createElement, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { tooltipRender } from '../model/constant';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getElement, getLabelFormat, getTemplateFunction, GaugeLocation, Size } from '../utils/helper';\nimport { getPointer, convertPixelToValue } from '../utils/helper';\n/**\n * Represent the tooltip rendering for gauge\n */\nvar GaugeTooltip = /** @class */ (function () {\n function GaugeTooltip(gauge) {\n this.gauge = gauge;\n this.element = gauge.element;\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1000\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * Internal use for tooltip rendering\n * @param pointerElement\n */\n GaugeTooltip.prototype.renderTooltip = function (pointerElement) {\n this.pointerElement = pointerElement;\n var clientRect = this.gauge.element.getBoundingClientRect();\n var current = getPointer(pointerElement, this.gauge);\n this.currentAxis = current.axis;\n this.axisIndex = current.axisIndex;\n this.currentPointer = current.pointer;\n var ele = this.appendTargetElement();\n if (pointerElement.getAttribute('data-tooltip-id') === null && ele.getAttribute('aria-describedby') === null) {\n this.ejTooltip.open(ele);\n }\n };\n GaugeTooltip.prototype.appendTargetElement = function () {\n var location = this.getTooltipLocation();\n var element = getElement(this.element.id + '_EJTooltip_');\n var elementSpace = 2;\n if (element) {\n element.style.left = (location.x - (elementSpace / 2)) + 'px';\n element.style.top = (location.y - (elementSpace / 2)) + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_EJTooltip_',\n styles: 'position:absolute; left:' + location.x + 'px;top:' + location.y + 'px;'\n });\n element.appendChild(createElement('div', {\n id: this.element.id + '_GaugeTooltip',\n styles: 'position:absolute;width:' + elementSpace + 'px;height:' + elementSpace + 'px;background:transparent'\n }));\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n GaugeTooltip.prototype.getTooltipPosition = function () {\n var position;\n if (this.gauge.orientation === 'Vertical') {\n position = (!this.currentAxis.opposedPosition) ? 'LeftCenter' : 'RightCenter';\n }\n else {\n position = (this.currentAxis.opposedPosition) ? 'TopCenter' : 'BottomCenter';\n }\n return position;\n };\n GaugeTooltip.prototype.getTooltipLocation = function () {\n var location;\n var bounds;\n var radix = 10;\n var lineX;\n var lineY;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var x;\n var y;\n var height;\n var width;\n var lineId = this.gauge.element.id + '_AxisLine_' + this.axisIndex;\n var tickID = this.gauge.element.id + '_MajorTicksLine_' + this.axisIndex;\n var lineBounds;\n if (getElement(lineId)) {\n lineBounds = getElement(lineId).getBoundingClientRect();\n lineX = lineBounds.left;\n lineY = lineBounds.top;\n }\n else {\n lineBounds = getElement(tickID).getBoundingClientRect();\n lineX = (!this.currentAxis.opposedPosition) ? (lineBounds.left + lineBounds.width) : lineBounds.left;\n lineY = (!this.currentAxis.opposedPosition) ? (lineBounds.top + lineBounds.height) : lineBounds.top;\n }\n bounds = this.pointerElement.getBoundingClientRect();\n var elementRect = this.gauge.element.getBoundingClientRect();\n x = bounds.left - elementRect.left;\n y = bounds.top - elementRect.top;\n height = bounds.height;\n width = bounds.width;\n if (this.gauge.orientation === 'Vertical') {\n x = (lineX - elementRect.left);\n y = (this.currentPointer.type === 'Marker') ? y + (height / 2) : (!this.currentAxis.isInversed) ? y : y + height;\n }\n else {\n y = (lineY - elementRect.top);\n x = (this.currentPointer.type === 'Marker') ? (x + width / 2) : (!this.currentAxis.isInversed) ? x + width : x;\n }\n location = new GaugeLocation(x, y);\n return location;\n };\n GaugeTooltip.prototype.onBeforeRender = function (args) {\n var pointerValue = convertPixelToValue(this.element, this.pointerElement, this.gauge.orientation, this.currentAxis, 'tooltip', null);\n var tooltipFormat = this.gauge.tooltip.format || this.currentAxis.labelStyle.format;\n var customLabelFormat = tooltipFormat && tooltipFormat.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(tooltipFormat), useGrouping: this.gauge.useGroupingSeparator\n });\n var content = customLabelFormat ?\n tooltipFormat.replace(new RegExp('{value}', 'g'), format(pointerValue)) :\n format(pointerValue);\n content = this.tooltip.template ? getTemplateFunction(this.tooltip.template)({ 'value': content })[0] : content;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: this.borderStyle,\n axis: this.currentAxis, pointer: this.currentPointer,\n textStyle: this.textStyle\n };\n this.gauge.trigger(tooltipRender, argsData);\n this.ejTooltip.content = argsData.content;\n this.textStyle = argsData.textStyle;\n this.borderStyle = argsData.border;\n this.ejTooltip.position = this.getTooltipPosition();\n this.ejTooltip.dataBind();\n };\n GaugeTooltip.prototype.tooltipCustomization = function (args) {\n var font = this.textStyle;\n var borderColor = this.borderStyle.color;\n var border = this.borderStyle.width;\n var pointerSize = 8;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n args.element.classList.remove('e-popup-close');\n args.element.classList.add('e-popup-open');\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.tooltip.fill, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'opacity': font.opacity.toString(), 'fontStyle': font.fontStyle\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderBottomWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderTopWidth': innerWidth,\n 'left': border + 'px', 'top': '0'\n });\n }\n else if (arrowEle.classList.contains('e-tip-left')) {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': pointerSize + border + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderRightWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderRightWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': (pointerSize + border) + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderLeftWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderLeftWidth': innerWidth,\n 'left': (border <= 1 ? 0 : -1) + 'px', 'top': border + 'px'\n });\n }\n this.ejTooltip.refresh(args.target);\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': this.tooltip.enableAnimation ? '1000ms' : '0ms'\n });\n };\n /*\n * Get module name.\n */\n GaugeTooltip.prototype.getModuleName = function () {\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n GaugeTooltip.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { SvgRenderer, Browser } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection, isNullOrUndefined, remove, createElement } from '@syncfusion/ej2-base';\nimport { Border, Font, Container, Margin, Annotation, TooltipSettings } from './model/base';\nimport { Axis } from './axes/axis';\nimport { load, loaded, gaugeMouseMove, gaugeMouseLeave, gaugeMouseDown, gaugeMouseUp, resized, valueChange } from './model/constant';\nimport { Size, valueToCoefficient, calculateShapes, stringToNumber, removeElement, getElement } from './utils/helper';\nimport { measureText, Rect, TextOption, textElement, GaugeLocation, RectOption, PathOption } from './utils/helper';\nimport { getBox, withInRange, getPointer, convertPixelToValue, isPointerDrag } from './utils/helper';\nimport { AxisLayoutPanel } from './axes/axis-panel';\nimport { AxisRenderer } from './axes/axis-renderer';\nimport { Annotations } from './annotations/annotations';\nimport { GaugeTooltip } from './user-interaction/tooltip';\n/**\n * Represents the EJ2 Linear gauge control.\n * ```html\n *
    \n * \n * ```\n */\nvar LinearGauge = /** @class */ (function (_super) {\n __extends(LinearGauge, _super);\n /**\n * @private\n * Constructor for creating the widget\n * @hidden\n */\n function LinearGauge(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.pointerDrag = false;\n /** @private */\n _this.mouseX = 0;\n /** @private */\n _this.mouseY = 0;\n /** @private */\n _this.gaugeResized = false;\n return _this;\n }\n /**\n * Initialize the preRender method.\n */\n LinearGauge.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger(load, { gauge: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.setCulture();\n this.createSvg();\n this.wireEvents();\n };\n LinearGauge.prototype.themeEffect = function () {\n if (this.theme === 'Highcontrast') {\n this.titleStyle.color = this.titleStyle.color || '#FFFFFF';\n this.setThemeColors('#FFFFFF', '#FFFFFF');\n }\n else {\n this.titleStyle.color = this.titleStyle.color || '#424242';\n this.setThemeColors('#686868', '#a6a6a6');\n }\n };\n LinearGauge.prototype.setThemeColors = function (labelcolor, others) {\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.line.color = axis.line.color || others;\n axis.labelStyle.font.color = axis.labelStyle.font.color || labelcolor;\n axis.majorTicks.color = axis.majorTicks.color || others;\n axis.minorTicks.color = axis.minorTicks.color || others;\n for (var _b = 0, _c = axis.pointers; _b < _c.length; _b++) {\n var pointer = _c[_b];\n pointer.color = pointer.color || others;\n }\n }\n for (var _d = 0, _e = this.annotations; _d < _e.length; _d++) {\n var annotation = _e[_d];\n annotation.font.color = annotation.font.color || labelcolor;\n }\n };\n LinearGauge.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.gaugeAxisLayoutPanel = new AxisLayoutPanel(this);\n this.axisRenderer = new AxisRenderer(this);\n };\n /**\n * Method to set culture for chart\n */\n LinearGauge.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Methods to create svg element\n */\n LinearGauge.prototype.createSvg = function () {\n this.removeSvg();\n this.calculateSize();\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (!(isNullOrUndefined(this.svgObject)) && !isNullOrUndefined(this.svgObject.parentNode)) {\n remove(this.svgObject);\n }\n };\n /**\n * Method to calculate the size of the gauge\n */\n LinearGauge.prototype.calculateSize = function () {\n var width = stringToNumber(this.width, this.element.offsetWidth) || this.element.offsetWidth || 600;\n var height = stringToNumber(this.height, this.element.offsetHeight) || this.element.offsetHeight || 450;\n this.availableSize = new Size(width, height);\n };\n /**\n * To Initialize the control rendering\n */\n LinearGauge.prototype.render = function () {\n this.renderGaugeElements();\n this.calculateBounds();\n this.renderAxisElements();\n this.trigger(loaded, { gauge: this });\n };\n /**\n * @private\n * To render the gauge elements\n */\n LinearGauge.prototype.renderGaugeElements = function () {\n this.appendSecondaryElement();\n this.renderBorder();\n this.renderTitle();\n this.renderContainer();\n };\n LinearGauge.prototype.appendSecondaryElement = function () {\n if (isNullOrUndefined(getElement(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div');\n secondaryElement.id = this.element.id + '_Secondary_Element';\n secondaryElement.setAttribute('style', 'position: relative');\n this.element.appendChild(secondaryElement);\n }\n };\n /**\n * @private\n * To calculate axes bounds\n */\n LinearGauge.prototype.calculateBounds = function () {\n this.gaugeAxisLayoutPanel.calculateAxesBounds();\n };\n /**\n * @private\n * To render axis elements\n */\n LinearGauge.prototype.renderAxisElements = function () {\n this.axisRenderer.renderAxes();\n this.element.appendChild(this.svgObject);\n if (this.annotationsModule) {\n this.annotationsModule.renderAnnotationElements();\n }\n };\n LinearGauge.prototype.renderBorder = function () {\n var width = this.border.width;\n if (width > 0) {\n var rect = new RectOption(this.element.id + '_LinearGaugeBorder', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width), null, null);\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n }\n };\n LinearGauge.prototype.renderTitle = function () {\n var x;\n var y;\n var height;\n var width;\n var titleBounds;\n if (this.title) {\n var size = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_LinearGaugeTitle', this.availableSize.width / 2, this.margin.top + (size.height / 2), 'middle', this.title);\n titleBounds = {\n x: options.x - (size.width / 2),\n y: options.y,\n width: size.width,\n height: size.height\n };\n var element = textElement(options, this.titleStyle, this.titleStyle.color, this.svgObject);\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n x = this.margin.left;\n y = (isNullOrUndefined(titleBounds)) ? this.margin.top : titleBounds.y;\n height = (this.availableSize.height - y - this.margin.bottom);\n width = (this.availableSize.width - this.margin.left - this.margin.right);\n this.actualRect = { x: x, y: y, width: width, height: height };\n };\n /*\n * Method to unbind the gauge events\n */\n LinearGauge.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'contextmenu', this.gaugeRightClick);\n EventHandler.remove(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave);\n EventHandler.remove(window, (Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize.bind(this));\n };\n /*\n * Method to bind the gauge events\n */\n LinearGauge.prototype.wireEvents = function () {\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'contextmenu', this.gaugeRightClick, this);\n EventHandler.add(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave, this);\n EventHandler.add(window, (Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize, this);\n this.setStyle(this.element);\n };\n LinearGauge.prototype.setStyle = function (element) {\n element.style.touchAction = isPointerDrag(this.axes) ? 'none' : 'element';\n element.style.msTouchAction = isPointerDrag(this.axes) ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Handles the gauge resize.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeResize = function (e) {\n var _this = this;\n var args = {\n gauge: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-lineargauge')) {\n this.resizeTo = setTimeout(function () {\n _this.gaugeResized = true;\n _this.createSvg();\n _this.refreshing = true;\n args.currentSize = new Size(_this.availableSize.width, _this.availableSize.height);\n _this.trigger(resized, args);\n _this.render();\n }, 500);\n }\n return false;\n };\n /**\n * To destroy the gauge element from the DOM.\n */\n LinearGauge.prototype.destroy = function () {\n this.unWireEvents();\n this.removeSvg();\n _super.prototype.destroy.call(this);\n };\n /**\n * @private\n * To render the gauge container\n */\n LinearGauge.prototype.renderContainer = function () {\n var width;\n var height;\n var x;\n var y;\n var options;\n var path = '';\n var topRadius;\n var bottomRadius;\n var fill = this.container.backgroundColor;\n var rect;\n var radius = this.container.width;\n bottomRadius = radius + ((radius / 2) / Math.PI);\n topRadius = radius / 2;\n if (this.orientation === 'Vertical') {\n height = this.actualRect.height;\n height = (this.container.height > 0 ? this.container.height : ((height / 2) - ((height / 2) / 4)) * 2);\n width = this.container.width;\n height = (this.container.type === 'Thermometer') ? height - (bottomRadius * 2) - topRadius : height;\n x = (this.actualRect.x + ((this.actualRect.width / 2) - (this.container.width / 2))) + this.container.offset;\n y = this.actualRect.y + ((this.actualRect.height / 2) - ((this.container.type === 'Thermometer') ?\n ((height + (bottomRadius * 2) - topRadius)) / 2 : height / 2));\n height = height;\n }\n else {\n width = (this.container.height > 0) ? this.container.height :\n ((this.actualRect.width / 2) - ((this.actualRect.width / 2) / 4)) * 2;\n width = (this.container.type === 'Thermometer') ? width - (bottomRadius * 2) - topRadius : width;\n x = this.actualRect.x + ((this.actualRect.width / 2) - ((this.container.type === 'Thermometer') ?\n (width - (bottomRadius * 2) + topRadius) / 2 : width / 2));\n y = (this.actualRect.y + ((this.actualRect.height / 2) - (this.container.width / 2))) + this.container.offset;\n height = this.container.width;\n }\n this.containerBounds = { x: x, y: y, width: width, height: height };\n if (this.containerBounds.width > 0) {\n this.containerObject = this.renderer.createGroup({ id: this.element.id + '_Container_Group', transform: 'translate( 0, 0)' });\n if (this.container.type === 'Normal') {\n rect = new RectOption(this.element.id + '_' + this.container.type + '_Layout', fill, this.container.border, 1, new Rect(x, y, width, height));\n this.containerObject.appendChild(this.renderer.drawRectangle(rect));\n }\n else {\n path = getBox(this.containerBounds, this.container.type, this.orientation, new Size(this.container.height, this.container.width), 'container', null, null, this.container.roundedCornerRadius);\n options = new PathOption(this.element.id + '_' + this.container.type + '_Layout', fill, this.container.border.width, this.container.border.color, 1, '', path);\n this.containerObject.appendChild(this.renderer.drawPath(options));\n }\n this.svgObject.appendChild(this.containerObject);\n }\n };\n /**\n * Handles the mouse down on gauge.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var element = e.target;\n var split = [];\n var clientRect = this.element.getBoundingClientRect();\n var axis;\n var isPointer = false;\n var pointer;\n var current;\n var top;\n var left;\n var pointerElement;\n var svgPath;\n var dragProcess = false;\n var args = this.getMouseArgs(e, 'touchstart', gaugeMouseDown);\n this.trigger(gaugeMouseDown, args);\n this.mouseX = args.x;\n this.mouseY = args.y;\n if (args.target) {\n if (!args.cancel && ((args.target.id.indexOf('MarkerPointer') > -1) || (args.target.id.indexOf('BarPointer') > -1))) {\n current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.pointerDrag = true;\n this.mouseElement = args.target;\n }\n }\n }\n return true;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseMove = function (e) {\n var current;\n var element;\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseMove);\n this.trigger(gaugeMouseMove, args);\n this.mouseX = args.x;\n this.mouseY = args.y;\n if (args.target && !args.cancel) {\n if ((args.target.id.indexOf('MarkerPointer') > -1) || (args.target.id.indexOf('BarPointer') > -1)) {\n if (this.tooltipModule && this.tooltip.enable) {\n this.tooltipModule.renderTooltip(args.target);\n }\n current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.element.style.cursor = current.style;\n }\n }\n else {\n if (this.tooltipModule && this.tooltip.enable) {\n this.tooltipModule.ejTooltip.close();\n }\n this.element.style.cursor = (this.pointerDrag) ? this.element.style.cursor : 'auto';\n }\n this.gaugeOnMouseMove(e);\n }\n return false;\n };\n /**\n * To find the mouse move on pointer.\n * @param element\n */\n LinearGauge.prototype.moveOnPointer = function (element) {\n var current;\n var clientRect = this.element.getBoundingClientRect();\n var axis;\n var isPointer = false;\n var pointer;\n var top;\n var left;\n var pointerElement = getElement(element.id);\n var svgPath = pointerElement;\n var cursorStyle;\n var process;\n current = getPointer(element, this);\n axis = current.axis;\n pointer = current.pointer;\n if (pointer.enableDrag) {\n if (pointer.type === 'Bar') {\n if (this.orientation === 'Vertical') {\n top = pointerElement.getBoundingClientRect().top - clientRect.top;\n top = (!axis.isInversed) ? top : top + svgPath.getBBox().height;\n isPointer = !axis.isInversed ? (this.mouseY < (top + 10) && this.mouseY >= top) :\n (this.mouseY <= top && this.mouseY > (top - 10));\n cursorStyle = 'n-resize';\n }\n else {\n left = pointerElement.getBoundingClientRect().left - clientRect.left;\n left = (!axis.isInversed) ? left + svgPath.getBBox().width : left;\n isPointer = !axis.isInversed ? (this.mouseX > (left - 10) && this.mouseX <= left) :\n (this.mouseX >= left && this.mouseX < (left + 10));\n cursorStyle = 'e-resize';\n }\n }\n else {\n isPointer = true;\n cursorStyle = 'pointer';\n }\n }\n if (isPointer) {\n process = { pointer: isPointer, style: cursorStyle };\n }\n return process;\n };\n /**\n * @private\n * Handle the right click\n * @param event\n */\n LinearGauge.prototype.gaugeRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseLeave = function (e) {\n var parentNode;\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseLeave);\n if (!isNullOrUndefined(this.mouseElement)) {\n parentNode = this.element;\n parentNode.style.cursor = '';\n this.mouseElement = null;\n this.pointerDrag = false;\n }\n if (this.tooltip.enable && this.tooltipModule) {\n this.tooltipModule.ejTooltip.close();\n }\n return false;\n };\n /**\n * Handles the mouse move on gauge.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeOnMouseMove = function (e) {\n var current;\n if (this.pointerDrag) {\n current = getPointer(this.mouseElement, this);\n if (current.pointer.enableDrag && current.pointer.animationComplete) {\n this[current.pointer.type.toLowerCase() + 'Drag'](current.axis, current.pointer);\n }\n }\n return true;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseEnd = function (e) {\n var _this = this;\n var parentNode;\n var tooltipInterval;\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || e.type === 'touchend';\n var args = this.getMouseArgs(e, 'touchend', gaugeMouseUp);\n this.trigger(gaugeMouseUp, args);\n if (!isNullOrUndefined(this.mouseElement)) {\n parentNode = this.element;\n parentNode.style.cursor = '';\n this.mouseElement = null;\n this.pointerDrag = false;\n }\n if (!args.cancel && isTouch && this.tooltip.enable && this.tooltipModule) {\n if (args.target.id.indexOf('Pointer') >= 0) {\n this.tooltipModule.renderTooltip(args.target);\n tooltipInterval = setTimeout(function () {\n _this.tooltipModule.ejTooltip.close();\n }, 2000);\n }\n }\n return true;\n };\n /**\n * Handles the mouse event arguments.\n * @return {IMouseEventArgs}\n * @private\n */\n LinearGauge.prototype.getMouseArgs = function (e, type, name) {\n var rect = this.element.getBoundingClientRect();\n var location = new GaugeLocation(-rect.left, -rect.top);\n var isTouch = (e.type === type);\n location.x += isTouch ? e.changedTouches[0].clientX : e.clientX;\n location.y += isTouch ? e.changedTouches[0].clientY : e.clientY;\n return {\n cancel: false, name: name,\n model: this,\n x: location.x, y: location.y,\n target: isTouch ? e.target : e.target\n };\n };\n /**\n * @private\n * @param axis\n * @param pointer\n */\n LinearGauge.prototype.markerDrag = function (axis, pointer) {\n var options;\n var value = convertPixelToValue(this.element, this.mouseElement, this.orientation, axis, 'drag', new GaugeLocation(this.mouseX, this.mouseY));\n var process = withInRange(value, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer');\n if (withInRange(value, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer')) {\n this.triggerDragEvent(this.mouseElement);\n options = new PathOption('pointerID', pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, null, '');\n if (this.orientation === 'Vertical') {\n pointer.bounds.y = this.mouseY;\n }\n else {\n pointer.bounds.x = this.mouseX;\n }\n pointer.currentValue = value;\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.orientation, axis, pointer);\n if (pointer.markerType === 'Image') {\n this.mouseElement.setAttribute('x', (pointer.bounds.x - (pointer.bounds.width / 2)).toString());\n this.mouseElement.setAttribute('y', (pointer.bounds.y - (pointer.bounds.height / 2)).toString());\n }\n else {\n this.mouseElement.setAttribute('d', options.d);\n }\n }\n };\n /**\n * @private\n * @param axis\n * @param pointer\n */\n LinearGauge.prototype.barDrag = function (axis, pointer) {\n var line = axis.lineBounds;\n var range = axis.visibleRange;\n var value1;\n var value2;\n var isDrag;\n var lineHeight = (this.orientation === 'Vertical') ? line.height : line.width;\n var lineY = (this.orientation === 'Vertical') ? line.y : line.x;\n var path;\n value1 = ((valueToCoefficient(range.min, axis, this.orientation, range) * lineHeight) + lineY);\n value2 = ((valueToCoefficient(range.max, axis, this.orientation, range) * lineHeight) + lineY);\n if (this.orientation === 'Vertical') {\n isDrag = (!axis.isInversed) ? (this.mouseY > value2 && this.mouseY < value1) : (this.mouseY > value1 && this.mouseY < value2);\n if (isDrag) {\n if (this.container.type === 'Normal') {\n if (!axis.isInversed) {\n this.mouseElement.setAttribute('y', this.mouseY.toString());\n }\n this.mouseElement.setAttribute('height', Math.abs(value1 - this.mouseY).toString());\n }\n else {\n if (!axis.isInversed) {\n pointer.bounds.y = this.mouseY;\n }\n pointer.bounds.height = Math.abs(value1 - this.mouseY);\n }\n }\n }\n else {\n isDrag = (!axis.isInversed) ? (this.mouseX > value1 && this.mouseX < value2) : (this.mouseX > value2 && this.mouseX < value1);\n if (isDrag) {\n if (this.container.type === 'Normal') {\n if (axis.isInversed) {\n this.mouseElement.setAttribute('x', this.mouseX.toString());\n }\n this.mouseElement.setAttribute('width', Math.abs(value1 - this.mouseX).toString());\n }\n else {\n if (axis.isInversed) {\n pointer.bounds.x = this.mouseX;\n }\n pointer.bounds.width = Math.abs(value1 - this.mouseX);\n }\n }\n }\n if (isDrag && this.mouseElement.tagName === 'path') {\n this.triggerDragEvent(this.mouseElement);\n path = getBox(pointer.bounds, this.container.type, this.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.container.width, axis, pointer.roundedCornerRadius);\n this.mouseElement.setAttribute('d', path);\n }\n };\n /**\n * Triggers when drag the pointer\n * @param activeElement\n */\n LinearGauge.prototype.triggerDragEvent = function (activeElement) {\n var active = getPointer(this.mouseElement, this);\n var value = convertPixelToValue(this.element, this.mouseElement, this.orientation, active.axis, 'tooltip', null);\n var dragArgs = {\n name: 'valueChange',\n gauge: this,\n element: this.mouseElement,\n axisIndex: active.axisIndex,\n axis: active.axis,\n pointerIndex: active.pointerIndex,\n pointer: active.pointer,\n value: value\n };\n this.trigger(valueChange, dragArgs);\n };\n /**\n * To set the pointer value using this method\n * @param axisIndex\n * @param pointerIndex\n * @param value\n */\n LinearGauge.prototype.setPointerValue = function (axisIndex, pointerIndex, value) {\n var axis = this.axes[axisIndex];\n var pointer = axis.pointers[pointerIndex];\n var id = this.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer_' + pointerIndex;\n var pointerElement = getElement(id);\n pointer.currentValue = value;\n if ((pointerElement !== null) && withInRange(pointer.currentValue, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer')) {\n this.gaugeAxisLayoutPanel['calculate' + pointer.type + 'Bounds'](axisIndex, axis, pointerIndex, pointer);\n this.axisRenderer['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointer, pointerIndex, pointerElement.parentElement);\n }\n };\n /**\n * To set the annotation value using this method.\n * @param annotationIndex\n * @param content\n */\n LinearGauge.prototype.setAnnotationValue = function (annotationIndex, content) {\n var elementExist = getElement(this.element.id + '_Annotation_' + annotationIndex) === null;\n var element = getElement(this.element.id + '_AnnotationsGroup') ||\n createElement('div', {\n id: this.element.id + '_AnnotationsGroup'\n });\n var annotation = this.annotations[annotationIndex];\n if (content !== null) {\n if (getElement(this.element.id + '_Annotation_' + annotationIndex)) {\n getElement(this.element.id + '_Annotation_' + annotationIndex).remove();\n }\n annotation.content = content;\n this.annotationsModule.createAnnotationTemplate(element, annotationIndex);\n if (!elementExist) {\n element.appendChild(getElement(this.element.id + '_Annotation_' + annotationIndex));\n }\n }\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n LinearGauge.prototype.requiredModules = function () {\n var modules = [];\n var annotationEnable = false;\n var tooltipEnable = false;\n this.annotations.map(function (annotation, index) {\n annotationEnable = annotation.content != null;\n });\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this, GaugeTooltip]\n });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n LinearGauge.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n */\n LinearGauge.prototype.getModuleName = function () {\n return 'lineargauge';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n LinearGauge.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n case 'width':\n case 'margin':\n this.createSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = (newProp.title === '' || oldProp.title === '');\n renderer = !(newProp.title === '' || oldProp.title === '');\n break;\n case 'titleStyle':\n if (newProp.titleStyle && newProp.titleStyle.size) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'container':\n refreshBounds = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderGaugeElements();\n this.renderAxisElements();\n }\n if (refreshBounds) {\n this.createSvg();\n this.renderGaugeElements();\n this.calculateBounds();\n this.renderAxisElements();\n }\n };\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"height\", void 0);\n __decorate([\n Property('Vertical')\n ], LinearGauge.prototype, \"orientation\", void 0);\n __decorate([\n Complex({}, Margin)\n ], LinearGauge.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '', width: 0 }, Border)\n ], LinearGauge.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], LinearGauge.prototype, \"background\", void 0);\n __decorate([\n Property('')\n ], LinearGauge.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '15px', color: null }, Font)\n ], LinearGauge.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Container)\n ], LinearGauge.prototype, \"container\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], LinearGauge.prototype, \"axes\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], LinearGauge.prototype, \"tooltip\", void 0);\n __decorate([\n Collection([{}], Annotation)\n ], LinearGauge.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], LinearGauge.prototype, \"rangePalettes\", void 0);\n __decorate([\n Property(false)\n ], LinearGauge.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], LinearGauge.prototype, \"tabIndex\", void 0);\n __decorate([\n Property('Material')\n ], LinearGauge.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseMove\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseLeave\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseDown\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseUp\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"valueChange\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"resized\", void 0);\n LinearGauge = __decorate([\n NotifyPropertyChanges\n ], LinearGauge);\n return LinearGauge;\n}(Component));\nexport { LinearGauge };\n","/**\n * Specifies Maps Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Medium',\n color: '#424242',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#424242',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n Theme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n})(Theme || (Theme = {}));\nexport var FabricTheme;\n(function (FabricTheme) {\n /** @private */\n FabricTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Semibold',\n color: '#424242',\n fontStyle: 'Semibold',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Regular',\n color: '#424242',\n fontStyle: 'Regular',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n FabricTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n})(FabricTheme || (FabricTheme = {}));\nexport var BootstrapTheme;\n(function (BootstrapTheme) {\n /** @private */\n BootstrapTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Semibold',\n color: '#424242',\n fontStyle: 'Semibold',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Regular',\n color: '#424242',\n fontStyle: 'Regular',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n BootstrapTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n})(BootstrapTheme || (BootstrapTheme = {}));\n/**\n * Internal use of Method to getting colors based on themes.\n * @private\n * @param theme\n */\nexport function getShapeColor(theme) {\n return ['#B5E485', '#7BC1E8', '#DF819C', '#EC9B79', '#78D0D3',\n '#D6D572', '#9178E3', '#A1E5B4', '#87A4B4', '#E4C16C'];\n}\n/**\n * HighContrast Theme configuration\n */\nexport var HighContrastTheme;\n(function (HighContrastTheme) {\n /** @private */\n HighContrastTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n HighContrastTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n})(HighContrastTheme || (HighContrastTheme = {}));\n","var __extends = (this && this.__extends) || (function () {\n var 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 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/**\n * Maps base doc\n */\nimport { Property, ChildProperty, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Theme } from './theme';\nimport { Point } from '../utils/helper';\n/**\n * Options for customizing the annotation.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property('0px')\n ], Annotation.prototype, \"x\", void 0);\n __decorate([\n Property('0px')\n ], Annotation.prototype, \"y\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\nvar Arrow = /** @class */ (function (_super) {\n __extends(Arrow, _super);\n function Arrow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Start')\n ], Arrow.prototype, \"position\", void 0);\n __decorate([\n Property('false')\n ], Arrow.prototype, \"showArrow\", void 0);\n __decorate([\n Property(2)\n ], Arrow.prototype, \"size\", void 0);\n __decorate([\n Property('black')\n ], Arrow.prototype, \"color\", void 0);\n return Arrow;\n}(ChildProperty));\nexport { Arrow };\n/**\n * Configures the fonts in maps.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the borders in the maps.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * To configure the tooltip settings of the maps.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property('#363F4C')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex(Theme.tooltipLabelFont, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"valuePath\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n/**\n * Configures the maps margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * To configure ColorMapping in Maps\n */\nvar ColorMappingSettings = /** @class */ (function (_super) {\n __extends(ColorMappingSettings, _super);\n function ColorMappingSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"from\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"to\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"label\", void 0);\n return ColorMappingSettings;\n}(ChildProperty));\nexport { ColorMappingSettings };\n/**\n * To configure the selection settings\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(false)\n ], SelectionSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#D2691E')\n ], SelectionSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SelectionSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enableMultiSelect\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], SelectionSettings.prototype, \"border\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * To configure the highlight settings\n */\nvar HighlightSettings = /** @class */ (function (_super) {\n __extends(HighlightSettings, _super);\n function HighlightSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#6B8E23')\n ], HighlightSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], HighlightSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(1)\n ], HighlightSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], HighlightSettings.prototype, \"border\", void 0);\n return HighlightSettings;\n}(ChildProperty));\nexport { HighlightSettings };\n/**\n * NavigationSelectedLine\n */\nvar NavigationLineSettings = /** @class */ (function (_super) {\n __extends(NavigationLineSettings, _super);\n function NavigationLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], NavigationLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], NavigationLineSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NavigationLineSettings.prototype, \"longitude\", void 0);\n __decorate([\n Property(null)\n ], NavigationLineSettings.prototype, \"latitude\", void 0);\n __decorate([\n Property('')\n ], NavigationLineSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property('black')\n ], NavigationLineSettings.prototype, \"color\", void 0);\n __decorate([\n Property(10)\n ], NavigationLineSettings.prototype, \"angle\", void 0);\n __decorate([\n Complex({ showArrow: false, position: 'Start', size: 5, color: 'black' }, Arrow)\n ], NavigationLineSettings.prototype, \"arrowSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], NavigationLineSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], NavigationLineSettings.prototype, \"highlightSettings\", void 0);\n return NavigationLineSettings;\n}(ChildProperty));\nexport { NavigationLineSettings };\n/**\n * Bubble settings model class\n */\nvar BubbleSettings = /** @class */ (function (_super) {\n __extends(BubbleSettings, _super);\n function BubbleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Border)\n ], BubbleSettings.prototype, \"border\", void 0);\n __decorate([\n Property(false)\n ], BubbleSettings.prototype, \"visible\", void 0);\n __decorate([\n Property([])\n ], BubbleSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property(1000)\n ], BubbleSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(0)\n ], BubbleSettings.prototype, \"animationDelay\", void 0);\n __decorate([\n Property('')\n ], BubbleSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(10)\n ], BubbleSettings.prototype, \"minRadius\", void 0);\n __decorate([\n Property(20)\n ], BubbleSettings.prototype, \"maxRadius\", void 0);\n __decorate([\n Property(1)\n ], BubbleSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], BubbleSettings.prototype, \"valuePath\", void 0);\n __decorate([\n Property('Circle')\n ], BubbleSettings.prototype, \"bubbleType\", void 0);\n __decorate([\n Property(null)\n ], BubbleSettings.prototype, \"colorValuePath\", void 0);\n __decorate([\n Collection([], ColorMappingSettings)\n ], BubbleSettings.prototype, \"colorMapping\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], BubbleSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], BubbleSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], BubbleSettings.prototype, \"highlightSettings\", void 0);\n return BubbleSettings;\n}(ChildProperty));\nexport { BubbleSettings };\n/**\n * To configure title of the maps.\n */\nvar CommonTitleSettings = /** @class */ (function (_super) {\n __extends(CommonTitleSettings, _super);\n function CommonTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"description\", void 0);\n return CommonTitleSettings;\n}(ChildProperty));\nexport { CommonTitleSettings };\n/**\n * To configure subtitle of the maps.\n */\nvar SubTitleSettings = /** @class */ (function (_super) {\n __extends(SubTitleSettings, _super);\n function SubTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Font)\n ], SubTitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], SubTitleSettings.prototype, \"alignment\", void 0);\n return SubTitleSettings;\n}(CommonTitleSettings));\nexport { SubTitleSettings };\n/**\n * To configure title of the maps.\n */\nvar TitleSettings = /** @class */ (function (_super) {\n __extends(TitleSettings, _super);\n function TitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Font)\n ], TitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], TitleSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({}, SubTitleSettings)\n ], TitleSettings.prototype, \"subtitleSettings\", void 0);\n return TitleSettings;\n}(CommonTitleSettings));\nexport { TitleSettings };\n/**\n * Options to configure maps Zooming Settings.\n */\nvar ZoomSettings = /** @class */ (function (_super) {\n __extends(ZoomSettings, _super);\n function ZoomSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('Horizontal')\n ], ZoomSettings.prototype, \"toolBarOrientation\", void 0);\n __decorate([\n Property('Far')\n ], ZoomSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Near')\n ], ZoomSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(['ZoomIn', 'ZoomOut', 'Reset'])\n ], ZoomSettings.prototype, \"toolbars\", void 0);\n __decorate([\n Property(true)\n ], ZoomSettings.prototype, \"mouseWheelZoom\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"doubleClickZoom\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"pinchZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"zoomOnClick\", void 0);\n __decorate([\n Property(1)\n ], ZoomSettings.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(10)\n ], ZoomSettings.prototype, \"maxZoom\", void 0);\n __decorate([\n Property(1)\n ], ZoomSettings.prototype, \"minZoom\", void 0);\n return ZoomSettings;\n}(ChildProperty));\nexport { ZoomSettings };\n/**\n * Configures the legend settings.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property('Layers')\n ], LegendSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"invertedPointer\", void 0);\n __decorate([\n Property('After')\n ], LegendSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"labelDisplayMode\", void 0);\n __decorate([\n Property('Circle')\n ], LegendSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"shapeBorder\", void 0);\n __decorate([\n Complex({}, CommonTitleSettings)\n ], LegendSettings.prototype, \"title\", void 0);\n __decorate([\n Complex({}, Font)\n ], LegendSettings.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('Bottom')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"orientation\", void 0);\n __decorate([\n Property({ x: 0, y: 0 })\n ], LegendSettings.prototype, \"location\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Default')\n ], LegendSettings.prototype, \"mode\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Customization for Data label settings.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n __extends(DataLabelSettings, _super);\n function DataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Complex({ width: 0, color: 'transparent' }, Border)\n ], DataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Property('black')\n ], DataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], DataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Complex({}, Font)\n ], DataLabelSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('')\n ], DataLabelSettings.prototype, \"labelPath\", void 0);\n __decorate([\n Property('None')\n ], DataLabelSettings.prototype, \"smartLabelMode\", void 0);\n __decorate([\n Property('None')\n ], DataLabelSettings.prototype, \"intersectionAction\", void 0);\n __decorate([\n Property('')\n ], DataLabelSettings.prototype, \"template\", void 0);\n return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n * To configure the shapeSettings in the maps.\n */\nvar ShapeSettings = /** @class */ (function (_super) {\n __extends(ShapeSettings, _super);\n function ShapeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#A6A6A6')\n ], ShapeSettings.prototype, \"fill\", void 0);\n __decorate([\n Property([])\n ], ShapeSettings.prototype, \"palette\", void 0);\n __decorate([\n Property(5)\n ], ShapeSettings.prototype, \"circleRadius\", void 0);\n __decorate([\n Complex({ width: 0, color: '#000000' }, Border)\n ], ShapeSettings.prototype, \"border\", void 0);\n __decorate([\n Property('')\n ], ShapeSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(1)\n ], ShapeSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], ShapeSettings.prototype, \"colorValuePath\", void 0);\n __decorate([\n Property(null)\n ], ShapeSettings.prototype, \"valuePath\", void 0);\n __decorate([\n Collection([], ColorMappingSettings)\n ], ShapeSettings.prototype, \"colorMapping\", void 0);\n __decorate([\n Property(false)\n ], ShapeSettings.prototype, \"autofill\", void 0);\n return ShapeSettings;\n}(ChildProperty));\nexport { ShapeSettings };\n/**\n * To configure the marker settings for the maps.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n __extends(MarkerSettings, _super);\n function MarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], MarkerSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('#FF471A')\n ], MarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(10)\n ], MarkerSettings.prototype, \"height\", void 0);\n __decorate([\n Property(10)\n ], MarkerSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], MarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('Balloon')\n ], MarkerSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"legendText\", void 0);\n __decorate([\n Property(new Point(0, 0))\n ], MarkerSettings.prototype, \"offset\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"template\", void 0);\n __decorate([\n Property([])\n ], MarkerSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], MarkerSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Property(1000)\n ], MarkerSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(0)\n ], MarkerSettings.prototype, \"animationDelay\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], MarkerSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], MarkerSettings.prototype, \"highlightSettings\", void 0);\n return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n * To configure the layers of the maps.\n */\nvar LayerSettings = /** @class */ (function (_super) {\n __extends(LayerSettings, _super);\n function LayerSettings() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.isBaseLayer = false;\n return _this;\n }\n __decorate([\n Property(null)\n ], LayerSettings.prototype, \"shapeData\", void 0);\n __decorate([\n Complex({}, ShapeSettings)\n ], LayerSettings.prototype, \"shapeSettings\", void 0);\n __decorate([\n Property([])\n ], LayerSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Layer')\n ], LayerSettings.prototype, \"type\", void 0);\n __decorate([\n Property('Geographic')\n ], LayerSettings.prototype, \"geometryType\", void 0);\n __decorate([\n Property('Aerial')\n ], LayerSettings.prototype, \"bingMapType\", void 0);\n __decorate([\n Property('')\n ], LayerSettings.prototype, \"key\", void 0);\n __decorate([\n Property('Geometry')\n ], LayerSettings.prototype, \"layerType\", void 0);\n __decorate([\n Property('http://a.tile.openstreetmap.org/level/tileX/tileY.png')\n ], LayerSettings.prototype, \"urlTemplate\", void 0);\n __decorate([\n Property(true)\n ], LayerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('name')\n ], LayerSettings.prototype, \"shapeDataPath\", void 0);\n __decorate([\n Property('name')\n ], LayerSettings.prototype, \"shapePropertyPath\", void 0);\n __decorate([\n Collection([], MarkerSettings)\n ], LayerSettings.prototype, \"markerSettings\", void 0);\n __decorate([\n Complex({}, DataLabelSettings)\n ], LayerSettings.prototype, \"dataLabelSettings\", void 0);\n __decorate([\n Collection([], BubbleSettings)\n ], LayerSettings.prototype, \"bubbleSettings\", void 0);\n __decorate([\n Collection([], NavigationLineSettings)\n ], LayerSettings.prototype, \"navigationLineSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], LayerSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], LayerSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], LayerSettings.prototype, \"highlightSettings\", void 0);\n return LayerSettings;\n}(ChildProperty));\nexport { LayerSettings };\n/**\n * Internal use for bing type layer rendering\n */\nvar Tile = /** @class */ (function () {\n function Tile(x, y, height, width, top, left, src) {\n if (height === void 0) { height = 256; }\n if (width === void 0) { width = 256; }\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (src === void 0) { src = null; }\n this.x = x;\n this.y = y;\n this.top = top;\n this.left = left;\n this.height = height;\n this.width = width;\n this.src = src;\n }\n return Tile;\n}());\nexport { Tile };\n/**\n * Maps area configuration\n */\nvar MapsAreaSettings = /** @class */ (function (_super) {\n __extends(MapsAreaSettings, _super);\n function MapsAreaSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('transparent')\n ], MapsAreaSettings.prototype, \"background\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], MapsAreaSettings.prototype, \"border\", void 0);\n return MapsAreaSettings;\n}(ChildProperty));\nexport { MapsAreaSettings };\n","/**\n * Maps constants doc\n */\n/**\n * Specifies maps load event name.\n * @private\n */\nexport var load = 'load';\n/**\n * Specifies maps loaded event name.\n * @private\n */\nexport var loaded = 'loaded';\n/**\n * Specifies maps click event name.\n * @private\n */\nexport var click = 'click';\n/**\n * Specifies maps loaded event name.\n * @private\n */\nexport var rightClick = 'rightClick';\n/**\n * Specifies maps double click event name.\n * @private\n */\nexport var doubleClick = 'doubleClick';\n/**\n * Specifies maps resize event name.\n * @private\n */\nexport var resize = 'resize';\n/**\n * Specifies the map tooltip render event\n */\nexport var tooltipRender = 'tooltipRender';\n/**\n * Specifies the map shapeSelected event\n */\nexport var shapeSelected = 'shapeSelected';\n/**\n * Specifies the map shapeHighlight event\n */\nexport var shapeHighlight = 'shapeHighlight';\n/**\n * Specifies maps mousemove event name.\n * @private\n */\nexport var mousemove = 'mousemove';\n/**\n * Specifies maps mouseup event name.\n * @private\n */\nexport var mouseup = 'mouseup';\n/**\n * Specifies maps mousedown event name.\n * @private\n */\nexport var mousedown = 'mousedown';\n/**\n * Specifies maps layerRendering event name.\n * @private\n */\nexport var layerRendering = 'layerRendering';\n/**\n * Specifies maps shapeRendering event name.\n * @private\n */\nexport var shapeRendering = 'shapeRendering';\n/**\n * Specifies maps markerRendering event name.\n * @private\n */\nexport var markerRendering = 'markerRendering';\n/**\n * Specifies maps markerClick event name.\n * @private\n */\nexport var markerClick = 'markerClick';\n/**\n * Specifies maps markerMouseMove event name.\n * @private\n */\nexport var markerMouseMove = 'markerMouseMove';\n/**\n * Specifies maps dataLabelRendering event name.\n * @private\n */\nexport var dataLabelRendering = 'dataLabelRendering';\n/**\n * Specifies maps bubbleRendering event name.\n * @private\n */\nexport var bubbleRendering = 'bubbleRendering';\n/**\n * Specifies maps bubbleClick event name.\n * @private\n */\nexport var bubbleClick = 'bubbleClick';\n/**\n * Specifies maps bubbleMouseMove event name.\n * @private\n */\nexport var bubbleMouseMove = 'bubbleMouseMove';\n/**\n * Specifies maps animationComplete event name.\n * @private\n */\nexport var animationComplete = 'animationComplete';\n/**\n * Specifies maps legendRendering event name.\n * @private\n */\nexport var legendRendering = 'legendRendering';\n/**\n * Specifies maps annotationRendering event name.\n * @private\n */\nexport var annotationRendering = 'annotationRendering';\n/**\n * Specifies maps itemSelection event name\n * @private\n */\nexport var itemSelection = 'itemSelection';\n/**\n * Specifies maps itemHighlight event name\n */\nexport var itemHighlight = 'itemHighlight';\n","/**\n * Bing map src doc\n */\nvar BingMap = /** @class */ (function () {\n function BingMap(maps) {\n this.maps = maps;\n }\n BingMap.prototype.getBingMap = function (tile, key, type, language) {\n var quadKey = '';\n for (var i = this.maps.zoomLevel; i > 0; i--) {\n var digit = 0;\n var mask = 1 << (i - 1);\n if ((tile.x & mask) !== 0) {\n digit++;\n }\n if ((tile.y & mask) !== 0) {\n digit += 2;\n }\n quadKey = quadKey + '' + digit;\n }\n var layerType = '';\n if (type === 'Aerial') {\n layerType = 'A,G';\n }\n else if (type === 'AerialWithLabel') {\n layerType = 'A,G,L';\n }\n else {\n layerType = 'G,VE,BX,L,LA';\n }\n return 'http://ak.dynamic.t2.tiles.virtualearth.net/comp/ch/' + quadKey + '?mkt=' + language + '&ur=IN&it=' + layerType +\n '&shading=hill&og=45&n=z&Key=' + key;\n };\n return BingMap;\n}());\nexport { BingMap };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ColorMapping class\n */\nvar ColorMapping = /** @class */ (function () {\n function ColorMapping(maps) {\n this.maps = maps;\n }\n /**\n * To get color based on shape settings.\n * @private\n */\n ColorMapping.prototype.getShapeColorMapping = function (shapeSettings, layerData, color) {\n var colorValuePath = shapeSettings.colorValuePath ? shapeSettings.colorValuePath : shapeSettings.valuePath;\n var equalValue = layerData[colorValuePath];\n var colorValue = Number(equalValue);\n var shapeColor = this.getColorByValue(shapeSettings.colorMapping, colorValue, equalValue);\n return shapeColor ? shapeColor : color;\n };\n /**\n * To color by value and color mapping\n */\n ColorMapping.prototype.getColorByValue = function (colorMapping, colorValue, equalValue) {\n if (isNaN(colorValue) && isNullOrUndefined(equalValue)) {\n return null;\n }\n var fill = '';\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n if ((colorMap.from && colorMap.to && (colorValue >= colorMap.from && colorValue <= colorMap.to)) ||\n (colorMap.value === equalValue)) {\n fill = colorMap.color;\n }\n }\n return fill || ((!colorMapping.length) ? equalValue : null);\n };\n return ColorMapping;\n}());\nexport { ColorMapping };\n","import { isNullOrUndefined, extend, createElement } from '@syncfusion/ej2-base';\nimport { getShapeColor } from '../model/theme';\nimport { GeoLocation, isCustomPath, convertGeoToPoint, PathOption, Size, PolylineOption } from '../utils/helper';\nimport { MapLocation, RectOption, getTranslate, convertTileLatLongToPoint, checkShapeDataFields, CircleOption } from '../utils/helper';\nimport { Tile } from '../model/base';\nimport { BingMap } from './bing-map';\nimport { ColorMapping } from './color-mapping';\nimport { layerRendering, shapeRendering } from '../index';\n/**\n * To calculate and render the shape layer\n */\nvar LayerPanel = /** @class */ (function () {\n function LayerPanel(map) {\n this.tileTranslatePoint = new MapLocation(0, 0);\n this.isMapCoordinates = true;\n this.mapObject = map;\n }\n /* tslint:disable:no-string-literal */\n LayerPanel.prototype.measureLayerPanel = function () {\n var _this = this;\n var layerCollection = this.mapObject.layersCollection;\n var areaRect = this.mapObject.mapAreaRect;\n var padding = 5;\n if (this.mapObject.isTileMap) {\n this.tileSvgObject = this.mapObject.renderer.createSvg({\n id: this.mapObject.element.id + '_Tile_SVG', width: areaRect.width,\n height: areaRect.height,\n transform: 'translate(' + areaRect.x + ' ' + (areaRect.y + padding) + ')'\n });\n }\n this.layerGroup = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_Layer_Collections',\n 'clip-path': 'url(#' + this.mapObject.element.id + '_MapArea_ClipRect)'\n }));\n this.clipRectElement = this.mapObject.renderer.drawClipPath(new RectOption(this.mapObject.element.id + '_MapArea_ClipRect', 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: areaRect.x, y: areaRect.y, width: areaRect.width, height: areaRect.height\n }));\n this.layerGroup.appendChild(this.clipRectElement);\n this.mapObject.baseMapBounds = null;\n this.mapObject.baseMapRectBounds = null;\n this.mapObject.baseSize = null;\n layerCollection.forEach(function (layer, index) {\n _this.currentLayer = layer;\n _this.layerObject = (_this.mapObject.renderer.createGroup({\n id: _this.mapObject.element.id + '_LayerIndex_' + index\n }));\n var eventArgs = {\n cancel: false, name: layerRendering, index: index,\n layer: _this.currentLayer, maps: _this.mapObject\n };\n _this.mapObject.trigger(layerRendering, eventArgs);\n if (!eventArgs.cancel) {\n if (layer.layerType !== 'Geometry') {\n _this.currentFactor = _this.calculateFactor(_this.currentLayer);\n _this.panTileMap(_this.mapObject.availableSize.width, _this.mapObject.availableSize.height, new MapLocation(_this.mapObject.centerPosition.longitude, _this.mapObject.centerPosition.latitude));\n _this.generateTiles(_this.mapObject.zoomLevel, _this.tileTranslatePoint);\n _this.mapObject.tileTranslatePoint = _this.mapObject.baseTileTranslatePoint = _this.tileTranslatePoint;\n if (_this.mapObject.markerModule) {\n _this.mapObject.markerModule.markerRender(_this.layerObject, index, _this.mapObject.zoomLevel);\n }\n if (_this.mapObject.navigationLineModule) {\n _this.layerObject.appendChild(_this.mapObject.navigationLineModule.renderNavigation(layer, _this.mapObject.zoomLevel, index));\n }\n _this.tileSvgObject.appendChild(_this.layerObject);\n }\n else {\n if (!isNullOrUndefined(_this.currentLayer.shapeData['geometries']) ||\n !isNullOrUndefined(_this.currentLayer.shapeData['features'])) {\n var featureData = (!isNullOrUndefined(_this.currentLayer.shapeData['geometries']) &&\n _this.currentLayer.shapeData['geometries'].length > 0 ? _this.currentLayer.shapeData['geometries'] :\n _this.currentLayer.shapeData['features']);\n _this.currentLayer.layerData = [];\n var bbox = layer.shapeData['bbox'];\n if (!isNullOrUndefined(bbox) && layer.isBaseLayer) {\n _this.mapObject.baseMapBounds = new GeoLocation({ min: bbox[0][1], max: bbox[1][1] }, { min: bbox[0][0], max: bbox[1][0] });\n }\n else if (isNullOrUndefined(_this.mapObject.baseMapBounds) && !isCustomPath(featureData)) {\n _this.calculateRectBounds(featureData);\n if (isNullOrUndefined(_this.mapObject.baseSize)) {\n var minSize = convertGeoToPoint(_this.mapObject.baseMapBounds.latitude.min, _this.mapObject.baseMapBounds.longitude.min, _this.calculateFactor(layer), layer, _this.mapObject);\n var maxSize = convertGeoToPoint(_this.mapObject.baseMapBounds.latitude.max, _this.mapObject.baseMapBounds.longitude.max, _this.calculateFactor(layer), layer, _this.mapObject);\n _this.mapObject.baseSize = new Size(Math.abs(minSize.x - maxSize.x), Math.abs(minSize.y - maxSize.y));\n }\n }\n _this.calculatePathCollection(index, featureData);\n }\n }\n }\n });\n if (this.mapObject.isTileMap) {\n document.getElementById(this.mapObject.element.id + '_Secondary_Element').appendChild(this.tileSvgObject);\n }\n this.mapObject.svgObject.appendChild(this.layerGroup);\n };\n //tslint:disable:max-func-body-length\n LayerPanel.prototype.bubbleCalculation = function (bubbleSettings, range) {\n if (bubbleSettings.dataSource != null && bubbleSettings != null) {\n if (bubbleSettings.colorValuePath == null) {\n return;\n }\n for (var i = 0; i < bubbleSettings.dataSource.length; i++) {\n var bubbledata = parseFloat(bubbleSettings.dataSource[i][bubbleSettings.valuePath]);\n if (i !== 0) {\n if (bubbledata > range.max) {\n range.max = bubbledata;\n }\n else if (bubbledata < range.min) {\n range.min = bubbledata;\n }\n }\n else {\n range.max = range.min = bubbledata;\n }\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n LayerPanel.prototype.calculatePathCollection = function (layerIndex, renderData) {\n var _this = this;\n this.groupElements = [];\n if ((!isCustomPath(renderData))) {\n this.currentFactor = this.calculateFactor(this.currentLayer);\n }\n this.rectBounds = null;\n var shapeSettings = this.currentLayer.shapeSettings;\n renderData.forEach(function (geometryData, index) {\n if (!isNullOrUndefined(geometryData['geometry']) || !isNullOrUndefined(geometryData['coordinates'])) {\n var type = !isNullOrUndefined(geometryData['geometry']) ? geometryData['geometry']['type'] : geometryData['type'];\n var coords = !isNullOrUndefined(geometryData['geometry']) ? geometryData['geometry']['coordinates'] :\n geometryData['coordinates'];\n var data = geometryData['geometry'];\n var properties = geometryData['properties'];\n _this.generatePoints(type, coords, data, properties);\n }\n });\n this.currentLayer.rectBounds = this.rectBounds;\n if (isNullOrUndefined(this.mapObject.baseMapRectBounds) && this.currentLayer.isBaseLayer) {\n this.mapObject.baseMapRectBounds = this.rectBounds;\n }\n var colors = shapeSettings.palette.length > 1 ? shapeSettings.palette : getShapeColor(this.mapObject.theme);\n var labelTemplateEle = createElement('div', {\n id: this.mapObject.element.id + '_LayerIndex_' + layerIndex + '_Label_Template_Group',\n styles: 'pointer-events: none; overflow: hidden; position: absolute;' +\n 'top:' + this.mapObject.mapAreaRect.y + 'px;' +\n 'left:' + this.mapObject.mapAreaRect.x + 'px;' +\n 'height:' + this.mapObject.mapAreaRect.height + 'px;' +\n 'width:' + this.mapObject.mapAreaRect.width + 'px;'\n });\n var _loop_1 = function (i) {\n var k = void 0;\n var currentShapeData = this_1.currentLayer.layerData[i];\n var pathOptions = void 0;\n var polyLineOptions = void 0;\n var circleOptions = void 0;\n var groupElement = void 0;\n var drawObject = void 0;\n var path = '';\n var points = '';\n var fill = (shapeSettings.autofill) ? colors[i % colors.length] : shapeSettings.fill;\n if (shapeSettings.colorValuePath !== null && !isNullOrUndefined(currentShapeData['property'])) {\n k = checkShapeDataFields(this_1.currentLayer.dataSource, currentShapeData['property'], this_1.currentLayer.shapeDataPath, this_1.currentLayer.shapePropertyPath);\n if (k !== null && shapeSettings.colorMapping.length === 0) {\n fill = this_1.currentLayer.dataSource[k][shapeSettings.colorValuePath];\n }\n else if (currentShapeData['property'][shapeSettings.colorValuePath] && this_1.currentLayer.dataSource.length === 0 &&\n shapeSettings.colorMapping.length === 0) {\n fill = currentShapeData['property'][shapeSettings.colorValuePath];\n }\n }\n var shapeID = this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_ShapeIndex_' + i + '_dataIndex_' + k;\n fill = this_1.getShapeColorMapping(this_1.currentLayer, currentShapeData['property'], fill);\n var eventArgs = {\n cancel: false, name: shapeRendering, index: i,\n data: this_1.currentLayer.dataSource ? this_1.currentLayer.dataSource[k] : null, maps: this_1.mapObject,\n shape: shapeSettings, fill: fill, border: { width: shapeSettings.border.width, color: shapeSettings.border.color }\n };\n this_1.mapObject.trigger(shapeRendering, eventArgs);\n var drawingType = !isNullOrUndefined(currentShapeData['_isMultiPolygon'])\n ? 'MultiPolygon' : isNullOrUndefined(currentShapeData['type']) ? currentShapeData[0]['type'] : currentShapeData['type'];\n drawingType = (drawingType === 'Polygon' || drawingType === 'MultiPolygon') ? 'Polygon' : drawingType;\n if (this_1.groupElements.length < 1) {\n groupElement = this_1.mapObject.renderer.createGroup({\n id: this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_' + drawingType + '_Group', transform: ''\n });\n this_1.groupElements.push(groupElement);\n }\n else {\n for (var i_1 = 0; i_1 < this_1.groupElements.length; i_1++) {\n var ele = this_1.groupElements[i_1];\n if (ele.id.indexOf(drawingType) > -1) {\n groupElement = ele;\n break;\n }\n else if (i_1 >= this_1.groupElements.length - 1) {\n groupElement = this_1.mapObject.renderer.createGroup({\n id: this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_' + drawingType + '_Group'\n });\n this_1.groupElements.push(groupElement);\n break;\n }\n }\n }\n var pathEle = void 0;\n switch (drawingType) {\n case 'Polygon':\n if (!currentShapeData['_isMultiPolygon']) {\n path += 'M' + (currentShapeData[0]['point']['x']) + ' ' + (currentShapeData[0]['point']['y']);\n currentShapeData.map(function (shapeData) {\n path += ' L ' + (shapeData['point']['x']) + ' ' + (shapeData['point']['y']);\n });\n }\n else {\n path = this_1.generateMultiPolygonPath(currentShapeData);\n }\n path += ' z ';\n if (path.length > 3) {\n pathOptions = new PathOption(shapeID, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray, path);\n pathEle = this_1.mapObject.renderer.drawPath(pathOptions);\n }\n break;\n case 'LineString':\n currentShapeData.map(function (lineData) {\n points += lineData['point']['x'] + ' , ' + lineData['point']['y'] + ' ';\n });\n polyLineOptions = new PolylineOption(shapeID, points, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray);\n pathEle = this_1.mapObject.renderer.drawPolyline(polyLineOptions);\n break;\n case 'Point':\n var pointData = currentShapeData['point'];\n circleOptions = new CircleOption(shapeID, eventArgs.fill, eventArgs.border, shapeSettings.opacity, pointData['x'], pointData['y'], shapeSettings.circleRadius, null);\n pathEle = this_1.mapObject.renderer.drawCircle(circleOptions);\n break;\n case 'Path':\n path = currentShapeData['point'];\n pathOptions = new PathOption(shapeID, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray, path);\n pathEle = this_1.mapObject.renderer.drawPath(pathOptions);\n break;\n }\n if (!isNullOrUndefined(pathEle)) {\n pathEle.setAttribute('aria-label', ((!isNullOrUndefined(currentShapeData['property'])) ?\n (currentShapeData['property'][this_1.currentLayer.shapePropertyPath]) : ''));\n pathEle.setAttribute('tabindex', (this_1.mapObject.tabIndex + i + 2).toString());\n groupElement.appendChild(pathEle);\n }\n };\n var this_1 = this;\n for (var i = 0; i < this.currentLayer.layerData.length; i++) {\n _loop_1(i);\n }\n var bubbleG;\n if (this.currentLayer.bubbleSettings.length && this.mapObject.bubbleModule) {\n var length_1 = this.currentLayer.bubbleSettings.length;\n var bubble_1;\n var _loop_2 = function (j) {\n bubble_1 = this_2.currentLayer.bubbleSettings[j];\n bubbleG = this_2.mapObject.renderer.createGroup({\n id: this_2.mapObject.element.id + '_LayerIndex_' + layerIndex + '_bubble_Group_' + j\n });\n var range = { min: 0, max: 0 };\n this_2.bubbleCalculation(bubble_1, range);\n bubble_1.dataSource.map(function (bubbleData, i) {\n _this.renderBubble(_this.currentLayer, bubbleData, colors[i % colors.length], range, j, i, bubbleG, layerIndex, bubble_1);\n });\n this_2.groupElements.push(bubbleG);\n };\n var this_2 = this;\n for (var j = 0; j < length_1; j++) {\n _loop_2(j);\n }\n }\n var group = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_layerIndex_' + layerIndex + '_dataLableIndex_Group', style: 'pointer-events: none;'\n }));\n if (this.mapObject.dataLabelModule && this.currentLayer.dataLabelSettings.visible) {\n renderData.map(function (currentShapeData, i) {\n _this.renderLabel(_this.currentLayer, layerIndex, currentShapeData, group, i, labelTemplateEle);\n });\n this.groupElements.push(group);\n }\n if (this.mapObject.navigationLineModule) {\n this.groupElements.push(this.mapObject.navigationLineModule.renderNavigation(this.currentLayer, this.currentFactor, layerIndex));\n }\n this.groupElements.map(function (element) {\n _this.layerObject.appendChild(element);\n });\n if (this.mapObject.markerModule) {\n this.mapObject.markerModule.markerRender(this.layerObject, layerIndex, this.currentFactor);\n }\n this.translateLayerElements(this.layerObject, layerIndex);\n this.layerGroup.appendChild(this.layerObject);\n };\n /**\n * render datalabel\n */\n LayerPanel.prototype.renderLabel = function (layer, layerIndex, shape, group, shapeIndex, labelTemplateEle) {\n this.mapObject.dataLabelModule.renderLabel(layer, layerIndex, shape, layer.layerData, group, labelTemplateEle, shapeIndex);\n };\n /**\n * To render path for multipolygon\n */\n LayerPanel.prototype.generateMultiPolygonPath = function (currentShapeData) {\n var path = '';\n var shape;\n for (var j = 0; j < currentShapeData.length; j++) {\n path += 'M' + (currentShapeData[j][0]['point']['x']) + ' ' + (currentShapeData[j][0]['point']['y']);\n shape = currentShapeData[j];\n shape.map(function (shapeData) {\n path += ' L ' + (shapeData['point']['x']) + ' ' + (shapeData['point']['y']);\n });\n }\n return path;\n };\n /**\n * To render bubble\n */\n LayerPanel.prototype.renderBubble = function (layer, bubbleData, color, range, bubbleIndex, dataIndex, group, layerIndex, bubbleSettings) {\n if (isNullOrUndefined(this.mapObject.bubbleModule) || !bubbleSettings.visible) {\n return null;\n }\n color = bubbleSettings.fill ? bubbleSettings.fill : color;\n this.mapObject.bubbleModule.id = this.mapObject.element.id + '_LayerIndex_' + layerIndex + '_BubbleIndex_' +\n bubbleIndex + '_dataIndex_' + dataIndex;\n this.mapObject.bubbleModule.renderBubble(bubbleSettings, bubbleData, color, range, bubbleIndex, dataIndex, layerIndex, layer, group);\n };\n /**\n * To get the shape color from color mapping module\n */\n LayerPanel.prototype.getShapeColorMapping = function (layer, shape, color) {\n color = color ? color : layer.shapeSettings.fill;\n if (layer.shapeSettings.colorMapping.length === 0 && isNullOrUndefined(layer.dataSource)) {\n return color;\n }\n var index = checkShapeDataFields(layer.dataSource, shape, layer.shapeDataPath, layer.shapePropertyPath);\n var colorMapping = new ColorMapping(this.mapObject);\n if (isNullOrUndefined(layer.dataSource[index])) {\n return color;\n }\n return colorMapping.getShapeColorMapping(layer.shapeSettings, layer.dataSource[index], color);\n };\n LayerPanel.prototype.generatePoints = function (type, coordinates, data, properties) {\n var _this = this;\n var latitude;\n var longitude;\n var newData = [];\n switch (type.toLowerCase()) {\n case 'polygon':\n newData = this.calculatePolygonBox(coordinates[0], data, properties);\n if (newData.length > 0) {\n newData['property'] = properties;\n newData['type'] = type;\n newData['_isMultiPolygon'] = false;\n this.currentLayer.layerData.push(newData);\n }\n break;\n case 'multipolygon':\n var multiPolygonDatas = [];\n for (var i = 0; i < coordinates.length; i++) {\n newData = this.calculatePolygonBox(coordinates[i][0], data, properties);\n if (newData.length > 0) {\n multiPolygonDatas.push(newData);\n }\n }\n multiPolygonDatas['property'] = properties;\n multiPolygonDatas['type'] = type;\n multiPolygonDatas['_isMultiPolygon'] = true;\n this.currentLayer.layerData.push(multiPolygonDatas);\n break;\n case 'linestring':\n coordinates.map(function (points, index) {\n latitude = points[1];\n longitude = points[0];\n var point = convertGeoToPoint(latitude, longitude, _this.currentFactor, _this.currentLayer, _this.mapObject);\n newData.push({\n point: point, lat: latitude, lng: longitude\n });\n });\n newData['property'] = properties;\n newData['type'] = type;\n this.currentLayer.layerData.push(newData);\n break;\n case 'point':\n latitude = coordinates[1];\n longitude = coordinates[0];\n var point = convertGeoToPoint(latitude, longitude, this.currentFactor, this.currentLayer, this.mapObject);\n this.currentLayer.layerData.push({\n point: point, type: type, lat: latitude, lng: longitude, property: properties\n });\n break;\n case 'path':\n this.currentLayer.layerData.push({\n point: data['d'], type: type, property: properties\n });\n break;\n }\n };\n LayerPanel.prototype.calculateFactor = function (layer) {\n var horFactor;\n var verFactor = 1;\n var divide = 10;\n var exp = 'e+1';\n var bounds = this.mapObject.baseMapBounds;\n var mapSize = new Size(this.mapObject.mapAreaRect.width, this.mapObject.mapAreaRect.height - 5);\n var mapHeight;\n var mapWidth;\n if (bounds) {\n var start = convertGeoToPoint(bounds.latitude.min, bounds.longitude.min, null, layer, this.mapObject);\n var end = convertGeoToPoint(bounds.latitude.max, bounds.longitude.max, null, layer, this.mapObject);\n mapHeight = end.y - start.y;\n mapWidth = end.x - start.x;\n }\n else {\n mapHeight = mapWidth = 500;\n }\n if (mapHeight < mapSize.height) {\n horFactor = parseFloat(Math.abs(Number(mapSize.height / Number(mapHeight.toString() + exp)) * 100).toString().split('.')[0])\n / divide;\n }\n else {\n horFactor = mapSize.height / mapHeight;\n }\n if (mapWidth < mapSize.width) {\n verFactor = parseFloat(Math.abs(Number(mapSize.width / Number(mapWidth.toString() + exp)) * 100).toString().split('.')[0])\n / divide;\n }\n else {\n verFactor = mapSize.width / mapWidth;\n }\n return (Math.min(verFactor, horFactor));\n };\n LayerPanel.prototype.translateLayerElements = function (layerElement, index) {\n if (!isNullOrUndefined(this.mapObject.baseMapRectBounds)) {\n var translate = getTranslate(this.mapObject, this.currentLayer);\n var scale = translate['scale'];\n var location_1 = translate['location'];\n this.mapObject.baseTranslatePoint = this.mapObject.translatePoint = location_1;\n this.mapObject.baseScale = this.mapObject.scale = scale;\n var childNode = void 0;\n for (var i = 0; i < layerElement.childElementCount; i++) {\n childNode = layerElement.childNodes[i];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1))) {\n var transform = 'scale( ' + scale + ' ) '\n + 'translate( ' + location_1.x + ' ' + location_1.y + ' ) ';\n childNode.setAttribute('transform', transform);\n }\n }\n }\n };\n LayerPanel.prototype.calculateRectBounds = function (layerData) {\n var _this = this;\n layerData.forEach(function (obj, index) {\n if (!isNullOrUndefined(obj['geometry']) || !isNullOrUndefined(obj['coordinates'])) {\n var type = !isNullOrUndefined(obj['geometry']) ? obj['geometry']['type'] : obj['type'];\n var coordinates = !isNullOrUndefined(obj['geometry']) ? obj['geometry']['coordinates'] : obj['coordinates'];\n switch (type.toLowerCase()) {\n case 'polygon':\n _this.calculateRectBox(coordinates[0]);\n break;\n case 'multipolygon':\n coordinates.map(function (point, index) {\n _this.calculateRectBox(point[0]);\n });\n break;\n }\n }\n });\n };\n LayerPanel.prototype.calculatePolygonBox = function (coordinates, data, properties) {\n var _this = this;\n var newData = [];\n var bounds = this.mapObject.baseMapBounds;\n coordinates.map(function (currentPoint, index) {\n var latitude = currentPoint[1];\n var longitude = currentPoint[0];\n if ((longitude >= bounds.longitude.min && longitude <= bounds.longitude.max)\n && (latitude >= bounds.latitude.min && latitude <= bounds.latitude.max)) {\n var point = convertGeoToPoint(latitude, longitude, _this.currentFactor, _this.currentLayer, _this.mapObject);\n if (isNullOrUndefined(_this.rectBounds)) {\n _this.rectBounds = { min: { x: point.x, y: point.y }, max: { x: point.x, y: point.y } };\n }\n else {\n _this.rectBounds['min']['x'] = Math.min(_this.rectBounds['min']['x'], point.x);\n _this.rectBounds['min']['y'] = Math.min(_this.rectBounds['min']['y'], point.y);\n _this.rectBounds['max']['x'] = Math.max(_this.rectBounds['max']['x'], point.x);\n _this.rectBounds['max']['y'] = Math.max(_this.rectBounds['max']['y'], point.y);\n }\n newData.push({\n point: point,\n lat: latitude,\n lng: longitude\n });\n }\n });\n return newData;\n };\n LayerPanel.prototype.calculateRectBox = function (coordinates) {\n var _this = this;\n coordinates.forEach(function (currentCoords) {\n if (isNullOrUndefined(_this.mapObject.baseMapBounds)) {\n _this.mapObject.baseMapBounds = new GeoLocation({ min: currentCoords[1], max: currentCoords[1] }, { min: currentCoords[0], max: currentCoords[0] });\n }\n else {\n _this.mapObject.baseMapBounds.latitude.min = Math.min(_this.mapObject.baseMapBounds.latitude.min, currentCoords[1]);\n _this.mapObject.baseMapBounds.latitude.max = Math.max(_this.mapObject.baseMapBounds.latitude.max, currentCoords[1]);\n _this.mapObject.baseMapBounds.longitude.min = Math.min(_this.mapObject.baseMapBounds.longitude.min, currentCoords[0]);\n _this.mapObject.baseMapBounds.longitude.max = Math.max(_this.mapObject.baseMapBounds.longitude.max, currentCoords[0]);\n }\n });\n };\n LayerPanel.prototype.generateTiles = function (zoomLevel, tileTranslatePoint) {\n var userLang = this.mapObject.locale;\n var size = this.mapObject.availableSize;\n this.tiles = [];\n var xcount;\n var ycount;\n xcount = ycount = Math.pow(2, zoomLevel);\n var width = size.width / 2;\n var height = size.height / 2;\n var baseLayer = this.mapObject.layers[this.mapObject.baseLayerIndex];\n this.urlTemplate = baseLayer.urlTemplate;\n var endY = Math.min(ycount, ((-tileTranslatePoint.y + size.height) / 256) + 1);\n var endX = Math.min(xcount, ((-tileTranslatePoint.x + size.width) / 256) + 1);\n var startX = (-(tileTranslatePoint.x + 256) / 256);\n var startY = (-(tileTranslatePoint.y + 256) / 256);\n var bing = new BingMap(this.mapObject);\n for (var i = Math.round(startX); i < Math.round(endX); i++) {\n for (var j = Math.round(startY); j < Math.round(endY); j++) {\n var x = 256 * i + tileTranslatePoint.x;\n var y = 256 * j + tileTranslatePoint.y;\n if (x > -256 && x <= size.width && y > -256 && y < size.height) {\n if (i >= 0 && j >= 0) {\n var tile = new Tile(i, j);\n tile.left = x;\n tile.top = y;\n if (baseLayer.layerType === 'Bing') {\n tile.src = bing.getBingMap(tile, baseLayer.key, baseLayer.bingMapType, userLang);\n }\n else {\n tile.src = this.urlTemplate.replace('level', zoomLevel.toString()).replace('tileX', tile.x.toString())\n .replace('tileY', tile.y.toString());\n }\n this.tiles.push(tile);\n }\n }\n }\n }\n var proxTiles = extend([], this.tiles, [], true);\n for (var _i = 0, _a = this.mapObject.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n if (!(layer.type === 'SubLayer' && layer.visible)) {\n continue;\n }\n if (layer.layerType === 'OSM' || layer.layerType === 'Bing') {\n for (var _b = 0, proxTiles_1 = proxTiles; _b < proxTiles_1.length; _b++) {\n var baseTile = proxTiles_1[_b];\n var subtile = extend(baseTile, {}, {}, true);\n if (layer.layerType === 'Bing') {\n subtile.src = bing.getBingMap(subtile, layer.key, layer.bingMapType, userLang);\n }\n else {\n subtile.src = layer.urlTemplate.replace('level', zoomLevel.toString()).replace('tileX', baseTile.x.toString())\n .replace('tileY', baseTile.y.toString());\n }\n this.tiles.push(subtile);\n }\n }\n }\n this.arrangeTiles();\n };\n LayerPanel.prototype.arrangeTiles = function () {\n var htmlString = this.templateCompiler(this.tiles);\n document.getElementById(this.mapObject.element.id + '_tile_parent').innerHTML = htmlString;\n };\n LayerPanel.prototype.templateCompiler = function (tiles) {\n var tileElment = '';\n for (var _i = 0, tiles_1 = tiles; _i < tiles_1.length; _i++) {\n var tile = tiles_1[_i];\n tileElment += '
    ';\n }\n return tileElment;\n };\n LayerPanel.prototype.panTileMap = function (factorX, factorY, centerPosition) {\n var totalSize = Math.pow(2, this.mapObject.zoomLevel) * 256;\n this.tileTranslatePoint.x = (factorX / 2) - (totalSize / 2);\n this.tileTranslatePoint.y = (factorY / 2) - (totalSize / 2);\n var position = convertTileLatLongToPoint(centerPosition, this.mapObject.zoomLevel, this.tileTranslatePoint, this.isMapCoordinates);\n this.tileTranslatePoint.x -= position.x - (factorX / 2);\n this.tileTranslatePoint.y -= position.y - (factorY / 2);\n };\n return LayerPanel;\n}());\nexport { LayerPanel };\n","import { annotationRendering } from '../index';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, getElementOffset, getElementByID } from '../utils/helper';\n/**\n * Represent the annotation rendering for map\n */\nvar Annotations = /** @class */ (function () {\n function Annotations(map) {\n this.map = map;\n }\n Annotations.prototype.renderAnnotationElements = function () {\n var _this = this;\n var secondaryID = this.map.element.id + '_Secondary_Element';\n var annotationGroup = createElement('div', { id: this.map.element.id + '_Annotations_Group' });\n annotationGroup.style.position = 'absolute';\n annotationGroup.style.top = '0px';\n annotationGroup.style.left = '0px';\n this.map.annotations.map(function (annotation, index) {\n if (annotation.content !== null) {\n _this.createAnnotationTemplate(annotationGroup, annotation, index);\n }\n });\n if (annotationGroup.childElementCount > 0 && !(isNullOrUndefined(getElementByID(secondaryID)))) {\n getElementByID(secondaryID).appendChild(annotationGroup);\n }\n };\n /**\n * To create annotation elements\n */\n Annotations.prototype.createAnnotationTemplate = function (parentElement, annotation, annotationIndex) {\n var left;\n var top;\n var templateFn;\n var map = this.map;\n var templateElement;\n var availSize = map.availableSize;\n var id = map.element.id + '_Annotation_' + annotationIndex;\n var childElement = createElement('div', {\n id: map.element.id + '_Annotation_' + annotationIndex, styles: 'position: absolute; z-index:' + annotation.zIndex + ';'\n });\n var argsData = {\n cancel: false, name: annotationRendering, content: annotation.content,\n annotation: annotation\n };\n this.map.trigger(annotationRendering, argsData);\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(this.map).length) {\n templateElement = templateFn(this.map);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content\n }));\n }\n var offset = getElementOffset(childElement.cloneNode(true), map.element);\n var elementRect = map.element.getBoundingClientRect();\n var bounds = map.svgObject.getBoundingClientRect();\n left = Math.abs(bounds.left - elementRect.left);\n top = Math.abs(bounds.top - elementRect.top);\n var annotationXValue = (annotation.x.indexOf('%') > -1) ? (availSize.width / 100) * parseFloat(annotation.x) :\n parseFloat(annotation.x);\n var annotationYValue = (annotation.y.indexOf('%') > -1) ? (availSize.height / 100) * parseFloat(annotation.y) :\n parseFloat(annotation.y);\n left = (annotation.horizontalAlignment === 'None') ? (left + annotationXValue) : left;\n top = (annotation.verticalAlignment === 'None') ? (top + annotationYValue) : top;\n switch (annotation.verticalAlignment) {\n case 'Near':\n top = (top + annotationYValue);\n break;\n case 'Center':\n top = (top + annotationYValue) + ((bounds.height / 2) - (offset.height / 2));\n break;\n case 'Far':\n top = (top + bounds.height + annotationYValue) - offset.height;\n break;\n }\n switch (annotation.horizontalAlignment) {\n case 'Near':\n left = (left + annotationXValue);\n break;\n case 'Center':\n left = (left + annotationXValue) + ((bounds.width / 2) - (offset.width / 2));\n break;\n case 'Far':\n left = (left + bounds.width + annotationXValue) - offset.width;\n break;\n }\n childElement.style.left = left + 'px';\n childElement.style.top = top + 'px';\n parentElement.appendChild(childElement);\n };\n /*\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (map) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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/**\n * Maps Component file\n */\nimport { Component, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { EventHandler, Browser, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nimport { SvgRenderer, Event, remove, L10n, Collection, Internationalization, Complex } from '@syncfusion/ej2-base';\nimport { Size, createSvg, Point, removeElement, triggerShapeEvent, querySelector } from './utils/helper';\nimport { ZoomSettings, LegendSettings } from './model/base';\nimport { LayerSettings, TitleSettings, Border, Margin, MapsAreaSettings, Annotation } from './model/base';\nimport { load, click, loaded, resize, shapeSelected } from './model/constants';\nimport { Theme, BootstrapTheme, FabricTheme, HighContrastTheme } from './model/theme';\nimport { LayerPanel } from './layers/layer-panel';\nimport { Rect, RectOption, measureText, getElementByID } from '../maps/utils/helper';\nimport { findPosition, textTrim, TextOption, renderTextElement, convertGeoToPoint } from '../maps/utils/helper';\nimport { Annotations } from '../maps/user-interaction/annotation';\nimport { MarkerSettings } from './index';\nimport { changeBorderWidth } from './index';\n/**\n * Represents the Maps control.\n * ```html\n *
    \n * \n * ```\n */\nvar Maps = /** @class */ (function (_super) {\n __extends(Maps, _super);\n /**\n * Constructor for creating the widget\n */\n function Maps(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Check layer whether is normal or tile\n * @private\n */\n _this.isTileMap = false;\n /** @private */\n _this.baseSize = new Size(0, 0);\n /** @private */\n _this.translatePoint = new Point(0, 0);\n /** @private */\n _this.baseTranslatePoint = new Point(0, 0);\n /** @private */\n _this.tileTranslatePoint = new Point(0, 0);\n /** @private */\n _this.baseTileTranslatePoint = new Point(0, 0);\n /** @private */\n _this.isDevice = Browser.isDevice;\n /** @private */\n _this.zoomLevel = 1;\n return _this;\n }\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Maps.prototype.getLocalizedLabel = function (key) {\n return this.localeObject.getConstant(key);\n };\n /**\n * Initializing pre-required values.\n */\n Maps.prototype.preRender = function () {\n this.trigger(load, { maps: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.unWireEVents();\n this.createSVG();\n this.wireEVents();\n this.setCulture();\n };\n Maps.prototype.setTextStyle = function (theme, font) {\n font.color = font.color || theme.color;\n font.size = font.size || theme.size;\n font.fontFamily = font.fontFamily || theme.fontFamily;\n font.fontStyle = font.fontStyle || theme.fontStyle;\n font.fontWeight = font.fontWeight || theme.fontWeight;\n };\n /**\n * To change font styles of map based on themes\n */\n Maps.prototype.themeEffect = function () {\n switch (this.theme) {\n case 'Material':\n this.setTextStyle(Theme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(Theme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(Theme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(Theme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, Theme.dataLabelFont);\n break;\n case 'Bootstrap':\n this.setTextStyle(BootstrapTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(BootstrapTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(BootstrapTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(BootstrapTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, BootstrapTheme.dataLabelFont);\n break;\n case 'Fabric':\n this.setTextStyle(FabricTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(FabricTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(FabricTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(FabricTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, FabricTheme.dataLabelFont);\n break;\n case 'Highcontrast':\n this.setTextStyle(HighContrastTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(HighContrastTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(HighContrastTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(HighContrastTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, HighContrastTheme.dataLabelFont);\n break;\n }\n };\n /**\n * To change datalabel font\n * @param layers\n * @param style\n */\n Maps.prototype.setLabelFont = function (layers, style) {\n for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {\n var layer = layers_1[_i];\n this.setTextStyle(style, layer.dataLabelSettings.textStyle);\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Maps.prototype.render = function () {\n this.createSecondaryElement();\n this.addTabIndex();\n this.renderBorder();\n this.renderTitle(this.titleSettings, 'title', null, null);\n this.findBaseAndSubLayers();\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.renderLegend();\n }\n this.renderArea();\n this.createTile();\n if (this.zoomSettings.enable && this.zoomModule) {\n this.zoomModule.createZoomingToolbars();\n }\n this.mapLayerPanel.measureLayerPanel();\n this.element.appendChild(this.svgObject);\n this.setSecondaryElementPosition();\n this.arrangeTemplate();\n if (this.annotationsModule) {\n this.annotationsModule.renderAnnotationElements();\n }\n this.zoomingChange();\n //this.translateMap(this.centerPosition);\n this.trigger(loaded, { maps: this });\n };\n /**\n * Render the map area border\n */\n Maps.prototype.renderArea = function () {\n var rect = new RectOption(this.element.id + '_MapAreaBorder', this.mapsArea.background, this.mapsArea.border, 1, this.mapAreaRect);\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n };\n /**\n * To add tab index for map element\n */\n Maps.prototype.addTabIndex = function () {\n this.element.setAttribute('aria-label', this.description || 'Maps Element');\n this.element.setAttribute('tabindex', this.tabIndex.toString());\n };\n Maps.prototype.setSecondaryElementPosition = function () {\n var element = getElementByID(this.element.id + '_Secondary_Element');\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElementByID(this.element.id + '_svg').getBoundingClientRect();\n element.style.marginLeft = Math.max(svgRect.left - rect.left, 0) + 'px';\n element.style.marginTop = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n Maps.prototype.zoomingChange = function () {\n if (this.zoomSettings.zoomFactor >= 1) {\n if (this.zoomModule && this.zoomModule.toolBarGroup && this.zoomSettings.enable) {\n this.zoomModule.alignToolBar();\n }\n var elements = this.svgObject.querySelector('#' + this.element.id + '_Layer_Collections');\n for (var i = 0; i < elements.childNodes.length; i++) {\n var childElement = elements.childNodes[i];\n if (childElement.tagName === 'g') {\n var layerIndex = parseFloat(childElement.id.split('_')[2]);\n for (var j = 0; j < childElement.childNodes.length; j++) {\n var childNode = childElement.childNodes[j];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1))) {\n changeBorderWidth(childNode, layerIndex, this.scale, this);\n }\n }\n }\n }\n }\n };\n /**\n * To place map on center position\n */\n // public translateMap(point: MapLocation): void {\n // if (getElementByID(this.element.id + '_Legend_Border')) {\n // (getElementByID(this.element.id + '_Legend_Border')).style.pointerEvents = 'none';\n // }\n // if (!getElementByID(this.element.id + '_LayerIndex_0') || !this.mapBounds) {\n // return;\n // }\n // this.zoomByPosition(point, this.zoomSettings.zoomFactor);\n // }\n Maps.prototype.createSecondaryElement = function () {\n if (isNullOrUndefined(document.getElementById(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: absolute;z-index:1;'\n });\n this.element.appendChild(secondaryElement);\n }\n };\n Maps.prototype.arrangeTemplate = function () {\n var secondaryEle = getElementByID(this.element.id + '_Secondary_Element');\n if (querySelector(this.element.id + '_Legend_Border', this.element.id)) {\n querySelector(this.element.id + '_Legend_Border', this.element.id).style.pointerEvents = 'none';\n }\n if (!isNullOrUndefined(secondaryEle) && secondaryEle.childElementCount > 0) {\n for (var i = 0; i < secondaryEle.childElementCount; i++) {\n var templateGroupEle = secondaryEle.childNodes[i];\n if (!isNullOrUndefined(templateGroupEle) && templateGroupEle.childElementCount > 0) {\n var layerOffset = getElementByID(this.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementOffset = getElementByID(templateGroupEle.id).getBoundingClientRect();\n for (var j = 0; j < templateGroupEle.childElementCount; j++) {\n var currentTemplate = templateGroupEle.childNodes[j];\n var templateOffset = currentTemplate.getBoundingClientRect();\n currentTemplate.style.left = ((this.isTileMap ? parseFloat(currentTemplate.style.left) :\n ((layerOffset.left < elementOffset.left ? (parseFloat(currentTemplate.style.left) -\n Math.abs(elementOffset.left - layerOffset.left)) : (parseFloat(currentTemplate.style.left) +\n Math.abs(elementOffset.left - layerOffset.left))))) - (templateOffset.width / 2)) + 'px';\n currentTemplate.style.top = ((this.isTileMap ? parseFloat(currentTemplate.style.top) :\n ((layerOffset.top < elementOffset.top ? (parseFloat(currentTemplate.style.top) -\n Math.abs(elementOffset.top - layerOffset.top)) : (parseFloat(currentTemplate.style.top) +\n Math.abs(elementOffset.top - layerOffset.top))))) - (templateOffset.height / 2)) + 'px';\n }\n }\n }\n }\n };\n Maps.prototype.createTile = function () {\n var mainLayer = this.layersCollection[0];\n if (mainLayer.isBaseLayer && (mainLayer.layerType === 'OSM' || mainLayer.layerType === 'Bing')) {\n removeElement(this.element.id + '_tile_parent');\n var rect = this.element.getBoundingClientRect();\n var ele = createElement('div', {\n id: this.element.id + '_tile_parent', styles: 'position: absolute; left: ' +\n (this.mapAreaRect.x + rect.left) + 'px; top: ' + (this.mapAreaRect.y + rect.top + 5) + 'px; height: ' +\n (this.mapAreaRect.height - 5) + 'px; width: ' + this.mapAreaRect.width + 'px; overflow: hidden;'\n });\n this.element.appendChild(ele);\n }\n };\n /**\n * To initilize the private varibales of maps.\n */\n Maps.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.mapLayerPanel = new LayerPanel(this);\n };\n Maps.prototype.findBaseAndSubLayers = function () {\n var _this = this;\n var baseIndex = this.baseLayerIndex;\n var mainLayers = [];\n var subLayers = [];\n this.layersCollection = [];\n this.layers.forEach(function (layer) {\n (layer.type === 'Layer') ? mainLayers.push(layer) : subLayers.push(layer);\n });\n for (var i = 0; i < mainLayers.length; i++) {\n var baseLayer = mainLayers[i];\n if (baseLayer.visible && baseIndex === i) {\n baseLayer.isBaseLayer = true;\n this.isTileMap = (baseLayer.layerType === 'Geometry') ? false : true;\n this.layersCollection.push(baseLayer);\n break;\n }\n else if (i === mainLayers.length - 1) {\n this.layersCollection.push(mainLayers[0]);\n break;\n }\n }\n subLayers.map(function (subLayer, subLayerIndex) {\n if (subLayer.visible) {\n _this.layersCollection.push(subLayer);\n }\n });\n };\n /**\n * @private\n * Render the map border\n */\n Maps.prototype.renderBorder = function () {\n var width = this.border.width;\n if (width > 0 || this.background) {\n var borderRect = new RectOption(this.element.id + '_MapBorder', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.svgObject.appendChild(this.renderer.drawRectangle(borderRect));\n }\n };\n /**\n * @private\n * Render the title and subtitle\n */\n Maps.prototype.renderTitle = function (title, type, bounds, groupEle) {\n var style = title.textStyle;\n var height;\n var width = Math.abs((this.margin.left + this.margin.right) - this.availableSize.width);\n if (title.text) {\n if (isNullOrUndefined(groupEle)) {\n groupEle = this.renderer.createGroup({ id: this.element.id + '_Title_Group' });\n }\n var trimmedTitle = textTrim(width, title.text, style);\n var elementSize = measureText(trimmedTitle, style);\n var rect = (isNullOrUndefined(bounds)) ? new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height) : bounds;\n var location_1 = findPosition(rect, title.alignment, elementSize, type);\n var options = new TextOption(this.element.id + '_Map_' + type, location_1.x, location_1.y, 'start', trimmedTitle);\n var titleBounds = new Rect(location_1.x, location_1.y, elementSize.width, elementSize.height);\n var element = renderTextElement(options, style, style.color, groupEle);\n element.setAttribute('aria-label', this.description || title.text);\n element.setAttribute('tabindex', (this.tabIndex + (type === 'title' ? 1 : 2)).toString());\n if ((type === 'title' && !title.subtitleSettings.text) || (type === 'subtitle')) {\n height = Math.abs((titleBounds.y + this.margin.bottom) - this.availableSize.height);\n this.mapAreaRect = new Rect(this.margin.left, titleBounds.y + 10, width, height - 10);\n }\n if (type !== 'subtitle' && title.subtitleSettings.text) {\n this.renderTitle(title.subtitleSettings, 'subtitle', titleBounds, groupEle);\n }\n else {\n this.svgObject.appendChild(groupEle);\n }\n }\n else {\n height = Math.abs((this.margin.top + this.margin.bottom) - this.availableSize.height);\n this.mapAreaRect = new Rect(this.margin.left, this.margin.top, width, height);\n }\n };\n /**\n * To create svg element for maps\n */\n Maps.prototype.createSVG = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the SVG\n */\n Maps.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n removeElement(this.element.id + '_tile_parent');\n if (document.getElementsByClassName('e-tooltip-wrap')[0]) {\n remove(document.getElementsByClassName('e-tooltip-wrap')[0]);\n }\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /**\n * To bind event handlers for maps.\n */\n Maps.prototype.wireEVents = function () {\n //let cancelEvent: string = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n EventHandler.add(this.element, 'click', this.mapsOnClick, this);\n // EventHandler.add(this.element, 'contextmenu', this.mapsOnRightClick, this);\n EventHandler.add(this.element, 'dblclick', this.mapsOnDoubleClick, this);\n EventHandler.add(this.element, Browser.touchStartEvent, this.mouseDownOnMap, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMoveOnMap, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEndOnMap, this);\n // EventHandler.add(this.element, cancelEvent, this.mouseLeaveOnMap, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.mapsOnResize.bind(this));\n };\n /**\n * To unbind event handlers from maps.\n */\n Maps.prototype.unWireEVents = function () {\n //let cancelEvent: string = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n EventHandler.remove(this.element, 'click', this.mapsOnClick);\n // EventHandler.remove(this.element, 'contextmenu', this.mapsOnRightClick);\n EventHandler.remove(this.element, 'dblclick', this.mapsOnDoubleClick);\n EventHandler.remove(this.element, Browser.touchStartEvent, this.mouseDownOnMap);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMoveOnMap);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEndOnMap);\n //EventHandler.remove(this.element, cancelEvent, this.mouseLeaveOnMap);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.mapsOnResize);\n };\n /**\n * To handle the click event for the maps.\n */\n /* tslint:disable:no-string-literal */\n Maps.prototype.mapsOnClick = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var eventArgs = {\n cancel: false, name: click, target: targetId, x: e.clientX, y: e.clientY\n };\n this.trigger(click, eventArgs);\n if (targetEle.id.indexOf('ShapeIndex') !== -1) {\n var layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n triggerShapeEvent(targetId, this.layers[layerIndex].selectionSettings, this, shapeSelected);\n }\n if (this.markerModule) {\n this.markerModule.markerClick(e);\n }\n if (this.bubbleModule) {\n this.bubbleModule.bubbleClick(e);\n }\n if (!eventArgs.cancel) {\n this.notify(click, targetEle);\n }\n };\n /**\n * To handle the right click event for the maps.\n */\n // public mapsOnRightClick(e: Event): void {\n // this.trigger(rightClick, this);\n // }\n // public mouseLeaveOnMap(e: PointerEvent): boolean {\n // let pageX: number;\n // let pageY: number;\n // let touchArg: TouchEvent;\n // if (e.type === 'touchleave') {\n // this.isTouch = true;\n // touchArg = e;\n // pageX = touchArg.changedTouches[0].clientX;\n // pageY = touchArg.changedTouches[0].clientY;\n // } else {\n // this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n // pageX = e.clientX;\n // pageY = e.clientY;\n // }\n // this.isPanning = false;\n // return false;\n // }\n /**\n *\n */\n Maps.prototype.mouseEndOnMap = function (e) {\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n *\n */\n Maps.prototype.mouseDownOnMap = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n // if (e.type === 'touchstart') {\n // this.isTouch = true;\n // touchArg = e;\n // pageX = touchArg.changedTouches[0].clientX;\n // pageY = touchArg.changedTouches[0].clientY;\n // target = touchArg.target;\n // } else {\n // this.isTouch = e.pointerType === 'touch';\n // pageX = e.clientX;\n // pageY = e.clientY;\n // target = e.target;\n // }\n this.notify(Browser.touchStartEvent, e);\n };\n /**\n * To handle the double click event for the maps.\n */\n Maps.prototype.mapsOnDoubleClick = function (e) {\n this.notify('dblclick', e);\n };\n /**\n *\n */\n /* tslint:disable:no-string-literal */\n Maps.prototype.mouseMoveOnMap = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n var target;\n var touches = null;\n target = (e.type === 'touchmove') ? e.target :\n target = e.target;\n if (target.id.indexOf('_MarkerIndex_') > -1 && this.markerModule) {\n this.markerModule.markerExplode(target.id, target);\n }\n // if (target.id.indexOf('ShapeIndex') !== -1 && !this.highlightSettings.enable) {\n // triggerShapeEvent(target.id, this.highlightSettings, this, shapeHighlight);\n // }\n if (this.markerModule) {\n this.markerModule.markerMove(e);\n }\n if (this.bubbleModule) {\n this.bubbleModule.bubbleMove(e);\n }\n this.notify(Browser.touchMoveEvent, e);\n };\n /**\n * To handle the window resize event on maps.\n */\n Maps.prototype.mapsOnResize = function (e) {\n var _this = this;\n var args = {\n name: resize,\n previousSize: this.availableSize,\n currentSize: new Size(0, 0),\n maps: this\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-maps')) {\n this.resizeTo = setTimeout(function () {\n _this.unWireEVents();\n _this.createSVG();\n _this.refreshing = true;\n _this.wireEVents();\n args.currentSize = _this.availableSize;\n _this.trigger(resize, args);\n _this.render();\n }, 500);\n }\n return false;\n };\n Maps.prototype.zoomByPosition = function (centerPosition, zoomFactor) {\n var lattitude = centerPosition.latitude;\n var longitude = centerPosition.longitude;\n var factor = this.mapLayerPanel.calculateFactor(this.layersCollection[0]);\n var position = convertGeoToPoint(lattitude, longitude, factor, this.layersCollection[0], this);\n if (this.zoomModule) {\n this.zoomModule.performZooming(position, zoomFactor, 'ZoomIn');\n }\n };\n /**\n * To add layers to maps\n */\n Maps.prototype.addLayer = function (layer) {\n this.layers.push(new LayerSettings(this.layers[0], 'layers', layer));\n this.refresh();\n };\n /**\n * To remove layers from maps\n */\n Maps.prototype.removeLayer = function (index) {\n this.layers.splice(index, 1);\n this.refresh();\n };\n /**\n * To add marker to layers\n */\n Maps.prototype.addMarker = function (layerIndex, marker) {\n var currentMarker = this.layers[layerIndex].markerSettings;\n currentMarker.push(new MarkerSettings(currentMarker[0], 'markerSettings', marker));\n this.refresh();\n };\n /**\n * Method to set culture for maps\n */\n Maps.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.setLocaleConstants();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * Method to set locale constants\n */\n Maps.prototype.setLocaleConstants = function () {\n // Need to modify after the api confirm\n this.defaultLocalConstants = {\n ZoomIn: 'ZoomIn',\n Zoom: 'Zoom',\n ZoomOut: 'ZoomOut',\n Pan: 'Pan',\n Reset: 'Reset',\n };\n };\n /**\n * To destroy maps control.\n */\n Maps.prototype.destroy = function () {\n this.unWireEVents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Get component name\n */\n Maps.prototype.getModuleName = function () {\n return 'maps';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Maps.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Maps.prototype.onPropertyChanged = function (newProp, oldProp) {\n var render = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'background':\n this.renderBorder();\n break;\n case 'height':\n case 'width':\n this.createSVG();\n render = true;\n break;\n }\n }\n if (render) {\n this.render();\n }\n };\n /**\n * To provide the array of modules needed for maps rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Maps.prototype.requiredModules = function () {\n var modules = [];\n var isVisible = this.findVisibleLayers(this.layers);\n var annotationEnable = false;\n this.annotations.map(function (annotation, index) {\n annotationEnable = annotation.content != null;\n });\n if (this.isBubbleVisible()) {\n modules.push({\n member: 'Bubble',\n args: [this]\n });\n }\n if (isVisible.highlight) {\n modules.push({\n member: 'Highlight',\n args: [this]\n });\n }\n if (isVisible.selection) {\n modules.push({\n member: 'Selection',\n args: [this]\n });\n }\n if (this.legendSettings.visible) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.zoomSettings.enable) {\n modules.push({\n member: 'Zoom',\n args: [this]\n });\n }\n if (this.isMarkersVisible()) {\n modules.push({\n member: 'Marker',\n args: [this]\n });\n }\n if (this.isDataLabelVisible()) {\n modules.push({\n member: 'DataLabel',\n args: [this]\n });\n }\n if (this.isNavigationVisible()) {\n modules.push({\n member: 'NavigationLine',\n args: [this]\n });\n }\n if (isVisible.tooltip) {\n modules.push({\n member: 'MapsTooltip',\n args: [this]\n });\n }\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n return modules;\n };\n /**\n * To find marker visibility\n */\n Maps.prototype.isMarkersVisible = function () {\n var isVisible = false;\n this.layers.forEach(function (layer, layerIndex) {\n for (var i = 0; i < layer.markerSettings.length; i++) {\n if (layer.markerSettings[i].visible) {\n isVisible = true;\n break;\n }\n }\n });\n return isVisible;\n };\n /**\n * To find DataLabel visibility\n */\n Maps.prototype.isDataLabelVisible = function () {\n var isVisible = false;\n for (var i = 0; i < this.layers.length; i++) {\n if (this.layers[i].dataLabelSettings.visible) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * To find navigation line visibility\n */\n Maps.prototype.isNavigationVisible = function () {\n var isVisible = false;\n this.layers.forEach(function (layer, layerIndex) {\n for (var i = 0; i < layer.navigationLineSettings.length; i++) {\n if (layer.navigationLineSettings[i].visible) {\n isVisible = true;\n break;\n }\n }\n });\n return isVisible;\n };\n /**\n * To find marker visibility\n */\n Maps.prototype.isBubbleVisible = function () {\n var isVisible = false;\n for (var _i = 0, _a = this.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n if (this.getBubbleVisible(layer)) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * To find the bubble visibility from layer\n * @private\n */\n Maps.prototype.getBubbleVisible = function (layer) {\n var isVisible = false;\n for (var _i = 0, _a = layer.bubbleSettings; _i < _a.length; _i++) {\n var bubble = _a[_i];\n if (bubble.visible) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * To find visibility of layers and markers for required modules load.\n */\n Maps.prototype.findVisibleLayers = function (layers, isLayerVisible, isBubblevisible, istooltipVisible, isSelection, isHighlight) {\n if (isLayerVisible === void 0) { isLayerVisible = false; }\n if (isBubblevisible === void 0) { isBubblevisible = false; }\n if (istooltipVisible === void 0) { istooltipVisible = false; }\n if (isSelection === void 0) { isSelection = false; }\n if (isHighlight === void 0) { isHighlight = false; }\n var bubbles;\n var markers;\n var navigationLine;\n for (var _i = 0, layers_2 = layers; _i < layers_2.length; _i++) {\n var layer = layers_2[_i];\n isLayerVisible = layer.visible || isLayerVisible;\n if (layer.visible) {\n bubbles = layer.bubbleSettings;\n markers = layer.markerSettings;\n navigationLine = layer.navigationLineSettings;\n for (var _a = 0, navigationLine_1 = navigationLine; _a < navigationLine_1.length; _a++) {\n var navigation = navigationLine_1[_a];\n if (navigation.visible) {\n isSelection = navigation.highlightSettings.enable || isSelection;\n isHighlight = navigation.selectionSettings.enable || isHighlight;\n }\n }\n for (var _b = 0, markers_1 = markers; _b < markers_1.length; _b++) {\n var marker = markers_1[_b];\n if (marker.visible) {\n istooltipVisible = marker.tooltipSettings.visible || istooltipVisible;\n isSelection = marker.selectionSettings.enable || isSelection;\n isHighlight = marker.highlightSettings.enable || isHighlight;\n }\n if (istooltipVisible) {\n break;\n }\n }\n for (var _c = 0, bubbles_1 = bubbles; _c < bubbles_1.length; _c++) {\n var bubble = bubbles_1[_c];\n if (bubble.visible) {\n istooltipVisible = bubble.tooltipSettings.visible || istooltipVisible;\n isSelection = bubble.selectionSettings.enable || isSelection;\n isHighlight = bubble.highlightSettings.enable || isHighlight;\n }\n if (istooltipVisible) {\n break;\n }\n }\n istooltipVisible = layer.tooltipSettings.visible || istooltipVisible;\n isSelection = layer.selectionSettings.enable || isSelection;\n isHighlight = layer.highlightSettings.enable || isHighlight;\n }\n if (isLayerVisible && isBubblevisible && istooltipVisible) {\n break;\n }\n }\n return {\n layer: isLayerVisible, bubble: isBubblevisible, tooltip: istooltipVisible,\n selection: isSelection, highlight: isHighlight\n };\n };\n __decorate([\n Property(null)\n ], Maps.prototype, \"background\", void 0);\n __decorate([\n Property(false)\n ], Maps.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"height\", void 0);\n __decorate([\n Complex({}, TitleSettings)\n ], Maps.prototype, \"titleSettings\", void 0);\n __decorate([\n Complex({}, ZoomSettings)\n ], Maps.prototype, \"zoomSettings\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], Maps.prototype, \"legendSettings\", void 0);\n __decorate([\n Collection([], LayerSettings)\n ], Maps.prototype, \"layers\", void 0);\n __decorate([\n Collection([], Annotation)\n ], Maps.prototype, \"annotations\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Maps.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Maps.prototype, \"border\", void 0);\n __decorate([\n Property('Material')\n ], Maps.prototype, \"theme\", void 0);\n __decorate([\n Property('Mercator')\n ], Maps.prototype, \"projectionType\", void 0);\n __decorate([\n Property(0)\n ], Maps.prototype, \"baseLayerIndex\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], Maps.prototype, \"tabIndex\", void 0);\n __decorate([\n Property({ latitude: null, longitude: null })\n ], Maps.prototype, \"centerPosition\", void 0);\n __decorate([\n Complex({}, MapsAreaSettings)\n ], Maps.prototype, \"mapsArea\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"doubleClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"rightClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"resize\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeSelected\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"itemSelection\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"itemHighlight\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeHighlight\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"layerRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerMouseMove\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"dataLabelRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleMouseMove\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"annotationRendering\", void 0);\n Maps = __decorate([\n NotifyPropertyChanges\n ], Maps);\n return Maps;\n}(Component));\nexport { Maps };\n","import { ColorMapping, bubbleRendering } from '../index';\nimport { bubbleClick, bubbleMouseMove } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CircleOption, MapLocation, findMidPointOfPolygon, Point, drawCircle, elementAnimate, getTranslate } from '../utils/helper';\nimport { RectOption, Rect, drawRectangle } from '../utils/helper';\n/**\n * Bubble module class\n */\nvar Bubble = /** @class */ (function () {\n function Bubble(maps) {\n /**\n * Bubble Id for current layer\n */\n this.id = '';\n this.maps = maps;\n this.bubbleCollection = [];\n }\n /**\n * To render bubble\n */\n /* tslint:disable:no-string-literal */\n Bubble.prototype.renderBubble = function (bubbleSettings, shapeData, color, range, bubbleIndex, dataIndex, layerIndex, layer, group) {\n var layerData = layer.layerData;\n var colorValuePath = bubbleSettings.colorValuePath;\n var equalValue = shapeData[colorValuePath];\n var colorValue = Number(shapeData[colorValuePath]);\n var bubbleValue = Number(shapeData[bubbleSettings.valuePath]);\n if (isNaN(bubbleValue) && isNaN(colorValue) && isNullOrUndefined(equalValue)) {\n return null;\n }\n var radius = this.getRatioOfBubble(bubbleSettings.minRadius, bubbleSettings.maxRadius, bubbleValue, range.min, range.max);\n var colorMapping = new ColorMapping(this.maps);\n var shapeColor = colorMapping.getColorByValue(bubbleSettings.colorMapping, colorValue, equalValue);\n shapeColor = shapeColor ? shapeColor : color;\n var shapePoints = [[]];\n var midIndex = 0;\n var pointsLength = 0;\n var currentLength = 0;\n for (var i = 0, len = layerData.length; i < len; i++) {\n var shape = layerData[i];\n shape = shape['property'];\n if (shapeData[layer.shapeDataPath] === shape[layer.shapePropertyPath]) {\n if (!layerData[i]['_isMultiPolygon']) {\n shapePoints.push(this.getPoints(layerData[i], []));\n currentLength = shapePoints[shapePoints.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoints.length - 1;\n }\n }\n else {\n var layer_1 = layerData[i];\n for (var j = 0; j < layer_1.length; j++) {\n shapePoints.push(this.getPoints(layer_1[j], []));\n currentLength = shapePoints[shapePoints.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoints.length - 1;\n }\n }\n }\n }\n }\n var center = findMidPointOfPolygon(shapePoints[midIndex]);\n if (!isNullOrUndefined(center)) {\n var centerY = this.maps.projectionType === 'Mercator' ? center['y'] : (-center['y']);\n var eventArgs = {\n cancel: false, name: bubbleRendering, border: bubbleSettings.border,\n cx: center['x'], cy: centerY, data: shapeData, fill: shapeColor, maps: this.maps,\n radius: radius\n };\n this.maps.trigger(bubbleRendering, eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var bubbleElement = void 0;\n if (bubbleSettings.bubbleType === 'Circle') {\n var circle = new CircleOption(this.id, eventArgs.fill, eventArgs.border, bubbleSettings.opacity, 0, 0, eventArgs.radius, null);\n bubbleElement = drawCircle(this.maps, circle, group);\n }\n else {\n var y = this.maps.projectionType === 'Mercator' ? (eventArgs.cy - radius) : (eventArgs.cy + radius);\n var rectangle = new RectOption(this.id, eventArgs.fill, eventArgs.border, bubbleSettings.opacity, new Rect(0, 0, radius * 2, radius * 2), 2, 2);\n eventArgs.cx -= radius;\n eventArgs.cy = y;\n bubbleElement = drawRectangle(this.maps, rectangle, group);\n }\n this.bubbleCollection.push({\n LayerIndex: layerIndex,\n BubbleIndex: bubbleIndex,\n DataIndex: dataIndex,\n element: bubbleElement,\n center: { x: eventArgs.cx, y: eventArgs.cy }\n });\n var translate = getTranslate(this.maps, layer);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n bubbleElement.setAttribute('transform', 'translate ( ' + ((eventArgs.cx + transPoint.x) * scale) + ' '\n + ((eventArgs.cy + transPoint.y) * scale) + ' ) ');\n var bubble = (bubbleSettings.dataSource.length - 1) === dataIndex ? 'bubble' : null;\n var position = new MapLocation(((eventArgs.cx + transPoint.x) * scale), ((eventArgs.cy + transPoint.y) * scale));\n if (bubbleSettings.bubbleType === 'Square') {\n position.x += radius;\n position.y += radius * (this.maps.projectionType === 'Mercator' ? 1 : -1);\n }\n else {\n radius = 0;\n }\n elementAnimate(bubbleElement, bubbleSettings.animationDelay, bubbleSettings.animationDuration, position, this.maps, bubble, radius);\n }\n };\n Bubble.prototype.getPoints = function (shape, points) {\n shape.map(function (current, index) {\n points.push(new Point(current['point']['x'], current['point']['y']));\n });\n return points;\n };\n Bubble.prototype.getRatioOfBubble = function (min, max, value, minValue, maxValue) {\n var percent = (100 / (maxValue - minValue)) * (value - minValue);\n var bubbleRadius = (((max - min) / 100) * percent) + min;\n if (maxValue === minValue) {\n bubbleRadius = (((max - min) / 100)) + min;\n }\n return bubbleRadius;\n };\n /**\n * To check and trigger bubble click event\n */\n Bubble.prototype.bubbleClick = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var data = this.getbubble(target);\n if (isNullOrUndefined(data)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: bubbleClick, data: data, maps: this.maps,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(bubbleClick, eventArgs);\n };\n /**\n * To get bubble from target id\n */\n Bubble.prototype.getbubble = function (target) {\n var id = target.split('_LayerIndex_');\n var index = parseInt(id[1].split('_')[0], 10);\n var layer = this.maps.layers[index];\n var data;\n if (target.indexOf('_BubbleIndex_') > -1) {\n var bubbleIndex = parseInt(id[1].split('_BubbleIndex_')[1], 10);\n if (!isNaN(bubbleIndex)) {\n data = layer.dataSource[bubbleIndex];\n return data;\n }\n }\n return null;\n };\n /**\n * To check and trigger bubble move event\n */\n Bubble.prototype.bubbleMove = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var data = this.getbubble(target);\n if (isNullOrUndefined(data)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: bubbleMouseMove, data: data, maps: this.maps,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(bubbleMouseMove, eventArgs);\n };\n /**\n * Get module name.\n */\n Bubble.prototype.getModuleName = function () {\n return 'Bubble';\n };\n /**\n * To destroy the bubble.\n * @return {void}\n * @private\n */\n Bubble.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return Bubble;\n}());\nexport { Bubble };\n","import { markerRendering, convertTileLatLongToPoint, MapLocation } from '../index';\nimport { markerClick, markerMouseMove } from '../index';\nimport { isNullOrUndefined, merge, createElement, remove } from '@syncfusion/ej2-base';\nimport { CircleOption, PathOption, Point, getTranslate, convertGeoToPoint } from '../utils/helper';\nimport { getTemplateFunction, convertElement, calculateShapes, Size, RectOption, Rect, elementAnimate } from '../utils/helper';\n/**\n * Marker class\n */\nvar Marker = /** @class */ (function () {\n function Marker(maps) {\n this.maps = maps;\n this.trackElements = [];\n }\n /* tslint:disable:no-string-literal */\n Marker.prototype.markerRender = function (layerElement, layerIndex, factor) {\n var _this = this;\n var currentLayer = this.maps.layersCollection[layerIndex];\n this.markerSVGObject = this.maps.renderer.createGroup({ id: this.maps.element.id + '_Markers_Group' });\n var markerTemplateEle = createElement('div', {\n id: this.maps.element.id + '_LayerIndex_' + layerIndex + '_Markers_Template_Group',\n styles: 'overflow: hidden; position: absolute;pointer-events: none;' +\n 'top:' + this.maps.mapAreaRect.y + 'px;' +\n 'left:' + this.maps.mapAreaRect.x + 'px;' +\n 'height:' + this.maps.mapAreaRect.height + 'px;' +\n 'width:' + this.maps.mapAreaRect.width + 'px;'\n });\n var templateFn;\n currentLayer.markerSettings.map(function (markerSettings, markerIndex) {\n var markerData = markerSettings.dataSource;\n markerData.forEach(function (data, dataIndex) {\n var eventArgs = {\n cancel: false, name: markerRendering, fill: markerSettings.fill, height: markerSettings.height,\n width: markerSettings.width, imageUrl: markerSettings.imageUrl, shape: markerSettings.shape,\n template: markerSettings.template, data: data, maps: _this.maps, marker: markerSettings,\n border: markerSettings.border\n };\n _this.maps.trigger(markerRendering, eventArgs);\n var lng = data['longitude'];\n var lat = data['latitude'];\n var offset = markerSettings.offset;\n if (!eventArgs.cancel && markerSettings.visible && !isNullOrUndefined(lng) && !isNullOrUndefined(lat)) {\n var markerID = _this.maps.element.id + '_LayerIndex_' + layerIndex + '_MarkerIndex_'\n + markerIndex + '_DataIndex_' + dataIndex;\n var location_1 = (_this.maps.isTileMap) ? convertTileLatLongToPoint(new MapLocation(lng, lat), factor, _this.maps.tileTranslatePoint, true) : convertGeoToPoint(lat, lng, factor, currentLayer, _this.maps);\n var translate = (_this.maps.isTileMap) ? new Object() : getTranslate(_this.maps, currentLayer);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n if (eventArgs.template) {\n templateFn = getTemplateFunction(eventArgs.template);\n var templateElement = templateFn(_this.maps);\n var markerElement = convertElement(templateElement, markerID, data, markerIndex, _this.maps);\n markerElement.style.left = ((_this.maps.isTileMap ? location_1.x :\n ((Math.abs(_this.maps.baseMapRectBounds['min']['x'] - location_1.x)) * scale)) + offset.x) + 'px';\n markerElement.style.top = ((_this.maps.isTileMap ? location_1.y :\n ((Math.abs(_this.maps.baseMapRectBounds['min']['y'] - location_1.y)) * scale)) + offset.y) + 'px';\n markerTemplateEle.appendChild(markerElement);\n // markerTemplateAnimate(markerElement, markerSettings.animationDelay, markerSettings.animationDuration, location);\n }\n else {\n var shapeCustom = {\n size: new Size(eventArgs.width, eventArgs.height),\n fill: eventArgs.fill, borderColor: eventArgs.border.color,\n borderWidth: eventArgs.border.width, opacity: markerSettings.opacity,\n dashArray: markerSettings.dashArray\n };\n var ele = _this.drawSymbol(eventArgs.shape, eventArgs.imageUrl, { x: 0, y: 0 }, markerID, shapeCustom);\n var x = (_this.maps.isTileMap ? location_1.x : (location_1.x + transPoint.x) * scale) + offset.x;\n var y = (_this.maps.isTileMap ? location_1.y : (location_1.y + transPoint.y) * scale) + offset.y;\n ele.setAttribute('transform', 'translate( ' + x + ' ' + y + ' )');\n _this.markerSVGObject.appendChild(ele);\n var element = (markerData.length - 1) === dataIndex ? 'marker' : null;\n var markerPoint = new Point(x, y);\n elementAnimate(ele, markerSettings.animationDelay, markerSettings.animationDuration, markerPoint, _this.maps, element);\n }\n }\n });\n });\n if (this.markerSVGObject.childElementCount > 0) {\n layerElement.appendChild(this.markerSVGObject);\n }\n if (markerTemplateEle.childElementCount > 0) {\n document.getElementById(this.maps.element.id + '_Secondary_Element').appendChild(markerTemplateEle);\n }\n };\n Marker.prototype.markerExplode = function (targetId, targetElement) {\n var layerIndex = parseFloat(targetId.split('_')[2]);\n var markerIndex = parseFloat(targetId.split('_')[4]);\n var dataIndex = parseFloat(targetId.split('_')[6]);\n var layer = this.maps.layersCollection[layerIndex];\n var marker = layer.markerSettings[markerIndex];\n var element = ((marker.shape === 'Balloon') ? targetElement.parentNode : targetElement);\n var lat = marker.dataSource[dataIndex]['latitude'];\n var lng = marker.dataSource[dataIndex]['longitude'];\n var factor = 1;\n var transform = element.getAttribute('transform') || '';\n var transX = parseFloat(transform.split(' ')[1]);\n var transY = parseFloat(transform.split(' ')[2]);\n var location = { x: transX, y: transY };\n var elements = document.getElementsByClassName('EJ2-Map_Trackball');\n if (elements.length > 0 && this.previousExplodeId !== targetId) {\n this.removeTrackElements();\n }\n if (elements.length === 0 && marker.shape !== 'Image' && isNullOrUndefined(marker.template)) {\n for (var i = 0; i < 2; i++) {\n var markerID = this.maps.element.id + '_LayerIndex_' + layerIndex + '_MarkerIndex_'\n + markerIndex + '_Trackball_' + i;\n var shape = {\n size: new Size((marker.width + 5) + (i ? 20 : 0), (marker.height + 5) + (i ? 10 : 0)),\n fill: marker.fill, borderColor: i ? 'transparent' : marker.border.color,\n borderWidth: i ? 0 : marker.border.width, opacity: i ? 0.2 : marker.opacity,\n dashArray: marker.dashArray\n };\n if (marker.shape === 'Balloon') {\n var rect = element.getBoundingClientRect();\n var currentWidth = (rect.width / 2) - (shape['size'].width / 2);\n var currentHeight = (rect.height / 2) - (shape['size'].height / 2);\n location.y -= currentHeight;\n location.x += currentWidth / 4;\n }\n var trackEle = this.drawSymbol(marker.shape, marker.imageUrl, location, markerID, shape);\n location.x = transX;\n location.y = transY;\n trackEle.setAttribute('style', 'pointer-events:none');\n trackEle.setAttribute('class', 'EJ2-Map_Trackball');\n this.trackElements.push(trackEle);\n element.parentNode.appendChild(trackEle);\n }\n this.previousExplodeId = targetId;\n this.removeMarkerExplode();\n }\n };\n /**\n * @private\n */\n Marker.prototype.removeMarkerExplode = function () {\n this.isMarkerExplode = window.setTimeout(this.removeTrackElements, 2000);\n };\n Marker.prototype.removeTrackElements = function () {\n var elements = document.getElementsByClassName('EJ2-Map_Trackball');\n for (var i = 0, len = elements.length; i < len; i++) {\n this.previousExplodeId = '';\n remove(elements[0]);\n }\n };\n Marker.prototype.drawSymbol = function (shape, imageUrl, location, markerID, shapeCustom) {\n var markerEle;\n var x;\n var y;\n var size = shapeCustom['size'];\n var borderColor = shapeCustom['borderColor'];\n var borderWidth = parseFloat(shapeCustom['borderWidth']);\n var fill = shapeCustom['fill'];\n var dashArray = shapeCustom['dashArray'];\n var border = { color: borderColor, width: borderWidth };\n var opacity = shapeCustom['opacity'];\n var circleOptions;\n var pathOptions;\n var rectOptions;\n pathOptions = new PathOption(markerID, fill, borderWidth, borderColor, opacity, dashArray, '');\n if (shape === 'Circle') {\n var radius = (size.width + size.height) / 4;\n circleOptions = new CircleOption(markerID, fill, border, opacity, location.x, location.y, radius, dashArray);\n markerEle = this.maps.renderer.drawCircle(circleOptions);\n }\n else if (shape === 'Rectangle') {\n x = location.x - (size.width / 2);\n y = location.y - (size.height / 2);\n rectOptions = new RectOption(markerID, fill, border, opacity, new Rect(x, y, size.width, size.height), null, null, '', dashArray);\n markerEle = this.maps.renderer.drawRectangle(rectOptions);\n }\n else if (shape === 'Image') {\n x = location.x - (size.width / 2);\n y = location.y - (size.height / 2);\n merge(pathOptions, { 'href': imageUrl, 'height': size.height, 'width': size.width, x: x, y: y });\n markerEle = this.maps.renderer.drawImage(pathOptions);\n }\n else {\n markerEle = calculateShapes(this.maps, shape, pathOptions, size, location, this.markerSVGObject);\n }\n return markerEle;\n };\n /**\n * To check and trigger marker click event\n */\n Marker.prototype.markerClick = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var options = this.getMarker(target);\n if (isNullOrUndefined(options)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: markerClick, data: options.data, maps: this.maps, marker: options.marker,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(markerClick, eventArgs);\n };\n /**\n * To get marker from target id\n */\n Marker.prototype.getMarker = function (target) {\n var id = target.split('_LayerIndex_');\n var index = parseInt(id[1].split('_')[0], 10);\n var layer = this.maps.layers[index];\n var data;\n var marker;\n if (target.indexOf('_MarkerIndex_') > -1) {\n var markerIndex = parseInt(id[1].split('_MarkerIndex_')[1].split('_')[0], 10);\n var dataIndex = parseInt(id[1].split('_DataIndex_')[1].split('_')[0], 10);\n marker = layer.markerSettings[markerIndex];\n if (!isNaN(markerIndex)) {\n data = marker.dataSource[dataIndex];\n return { marker: marker, data: data };\n }\n }\n return null;\n };\n /**\n * To check and trigger marker move event\n */\n Marker.prototype.markerMove = function (e) {\n var targetId = e.target.id;\n if (targetId.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var options = this.getMarker(targetId);\n if (isNullOrUndefined(options)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: markerMouseMove, data: options.data, maps: this.maps,\n target: targetId, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(markerMouseMove, eventArgs);\n };\n /**\n * Get module name.\n */\n Marker.prototype.getModuleName = function () {\n return 'Marker';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n Marker.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return Marker;\n}());\nexport { Marker };\n","import { findMidPointOfPolygon, Rect, filter, getTemplateFunction, getTranslate, RectOption, convertElementFromLabel, Point, TextOption, renderTextElement, textTrim, measureText, Internalize } from '../utils/helper';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\n/**\n * DataLabel class\n */\nvar DataLabel = /** @class */ (function () {\n function DataLabel(maps) {\n this.intersect = [];\n this.value = { rightWidth: 0, leftWidth: 0, heightTop: 0, heightBottom: 0 };\n this.maps = maps;\n this.dataLabelCollections = [];\n }\n //tslint:disable:max-func-body-length\n DataLabel.prototype.getDataLabel = function (dataSource, labelPath, shapeName, shapeDataPath) {\n var text;\n for (var i = 0; i < dataSource.length; i++) {\n var data = dataSource[i];\n if ((data[shapeDataPath]) === shapeName) {\n text = data;\n break;\n }\n }\n return text;\n };\n DataLabel.prototype.renderLabel = function (layer, layerIndex, shape, layerData, group, labelTemplateElement, index) {\n var dataLabel = layer.dataLabelSettings;\n var style = layer.dataLabelSettings.textStyle;\n var markerEle;\n var templateFn;\n var options;\n var dataLabelSettings = layer.dataLabelSettings;\n var labelpath = layer.dataLabelSettings.labelPath;\n var shapePoint = [[]];\n var midIndex = 0;\n var pointsLength = 0;\n var shapeData = shape;\n var element;\n var data;\n var text = '';\n var datasrcObj;\n var currentLength = 0;\n var location;\n var labelId = this.maps.element.id + '_LayerIndex_' + layerIndex + '_shapeIndex_' + index + '_LabelIndex_' + index;\n var textLocation = new Point(0, 0);\n /* tslint:disable:no-string-literal */\n for (var i = 0, len = layerData.length; i < len; i++) {\n var shapes = layerData[i];\n shape = shapes['property'];\n if (!isNullOrUndefined(shapes['property']) && shapeData['properties']['name'] === shape['name']) {\n if (!layerData[i]['_isMultiPolygon']) {\n shapePoint.push(this.getPoint(layerData[i], []));\n currentLength = shapePoint[shapePoint.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoint.length - 1;\n }\n }\n else {\n var layer_1 = layerData[i];\n for (var j = 0; j < layer_1.length; j++) {\n shapePoint.push(this.getPoint(layer_1[j], []));\n currentLength = shapePoint[shapePoint.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoint.length - 1;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(layer.dataSource) && layer.dataSource.length > 0) {\n var localData = extend([], layer.dataSource, null, true);\n datasrcObj = this.getDataLabel(localData, labelpath, shapeData['properties'][layer.shapePropertyPath], layer.shapeDataPath);\n datasrcObj[labelpath] = datasrcObj[labelpath];\n text = datasrcObj[labelpath];\n }\n else {\n text = shapeData['properties'][labelpath];\n }\n location = findMidPointOfPolygon(shapePoint[midIndex]);\n if (!isNullOrUndefined(text) && !isNullOrUndefined(location)) {\n location['y'] = (this.maps.projectionType === 'Mercator') ? location['y'] : (-location['y']);\n data = location;\n if (!isNullOrUndefined(this.maps.format) && !isNaN(parseFloat(text))) {\n text = Internalize(this.maps, parseFloat(text));\n if (!isNullOrUndefined(datasrcObj)) {\n datasrcObj[labelpath] = text;\n }\n }\n var eventargs = {\n name: 'labelRendering', maps: this.maps, cancel: false, border: dataLabel.border, datalabel: dataLabel,\n fill: dataLabel.fill, template: dataLabel.template, text: text\n };\n this.maps.trigger('labelRendering', eventargs);\n var border = { color: 'yellow' };\n var position = [];\n var width = location['rightMax']['x'] - location['leftMax']['x'];\n var textSize = measureText(text, style);\n var trimmedLable = textTrim(width, text, style);\n var elementSize = measureText(trimmedLable, style);\n var startY = location['y'] - textSize['height'] / 4;\n var endY = location['y'] + textSize['height'] / 4;\n var start = location['y'] - textSize['height'] / 4;\n var end = location['y'] + textSize['height'] / 4;\n position = filter(shapePoint[midIndex], startY, endY);\n if (position.length > 5 && (!isNullOrUndefined(shapeData['geometry']) ? shapeData['geometry']['type'] !== 'MultiPolygon' :\n shapeData['type'] !== 'MultiPolygon')) {\n var location1 = findMidPointOfPolygon(position);\n location['x'] = location1['x'];\n width = location1['rightMax']['x'] - location1['leftMax']['x'];\n }\n var xpositionEnds = location['x'] + textSize['width'] / 2;\n var xpositionStart = location['x'] - textSize['width'] / 2;\n trimmedLable = textTrim(width, text, style);\n elementSize = measureText(trimmedLable, style);\n this.value[index] = { rightWidth: xpositionEnds, leftWidth: xpositionStart, heightTop: start, heightBottom: end };\n var translate = getTranslate(this.maps, layer);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n var labelElement = void 0;\n if (eventargs.template !== '') {\n templateFn = getTemplateFunction(eventargs.template);\n var templateElement = templateFn(this.maps);\n labelElement = convertElementFromLabel(templateElement, labelId, !isNullOrUndefined(datasrcObj) ? datasrcObj : shapeData['properties'], index, this.maps);\n labelElement.style.left = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location['x'])) * scale) + 'px';\n labelElement.style.top = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location['y'])) * scale) + 'px';\n labelTemplateElement.appendChild(labelElement);\n var labelWidth = labelElement.offsetWidth;\n var labelHeight = labelElement.offsetHeight;\n // if (labelWidth > width || labelWidth === 0 || labelHeight > location['height']) {\n // labelElement.style.display = 'None';\n // }\n }\n else {\n if (dataLabelSettings.smartLabelMode === 'Trim') {\n options = new TextOption(labelId, textLocation.x, textLocation.y, 'middle', trimmedLable, '', '');\n }\n if (dataLabelSettings.smartLabelMode === 'None') {\n options = new TextOption(labelId, (textLocation.x), textLocation.y, 'middle', text, '', '');\n }\n if (dataLabelSettings.smartLabelMode === 'Hide') {\n text = (width >= textSize['width']) ? text : '';\n options = new TextOption(labelId, (textLocation.x), (textLocation.y), 'middle', text, '', '');\n }\n text = options['text'];\n if (dataLabelSettings.intersectionAction === 'Hide') {\n for (var i = 0; i < this.intersect.length; i++) {\n if (!isNullOrUndefined(this.intersect[i])) {\n if (this.value[index]['leftWidth'] > this.intersect[i]['rightWidth']\n || this.value[index]['rightWidth'] < this.intersect[i]['leftWidth']\n || this.value[index]['heightTop'] > this.intersect[i]['heightBottom']\n || this.value[index]['heightBottom'] < this.intersect[i]['heightTop']) {\n text = text;\n }\n else {\n text = '';\n break;\n }\n }\n }\n this.intersect.push(this.value[index]);\n options = new TextOption(labelId, textLocation.x, textLocation.y, 'middle', text, '', '');\n }\n var difference = void 0;\n if (dataLabelSettings.intersectionAction === 'Trim') {\n for (var j = 0; j < this.intersect.length; j++) {\n if (!isNullOrUndefined(this.intersect[j])) {\n if (this.intersect[j]['rightWidth'] < this.value[index]['leftWidth']\n || this.intersect[j]['leftWidth'] > this.value[index]['rightWidth']\n || this.intersect[j]['heightBottom'] < this.value[index]['heightTop']\n || this.intersect[j]['heightTop'] > this.value[index]['heightBottom']) {\n trimmedLable = text;\n difference = 0;\n }\n else {\n if (this.value[index]['leftWidth'] > this.intersect[j]['leftWidth']) {\n width = this.intersect[j]['rightWidth'] - this.value[index]['leftWidth'];\n difference = width - (this.value[index]['rightWidth'] - this.value[index]['leftWidth']);\n trimmedLable = textTrim(difference, text, style);\n break;\n }\n if (this.value[index]['leftWidth'] < this.intersect[j]['leftWidth']) {\n width = this.value[index]['rightWidth'] - this.intersect[j]['leftWidth'];\n difference = Math.abs(width - (this.value[index]['rightWidth'] - this.value[index]['leftWidth']));\n trimmedLable = textTrim(difference, text, style);\n break;\n }\n }\n }\n }\n this.intersect.push(this.value[index]);\n options = new TextOption(labelId, textLocation.x, (textLocation.y), 'middle', trimmedLable, '', '');\n }\n if (dataLabelSettings.intersectionAction === 'None') {\n options = new TextOption(labelId, (textLocation.x), (textLocation.y), 'middle', text, '', '');\n }\n if (trimmedLable.length > 1) {\n var border_1 = eventargs.border;\n if (border_1['width'] > 1) {\n var fill = eventargs.fill;\n var opacity = dataLabelSettings.opacity;\n var rx = dataLabelSettings.rx;\n var ry = dataLabelSettings.ry;\n var x = location['x'] - textSize['width'] / 2;\n var y = location['y'] - textSize['height'] / 2;\n var rectOptions = new RectOption(this.maps.element.id + '_LayerIndex_' + layerIndex + '_shapeIndex_' + index + '_rectIndex_' + index, fill, border_1, opacity, new Rect(x, y, textSize['width'], textSize['height']), rx, ry);\n var rect = this.maps.renderer.drawRectangle(rectOptions);\n group.appendChild(rect);\n }\n }\n element = renderTextElement(options, style, style.color, group);\n element.setAttribute('transform', 'translate ( ' + ((location['x'] + transPoint.x) * scale) + ' '\n + (((location['y'] + transPoint.y) * scale) + (elementSize.height / 4)) + ' ) ');\n group.appendChild(element);\n }\n this.dataLabelCollections.push({\n location: { x: location['x'], y: (location['y'] + elementSize.height / 4) },\n element: isNullOrUndefined(labelElement) ? element : labelElement,\n layerIndex: layerIndex,\n shapeIndex: index,\n labelIndex: index\n });\n if (labelTemplateElement.childElementCount > 0 && !this.maps.element.contains(labelTemplateElement)) {\n document.getElementById(this.maps.element.id + '_Secondary_Element').appendChild(labelTemplateElement);\n }\n }\n };\n DataLabel.prototype.getPoint = function (shapes, points) {\n shapes.map(function (current, index) {\n points.push(new Point(current['point']['x'], current['point']['y']));\n });\n return points;\n };\n /**\n * Get module name.\n */\n DataLabel.prototype.getModuleName = function () {\n return 'DataLabel';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n DataLabel.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { convertTileLatLongToPoint } from '../index';\nimport { convertGeoToPoint, Point, PathOption } from '../utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * navigation-selected-line\n */\n/* tslint:disable:max-func-body-length */\nvar NavigationLine = /** @class */ (function () {\n function NavigationLine(maps) {\n this.maps = maps;\n }\n /* tslint:disable:no-string-literal */\n NavigationLine.prototype.renderNavigation = function (layer, factor, layerIndex) {\n var navigationEle;\n var navigation;\n navigation = layer.navigationLineSettings;\n var longitude;\n var point = [];\n var latitude;\n var visible;\n var angle;\n var width;\n var color;\n var dashArray;\n var pathOption;\n var direction;\n var markerWidth;\n var arcId;\n var radius;\n var showArrow;\n var arrowColor;\n var arrowSize;\n var arrowSettings;\n var arrowPosition;\n var startArrow;\n var endArrow;\n var navigationGroup;\n var d;\n var group = (this.maps.renderer.createGroup({\n id: this.maps.element.id + '_layerIndex_' + layerIndex + '_line_Group'\n }));\n for (var i = 0; i < navigation.length; i++) {\n latitude = navigation[i]['properties']['latitude'];\n longitude = navigation[i]['properties']['longitude'];\n visible = navigation[i]['properties']['visible'];\n angle = navigation[i]['properties']['angle'];\n width = navigation[i]['width'];\n color = navigation[i]['color'];\n dashArray = navigation[i]['properties']['dashArray'];\n arrowSettings = navigation[i]['properties']['arrowSettings'];\n showArrow = (isNullOrUndefined(arrowSettings)) ? false : arrowSettings['properties']['showArrow'];\n if (longitude['length'] === latitude['length'] && visible) {\n for (var i_1 = 0; i_1 < longitude['length']; i_1++) {\n var location_1 = (this.maps.isTileMap) ? convertTileLatLongToPoint(new Point(longitude[i_1], latitude[i_1]), factor, this.maps.tileTranslatePoint, true) : convertGeoToPoint(latitude[i_1], longitude[i_1], factor, layer, this.maps);\n point.push(location_1);\n }\n }\n navigationGroup = (this.maps.renderer.createGroup({\n id: this.maps.element.id + '_layerIndex_' + layerIndex + '_NavigationGroup' + i + ''\n }));\n for (var j = 0; j < point['length'] - 1; j++) {\n angle = (-1 > angle) ? -1 : angle;\n angle = (1 < angle) ? 1 : angle;\n var arcId_1 = this.maps.element.id + '_LayerIndex_' + layerIndex + '_NavigationIndex_' + i + '_Line' + j + '';\n var radius_1 = this.convertRadius(point[j], point[j + 1]);\n if (angle <= 1 && angle > 0) {\n direction = 0;\n if (point[j]['x'] > point[j + 1]['x']) {\n direction = 1;\n }\n }\n if (angle >= -1 && angle < 0) {\n direction = 1;\n if (point[j]['x'] > point[j + 1]['x']) {\n direction = 0;\n }\n }\n if (point[j]['x'] !== point[j + 1]['x']) {\n if (showArrow) {\n arrowColor = arrowSettings['properties']['color'];\n arrowSize = arrowSettings['properties']['size'];\n var divide = (Math.round(arrowSize / 2)).toString();\n arrowPosition = arrowSettings['properties']['position'];\n startArrow = (arrowPosition === 'Start') ? 'url(#triangle' + i + ')' : null;\n endArrow = (arrowPosition === 'End') ? 'url(#triangle' + i + ')' : null;\n var triId = this.maps.element.id + '_triangle';\n var defElement = this.maps.renderer.createDefs();\n defElement.innerHTML += '';\n var markerEle = defElement.querySelector('#' + 'triangle' + i);\n markerEle.setAttribute('markerWidth', (arrowSize.toString()));\n markerEle.setAttribute('markerHeight', (arrowSize.toString()));\n markerEle.setAttribute('refX', divide);\n markerEle.setAttribute('refY', divide);\n markerEle.setAttribute('orient', 'auto');\n var d2 = 'M 0,0 L 0,' + arrowSize + ' L ' + divide + ', ' + divide + ' Z';\n pathOption = new PathOption(triId, arrowColor, width, color, 1, dashArray, d2);\n navigationEle = this.maps.renderer.drawPath(pathOption);\n markerEle.appendChild(navigationEle);\n defElement.appendChild(markerEle);\n navigationGroup.appendChild(defElement);\n }\n d = (angle === 0) ? 'M ' + point[j]['x'] + ',' + point[j]['y'] + 'L ' + point[j + 1]['x']\n + ',' + point[j + 1]['y'] + '' :\n 'M ' + point[j]['x'] + ',' + point[j]['y'] + ' A ' + (angle * radius_1) + ' ' +\n (angle * radius_1) + ' ' + 0 + ',' + 0 + ',' + direction + ' , ' + point[j + 1]['x'] + ',' + point[j + 1]['y'] + ' ';\n pathOption = new PathOption(arcId_1, 'none', width, color, 1, dashArray, d, startArrow, endArrow);\n navigationEle = this.maps.renderer.drawPath(pathOption);\n navigationGroup.appendChild(navigationEle);\n }\n }\n group.appendChild(navigationGroup);\n point = [];\n }\n return group;\n };\n NavigationLine.prototype.convertRadius = function (point1, point2) {\n var value1 = point2['x'] - point1['x'];\n var value2 = point2['y'] - point1['y'];\n var value = Math.sqrt((Math.pow(value1, 2) + Math.pow(value2, 2)));\n return value;\n };\n /**\n * Get module name.\n */\n NavigationLine.prototype.getModuleName = function () {\n return 'NavigationLine';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n NavigationLine.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return NavigationLine;\n}());\nexport { NavigationLine };\n","import { legendRendering } from '../index';\nimport { Rect, measureText, PathOption, textTrim, querySelector, getTemplateFunction } from '../utils/helper';\nimport { RectOption, Size, TextOption, Point, renderTextElement, drawSymbol } from '../utils/helper';\nimport { isNullOrUndefined, Browser, EventHandler, remove } from '@syncfusion/ej2-base';\n/**\n * Legend module class\n */\nvar Legend = /** @class */ (function () {\n function Legend(maps) {\n this.legendBorderRect = new Rect(0, 0, 0, 0);\n this.totalPages = [];\n this.page = 0;\n this.currentPage = 0;\n this.interactiveLocation = new Point(0, 0);\n this.legendItemRect = new Rect(0, 0, 0, 0);\n this.heightIncrement = 0;\n this.widthIncrement = 0;\n this.textMaxWidth = 0;\n this.areaRect = new Rect(0, 0, 0, 0);\n this.maps = maps;\n this.addEventListener();\n }\n Legend.prototype.renderLegend = function () {\n if (!this.maps.isTileMap) {\n this.calculateLegendBounds();\n this.drawLegend();\n }\n };\n /* tslint:disable-next-line:max-func-body-length */\n Legend.prototype.calculateLegendBounds = function () {\n var _this = this;\n var map = this.maps;\n var legend = map.legendSettings;\n this.legendCollection = [];\n var spacing = 10;\n var leftPadding = 10;\n var topPadding = map.mapAreaRect.y;\n this.legendRenderingCollections = [];\n map.layersCollection.forEach(function (layer, layerIndex) {\n var layerData = layer.shapeData['features'];\n var dataPath = layer.shapeDataPath;\n var propertyPath = layer.shapePropertyPath;\n var dataSource = layer.dataSource;\n var colorValuePath;\n var colorMapping;\n if (legend.type === 'Layers' && layer.visible) {\n colorValuePath = layer.shapeSettings.colorValuePath;\n colorMapping = layer.shapeSettings.colorMapping;\n _this.getLegends(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n }\n else if (legend.type === 'Bubbles') {\n for (var _i = 0, _a = layer.bubbleSettings; _i < _a.length; _i++) {\n var bubble = _a[_i];\n if (bubble.visible) {\n colorValuePath = bubble.colorValuePath;\n colorMapping = bubble.colorMapping;\n dataSource = bubble.dataSource;\n _this.getLegends(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n }\n }\n }\n else {\n _this.getMarkersLegendCollections(layerIndex, layer.markerSettings);\n }\n });\n var defaultSize = 25;\n var legendTitle = map.legendSettings.title.text;\n var titleTextStyle = map.legendSettings.titleStyle;\n if (this.legendCollection.length > 0) {\n var legendMode = legend.mode;\n var shapeX = 0;\n var shapeY = 0;\n var textX = 0;\n var textY = 0;\n var shapePadding = legend.shapePadding;\n var textPadding = 10;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapeLocation = [];\n var textLocation = [];\n var legendRectCollection = [];\n var location_1;\n var position = legend.position;\n var labelAction = legend.labelDisplayMode;\n var arrangement = (legend.orientation === 'None') ? ((position === 'Top' || position === 'Bottom')\n ? 'Horizontal' : 'Vertical') : legend.orientation;\n var legendWidth = (legend.width.length > 1) ? (legend.width.indexOf('%') > -1) ? (map.availableSize.width / 100)\n * parseInt(legend.width, 10) : parseInt(legend.width, 10) : null;\n var legendHeight = (legend.height.length > 1) ? (legend.height.indexOf('%') > -1) ? (map.availableSize.height / 100) *\n parseInt(legend.height, 10) : parseInt(legend.height, 10) : null;\n var legendItemStartX_1;\n var legendItemStartY_1;\n var startX = 0;\n var startY = 0;\n var legendtitleSize = measureText(legendTitle, titleTextStyle);\n if (legendMode === 'Interactive') {\n var itemTextStyle = legend.textStyle;\n var rectWidth = void 0;\n var rectHeight = void 0;\n var legendLength = this.legendCollection.length;\n rectWidth = (arrangement === 'Horizontal') ? (isNullOrUndefined(legendWidth)) ? (map.mapAreaRect.width / legendLength) :\n (legendWidth / legendLength) : (isNullOrUndefined(legendWidth)) ? defaultSize : legendWidth;\n rectHeight = (arrangement === 'Horizontal') ? (isNullOrUndefined(legendHeight)) ? defaultSize : legendHeight :\n (isNullOrUndefined(legendHeight)) ? (map.mapAreaRect.height / legendLength) : (legendHeight / legendLength);\n startX = 0;\n startY = legendtitleSize.height + spacing;\n var position_1 = legend.labelPosition;\n var textX_1 = 0;\n var textY_1 = 0;\n var textPadding_1 = 10;\n var itemStartX = 0;\n var itemStartY = 0;\n var maxTextHeight = 0;\n var maxTextWidth = 0;\n for (var i = 0; i < this.legendCollection.length; i++) {\n startX = (arrangement === 'Horizontal') ? (startX + rectWidth) : startX;\n startY = (arrangement === 'Horizontal') ? startY : (startY + rectHeight);\n var legendText = this.legendCollection[i]['text'];\n var itemTextSize = new Size(0, 0);\n if (labelAction === 'None') {\n itemTextSize = measureText(legendText, itemTextStyle);\n }\n else if (labelAction === 'Trim') {\n legendText = textTrim((arrangement === 'Horizontal' ? rectWidth : rectHeight), legendText, itemTextStyle);\n itemTextSize = measureText(legendText, itemTextStyle);\n }\n else {\n legendText = '';\n }\n maxTextHeight = Math.max(maxTextHeight, itemTextSize.height);\n maxTextWidth = Math.max(maxTextWidth, itemTextSize.width);\n if (itemTextSize.width > 0 && itemTextSize.height > 0) {\n if (arrangement === 'Horizontal') {\n textX_1 = startX + (rectWidth / 2);\n textY_1 = (position_1 === 'After') ? (startY + rectHeight + (itemTextSize.height / 2)) + textPadding_1 :\n (startY - textPadding_1);\n }\n else {\n textX_1 = (position_1 === 'After') ? startX - (itemTextSize.width / 2) - textPadding_1\n : (startX + rectWidth + itemTextSize.width / 2) + textPadding_1;\n textY_1 = startY + (rectHeight / 2) + (itemTextSize.height / 4);\n }\n }\n if (i === 0) {\n itemStartX = (arrangement === 'Horizontal') ? startX : (position_1 === 'After') ?\n textX_1 - (itemTextSize.width / 2) : startX;\n itemStartY = (arrangement === 'Horizontal') ? (position_1 === 'After') ? startY :\n textY_1 - (itemTextSize.height / 2) : startY;\n }\n else if (i === this.legendCollection.length - 1) {\n legendWidth = (arrangement === 'Horizontal') ? Math.abs((startX + rectWidth) - itemStartX) :\n (rectWidth + maxTextWidth + textPadding_1);\n legendHeight = (arrangement === 'Horizontal') ? (rectHeight + (maxTextHeight / 2) + textPadding_1) :\n Math.abs((startY + rectHeight) - itemStartY);\n }\n this.legendRenderingCollections.push({\n fill: this.legendCollection[i]['fill'], x: startX, y: startY,\n width: rectWidth, height: rectHeight,\n text: legendText, textX: textX_1, textY: textY_1,\n textWidth: itemTextSize.width, textHeight: itemTextSize.height\n });\n }\n this.legendItemRect = { x: itemStartX, y: itemStartY, width: legendWidth, height: legendHeight };\n }\n else {\n legendWidth = (isNullOrUndefined(legendWidth)) ? map.mapAreaRect.width : legendWidth;\n legendHeight = (isNullOrUndefined(legendHeight)) ? map.mapAreaRect.height : legendHeight;\n var j = 0;\n for (var i = 0; i < this.legendCollection.length; i++) {\n var legendItem = this.legendCollection[i];\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n var legendTextSize = measureText(legendItem['text'], legend.textStyle);\n this.textMaxWidth = Math.max(this.textMaxWidth, legendTextSize.width);\n if (i === 0) {\n startX = shapeX = (leftPadding + (shapeWidth / 2));\n startY = shapeY = topPadding + legendtitleSize.height + (shapeHeight > legendTextSize.height ? shapeHeight / 2\n : (legendTextSize.height / 4));\n }\n else {\n var maxSize = (legendTextSize.height > shapeHeight) ? legendTextSize.height : shapeHeight;\n if (arrangement === 'Horizontal') {\n var prvePositionX = (textLocation[j - 1].x + textLocation[j - 1].width) + textPadding + shapeWidth;\n if ((prvePositionX + shapePadding + legendTextSize.width) > legendWidth) {\n var nextPositionY = (textLocation[j - 1].y > (shapeLocation[j - 1].y + (shapeHeight / 2)) ?\n textLocation[j - 1].y : (shapeLocation[j - 1].y + (shapeHeight / 2))) + topPadding;\n if ((nextPositionY + maxSize) > legendHeight) {\n this.getPageChanged();\n j = 0;\n shapeLocation = [];\n textLocation = [];\n legendRectCollection = [];\n shapeX = startX;\n shapeY = startY;\n }\n else {\n shapeX = (shapeLocation[0].x);\n shapeY = (nextPositionY + (maxSize / 2));\n }\n }\n else {\n shapeX = (prvePositionX - (shapeWidth / 2));\n shapeY = (shapeLocation[j - 1]).y;\n }\n }\n else {\n var prevPositionY = textLocation[j - 1].y > shapeLocation[j - 1].y + (shapeHeight / 2) ?\n textLocation[j - 1].y : shapeLocation[j - 1].y + (shapeHeight / 2);\n if ((prevPositionY + topPadding + maxSize) > legendHeight) {\n var nextPositionX = (textLocation[j - 1].x + this.textMaxWidth + textPadding);\n if ((nextPositionX + shapePadding + legendTextSize.width) > legendWidth) {\n shapeX = startX;\n shapeY = startY;\n legendRectCollection = [];\n textLocation = [];\n shapeLocation = [];\n this.getPageChanged();\n j = 0;\n }\n else {\n shapeX = nextPositionX + (shapeWidth / 2);\n shapeY = (shapeLocation[0].y);\n }\n }\n else {\n shapeX = shapeLocation[j - 1].x;\n shapeY = prevPositionY + topPadding + (shapeHeight / 2);\n }\n }\n }\n textX = shapeX + (shapeWidth / 2) + shapePadding;\n textY = shapeY + (legendTextSize.height / 4);\n shapeLocation.push({ x: shapeX, y: shapeY });\n textLocation.push({ x: textX, y: textY, width: legendTextSize.width, height: (legendTextSize.height / 2) });\n this.totalPages[this.page]['Collection'].push({\n DisplayText: legendItem['text'],\n ImageSrc: legendItem['imageSrc'],\n Shape: { x: shapeX, y: shapeY },\n Text: { x: textX, y: textY },\n Fill: legendItem['fill'],\n Rect: {\n x: shapeLocation[j].x - (shapeWidth / 2),\n y: (shapeLocation[j].y - (shapeHeight / 2)) < (textY - legendTextSize.height) ?\n (shapeLocation[j].y - (shapeHeight / 2)) : (textY - legendTextSize.height),\n width: Math.abs((shapeLocation[j].x - (shapeWidth / 2)) - (textX + legendTextSize.width)),\n height: ((shapeHeight > legendTextSize.height) ? shapeHeight : legendTextSize.height)\n }\n });\n j++;\n }\n var collection = this.totalPages[0]['Collection'];\n collection.forEach(function (legendObj, index) {\n var legendRect = new Rect(legendObj['Rect']['x'], legendObj['Rect']['y'], legendObj['Rect']['width'], legendObj['Rect']['height']);\n if (index === 0) {\n legendItemStartX_1 = legendRect.x;\n legendItemStartY_1 = legendRect.y;\n }\n _this.widthIncrement = Math.max(_this.widthIncrement, Math.abs(legendItemStartX_1 - (legendRect.x + legendRect.width)));\n _this.heightIncrement = Math.max(_this.heightIncrement, Math.abs(legendItemStartY_1 - (legendRect.y + legendRect.height)));\n });\n legendWidth = ((this.widthIncrement < legendWidth) ? this.widthIncrement : legendWidth);\n legendHeight = ((this.heightIncrement < legendHeight) ? this.heightIncrement : legendHeight);\n this.legendItemRect = {\n x: collection[0]['Rect']['x'], y: collection[0]['Rect']['y'],\n width: legendWidth, height: legendHeight\n };\n }\n }\n };\n /**\n *\n */\n Legend.prototype.getLegends = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n this.getRangeLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n this.getEqualLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n this.getDataLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n };\n Legend.prototype.getPageChanged = function () {\n this.page++;\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n };\n Legend.prototype.drawLegend = function () {\n var map = this.maps;\n var legend = map.legendSettings;\n var render = map.renderer;\n var textOptions;\n var textFont = legend.textStyle;\n this.legendGroup = render.createGroup({ id: map.element.id + '_Legend_Group' });\n var eventArgs = {\n name: legendRendering, cancel: false, fill: '', shape: legend.shape,\n shapeBorder: legend.shapeBorder\n };\n if (legend.mode === 'Interactive') {\n for (var i = 0; i < this.legendRenderingCollections.length; i++) {\n var itemId = map.element.id + '_Legend_Index_' + i;\n var textId = map.element.id + '_Legend_Index_' + i + '_Text';\n var item = this.legendRenderingCollections[i];\n var bounds = new Rect(item['x'], item['y'], item['width'], item['height']);\n var textLocation = new Point(item['textX'], item['textY']);\n eventArgs.fill = item['fill'];\n map.trigger(legendRendering, eventArgs);\n var rectOptions = new RectOption(itemId, eventArgs.fill, eventArgs.shapeBorder, 1, bounds);\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'middle', item['text'], '', '');\n renderTextElement(textOptions, textFont, textFont.color, this.legendGroup);\n this.legendGroup.appendChild(render.drawRectangle(rectOptions));\n }\n this.renderLegendBorder();\n }\n else {\n this.drawLegendItem(this.currentPage);\n }\n };\n Legend.prototype.drawLegendItem = function (page) {\n var map = this.maps;\n var legend = map.legendSettings;\n var spacing = 10;\n var shapeSize = new Size(legend.shapeWidth, legend.shapeHeight);\n var textOptions;\n var renderOptions;\n var render = map.renderer;\n var shapeBorder = legend.shapeBorder;\n var eventArgs = {\n name: legendRendering, cancel: false, fill: '', shape: legend.shape\n };\n if (page >= 0 && page < this.totalPages.length) {\n if (querySelector(this.legendGroup.id, this.maps.element.id)) {\n remove(querySelector(this.legendGroup.id, this.maps.element.id));\n }\n var strokeColor = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine'\n || legend.shape === 'Cross') ? isNullOrUndefined(legend.fill) ? '#000000' : legend.fill : shapeBorder.color;\n var strokeWidth = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine'\n || legend.shape === 'Cross') ? (shapeBorder.width === 0) ?\n 1 : shapeBorder.width : shapeBorder.width;\n eventArgs.shapeBorder = { width: strokeWidth, color: strokeColor };\n for (var i = 0; i < this.totalPages[page]['Collection'].length; i++) {\n var collection = this.totalPages[page]['Collection'][i];\n var legendElement = render.createGroup({ id: map.element.id + '_Legend_Index_' + i });\n var legendText = collection['DisplayText'];\n eventArgs.fill = collection['Fill'];\n eventArgs.shape = ((legend.type === 'Markers') ? ((isNullOrUndefined(collection['ImageSrc'])) ?\n legend.shape : 'Image') : legend.shape);\n map.trigger(legendRendering, eventArgs);\n var shapeId = map.element.id + '_Legend_Shape_Index_' + i;\n var textId = map.element.id + '_Legend_Text_Index_' + i;\n var shapeLocation = collection['Shape'];\n var textLocation = collection['Text'];\n var imageUrl = ((isNullOrUndefined(collection['ImageSrc'])) ? legend.shape : collection['ImageSrc']);\n var renderOptions_1 = new PathOption(shapeId, eventArgs.fill, eventArgs.shapeBorder.width, eventArgs.shapeBorder.color, 1, '');\n legendElement.appendChild(drawSymbol(shapeLocation, eventArgs.shape, shapeSize, collection['ImageSrc'], renderOptions_1));\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'start', legendText, '', '');\n renderTextElement(textOptions, legend.textStyle, legend.textStyle.color, legendElement);\n this.legendGroup.appendChild(legendElement);\n }\n var pagingGroup = void 0;\n var width = spacing;\n var height = (spacing / 2);\n if (this.page !== 0) {\n var pagingText = (page + 1) + '/' + this.totalPages.length;\n var pagingFont = legend.textStyle;\n var pagingTextSize = measureText(pagingText, pagingFont);\n var leftPageX = (this.legendItemRect.x + this.legendItemRect.width) - pagingTextSize.width -\n (width * 2) - spacing;\n var rightPageX = (this.legendItemRect.x + this.legendItemRect.width);\n var locY = (this.legendItemRect.y + this.legendItemRect.height) + (height / 2) + spacing;\n var pageTextX = rightPageX - width - (pagingTextSize.width / 2) - (spacing / 2);\n pagingGroup = render.createGroup({ id: map.element.id + '_Legend_Paging_Group' });\n var leftPageElement = render.createGroup({ id: map.element.id + '_Legend_Left_Paging_Group' });\n var rightPageElement = render.createGroup({ id: map.element.id + '_Legend_Right_Paging_Group' });\n var rightPath = ' M ' + rightPageX + ' ' + locY + ' L ' + (rightPageX - width) + ' ' + (locY - height) +\n ' L ' + (rightPageX - width) + ' ' + (locY + height) + ' z ';\n var leftPath = ' M ' + leftPageX + ' ' + locY + ' L ' + (leftPageX + width) + ' ' + (locY - height) +\n ' L ' + (leftPageX + width) + ' ' + (locY + height) + ' z ';\n var leftPageOptions = new PathOption(map.element.id + '_Left_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', leftPath);\n leftPageElement.appendChild(render.drawPath(leftPageOptions));\n var leftRectPageOptions = new RectOption(map.element.id + '_Left_Page_Rect', 'transparent', {}, 1, new Rect(leftPageX - (width / 2), (locY - (height * 2)), width * 2, spacing * 2), null, null, '', '');\n leftPageElement.appendChild(render.drawRectangle(leftRectPageOptions));\n this.wireEvents(leftPageElement);\n var rightPageOptions = new PathOption(map.element.id + '_Right_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', rightPath);\n rightPageElement.appendChild(render.drawPath(rightPageOptions));\n var rightRectPageOptions = new RectOption(map.element.id + '_Right_Page_Rect', 'transparent', {}, 1, new Rect((rightPageX - width), (locY - height), width, spacing), null, null, '', '');\n rightPageElement.appendChild(render.drawRectangle(rightRectPageOptions));\n this.wireEvents(rightPageElement);\n pagingGroup.appendChild(leftPageElement);\n pagingGroup.appendChild(rightPageElement);\n var pageTextOptions = {\n 'id': map.element.id + '_Paging_Text',\n 'x': pageTextX,\n 'y': locY + (pagingTextSize.height / 4),\n 'fill': '#a6a6a6',\n 'font-size': '14px',\n 'font-style': pagingFont.fontStyle,\n 'font-family': pagingFont.fontFamily,\n 'font-weight': pagingFont.fontWeight,\n 'text-anchor': 'middle',\n 'transform': '',\n 'opacity': 1,\n 'dominant-baseline': ''\n };\n pagingGroup.appendChild(render.createText(pageTextOptions, pagingText));\n this.legendGroup.appendChild(pagingGroup);\n }\n this.renderLegendBorder();\n }\n };\n Legend.prototype.renderLegendBorder = function () {\n var map = this.maps;\n var legend = map.legendSettings;\n var legendTitle = legend.title.text;\n var textStyle = legend.titleStyle;\n var textOptions;\n var spacing = 10;\n var trimTitle = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);\n var textSize = measureText(trimTitle, textStyle);\n this.legendBorderRect = new Rect((this.legendItemRect.x - spacing), (this.legendItemRect.y - spacing - textSize.height), (this.legendItemRect.width) + (spacing * 2), (this.legendItemRect.height) + (spacing * 2) + textSize.height +\n (legend.mode === 'Interactive' ? 0 : (this.page !== 0) ? spacing : 0));\n if (legendTitle) {\n textOptions = new TextOption(map.element.id + '_LegendTitle', (this.legendItemRect.x) + (this.legendItemRect.width / 2), this.legendItemRect.y - (textSize.height / 2), 'middle', trimTitle, '');\n renderTextElement(textOptions, textStyle, textStyle.color, this.legendGroup);\n }\n var renderOptions = new RectOption(map.element.id + '_Legend_Border', legend.background, legend.border, 1, this.legendBorderRect, null, null, '', '');\n this.legendGroup.appendChild(map.renderer.drawRectangle(renderOptions));\n this.translate = (legend.position !== 'Float') ?\n this.getLegendAlignment(map, this.legendBorderRect.width, this.legendBorderRect.height, legend) : legend.location;\n this.legendGroup.setAttribute('transform', 'translate( ' + (this.translate.x + (-(this.legendBorderRect.x))) + ' ' +\n (this.translate.y + (-(this.legendBorderRect.y))) + ' )');\n map.svgObject.appendChild(this.legendGroup);\n };\n Legend.prototype.changeNextPage = function (e) {\n this.currentPage = (e.target.id.indexOf('_Left_Page_') > -1) ? (this.currentPage - 1) :\n (this.currentPage + 1);\n this.legendGroup = this.maps.renderer.createGroup({ id: this.maps.element.id + '_Legend_Group' });\n this.drawLegendItem(this.currentPage);\n if (querySelector(this.maps.element.id + '_Legend_Border', this.maps.element.id)) {\n querySelector(this.maps.element.id + '_Legend_Border', this.maps.element.id).style.pointerEvents = 'none';\n }\n };\n Legend.prototype.getLegendAlignment = function (map, width, height, legend) {\n var x;\n var y;\n var spacing = 10;\n var totalWidth = map.availableSize.width;\n var totalHeight = map.availableSize.height;\n switch (legend.position) {\n case 'Top':\n case 'Bottom':\n map.mapAreaRect.height = (map.mapAreaRect.height - height);\n x = (totalWidth / 2) - (width / 2);\n y = (legend.position === 'Top') ? map.mapAreaRect.y : (map.mapAreaRect.y + map.mapAreaRect.height);\n map.mapAreaRect.y = (legend.position === 'Top') ? map.mapAreaRect.y + height + spacing : map.mapAreaRect.y;\n break;\n case 'Left':\n case 'Right':\n map.mapAreaRect.width = (map.mapAreaRect.width - width);\n x = (legend.position === 'Left') ? map.mapAreaRect.x : map.mapAreaRect.x + map.mapAreaRect.width;\n y = (totalHeight / 2) - (height / 2);\n map.mapAreaRect.x = (legend.position === 'Left') ? map.mapAreaRect.x + width : map.mapAreaRect.x;\n break;\n }\n switch (legend.alignment) {\n case 'Near':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = map.mapAreaRect.x;\n }\n else {\n y = map.mapAreaRect.y;\n }\n break;\n case 'Far':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = totalWidth - width;\n }\n else {\n y = totalHeight - height;\n }\n break;\n }\n return new Point(x, y);\n };\n Legend.prototype.getMarkersLegendCollections = function (layerIndex, markers) {\n var _this = this;\n markers.forEach(function (marker, markerIndex) {\n var dataSource = marker.dataSource;\n var field = marker.legendText;\n var templateFn;\n dataSource.forEach(function (data, dataIndex) {\n var imageSrc = null;\n if (marker.visible && (!isNullOrUndefined(data['latitude'])) && (!isNullOrUndefined(data['longitude']))) {\n if (marker.template) {\n templateFn = getTemplateFunction(marker.template);\n var templateElement = templateFn(_this.maps);\n var markerEle = isNullOrUndefined(templateElement.childElementCount) ? templateElement[0] :\n templateElement;\n imageSrc = markerEle.querySelector('img').src;\n }\n var text = isNullOrUndefined(data[field]) ? '' : data[field];\n _this.legendCollection.push({\n layerIndex: layerIndex, markerIndex: markerIndex, dataIndex: dataIndex,\n fill: marker.fill, text: text, imageSrc: imageSrc\n });\n }\n });\n });\n };\n Legend.prototype.getRangeLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var legendText;\n var fill = this.maps.legendSettings.fill;\n var _loop_1 = function (colorMap) {\n if (!isNullOrUndefined(colorMap.from) && !isNullOrUndefined(colorMap.to)) {\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.from + ' - ' + colorMap.to;\n var rangeData_1 = [];\n var colorMapProcess_1 = false;\n dataSource.forEach(function (data, dataIndex) {\n var colorValue = parseFloat(data[colorValuePath]);\n if (colorValue >= colorMap.from && colorValue <= colorMap.to) {\n colorMapProcess_1 = true;\n rangeData_1.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, colorValue));\n }\n });\n if (!colorMapProcess_1) {\n rangeData_1.push({\n layerIndex: layerIndex, shapeIndex: null, dataIndex: null,\n name: null, value: null\n });\n }\n var legendFill = (isNullOrUndefined(fill)) ? colorMap.color : fill;\n this_1.getOverallLegendItemsCollection(legendText, legendFill, rangeData_1);\n }\n };\n var this_1 = this;\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n _loop_1(colorMap);\n }\n };\n Legend.prototype.getOverallLegendItemsCollection = function (legendText, legendFill, legendData) {\n var newColllection = [];\n if (legendData.length > 0) {\n for (var i = 0; i < legendData.length; i++) {\n var collection = legendData[i];\n if (collection.length > 0) {\n for (var j = 0; j < collection.length; j++) {\n newColllection.push(collection[j]);\n }\n }\n else {\n newColllection.push(legendData[i]);\n }\n newColllection['_isVisible'] = true;\n }\n this.legendCollection.push({ text: legendText, fill: legendFill, data: newColllection });\n }\n };\n Legend.prototype.getEqualLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var fill = this.maps.legendSettings.fill;\n var legendText;\n var _loop_2 = function (colorMap) {\n if (!isNullOrUndefined(colorMap.value)) {\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.value;\n var equalData_1 = [];\n var eqaulColorProcess_1 = false;\n dataSource.forEach(function (data, dataIndex) {\n var equalValue = data[colorValuePath];\n if (equalValue === colorMap.value) {\n eqaulColorProcess_1 = true;\n equalData_1.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, equalValue));\n }\n });\n if (!eqaulColorProcess_1) {\n equalData_1.push({\n layerIndex: layerIndex, shapeIndex: null, dataIndex: null,\n name: null, value: null\n });\n }\n var legendFill = (isNullOrUndefined(fill)) ? colorMap.color : fill;\n this_2.getOverallLegendItemsCollection(legendText, legendFill, equalData_1);\n }\n };\n var this_2 = this;\n for (var _i = 0, colorMapping_2 = colorMapping; _i < colorMapping_2.length; _i++) {\n var colorMap = colorMapping_2[_i];\n _loop_2(colorMap);\n }\n };\n Legend.prototype.getDataLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var legendText;\n var fill = this.maps.legendSettings.fill;\n if (!isNullOrUndefined(colorValuePath)) {\n dataSource.forEach(function (data, dataIndex) {\n var dataValue = data[colorValuePath];\n var newData = [];\n var legendFill = (isNullOrUndefined(fill)) ? dataValue : fill;\n if (!isNullOrUndefined(dataValue) && colorMapping.length === 0) {\n legendText = data[dataPath];\n newData.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, dataValue));\n }\n _this.getOverallLegendItemsCollection(legendText, legendFill, newData);\n });\n }\n };\n Legend.prototype.interactiveHandler = function (e) {\n var target = e.target;\n var legend = this.maps.legendSettings;\n var id = this.maps.element.id + '_Interactive_Legend';\n var hoverId = legend.type === 'Layers' ? '_ShapeIndex_' : (legend.type === 'Markers') ? '_MarkerIndex_' :\n '_BubbleIndex_';\n if (target.id.indexOf(hoverId) > 1) {\n var layerIndex = parseFloat(target.id.split('_')[2]);\n var dataIndex = parseFloat(target.id.split('_')[6]);\n var fill = void 0;\n var stroke = void 0;\n var strokeWidth = void 0;\n if (!(isNullOrUndefined(querySelector(id, this.maps.element.id)))) {\n remove(querySelector(id, this.maps.element.id));\n }\n var layer = this.maps.layersCollection[layerIndex];\n if (legend.visible && this.legendRenderingCollections.length > 0\n && legend.mode === 'Interactive' && (legend.type === 'Layers' ? layer.visible :\n legend.type === 'Markers' ? layer.markerSettings[parseFloat(target.id.split('_')[4])].visible :\n (this.maps.getBubbleVisible(this.maps.layersCollection[layerIndex])))) {\n var svgRect = this.maps.svgObject.getBoundingClientRect();\n for (var i = 0; i < this.legendCollection.length; i++) {\n var currentData = this.legendCollection[i];\n var legendElement = querySelector(this.maps.element.id + '_Legend_Index_' + i, this.maps.element.id);\n var legendRect = legendElement.getBoundingClientRect();\n var rect = new Rect(Math.abs(legendRect.left - svgRect.left), Math.abs(legendRect.top - svgRect.top), legendRect.width, legendRect.height);\n fill = legendElement.getAttribute('fill');\n stroke = legend.shapeBorder.color;\n strokeWidth = legend.shapeBorder.width;\n if (!isNullOrUndefined(currentData['data'])) {\n var data = currentData['data'];\n for (var j = 0; j < data.length; j++) {\n if (dataIndex === data[j]['dataIndex'] && layerIndex === data[j]['layerIndex']) {\n this.renderInteractivePointer(legend, fill, stroke, id, strokeWidth, rect);\n break;\n }\n }\n }\n }\n }\n }\n else {\n if (!(isNullOrUndefined(querySelector(id, this.maps.element.id)))) {\n remove(querySelector(id, this.maps.element.id));\n }\n }\n };\n Legend.prototype.renderInteractivePointer = function (legend, fill, stroke, id, strokeWidth, rect) {\n var path;\n var pathOptions;\n var locX;\n var locY;\n var height = 10;\n var width = 10;\n var direction = (legend.orientation === 'None') ? (legend.position === 'Top' || legend.position === 'Bottom')\n ? 'Horizontal' : 'Vertical' : legend.orientation;\n if (direction === 'Horizontal') {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width / 2);\n locY = rect.y;\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY - height) + ' Z ';\n }\n else {\n locX = rect.x + (rect.width / 2);\n locY = rect.y + (rect.height);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY + height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' Z ';\n }\n }\n else {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width);\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX + width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' z ';\n }\n else {\n locX = rect.x;\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX - width) + ' ' + (locY + height) + ' z ';\n }\n }\n pathOptions = new PathOption(id, fill, strokeWidth, stroke, 1, '', path);\n this.maps.svgObject.appendChild(this.maps.renderer.drawPath(pathOptions));\n };\n Legend.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.changeNextPage, this);\n };\n Legend.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.interactiveHandler, this);\n this.maps.on(Browser.touchEndEvent, this.interactiveHandler, this);\n // this.maps.on(click, this.legendClick, this);\n };\n // private legendClick(targetEle: Element): void {\n // if (targetEle.parentElement.id.indexOf(this.maps.element.id + '_Legend_Index_') > -1) {\n // let mapElement: Element;\n // let data: object;\n // let legendIndex: number = parseFloat(targetEle.parentElement.id.substr((this.maps.element.id + '_Legend_Index_').length));\n // let selectedItem: object[] = this.legendCollection[legendIndex]['data'];\n // let childElement: Element;\n // let isVisible: boolean = selectedItem['_isVisible'];\n // if (this.maps.legendSettings.toggleVisibility) {\n // for (let i: number = 0; i < selectedItem.length; i++) {\n // data = this.legendCollection[legendIndex]['data'][i];\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // if (isVisible) {\n // mapElement.setAttribute('opacity', '0');\n // } else {\n // mapElement.setAttribute('opacity', '1');\n // }\n // }\n // selectedItem['_isVisible'] = isVisible ? false : true;\n // } else if (this.maps.legendSettings.legendSelection && this.maps.selectionSettings.enable) {\n // this.selectShapes(targetEle, legendIndex);\n // }\n // }\n // }\n // private selectShapes(targetEle: Element, legendIndex: number): void {\n // let mapElement: Element;\n // let selectedElements: NodeListOf;\n // let selectedLength: number;\n // let childElement: HTMLElement = targetEle.parentElement.childNodes[0] as HTMLElement;\n // let legendSelected: boolean = targetEle.parentElement.id.indexOf('_Legend_Index_') &&\n // childElement.getAttribute('class') ? true : false;\n // if (!this.maps.selectionSettings.enableMultiSelect) {\n // selectedElements = querySelectorAll('selectionMapStyle', document.body);\n // selectedLength = selectedElements.length;\n // for (let i: number = 0; i < selectedLength; i++) {\n // removeClass(selectedElements[selectedElements.length - 1]);\n // }\n // if (!legendSelected) {\n // this.select(legendIndex, targetEle);\n // }\n // } else {\n // if (legendSelected) {\n // for (let data of this.legendCollection[legendIndex]['data']) {\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // removeClass(mapElement);\n // }\n // removeClass(childElement);\n // } else {\n // this.select(legendIndex, targetEle);\n // }\n // }\n // }\n // private select(legendIndex: number, targetEle: Element): void {\n // let mapElement: Element;\n // let childElement: HTMLElement = targetEle.parentElement.childNodes[0] as HTMLElement;\n // for (let i: number = 0; i < this.legendCollection.length; i++) {\n // if (i === legendIndex && !childElement.getAttribute('class')) {\n // for (let data of this.legendCollection[i]['data']) {\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // let eventArgs: IShapeSelectedEventArgs = {\n // cancel: false,\n // name: shapeSelected,\n // fill: this.maps.selectionSettings.fill,\n // opacity: this.maps.selectionSettings.opacity,\n // border: this.maps.selectionSettings.border\n // };\n // if (!document.getElementById('selectionMap')) {\n // document.body.appendChild(createStyle('selectionMap', 'selectionMapStyle', eventArgs));\n // }\n // mapElement.setAttribute('class', 'selectionMapStyle');\n // }\n // childElement.setAttribute('class', 'selectionMapStyle');\n // }\n // }\n // }\n Legend.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.interactiveHandler);\n this.maps.off(Browser.touchEndEvent, this.interactiveHandler);\n // this.maps.off(click, this.legendClick);\n };\n Legend.prototype.getLegendData = function (layerIndex, dataIndex, data, dataPath, layerData, shapePropertyPath, value) {\n var legendData = [];\n if (Object.prototype.toString.call(layerData) === '[object Array]') {\n for (var i = 0; i < layerData.length; i++) {\n var shapeData = layerData[i];\n if (shapeData['properties'][shapePropertyPath] === data[dataPath]) {\n legendData.push({\n layerIndex: layerIndex, shapeIndex: i, dataIndex: dataIndex,\n name: data[dataPath], value: value\n });\n }\n }\n }\n return legendData;\n };\n /**\n * Get module name.\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Legend;\n}());\nexport { Legend };\n","import { itemHighlight } from '../index';\nimport { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getElementsByClassName, getElement, removeClass, createStyle, customizeStyle, getTargetElement } from '../utils/helper';\n/**\n * Highlight module class\n */\n/* tslint:disable:no-string-literal */\nvar Highlight = /** @class */ (function () {\n function Highlight(maps) {\n this.maps = maps;\n this.addEventListener();\n }\n /**\n * To bind events for highlight module\n */\n Highlight.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.maps.on(Browser.touchStartEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for highlight module\n */\n Highlight.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.mouseMove);\n this.maps.off(Browser.touchStartEvent, this.mouseMove);\n };\n /**\n * Public method for highlight module\n */\n Highlight.prototype.addHighlight = function (layerIndex, name, enable) {\n var targetEle = getTargetElement(layerIndex, name, enable, this.maps);\n if (enable) {\n this.mapHighlight(targetEle, null, null);\n }\n else {\n removeClass(targetEle);\n }\n };\n Highlight.prototype.mouseMove = function (e) {\n var targetEle = e.target;\n var layerIndex;\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || (e.type.indexOf('touch') > -1);\n if ((targetEle.id.indexOf('LayerIndex') !== -1 || targetEle.id.indexOf('NavigationIndex') > -1) &&\n targetEle.getAttribute('class') !== 'ShapeselectionMapStyle' && !isTouch) {\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n var shapeData = void 0;\n var data = void 0;\n var shapeIn = void 0;\n var dataIndex = void 0;\n if (targetEle.id.indexOf('ShapeIndex') > -1) {\n shapeIn = parseInt(targetEle.id.split('_ShapeIndex_')[1].split('_')[0], 10);\n shapeData = this.maps.layers[layerIndex].shapeData['features'] ?\n this.maps.layers[layerIndex].shapeData['features'][shapeIn]['properties'] : null;\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = isNullOrUndefined(dataIndex) ? null : this.maps.layers[layerIndex].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].highlightSettings;\n }\n else if (targetEle.id.indexOf('BubbleIndex') > -1) {\n var bubble = parseInt(targetEle.id.split('_BubbleIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].bubbleSettings[bubble].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].bubbleSettings[bubble].highlightSettings;\n }\n else if (targetEle.id.indexOf('MarkerIndex') > -1) {\n var marker = parseInt(targetEle.id.split('_MarkerIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_DataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].markerSettings[marker].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].markerSettings[marker].highlightSettings;\n }\n else {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n shapeData = null;\n data = {\n latitude: this.maps.layers[layerIndex].navigationLineSettings[index].latitude,\n longitude: this.maps.layers[layerIndex].navigationLineSettings[index].longitude\n };\n this.highlightSettings = this.maps.layers[layerIndex].navigationLineSettings[index].highlightSettings;\n }\n if (this.highlightSettings.enable) {\n this.mapHighlight(targetEle, shapeData, data);\n }\n else {\n var element = document.getElementsByClassName('highlightMapStyle')[0];\n if (!isNullOrUndefined(element)) {\n removeClass(element);\n if (element.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(element.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex_1 = parseInt(element.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n element.setAttribute('stroke-width', this.maps.layers[layerIndex_1].navigationLineSettings[index].width.toString());\n element.setAttribute('stroke', this.maps.layers[layerIndex_1].navigationLineSettings[index].color);\n }\n }\n }\n }\n else if (getElementsByClassName('highlightMapStyle').length > 0) {\n targetEle = getElementsByClassName('highlightMapStyle')[0];\n if (targetEle.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n targetEle.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n targetEle.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n removeClass(targetEle);\n }\n };\n Highlight.prototype.mapHighlight = function (targetEle, shapeData, data) {\n var eventArgs = {\n opacity: this.highlightSettings.opacity,\n fill: targetEle.id.indexOf('NavigationIndex') === -1 ? this.highlightSettings.fill : 'none',\n border: { color: this.highlightSettings.border.color, width: this.highlightSettings.border.width },\n name: itemHighlight,\n target: targetEle.id,\n cancel: false,\n shapeData: shapeData,\n data: data\n };\n this.maps.trigger(itemHighlight, eventArgs);\n this.highlightMap(targetEle, eventArgs);\n };\n Highlight.prototype.highlightMap = function (targetEle, eventArgs) {\n var parentElement;\n var children;\n if (targetEle.getAttribute('class') === 'highlightMapStyle') {\n return;\n }\n else {\n if (getElementsByClassName('highlightMapStyle').length > 0) {\n var elem = getElementsByClassName('highlightMapStyle')[0];\n removeClass(elem);\n if (elem.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(elem.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(elem.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n elem.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n elem.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n if (!getElement('highlightMap')) {\n document.body.appendChild(createStyle('highlightMap', 'highlightMapStyle', eventArgs));\n }\n else {\n customizeStyle('highlightMap', 'highlightMapStyle', eventArgs);\n }\n targetEle.setAttribute('stroke-width', eventArgs.border.width.toString());\n targetEle.setAttribute('stroke', eventArgs.border.color);\n targetEle.setAttribute('class', 'highlightMapStyle');\n }\n };\n /**\n * Get module name.\n */\n Highlight.prototype.getModuleName = function () {\n return 'Highlight';\n };\n /**\n * To destroy the highlight.\n * @return {void}\n * @private\n */\n Highlight.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Highlight;\n}());\nexport { Highlight };\n","import { click, itemSelection } from '../index';\nimport { getElementsByClassName, getElement, createStyle, customizeStyle, removeClass, getTargetElement } from '../utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Selection module class\n */\nvar Selection = /** @class */ (function () {\n /* tslint:disable:no-string-literal */\n function Selection(maps) {\n this.maps = maps;\n this.addEventListener();\n }\n /**\n * For binding events to selection module\n */\n Selection.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(click, this.mouseClick, this);\n };\n /**\n * For removing events from selection modue\n */\n Selection.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(click, this.mouseClick);\n };\n Selection.prototype.mouseClick = function (targetEle) {\n if (targetEle.id.indexOf('LayerIndex') > -1 || targetEle.id.indexOf('NavigationIndex') > -1) {\n var layerIndex = void 0;\n var shapeData = void 0;\n var data = void 0;\n var shapeIndex = void 0;\n var dataIndex = void 0;\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n if (targetEle.id.indexOf('ShapeIndex') > -1) {\n shapeIndex = parseInt(targetEle.id.split('_ShapeIndex_')[1].split('_')[0], 10);\n shapeData = this.maps.layers[layerIndex].shapeData['features'] ?\n this.maps.layers[layerIndex].shapeData['features'][shapeIndex]['properties'] : null;\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = isNullOrUndefined(dataIndex) ? null : this.maps.layers[layerIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].selectionSettings;\n this.selectionType = 'Shape';\n }\n else if (targetEle.id.indexOf('BubbleIndex') > -1) {\n var bubbleIndex = parseInt(targetEle.id.split('_BubbleIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].bubbleSettings[bubbleIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].bubbleSettings[bubbleIndex].selectionSettings;\n this.selectionType = 'Bubble';\n }\n else if (targetEle.id.indexOf('MarkerIndex') > -1) {\n var markerIndex = parseInt(targetEle.id.split('_MarkerIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_DataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].markerSettings[markerIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].markerSettings[markerIndex].selectionSettings;\n this.selectionType = 'Marker';\n }\n else {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n shapeData = null;\n data = {\n latitude: this.maps.layers[layerIndex].navigationLineSettings[index].latitude,\n longitude: this.maps.layers[layerIndex].navigationLineSettings[index].longitude\n };\n this.selectionsettings = this.maps.layers[layerIndex].navigationLineSettings[index].selectionSettings;\n this.selectionType = 'navigationline';\n }\n if (this.selectionsettings.enable) {\n this.selectMap(targetEle, shapeData, data);\n }\n }\n };\n /**\n * Public method for selection\n */\n Selection.prototype.addSelection = function (layerIndex, name, enable) {\n var targetEle = getTargetElement(layerIndex, name, enable, this.maps);\n if (enable) {\n this.selectMap(targetEle, null, null);\n }\n else {\n removeClass(targetEle);\n }\n };\n /**\n * Method for selection\n */\n Selection.prototype.selectMap = function (targetEle, shapeData, data) {\n var parentElement;\n var children;\n var selectionsettings = this.selectionsettings;\n var eventArgs = {\n opacity: this.selectionsettings.opacity,\n fill: this.selectionType !== 'navigationline' ? this.selectionsettings.fill : 'none',\n border: { color: this.selectionsettings.border.color, width: this.selectionsettings.border.width },\n name: itemSelection,\n target: targetEle.id,\n cancel: false,\n shapeData: shapeData,\n data: data\n };\n this.maps.trigger(itemSelection, eventArgs);\n // if (this.maps.legendSettings.visible && !this.maps.legendSettings.toggleVisibility && this.maps.legendSettings.legendSelection) {\n // this.removeLegendSelection(this.maps.legendModule.legendCollection, targetEle);\n // }\n if (targetEle.getAttribute('class') === this.selectionType + 'selectionMapStyle') {\n removeClass(targetEle);\n if (targetEle.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n targetEle.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n targetEle.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n else {\n if (!this.selectionsettings.enableMultiSelect && getElementsByClassName(this.selectionType + 'selectionMapStyle').length > 0) {\n var ele = getElementsByClassName(this.selectionType + 'selectionMapStyle')[0];\n removeClass(ele);\n if (ele.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n ele.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n ele.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n if (!getElement(this.selectionType + 'selectionMap')) {\n document.body.appendChild(createStyle(this.selectionType + 'selectionMap', this.selectionType + 'selectionMapStyle', eventArgs));\n }\n else {\n customizeStyle(this.selectionType + 'selectionMap', this.selectionType + 'selectionMapStyle', eventArgs);\n }\n targetEle.setAttribute('stroke-width', eventArgs.border.width.toString());\n targetEle.setAttribute('stroke', eventArgs.border.color);\n targetEle.setAttribute('class', this.selectionType + 'selectionMapStyle');\n }\n };\n /**\n * Remove legend selection\n */\n // private removeLegendSelection(legendCollection: Object[], targetEle: Element): void {\n // let shape: Element;\n // if (!this.selectionsettings.enableMultiSelect) {\n // for (let i: number = 0; i < legendCollection.length; i++) {\n // for (let data of legendCollection[i]['data']) {\n // shape = getElement(this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex']);\n // removeClass(shape);\n // }\n // }\n // }\n // }\n /**\n * Get module name.\n */\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Selection;\n}());\nexport { Selection };\n","import { tooltipRender } from '../../index';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { setStyleAttribute, createElement, Browser, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, MapLocation, getElement, checkShapeDataFields, Internalize } from '../utils/helper';\n/**\n * Tooltip module class\n */\nvar MapsTooltip = /** @class */ (function () {\n function MapsTooltip(maps) {\n this.isTouch = false;\n this.touchDelay = 0;\n this.maps = maps;\n this.element = maps.element;\n this.addEventListener();\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n position: 'TopCenter',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1,\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * To bind events for tooltip module\n */\n MapsTooltip.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.maps.on(Browser.touchEndEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for tooltip module\n */\n MapsTooltip.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.mouseMove);\n this.maps.off(Browser.touchEndEvent, this.mouseMove);\n };\n MapsTooltip.prototype.mouseMove = function (e) {\n if (this.isTouch && new Date().getTime() < this.touchDelay) {\n return;\n }\n this.setMouseXY(e);\n this.renderTooltip(e);\n };\n MapsTooltip.prototype.setMouseXY = function (e) {\n var pageX;\n var pageY;\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.mouse = new MapLocation(pageX, pageY);\n this.touchDelay = new Date().getTime() + 100;\n };\n /**\n * Method to render the tooltip for maps.\n */\n MapsTooltip.prototype.renderTooltip = function (e) {\n if (this.previousId === e.target.id) {\n this.ejTooltip.refresh(this.appendTargetElement(this.mouse, 0));\n }\n else if (this.manipulateTarget(e.target)) {\n this.shapeColor = e.target.getAttribute('fill');\n if (document.querySelector('.e-tip-content') && !this.setTooltipContent(this.options) && !this.isTouch) {\n var args = {\n type: null, cancel: false, element: this.customTooltip, event: e,\n name: 'custom', target: this.tooltipEle\n };\n this.tooltipCustomization(args);\n return;\n }\n else {\n this.closeTooltip(1);\n }\n this.ejTooltip.open(this.appendTargetElement(this.mouse));\n }\n else {\n this.closeTooltip(1);\n }\n };\n MapsTooltip.prototype.getTargetElement = function (element) {\n var hoverElements = ['_ShapeIndex_', '_MarkerIndex_', '_BubbleIndex_'];\n if (!isNullOrUndefined(element.id) && element.id.length > 0 && element.id !== this.maps.element.id) {\n for (var i = 0; i < hoverElements.length; i++) {\n if (element.id.indexOf(hoverElements[i]) > -1) {\n this.tooltipEle = element;\n break;\n }\n else if (i === hoverElements.length - 1) {\n this.getTargetElement(element.parentNode);\n }\n }\n }\n else if (element.id !== this.maps.element.id) {\n this.getTargetElement(element.parentNode);\n }\n };\n /* tslint:disable:no-string-literal */\n MapsTooltip.prototype.closeTooltip = function (delay, duration, effect) {\n if (duration === void 0) { duration = 0; }\n if (effect === void 0) { effect = 'None'; }\n this.ejTooltip.closeDelay = duration;\n this.ejTooltip.close({ delay: delay, duration: duration, effect: effect });\n this.previousId = null;\n };\n /* tslint:disable:no-string-literal */\n MapsTooltip.prototype.manipulateTarget = function (currentTarget) {\n this.tooltipEle = null;\n this.getTargetElement(currentTarget);\n if (isNullOrUndefined(this.tooltipEle)) {\n return false;\n }\n var target = this.tooltipEle.id;\n this.previousId = target;\n var index = parseFloat(target.split('_')[2]);\n var layer = this.maps.layersCollection[index];\n if (target.indexOf('_ShapeIndex_') > -1) {\n this.options = layer.tooltipSettings;\n var shape = parseInt(target.split('_')[4], 10);\n if (isNullOrUndefined(layer.shapeData['features'])) {\n return false;\n }\n var value = layer.shapeData['features'][shape]['properties'];\n index = checkShapeDataFields(layer.dataSource, value, layer.shapeDataPath, layer.shapePropertyPath);\n if (this.options.visible && ((!isNullOrUndefined(index) && !isNaN(index)) || (!isNullOrUndefined(value)))) {\n this.currentData = layer.dataSource[index] || value;\n return true;\n }\n }\n else if (target.indexOf('_MarkerIndex_') > -1) {\n var markerIndex = parseInt(target.split('_')[4], 10);\n var dataIndex = parseInt(target.split('_')[6], 10);\n var marker = layer.markerSettings[markerIndex];\n this.options = marker.tooltipSettings;\n if (!isNaN(markerIndex) && this.options.visible) {\n this.currentData = marker.dataSource[dataIndex];\n return true;\n }\n }\n else if (target.indexOf('_BubbleIndex_') > -1) {\n var bubbleIndex = parseInt(target.split('_')[4], 10);\n var dataIndex = parseInt(target.split('_')[6], 10);\n this.options = layer.bubbleSettings[bubbleIndex].tooltipSettings;\n if (!isNaN(bubbleIndex) && this.options.visible) {\n this.currentData = layer.bubbleSettings[bubbleIndex].dataSource[dataIndex];\n return true;\n }\n }\n return false;\n };\n /**\n * Method to append the target element for tooltip\n */\n MapsTooltip.prototype.appendTargetElement = function (location, padding) {\n if (padding === void 0) { padding = 10; }\n var element = getElement(this.element.id + '_MapsTooltip');\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n location.x -= svgRect.left;\n location.y -= (padding + svgRect.top);\n this.position = location;\n if (element) {\n element.style.left = location.x + 'px';\n element.style.top = location.y + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_MapsTooltip',\n styles: 'position: absolute;left:' + location.x + 'px;top:' + location.y +\n 'px;width:2px;height:2px;background:transparent;pointer-events:none;'\n });\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n MapsTooltip.prototype.formatter = function (format, data) {\n if (isNullOrUndefined(format)) {\n return null;\n }\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n format = format.split('${' + key + '}').join(data[key]);\n }\n return format;\n };\n /**\n * Method to perform the tooltip for maps.\n */\n MapsTooltip.prototype.onBeforeRender = function (args) {\n args.cancel = this.setTooltipContent(this.options);\n this.ejTooltip.dataBind();\n };\n /**\n * To get content for the current toolitp\n */\n MapsTooltip.prototype.setTooltipContent = function (options) {\n if (options === void 0) { options = this.options; }\n var localData = extend({}, this.currentData, null, true);\n if (this.maps.format && !isNaN(parseFloat(localData[options.valuePath]))) {\n localData[options.valuePath] = Internalize(this.maps, parseFloat(localData[options.valuePath]));\n }\n var content = this.formatter(options.format, localData) || localData[options.valuePath];\n content = options.template ? this.joinElements(getTemplateFunction(options.template)(localData)) : content;\n this.textStyle = extend(options.textStyle, options.textStyle, null, true);\n this.textStyle.color = this.textStyle.color || this.shapeColor;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: options.border,\n textStyle: this.textStyle,\n fill: options.fill,\n };\n this.maps.trigger(tooltipRender, argsData);\n this.border = argsData.border;\n this.shapeColor = argsData.fill;\n this.ejTooltip.content = argsData.content;\n return argsData.cancel || (isNullOrUndefined(argsData.content) || argsData.content === '');\n };\n MapsTooltip.prototype.joinElements = function (elements) {\n var elementString = '';\n [].forEach.call(elements, function (ele) {\n elementString += ele.outerHTML;\n });\n return elementString;\n };\n /**\n * Method to customize the tooltip elements for maps.\n */\n MapsTooltip.prototype.tooltipCustomization = function (args, options) {\n if (options === void 0) { options = this.options; }\n this.customTooltip = args.element;\n if (options.template) {\n setStyleAttribute(args.element, {\n 'backgroundColor': 'transparent', 'borderColor': 'transparent',\n 'borderWidth': '1px', 'pointer-events': 'none'\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': '0px', 'height': '0px'\n });\n if (this.isTouch) {\n this.closeTooltip(1, 1500, 'FadeOut');\n }\n return null;\n }\n var font = this.textStyle;\n var borderColor = this.border.color;\n var border = this.border.width;\n var pointerSize = 8;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.shapeColor, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px', 'pointer-events': 'none', 'borderRadius': '5px', 'padding-left': '5px',\n 'padding-right': '5px', 'padding-top': '3px', 'padding-bottom': '3px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'fontStyle': font.fontStyle, 'padding-left': '5px',\n 'padding-right': '5px', 'padding-top': '3px', 'padding-bottom': '3px'\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n color: this.shapeColor, top: '0px'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n color: this.shapeColor\n });\n }\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': '1ms'\n });\n if (this.isTouch) {\n this.closeTooltip(1000, 1500, 'FadeOut');\n }\n };\n /**\n * Get module name.\n */\n MapsTooltip.prototype.getModuleName = function () {\n return 'MapsTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n MapsTooltip.prototype.destroy = function (maps) {\n this.removeEventListener();\n this.ejTooltip.destroy();\n };\n return MapsTooltip;\n}());\nexport { MapsTooltip };\n","import { doubleClick } from '../../index';\nimport { Point, getElementByID, PathOption, Rect, convertGeoToPoint, CircleOption } from '../utils/helper';\nimport { RectOption, createTooltip, calculateScale, getTouchCenter, getTouches, targetTouches } from '../utils/helper';\nimport { isNullOrUndefined, EventHandler, Browser, remove, createElement } from '@syncfusion/ej2-base';\nimport { changeBorderWidth } from '../index';\n/**\n * Zoom module class\n */\n/* tslint:disable:max-line-length */\nvar Zoom = /** @class */ (function () {\n function Zoom(maps) {\n this.isPanning = false;\n this.mouseEnter = false;\n this.isTouch = false;\n this.rectZoomingStart = false;\n this.pinchRect = new Rect(0, 0, 0, 0);\n this.browserName = Browser.info.name;\n this.isPointer = Browser.isPointer;\n this.handled = false;\n this.pinchFactor = 1;\n this.startTouches = [];\n this.maps = maps;\n this.wheelEvent = this.browserName === 'mozilla' ? (this.isPointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n this.cancelEvent = this.isPointer ? 'pointerleave' : 'mouseleave';\n this.selectionColor = '#ff4081';\n this.fillColor = '#737373';\n this.addEventListener();\n this.groupElements = [];\n }\n /* tslint:disable:no-string-literal */\n Zoom.prototype.performZooming = function (position, newZoomFactor, type) {\n var map = this.maps;\n var zoomLevel = map.zoomLevel;\n var zoomFactor = map.zoomSettings.zoomFactor;\n var prevScale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? newZoomFactor >= minZoom && newZoomFactor <= maxZoom : newZoomFactor >= minZoom)) {\n var availSize = map.mapAreaRect;\n var minBounds = map.baseMapRectBounds['min'];\n var maxBounds = map.baseMapRectBounds['max'];\n var mapTotalWidth = Math.abs(minBounds['x'] - maxBounds['x']);\n var mapTotalHeight = Math.abs(minBounds['y'] - maxBounds['y']);\n var point = map.translatePoint;\n var translatePointX = point.x - (((availSize.width / prevScale) - (availSize.width / newZoomFactor)) / (availSize.width / position.x));\n var translatePointY = point.y - (((availSize.height / prevScale) - (availSize.height / newZoomFactor)) / (availSize.height / position.y));\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * newZoomFactor;\n translatePointX = (currentHeight < map.mapAreaRect.height) ? (availSize.x + ((-(minBounds['x'])) + ((availSize.width / 2) - (mapTotalWidth / 2)))) : translatePointX;\n translatePointY = (currentHeight < map.mapAreaRect.height) ? (availSize.y + ((-(minBounds['y'])) + ((availSize.height / 2) - (mapTotalHeight / 2)))) : translatePointY;\n this.applyTransform(getElementByID(this.maps.element.id + '_Layer_Collections'), (newZoomFactor), translatePointX, translatePointY);\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.zoomLevel = (zoomLevel + zoomFactor);\n map.scale = newZoomFactor;\n }\n else if ((map.isTileMap) && (newZoomFactor >= minZoom && newZoomFactor <= maxZoom)) {\n this.getTileTranslatePosition(zoomLevel, newZoomFactor, position);\n map.zoomLevel = newZoomFactor;\n map.mapLayerPanel.generateTiles(newZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, newZoomFactor))) /\n (Math.pow(2, newZoomFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, newZoomFactor))) /\n (Math.pow(2, newZoomFactor));\n map.scale = (Math.pow(2, newZoomFactor));\n }\n map.trigger(doubleClick, this);\n };\n Zoom.prototype.getTileTranslatePosition = function (prevLevel, currentLevel, position) {\n var map = this.maps;\n var prevSize = Math.pow(2, prevLevel) * 256;\n var totalSize = Math.pow(2, currentLevel) * 256;\n var x = ((position.x - map.tileTranslatePoint.x) / prevSize) * 100;\n var y = ((position.y - map.tileTranslatePoint.y) / prevSize) * 100;\n map.tileTranslatePoint.x = position.x - ((x * totalSize) / 100);\n map.tileTranslatePoint.y = position.y - ((y * totalSize) / 100);\n };\n Zoom.prototype.performRectZooming = function () {\n var map = this.maps;\n var size = map.availableSize;\n var zoomLevel = map.zoomLevel;\n var zoomRect = this.zoomingRect;\n if (zoomRect.height > 0 && zoomRect.width > 0) {\n var zoomFactor = map.zoomSettings.zoomFactor;\n var x = this.zoomingRect.x + (this.zoomingRect.width / 2);\n var y = this.zoomingRect.y + (this.zoomingRect.height / 2);\n var zoomCalculationFactor = void 0;\n if (!map.isTileMap) {\n var scale = map.scale;\n zoomCalculationFactor = scale + Math.round((((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2));\n var translatePoint = map.translatePoint;\n var translatePointX = translatePoint.x - (((size.width / scale) - (size.width / zoomCalculationFactor)) / (size.width / x));\n var translatePointY = translatePoint.y - (((size.height / scale) - (size.height / zoomCalculationFactor)) / (size.height / y));\n this.applyTransform(getElementByID(this.maps.element.id + '_Layer_Collections'), (zoomCalculationFactor), translatePointX, translatePointY);\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.zoomLevel = (zoomLevel + zoomCalculationFactor);\n map.scale = zoomCalculationFactor;\n }\n else {\n zoomCalculationFactor = zoomLevel + (Math.round(zoomLevel + (((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2)));\n this.getTileTranslatePosition(zoomLevel, zoomCalculationFactor, { x: x, y: y });\n map.zoomLevel = zoomCalculationFactor;\n map.mapLayerPanel.generateTiles(zoomCalculationFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, zoomCalculationFactor))) /\n (Math.pow(2, zoomCalculationFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, zoomCalculationFactor))) /\n (Math.pow(2, zoomCalculationFactor));\n map.scale = (Math.pow(2, zoomCalculationFactor));\n }\n this.zoomingRect = null;\n }\n };\n Zoom.prototype.setInteraction = function (newInteraction) {\n this.lastScale = 1;\n this.interaction = newInteraction;\n };\n Zoom.prototype.updateInteraction = function () {\n if (this.fingers === 2) {\n this.setInteraction('zoom');\n }\n else {\n this.setInteraction(null);\n }\n };\n Zoom.prototype.performPinchZooming = function (e) {\n var touches = null;\n var map = this.maps;\n var availSize = map.mapAreaRect;\n var zoomLevel = map.zoomLevel;\n var scale = calculateScale(this.touchStartList, this.touchMoveList);\n var touchCenter = getTouchCenter(getTouches(this.touchMoveList, this.maps));\n var newScale = scale / this.lastScale;\n this.lastScale = scale;\n this.pinchFactor *= newScale;\n this.pinchFactor = Math.min(this.maps.zoomSettings.maxZoom, Math.max(this.pinchFactor, this.maps.zoomSettings.minZoom));\n var zoomCalculationFactor = this.pinchFactor;\n var translatePointX;\n var translatePointY;\n if (!map.isTileMap) {\n var minBounds = map.baseMapRectBounds['min'];\n var maxBounds = map.baseMapRectBounds['max'];\n var mapTotalWidth = Math.abs(minBounds['x'] - maxBounds['x']);\n var mapTotalHeight = Math.abs(minBounds['y'] - maxBounds['y']);\n var translatePoint = map.translatePoint;\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * zoomCalculationFactor;\n var translatePointX_1 = translatePoint.x - (((availSize.width / map.scale) - (availSize.width / zoomCalculationFactor)) / (availSize.width / touchCenter.x));\n var translatePointY_1 = translatePoint.y - (((availSize.height / map.scale) - (availSize.height / zoomCalculationFactor)) / (availSize.height / touchCenter.y));\n // translatePointX = (currentHeight < map.mapAreaRect.height) ? (availSize.x + ((-(minBounds['x'])) + ((availSize.width / 2) - (mapTotalWidth / 2)))) : translatePointX;\n //translatePointY = (currentHeight < map.mapAreaRect.height) ? (availSize.y + ((-(minBounds['y'])) + ((availSize.height / 2) - (mapTotalHeight / 2)))) : translatePointY;\n this.applyTransform(getElementByID(this.maps.element.id + '_Layer_Collections'), zoomCalculationFactor, translatePointX_1, translatePointY_1);\n map.translatePoint = new Point(translatePointX_1, translatePointY_1);\n map.zoomLevel = (zoomLevel + zoomCalculationFactor);\n map.scale = zoomCalculationFactor;\n }\n else {\n var newTileFactor = zoomCalculationFactor;\n this.getTileTranslatePosition(zoomLevel, newTileFactor, { x: touchCenter.x, y: touchCenter.y });\n map.zoomLevel = newTileFactor;\n map.mapLayerPanel.generateTiles(newTileFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, newTileFactor))) /\n (Math.pow(2, newTileFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, newTileFactor))) /\n (Math.pow(2, newTileFactor));\n map.scale = (Math.pow(2, newTileFactor));\n }\n };\n Zoom.prototype.drawZoomRectangle = function () {\n var map = this.maps;\n var down = this.mouseDownPoints;\n var move = this.mouseMovePoints;\n var x;\n var y;\n var width;\n var height;\n var border = { width: 1, color: '#009900' };\n width = Math.abs(move.x - down.x);\n height = Math.abs(move.y - down.y);\n x = ((move.x > down.x) ? down.x : down.x - width);\n y = ((move.y > down.y) ? down.y : down.y - height);\n var elementRect = getElementByID(map.element.id).getBoundingClientRect();\n if ((x > map.mapAreaRect.x && x < (map.mapAreaRect.x + map.mapAreaRect.width)) &&\n (y > map.mapAreaRect.y) && (y < map.mapAreaRect.y + map.mapAreaRect.height)) {\n this.zoomingRect = new Rect(x, y, width, height);\n var rectSVGObject = map.renderer.createSvg({\n id: map.element.id + '_Selection_Rect_Zooming',\n width: map.availableSize.width,\n height: map.availableSize.height,\n });\n var rectOption = new RectOption(map.element.id + '_ZoomRect', '#d3d3d3', border, 0.5, this.zoomingRect, 0, 0, '', '3');\n rectSVGObject.appendChild(map.renderer.drawRectangle(rectOption));\n getElementByID(map.element.id + '_Secondary_Element').appendChild(rectSVGObject);\n }\n };\n Zoom.prototype.applyTransform = function (layerCollection, scale, x, y) {\n var layerIndex;\n var collection = [];\n for (var i = 0; i < layerCollection.childElementCount; i++) {\n var layerElement = layerCollection.childNodes[i];\n if (layerElement.tagName === 'g') {\n collection.push(i);\n var index = parseFloat(layerElement.id.split('_')[2]);\n this.currentLayer = this.maps.layersCollection[index];\n var factor = this.maps.mapLayerPanel.calculateFactor(this.currentLayer);\n for (var j = 0; j < layerElement.childElementCount; j++) {\n var currentEle = layerElement.childNodes[j];\n if (!(currentEle.id.indexOf('_Markers_Group') > -1) && (!(currentEle.id.indexOf('_bubble_Group') > -1))\n && (!(currentEle.id.indexOf('_dataLableIndex_Group') > -1))) {\n changeBorderWidth(currentEle, index, scale, this.maps);\n currentEle.setAttribute('transform', 'scale(' + (scale) + ') translate( ' + x + ' ' + y + ' )');\n }\n else if (currentEle.id.indexOf('_Markers_Group') > -1) {\n for (var k = 0; k < currentEle.childElementCount; k++) {\n this.markerTranslate(currentEle.childNodes[k], factor, x, y, scale, 'Marker');\n }\n }\n else if (currentEle.id.indexOf('_bubble_Group') > -1) {\n var childElement = void 0;\n for (var k = 0; k < currentEle.childElementCount; k++) {\n childElement = currentEle.childNodes[k];\n var bubbleTransform = childElement.getAttribute('transform');\n layerIndex = parseFloat(childElement.id.split('_')[2]);\n var bubleIndex = parseFloat(childElement.id.split('_')[4]);\n var dataIndex = parseFloat(childElement.id.split('_')[6]);\n for (var l = 0; l < this.maps.bubbleModule.bubbleCollection.length; l++) {\n var bubbleCollection = this.maps.bubbleModule.bubbleCollection[l];\n if (bubbleCollection['LayerIndex'] === layerIndex && bubbleCollection['BubbleIndex'] === bubleIndex &&\n bubbleCollection['DataIndex'] === dataIndex) {\n var centerX = bubbleCollection['center']['x'];\n var centerY = bubbleCollection['center']['y'];\n var currentX = ((centerX + x) * scale);\n var currentY = ((centerY + y) * scale);\n childElement.setAttribute('transform', 'translate ( ' + currentX + ' ' + currentY + ' ) ');\n break;\n }\n }\n }\n }\n else if (currentEle.id.indexOf('_dataLableIndex_Group') > -1) {\n for (var k = 0; k < currentEle.childElementCount; k++) {\n this.dataLabelTranslate(currentEle.childNodes[k], factor, x, y, scale, 'DataLabel');\n }\n }\n }\n }\n }\n for (var i = 0; i < collection.length; i++) {\n this.currentLayer = this.maps.layersCollection[i];\n var factor = this.maps.mapLayerPanel.calculateFactor(this.currentLayer);\n var markerTemplateElement = getElementByID(this.maps.element.id + '_LayerIndex_' +\n i + '_Markers_Template_Group');\n var datalabelTemplateElemement = getElementByID(this.maps.element.id + '_LayerIndex_'\n + i + '_Label_Template_Group');\n if ((!isNullOrUndefined(markerTemplateElement)) && markerTemplateElement.childElementCount > 0) {\n for (var k = 0; k < markerTemplateElement.childElementCount; k++) {\n this.markerTranslate(markerTemplateElement.childNodes[k], factor, x, y, scale, 'Template');\n }\n }\n if ((!isNullOrUndefined(datalabelTemplateElemement)) && datalabelTemplateElemement.childElementCount > 0) {\n for (var k = 0; k < datalabelTemplateElemement.childElementCount; k++) {\n this.dataLabelTranslate(datalabelTemplateElemement.childNodes[k], factor, x, y, scale, 'Template');\n }\n }\n }\n };\n Zoom.prototype.dataLabelTranslate = function (element, factor, x, y, scale, type) {\n var labelCollection = this.maps.dataLabelModule.dataLabelCollections;\n var layerIndex = parseFloat(element.id.split('_')[2]);\n var shapeIndex = parseFloat(element.id.split('_')[4]);\n var labelIndex = parseFloat(element.id.split('_')[6]);\n for (var l = 0; l < labelCollection.length; l++) {\n var label = labelCollection[l];\n if (label['layerIndex'] === layerIndex && label['shapeIndex'] === shapeIndex\n && label['labelIndex'] === labelIndex) {\n var labelX = label['location']['x'];\n var labelY = label['location']['y'];\n if (type === 'Template') {\n labelX = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - labelX)) * scale);\n labelY = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - labelY)) * scale);\n var templateOffset = element.getBoundingClientRect();\n var layerOffset = getElementByID(this.maps.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n element.style.left = ((labelX) + (layerOffset.left - elementOffset.left) -\n (templateOffset.width / 2)) + 'px';\n element.style.top = ((labelY) + (layerOffset.top - elementOffset.top)\n - (templateOffset.height / 2)) + 'px';\n }\n else {\n labelX = ((labelX + x) * scale);\n labelY = ((labelY + y) * scale);\n element.setAttribute('transform', 'translate ( ' + labelX + ' ' + labelY + ' ) ');\n }\n }\n }\n };\n Zoom.prototype.markerTranslate = function (element, factor, x, y, scale, type) {\n var layerIndex = parseInt(element.id.split('_')[2], 10);\n var markerIndex = parseInt(element.id.split('_')[4], 10);\n var dataIndex = parseInt(element.id.split('_')[6], 10);\n var layer = this.maps.layersCollection[layerIndex];\n var marker = layer.markerSettings[markerIndex];\n var data = marker.dataSource[dataIndex];\n var lng = data['longitude'];\n var lat = data['latitude'];\n var location = convertGeoToPoint(lat, lng, factor, layer, this.maps);\n if (type === 'Template') {\n location.x = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location.x)) * scale);\n location.y = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location.y)) * scale);\n var templateOffset = element.getBoundingClientRect();\n var layerOffset = getElementByID(this.maps.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n element.style.left = (((location.x) + (layerOffset.left - elementOffset.left) -\n (templateOffset.width / 2)) + marker.offset.x) + 'px';\n element.style.top = (((location.y) + (layerOffset.top - elementOffset.top)\n - (templateOffset.height / 2)) + marker.offset.y) + 'px';\n }\n else {\n location.x = (((location.x + x) * scale) + marker.offset.x);\n location.y = (((location.y + y) * scale) + marker.offset.y);\n element.setAttribute('transform', 'translate( ' + location.x + ' ' + location.y + ' )');\n }\n };\n Zoom.prototype.panning = function () {\n var map = this.maps;\n var areaRect = map.mapAreaRect;\n var down = this.mouseDownPoints;\n var move = this.mouseMovePoints;\n var scale = map.scale;\n var translatePoint = map.translatePoint;\n var x;\n var y;\n var transY;\n var transX;\n if (!map.isTileMap) {\n var x_1 = translatePoint.x - (down.x - move.x) / scale;\n var y_1 = translatePoint.y - (down.y - move.y) / scale;\n var layerRect = getElementByID(map.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementRect = getElementByID(map.element.id + '_svg').getBoundingClientRect();\n var panningXDirection = (((down.x - move.x) < 0 ? layerRect.left <= (elementRect.left + map.mapAreaRect.x) :\n ((layerRect.left + layerRect.width) >= (elementRect.left + elementRect.width) + map.mapAreaRect.x + map.margin.left)));\n var panningYDirection = (((down.y - move.y) < 0 ? layerRect.top <= (elementRect.top + map.mapAreaRect.y) :\n ((layerRect.top + layerRect.height) >= (elementRect.top + elementRect.height) + map.mapAreaRect.y + map.margin.top)));\n if (panningXDirection && panningYDirection) {\n this.applyTransform(getElementByID(this.maps.element.id + '_Layer_Collections'), scale, x_1, y_1);\n map.translatePoint = new Point(x_1, y_1);\n }\n }\n else {\n x = map.tileTranslatePoint.x - (down.x - move.x);\n y = map.tileTranslatePoint.y - (down.y - move.y);\n map.tileTranslatePoint.x = x;\n map.tileTranslatePoint.y = y;\n map.mapLayerPanel.generateTiles(map.zoomLevel, map.tileTranslatePoint);\n }\n this.mouseDownPoints = this.mouseMovePoints;\n };\n Zoom.prototype.toolBarZooming = function (zoomFactor, type) {\n var map = this.maps;\n var zoomLevel = map.zoomLevel;\n var scale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n var size = map.mapAreaRect;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? zoomFactor >= minZoom && zoomFactor <= maxZoom : zoomFactor >= minZoom)) {\n var translatePoint = map.translatePoint;\n var min = map.baseMapRectBounds['min'];\n var max = map.baseMapRectBounds['max'];\n var mapWidth = Math.abs(max['x'] - min['x']);\n var mapHeight = Math.abs(min['y'] - max['y']);\n var translatePointX = translatePoint.x - (((size.width / scale) - (size.width / zoomFactor)) / 2);\n var translatePointY = translatePoint.y - (((size.height / scale) - (size.height / zoomFactor)) / 2);\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * zoomFactor;\n translatePointX = (currentHeight < map.mapAreaRect.height) ? (size.x + ((-(min['x'])) + ((size.width / 2) - (mapWidth / 2))))\n : translatePointX;\n translatePointY = (currentHeight < map.mapAreaRect.height) ? (size.y + ((-(min['y'])) + ((size.height / 2) - (mapHeight / 2))))\n : translatePointY;\n this.applyTransform(getElementByID(this.maps.element.id + '_Layer_Collections'), zoomFactor, translatePointX, translatePointY);\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = map.zoomLevel = zoomFactor;\n }\n else if ((map.isTileMap) && (zoomFactor >= minZoom && zoomFactor <= maxZoom)) {\n var tileZoomFactor = zoomFactor;\n var position = { x: map.availableSize.width / 2, y: map.availableSize.height / 2 };\n this.getTileTranslatePosition(zoomLevel, tileZoomFactor, position);\n map.zoomLevel = tileZoomFactor;\n map.mapLayerPanel.generateTiles(tileZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, tileZoomFactor))) /\n (Math.pow(2, tileZoomFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, tileZoomFactor))) /\n (Math.pow(2, tileZoomFactor));\n map.scale = (Math.pow(2, tileZoomFactor));\n }\n };\n /* tslint:disable:max-func-body-length */\n Zoom.prototype.createZoomingToolbars = function () {\n var map = this.maps;\n this.toolBarGroup = map.renderer.createGroup({\n id: map.element.id + '_Zooming_KitCollection',\n opacity: 0.3,\n });\n var kitHeight = 16;\n var kitWidth = 16;\n var xSpacing = 15;\n var ySpacing = 15;\n var padding = 20;\n var orientation = map.zoomSettings.toolBarOrientation;\n var toolbarsCollection = map.zoomSettings.toolbars;\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n var toolBarLength = map.zoomSettings.toolbars.length;\n var toolWidth = (map.zoomSettings.toolBarOrientation === 'Horizontal') ? (toolBarLength * kitWidth) + (toolBarLength * padding) : (kitWidth * 2);\n var toolHeight = (map.zoomSettings.toolBarOrientation === 'Horizontal') ? (kitHeight * 2) : (toolBarLength * kitHeight) + (toolBarLength * padding);\n this.toolBarGroup.appendChild(map.renderer.drawRectangle(new RectOption(map.element.id + '_Zooming_Rect', 'transparent', { color: 'transparent', width: 1 }, 1, new Rect(0, 0, toolWidth, toolHeight), 0, 0)));\n var defElement = map.renderer.createDefs();\n defElement.innerHTML = shadowElement;\n this.toolBarGroup.appendChild(defElement);\n var outerElement = map.renderer.drawRectangle(new RectOption(map.element.id + '_Zooming_Rect', 'transparent', { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, toolWidth, toolHeight), 0, 0));\n outerElement.setAttribute('filter', 'url(#chart_shadow)');\n this.toolBarGroup.appendChild(outerElement);\n var performFunction;\n for (var i = 0; i < toolbarsCollection.length; i++) {\n var toolbar_1 = toolbarsCollection[i];\n var pathOptions = void 0;\n var polyOptions = void 0;\n this.currentToolbarEle = map.renderer.createGroup({\n id: map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Group',\n transform: 'translate( ' + xSpacing + ' ' + ySpacing + ' ) '\n });\n this.currentToolbarEle.setAttribute('class', 'e-maps-toolbar');\n var fillColor = '';\n var direction = '';\n var polygonDirection = '';\n switch (toolbar_1.toLowerCase()) {\n case 'zoom':\n direction = 'M0.001,14.629L1.372,16l4.571-4.571v-0.685l0.228-0.274c1.051,0.868,2.423,1.417,3.885,1.417c3.291,0,';\n direction += '5.943-2.651,5.943-5.943S13.395,0,10.103,0S4.16,2.651,4.16,5.943c0,1.508,0.503,2.834,1.417,3.885l-0.274,0.228H4.571';\n direction = direction + 'L0.001,14.629L0.001,14.629z M5.943,5.943c0-2.285,1.828-4.114,4.114-4.114s4.114,1.828,4.114,';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, 1, this.fillColor, 1, null, direction + '4.114s-1.828,4.114-4.114,4.114S5.943,8.229,5.943,5.943z')));\n this.zoomElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'zoomin':\n direction = 'M 8, 0 L 8, 16 M 0, 8 L 16, 8';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Path', this.fillColor, 3, this.fillColor, 1, null, direction)));\n this.zoomInElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'zoomout':\n direction = 'M 0, 8 L 16, 8';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, 3, this.fillColor, 1, null, direction)));\n this.zoomOutElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'pan':\n direction = 'M5,3h2.3L7.275,5.875h1.4L8.65,3H11L8,0L5,3z M3,11V8.7l2.875,0.025v-1.4L3,7.35V5L0,8L3,';\n direction += '11z M11,13H8.7l0.025-2.875h-1.4L7.35,13H5l3,3L11,13z M13,5v2.3l-2.875-0.025v1.4L13,8.65V11l3-3L13,5z';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.selectionColor, 1, this.selectionColor, 1, null, direction)));\n this.panColor = this.selectionColor;\n this.panElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'reset':\n direction = 'M12.364,8h-2.182l2.909,3.25L16,8h-2.182c0-3.575-2.618-6.5-5.818-6.5c-1.128,0-2.218,0.366-3.091,';\n direction += '1.016l1.055,1.178C6.581,3.328,7.272,3.125,8,3.125C10.4,3.125,12.363,5.319,12.364,8L12.364,8z M11.091,';\n direction += '13.484l-1.055-1.178C9.419,12.672,8.728,12.875,8,12.875c-2.4,0-4.364-2.194-4.364-4.875h2.182L2.909,4.75L0,8h2.182c0,';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, '#737373', null, null, 1, null, direction + '3.575,2.618,6.5,5.818,6.5C9.128,14.5,10.219,14.134,11.091,13.484L11.091,13.484z')));\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n }\n this.currentToolbarEle.appendChild(map.renderer.drawCircle(new CircleOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Rect', 'transparent', { color: 'gray', width: 1 }, 1, 8, 8, 16, '')));\n xSpacing = (orientation === 'Horizontal') ? (xSpacing + (kitWidth + padding)) : xSpacing;\n ySpacing = (orientation === 'Horizontal') ? ySpacing : (ySpacing + (kitHeight + padding));\n this.toolBarGroup.appendChild(this.currentToolbarEle);\n }\n };\n Zoom.prototype.performToolBarAction = function (e) {\n var target = e.target;\n e.stopImmediatePropagation();\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || (e.type.indexOf('touch') > -1);\n var toolbar = target.id.split('_')[3];\n if (isTouch) {\n this.handled = true;\n this.performZoomingByToolBar(toolbar);\n }\n else if ((e.type === 'mousedown' || e.type === 'pointerdown') && !this.handled) {\n this.handled = false;\n this.performZoomingByToolBar(toolbar);\n }\n else {\n this.handled = false;\n }\n };\n /**\n *\n * @private\n */\n Zoom.prototype.performZoomingByToolBar = function (type) {\n var map = this.maps;\n switch (type.toLowerCase()) {\n case 'zoom':\n this.panColor = this.fillColor;\n this.zoomColor = this.selectionColor;\n this.applySelection(this.zoomElements, this.selectionColor);\n this.applySelection(this.panElements, this.fillColor);\n break;\n case 'pan':\n this.panColor = this.selectionColor;\n this.zoomColor = this.fillColor;\n this.applySelection(this.zoomElements, this.fillColor);\n this.applySelection(this.panElements, this.selectionColor);\n break;\n case 'zoomin':\n this.toolBarZooming((map.isTileMap ? map.zoomLevel : map.scale) + 1, 'ZoomIn');\n break;\n case 'zoomout':\n this.toolBarZooming((map.isTileMap ? map.zoomLevel : map.scale) - 1, 'ZoomOut');\n break;\n case 'reset':\n this.toolBarZooming(1, 'ZoomOut');\n this.applySelection(this.zoomElements, this.fillColor);\n this.applySelection(this.panElements, this.selectionColor);\n }\n this.panningStyle(type.toLowerCase());\n };\n Zoom.prototype.panningStyle = function (toolbar) {\n var svg = getElementByID(this.maps.element.id + '_svg');\n if (toolbar === 'pan' || this.isPanning) {\n svg.setAttribute('class', 'e-maps-panning');\n }\n else {\n svg.setAttribute('class', '');\n }\n };\n Zoom.prototype.applySelection = function (elements, color) {\n if (!elements) {\n return;\n }\n var childElement;\n for (var i = 0; i < elements.childElementCount; i++) {\n childElement = elements.childNodes[i];\n if (childElement.tagName !== 'circle') {\n childElement.setAttribute('fill', color);\n childElement.setAttribute('stroke', color);\n }\n }\n };\n Zoom.prototype.showTooltip = function (e) {\n var text = e.target.id.split('_')[3];\n if (!this.isTouch) {\n createTooltip('EJ2_Map_Toolbar_Tip', this.maps.getLocalizedLabel(text), (e.pageY + 10), (e.pageX + 10), '10px');\n }\n };\n Zoom.prototype.removeTooltip = function () {\n if (getElementByID('EJ2_Map_Toolbar_Tip')) {\n remove(getElementByID('EJ2_Map_Toolbar_Tip'));\n }\n };\n Zoom.prototype.alignToolBar = function () {\n var map = this.maps;\n var padding = 10;\n var element = createElement('div', { id: map.element.id + '_ToolBar', styles: 'position:absolute;z-index:2' });\n var rectSVGObject = map.renderer.createSvg({\n id: map.element.id + '_Zooming_ToolBar', width: 0, height: 0,\n });\n rectSVGObject.appendChild(this.toolBarGroup);\n element.appendChild(rectSVGObject);\n getElementByID(map.element.id + '_Secondary_Element').appendChild(element);\n var toolBarSize = this.toolBarGroup.getBoundingClientRect();\n rectSVGObject.setAttribute('height', (toolBarSize.height + padding / 2).toString());\n rectSVGObject.setAttribute('width', (toolBarSize.width + padding / 2).toString());\n var size = map.availableSize;\n var x = 0;\n var y = 0;\n switch (map.zoomSettings.verticalAlignment) {\n case 'Near':\n y = padding;\n break;\n case 'Center':\n y = (size.height / 2) - (toolBarSize.height / 2);\n break;\n case 'Far':\n y = (size.height - toolBarSize.height) - padding;\n break;\n }\n switch (map.zoomSettings.horizontalAlignment) {\n case 'Near':\n x = padding;\n break;\n case 'Center':\n x = (size.width / 2) - (toolBarSize.width / 2);\n break;\n case 'Far':\n x = (size.width - toolBarSize.width) - padding;\n break;\n }\n element.style.left = x + 'px';\n element.style.top = y + 'px';\n };\n /**\n * To bind events.\n * @return {void}\n * @private\n */\n Zoom.prototype.wireEvents = function (element, process) {\n EventHandler.add(element, Browser.touchStartEvent, process, this);\n EventHandler.add(element, 'mouseover', this.showTooltip, this);\n EventHandler.add(element, 'mouseout', this.removeTooltip, this);\n };\n Zoom.prototype.mapMouseWheel = function (e) {\n if (this.maps.zoomSettings.enable && this.maps.zoomSettings.mouseWheelZoom) {\n var position = this.getMousePosition(e.pageX, e.pageY);\n var map = this.maps;\n var size = map.availableSize;\n var zoomLevel = map.zoomLevel;\n var zoomFactor = map.zoomSettings.zoomFactor;\n var prevScale = map.scale;\n var delta = 1;\n var value = (map.isTileMap) ? zoomLevel : prevScale;\n if (((position.x > map.mapAreaRect.x) && (position.x < (map.mapAreaRect.x + map.mapAreaRect.width))) &&\n (position.y > map.mapAreaRect.y) && position.y < (map.mapAreaRect.y + map.mapAreaRect.height)) {\n e.preventDefault();\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 'ZoomIn' : 'ZoomOut' : (e.wheelDelta / 120) > 0 ? 'ZoomIn' : 'ZoomOut';\n if (direction === 'ZoomIn') {\n this.performZooming(position, (value + delta), direction);\n }\n else {\n this.performZooming(position, (value - delta), direction);\n }\n }\n }\n };\n Zoom.prototype.doubleClick = function (e) {\n var pageX = e.pageX;\n var pageY = e.pageY;\n var target = e.target;\n if (this.maps.zoomSettings.enable && this.maps.zoomSettings.doubleClickZoom) {\n var position = this.getMousePosition(pageX, pageY);\n var map = this.maps;\n var size = map.availableSize;\n var zoomLevel = map.zoomLevel;\n var zoomFactor = map.zoomSettings.zoomFactor;\n var prevScale = map.scale;\n var value = (map.isTileMap) ? zoomLevel : prevScale;\n if (((position.x > map.mapAreaRect.x) && (position.x < (map.mapAreaRect.x + map.mapAreaRect.width))) &&\n (position.y > map.mapAreaRect.y) && position.y < (map.mapAreaRect.y + map.mapAreaRect.height)) {\n this.performZooming(position, (value + 1), 'ZoomIn');\n }\n }\n };\n Zoom.prototype.mouseDownHandler = function (e) {\n var pageX;\n var pageY;\n var target;\n var touches = null;\n var element = e.target;\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touches = e.touches;\n target = e.target;\n pageX = touches[0].clientX;\n pageY = touches[0].clientY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n this.isPanning = this.panColor === this.selectionColor ? true : this.zoomColor !== this.selectionColor;\n this.rectZoomingStart = ((!this.isPanning) && this.maps.zoomSettings.enable);\n this.mouseDownPoints = this.getMousePosition(pageX, pageY);\n if (this.isTouch) {\n this.firstMove = true;\n this.pinchFactor = this.maps.scale;\n this.fingers = touches.length;\n }\n };\n Zoom.prototype.mouseMoveHandler = function (e) {\n var pageX;\n var pageY;\n var map = this.maps;\n var touchArg;\n var target;\n var touches = null;\n var zoom = this.maps.zoomSettings;\n if (e.type === 'touchmove') {\n this.isTouch = true;\n target = e.target;\n touches = e.touches;\n pageX = touches[0].clientX;\n pageY = touches[0].clientY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n if (getElementByID(map.element.id + '_Zooming_KitCollection')) {\n if (target.id.indexOf('_Zooming_') > -1) {\n getElementByID(map.element.id + '_Zooming_KitCollection').setAttribute('opacity', '1');\n }\n else {\n getElementByID(map.element.id + '_Zooming_KitCollection').setAttribute('opacity', '0.3');\n }\n }\n if (this.isTouch) {\n if (this.maps.zoomSettings.pinchZooming) {\n if (this.firstMove && touches.length === 2) {\n this.rectZoomingStart = false;\n this.updateInteraction();\n this.touchStartList = targetTouches(e);\n }\n else if (this.touchStartList.length === 2 && touches.length === 2) {\n this.touchMoveList = targetTouches(e);\n e.preventDefault();\n this.rectZoomingStart = false;\n this.performPinchZooming(e);\n }\n this.firstMove = false;\n }\n }\n this.mouseMovePoints = this.getMousePosition(pageX, pageY);\n var targetId = e.target['id'];\n var targetEle = e.target;\n if (zoom.enable && this.isPanning) {\n e.preventDefault();\n this.maps.element.style.cursor = 'pointer';\n this.panning();\n }\n if (this.isTouch ? (touches.length === 1 && this.rectZoomingStart) : this.rectZoomingStart) {\n e.preventDefault();\n this.drawZoomRectangle();\n }\n };\n Zoom.prototype.mouseUpHandler = function (e) {\n var map = this.maps;\n this.rectZoomingStart = false;\n this.isPanning = false;\n this.isTouch = false;\n this.touchStartList = [];\n this.touchMoveList = [];\n this.lastScale = 1;\n this.maps.element.style.cursor = 'auto';\n var zoomRectElement = getElementByID(this.maps.element.id + '_Selection_Rect_Zooming');\n if (zoomRectElement && this.maps.zoomSettings.enable) {\n remove(zoomRectElement);\n this.performRectZooming();\n }\n };\n Zoom.prototype.mouseCancelHandler = function (e) {\n this.isPanning = false;\n this.isTouch = false;\n this.rectZoomingStart = false;\n var zoomRectElement = getElementByID(this.maps.element.id + '_Selection_Rect_Zooming');\n if (zoomRectElement && this.maps.zoomSettings.enable) {\n remove(zoomRectElement);\n this.performRectZooming();\n }\n };\n Zoom.prototype.click = function (e) {\n var map = this.maps;\n if (map.zoomSettings.zoomOnClick && e.target.id.indexOf('_ShapeIndex_') > -1 && !map.zoomSettings.doubleClickZoom\n && !(this.panColor === this.selectionColor ? true : this.zoomColor !== this.selectionColor)) {\n var bounds = e.target.getBBox();\n var boundwidth = bounds.width;\n var boundHeight = bounds.height;\n var layerScale = void 0;\n var baseScale = 1;\n var availWidth = map.availableSize.width;\n var availHeight = map.availableSize.height;\n layerScale = ((availWidth - 100) / (availHeight - 100) > boundwidth / boundHeight) ? (availHeight - 100) / boundHeight :\n (availWidth - 100) / boundwidth;\n var zoomFactor = (layerScale - baseScale + 1);\n map.zoomLevel = zoomFactor;\n var leftPos = ((availWidth / 2) - ((boundwidth * map.scale) / 2)) / layerScale;\n var topPos = ((availHeight / 2) - ((boundHeight * map.scale) / 2)) / layerScale;\n var translatePointX = (-bounds.x) + leftPos;\n var translatePointY = (-bounds.y) + topPos;\n this.applyTransform(getElementByID(map.element.id + '_Layer_Collections'), (layerScale), translatePointX, translatePointY);\n map.scale = layerScale;\n map.translatePoint = { x: translatePointX, y: translatePointY };\n }\n };\n Zoom.prototype.getMousePosition = function (pageX, pageY) {\n var map = this.maps;\n var elementRect = map.element.getBoundingClientRect();\n var pageXOffset = map.element.ownerDocument.defaultView.pageXOffset;\n var pageYOffset = map.element.ownerDocument.defaultView.pageYOffset;\n var clientTop = map.element.ownerDocument.documentElement.clientTop;\n var clientLeft = map.element.ownerDocument.documentElement.clientLeft;\n var positionX = elementRect.left + pageXOffset - clientLeft;\n var positionY = elementRect.top + pageYOffset - clientTop;\n return new Point((pageX - positionX), (pageY - positionY));\n };\n Zoom.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n EventHandler.add(this.maps.element, this.wheelEvent, this.mapMouseWheel, this);\n EventHandler.add(this.maps.element, 'click', this.click, this);\n EventHandler.add(this.maps.element, 'dblclick', this.doubleClick, this);\n this.maps.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.maps.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.maps.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n EventHandler.add(this.maps.element, this.cancelEvent, this.mouseCancelHandler, this);\n };\n Zoom.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n EventHandler.remove(this.maps.element, this.wheelEvent, this.mapMouseWheel);\n EventHandler.remove(this.maps.element, 'click', this.click);\n EventHandler.remove(this.maps.element, 'dblclick', this.doubleClick);\n this.maps.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.maps.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.maps.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.maps.off(this.cancelEvent, this.mouseCancelHandler);\n };\n /**\n * Get module name.\n */\n Zoom.prototype.getModuleName = function () {\n return 'Zoom';\n };\n /**\n * To destroy the zoom.\n * @return {void}\n * @private\n */\n Zoom.prototype.destroy = function (maps) {\n this.removeEventListener();\n /**\n * Destroy method performed here\n */\n };\n return Zoom;\n}());\nexport { Zoom };\n","/**\n * Constants\n */\n/** @hidden */\nexport var cellClick = 'cellClick';\n/** @hidden */\nexport var cellDoubleClick = 'cellDoubleClick';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var navigating = 'navigating';\n/** @hidden */\nexport var renderCell = 'renderCell';\n/** @hidden */\nexport var eventClick = 'eventClick';\n/** @hidden */\nexport var eventRendered = 'eventRendered';\n/** @hidden */\nexport var dataBinding = 'dataBinding';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var popupOpen = 'popupOpen';\n/**\n * Specifies schedule 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 scroll = 'scroll';\n/** @hidden */\nexport var scrollUiUpdate = 'scroll-ui-update';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var documentClick = 'document-click';\n/** @hidden */\nexport var cellMouseDown = 'cell-mouse-down';\n","import { isNullOrUndefined, createElement, remove, closest, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { Calendar } from '@syncfusion/ej2-calendars';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Header module\n */\nvar HeaderRenderer = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function HeaderRenderer(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.renderHeader();\n this.addEventListener();\n }\n HeaderRenderer.prototype.addEventListener = function () {\n this.parent.on(events.documentClick, this.closeHeaderPopup, this);\n };\n HeaderRenderer.prototype.removeEventListener = function () {\n this.parent.off(events.documentClick, this.closeHeaderPopup);\n };\n HeaderRenderer.prototype.closeHeaderPopup = function (e) {\n var closestEle = closest(e.event.target, '.e-date-range,.e-header-popup,.e-day,.e-selected');\n if (!isNullOrUndefined(closestEle)) {\n return;\n }\n this.hideHeaderPopup();\n };\n /** @hidden */\n HeaderRenderer.prototype.hideHeaderPopup = function () {\n if (this.headerPopup) {\n this.headerPopup.hide();\n }\n };\n HeaderRenderer.prototype.renderHeader = function () {\n this.element = createElement('div', { className: cls.TOOLBAR_CONTAINER });\n var toolbarEle = createElement('div', { className: cls.HEADER_TOOLBAR });\n this.element.appendChild(toolbarEle);\n this.parent.element.insertBefore(this.element, this.parent.element.firstElementChild);\n this.renderToolbar();\n };\n HeaderRenderer.prototype.renderToolbar = function () {\n var items = this.getItems();\n var args = extend({}, { requestType: 'toolbarItemRendering', items: items });\n this.parent.trigger(events.actionBegin, args);\n this.toolbarObj = new Toolbar({\n items: items,\n overflowMode: 'Popup',\n clicked: this.toolbarClickHandler.bind(this),\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale\n });\n this.toolbarObj.appendTo(this.parent.element.querySelector('.' + cls.HEADER_TOOLBAR));\n this.updateActiveView();\n this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: items });\n };\n HeaderRenderer.prototype.updateItems = function () {\n if (this.toolbarObj) {\n var items = this.getItems();\n this.parent.trigger(events.actionBegin, { requestType: 'toolbarItemRendering', items: items });\n this.toolbarObj.items = items;\n this.toolbarObj.dataBind();\n this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: items });\n }\n };\n HeaderRenderer.prototype.getPopUpRelativeElement = function () {\n if (this.parent.isAdaptive) {\n return this.toolbarObj.element;\n }\n return this.element.querySelector('.e-date-range');\n };\n HeaderRenderer.prototype.setDayOfWeek = function (index) {\n if (this.headerCalendar) {\n this.headerCalendar.firstDayOfWeek = index;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.setCalendarDate = function (date) {\n if (this.headerCalendar) {\n this.headerCalendar.value = date;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.getCalendarView = function () {\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'MonthAgenda') {\n return 'Year';\n }\n return 'Month';\n };\n HeaderRenderer.prototype.setCalendarView = function () {\n if (this.headerCalendar) {\n var calendarView = this.getCalendarView();\n this.headerCalendar.depth = calendarView;\n this.headerCalendar.start = calendarView;\n this.headerCalendar.refresh();\n }\n };\n HeaderRenderer.prototype.setRtl = function (isRtl) {\n if (this.headerPopup) {\n this.headerPopup.enableRtl = isRtl;\n this.headerPopup.dataBind();\n }\n if (this.headerCalendar) {\n this.headerCalendar.enableRtl = isRtl;\n this.headerCalendar.dataBind();\n }\n this.toolbarObj.enableRtl = isRtl;\n this.toolbarObj.dataBind();\n };\n HeaderRenderer.prototype.updateActiveView = function () {\n var currentViewCls = '.e-' + this.parent.currentView.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n var selEle = this.toolbarObj.element.querySelectorAll('.e-active-view');\n removeClass(selEle, ['e-active-view']);\n addClass(this.toolbarObj.element.querySelectorAll(currentViewCls), ['e-active-view']);\n };\n HeaderRenderer.prototype.updateDateRange = function (text) {\n if (text === void 0) { text = this.getDateRangeText(); }\n var selEle = this.toolbarObj.element.querySelector('.e-date-range');\n selEle.setAttribute('aria-label', text);\n selEle.querySelector('.e-tbar-btn-text').innerHTML = text;\n };\n HeaderRenderer.prototype.getDateRangeText = function () {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n };\n HeaderRenderer.prototype.getItems = function () {\n var items = [];\n var showInPopup = this.parent.isAdaptive;\n items.push({\n align: 'Left', prefixIcon: 'e-icon-prev', tooltipText: 'Previous', overflow: 'Show',\n cssClass: 'e-prev', htmlAttributes: { 'aria-label': 'previous period' }\n });\n items.push({\n align: 'Left', prefixIcon: 'e-icon-next', tooltipText: 'Next', overflow: 'Show',\n cssClass: 'e-next', htmlAttributes: { 'aria-label': 'next period' }\n });\n items.push({\n align: 'Left', text: this.getDateRangeText(), suffixIcon: 'e-icon-down-arrow', cssClass: 'e-date-range',\n overflow: 'Show', htmlAttributes: { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title' }\n });\n if (this.parent.isAdaptive) {\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-add', text: this.l10n.getConstant('newEvent'),\n cssClass: 'e-add', overflow: 'Show'\n });\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-today', text: this.l10n.getConstant('today'),\n cssClass: 'e-today', overflow: 'Show'\n });\n }\n else {\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-day', text: this.l10n.getConstant('today'),\n cssClass: 'e-today', overflow: 'Show'\n });\n if (this.parent.views.length > 1) {\n items.push({\n align: 'Right', type: 'Separator', cssClass: 'e-schedule-seperator'\n });\n }\n }\n if (this.parent.views.length > 1) {\n for (var _i = 0, _a = this.parent.views; _i < _a.length; _i++) {\n var item = _a[_i];\n typeof (item) === 'string' ? items.push(this.getItemObject(item.toLowerCase())) :\n items.push(this.getItemObject(item.option.toLowerCase()));\n }\n }\n return items;\n };\n HeaderRenderer.prototype.getItemObject = function (viewName) {\n var view;\n var showInPopup = this.parent.isAdaptive;\n switch (viewName) {\n case 'day':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-day', text: this.l10n.getConstant('day'),\n cssClass: 'e-day'\n };\n break;\n case 'week':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-week', text: this.l10n.getConstant('week'),\n cssClass: 'e-week'\n };\n break;\n case 'workweek':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-workweek', text: this.l10n.getConstant('workWeek'),\n cssClass: 'e-work-week'\n };\n break;\n case 'month':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-month', text: this.l10n.getConstant('month'),\n cssClass: 'e-month'\n };\n break;\n case 'agenda':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-agenda', text: this.l10n.getConstant('agenda'),\n cssClass: 'e-agenda'\n };\n break;\n // case 'weekagenda':\n // view = {\n // align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-week', text: this.l10n.getConstant('weekAgenda'),\n // cssClass: 'e-week-agenda'\n // };\n // break;\n // case 'workweekagenda':\n // view = {\n // align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-workweek',\n // text: this.l10n.getConstant('workWeekAgenda'), cssClass: 'e-work-week-agenda'\n // };\n // break;\n case 'monthagenda':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-month-agenda',\n text: this.l10n.getConstant('monthAgenda'), cssClass: 'e-month-agenda'\n };\n break;\n }\n return view;\n };\n HeaderRenderer.prototype.renderHeaderPopup = function () {\n var headerPopupEle = createElement('div', { className: cls.HEADER_POPUP_CLASS });\n var headerCalendarEle = createElement('div', { className: cls.HEADER_CALENDAR_CLASS });\n headerPopupEle.appendChild(headerCalendarEle);\n this.element.appendChild(headerPopupEle);\n this.headerPopup = new Popup(headerPopupEle, {\n actionOnScroll: 'hide',\n targetType: 'relative',\n relateTo: this.getPopUpRelativeElement(),\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl\n });\n var calendarView = this.getCalendarView();\n this.headerCalendar = new Calendar({\n value: this.parent.selectedDate,\n firstDayOfWeek: this.parent.firstDayOfWeek,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n depth: calendarView,\n start: calendarView,\n change: this.calendarChange.bind(this)\n });\n this.headerCalendar.appendTo(headerCalendarEle);\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.calendarChange = function (args) {\n if (args.value.getTime() !== this.parent.selectedDate.getTime()) {\n this.parent.changeDate(args.value);\n }\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.toolbarClickHandler = function (args) {\n if (!args.item) {\n return;\n }\n switch (args.item.cssClass) {\n case 'e-date-range':\n if (!this.headerPopup) {\n this.renderHeaderPopup();\n }\n if (this.headerPopup.element.classList.contains(cls.POPUP_OPEN)) {\n this.headerPopup.hide();\n }\n else {\n this.headerPopup.show();\n }\n break;\n case 'e-day':\n this.parent.changeView('Day', args.originalEvent);\n break;\n case 'e-week':\n this.parent.changeView('Week', args.originalEvent);\n break;\n case 'e-work-week':\n this.parent.changeView('WorkWeek', args.originalEvent);\n break;\n case 'e-month':\n this.parent.changeView('Month', args.originalEvent);\n break;\n case 'e-agenda':\n this.parent.changeView('Agenda', args.originalEvent);\n break;\n // case 'e-week-agenda':\n // this.parent.changeView('weekAgenda', args.originalEvent);\n // break;\n // case 'e-work-week-agenda':\n // this.parent.changeView('workWeekAgenda', args.originalEvent);\n // break;\n case 'e-month-agenda':\n this.parent.changeView('MonthAgenda', args.originalEvent);\n break;\n case 'e-today':\n if (!this.parent.isSelectedDate(util.resetTime(new Date()))) {\n this.parent.changeDate(util.resetTime(new Date()), args.originalEvent);\n }\n break;\n case 'e-prev':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), args.originalEvent);\n break;\n case 'e-next':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), args.originalEvent);\n break;\n case 'e-add':\n var data = void 0;\n if (this.parent.activeCellsData) {\n data = this.parent.activeCellsData;\n }\n else {\n var today = new Date();\n var majorSlot = 60;\n var minorSlotCount = 2;\n var msMajorInterval = majorSlot * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / minorSlotCount;\n var startTime = new Date(this.parent.selectedDate.getTime());\n startTime.setHours(today.getHours(), (Math.round(startTime.getMinutes() / msInterval) * msInterval), 0);\n var endTime = new Date(new Date(startTime.getTime()).setMilliseconds(startTime.getMilliseconds() + msInterval));\n data = extend({ startTime: startTime, endTime: endTime, isAllDay: false }, { cancel: false, event: args.originalEvent });\n }\n this.parent.eventWindow.openEditor(data, 'Add');\n break;\n }\n var toolbarPopUp = this.toolbarObj.element.querySelector('.e-toolbar-pop');\n if (toolbarPopUp) {\n toolbarPopUp.ej2_instances[0].hide({ name: 'SlideUp', duration: 100 });\n }\n };\n HeaderRenderer.prototype.getHeaderElement = function () {\n return this.element;\n };\n /**\n * Get module name.\n */\n HeaderRenderer.prototype.getModuleName = function () {\n return 'headerbar';\n };\n /**\n * To destroy the headerbar.\n * @return {void}\n * @private\n */\n HeaderRenderer.prototype.destroy = function () {\n if (!this.toolbarObj.isDestroyed) {\n this.toolbarObj.destroy();\n this.removeEventListener();\n remove(this.element);\n }\n };\n return HeaderRenderer;\n}());\nexport { HeaderRenderer };\n","import { formatUnit } from '@syncfusion/ej2-base';\nimport { contentReady, uiUpdate, scrollUiUpdate } from '../base/constant';\n/**\n * `Scroll` module\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the scrolling.\n * @hidden\n */\n function Scroll(parent) {\n this.parent = 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 };\n /**\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n this.parent.element.style.height = formatUnit(this.parent.height);\n };\n /**\n * @hidden\n */\n Scroll.prototype.addEventListener = function () {\n this.parent.on(contentReady, this.setDimensions, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n };\n /**\n * @hidden\n */\n Scroll.prototype.removeEventListener = function () {\n this.parent.off(contentReady, this.setDimensions);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n };\n Scroll.prototype.setDimensions = function () {\n this.setWidth();\n this.setHeight();\n var cssProps = this.getCssProperties(this.parent.enableRtl);\n var data = { cssProperties: cssProps, module: this.getModuleName() };\n this.parent.notify(scrollUiUpdate, data);\n };\n /**\n * @hidden\n */\n Scroll.prototype.getCssProperties = function (enableRtl) {\n var css = {};\n css.border = enableRtl ? 'borderLeftWidth' : 'borderRightWidth';\n css.padding = enableRtl ? 'paddingLeft' : 'paddingRight';\n return css;\n };\n Scroll.prototype.onPropertyChanged = function (e) {\n this.setDimensions();\n };\n /**\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Scroll;\n}());\nexport { Scroll };\n","import { addClass, removeClass, Touch, remove, EventHandler } from '@syncfusion/ej2-base';\nimport { closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * `touch` module is used to handle touch interactions.\n */\nvar ScheduleTouch = /** @class */ (function () {\n function ScheduleTouch(parent) {\n this.parent = parent;\n this.element = this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS);\n this.touchObj = new Touch(this.element, {\n scroll: this.scrollHandler.bind(this),\n swipe: this.swipeHandler.bind(this),\n tapHold: this.tapHoldHandler.bind(this),\n swipeSettings: { swipeThresholdDistance: 1 }\n });\n EventHandler.add(this.element, 'transitionend', this.onTransitionEnd, this);\n this.touchLeftDirection = this.parent.enableRtl ? 'Right' : 'Left';\n this.touchRightDirection = this.parent.enableRtl ? 'Left' : 'Right';\n }\n ScheduleTouch.prototype.scrollHandler = function (e) {\n if (this.parent.currentView === 'Agenda' ||\n (e.originalEvent && !isNullOrUndefined(closest(e.originalEvent.target, '.' + cls.APPOINTMENT_WRAP_CLASS)))) {\n return;\n }\n if (!this.timeStampStart) {\n this.timeStampStart = Date.now();\n }\n if (this.element.classList.contains(cls.TRANSLATE_CLASS)) {\n this.onTransitionEnd();\n }\n if (e.scrollDirection === 'Left' || e.scrollDirection === 'Right') {\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var scrollDiv = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (scrollDiv && scrollDiv.scrollWidth > scrollDiv.clientWidth) {\n return;\n }\n else {\n this.isScrollTriggered = true;\n e.originalEvent.preventDefault();\n e.originalEvent.stopPropagation();\n }\n }\n if (e.scrollDirection === this.touchLeftDirection) {\n if (!this.nextPanel) {\n this.renderPanel(cls.NEXT_PANEL_CLASS, 'next');\n this.nextPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.nextPanel.element);\n }\n var x = this.parent.enableRtl ? e.distanceX : -e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n else if (e.scrollDirection === this.touchRightDirection) {\n var prevWidth = 0;\n if (!this.previousPanel) {\n this.renderPanel(cls.PREVIOUS_PANEL_CLASS, 'previous');\n this.previousPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.previousPanel.element);\n prevWidth = this.previousPanel.element.offsetWidth;\n }\n var x = this.parent.enableRtl ? prevWidth - e.distanceX : -prevWidth + e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n };\n ScheduleTouch.prototype.swipeHandler = function (e) {\n if (!this.isScrollTriggered) {\n return;\n }\n this.isScrollTriggered = false;\n if (e.swipeDirection === 'Left' || e.swipeDirection === 'Right') {\n var time = Date.now() - this.timeStampStart;\n var offsetDist = (e.distanceX * 1.66);\n if (offsetDist > time || (e.distanceX > (this.parent.element.offsetWidth / 2))) {\n this.swapPanels(e.swipeDirection);\n if (offsetDist > time && (e.distanceX > (this.parent.element.offsetWidth / 2))) {\n this.element.style.transitionDuration = ((offsetDist / time) / 10) + 's';\n }\n this.confirmSwipe(e.swipeDirection);\n }\n else {\n this.cancelSwipe();\n }\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionComplete, args);\n }\n else {\n this.cancelSwipe();\n }\n this.timeStampStart = null;\n };\n ScheduleTouch.prototype.tapHoldHandler = function (e) {\n var target = closest(e.originalEvent.target, '.' + cls.APPOINTMENT_CLASS);\n if (!isNullOrUndefined(target)) {\n this.parent.quickPopup.eventHold(e.originalEvent);\n return;\n }\n target = closest(e.originalEvent.target, '.' + cls.WORK_CELLS_CLASS) ||\n closest(e.originalEvent.target, '.' + cls.ALLDAY_CELLS_CLASS) ||\n closest(e.originalEvent.target, '.' + cls.HEADER_CELLS_CLASS);\n if (!isNullOrUndefined(target)) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n return;\n }\n };\n ScheduleTouch.prototype.renderPanel = function (clsName, nextPrevType) {\n if (!this.currentPanel) {\n this.currentPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.currentPanel.element);\n }\n else {\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n }\n this.parent.setProperties({ selectedDate: this.parent.activeView.getNextPreviousDate(nextPrevType) }, true);\n this.parent.activeView.getRenderDates();\n this.parent.activeView.renderLayout(clsName);\n };\n ScheduleTouch.prototype.swapPanels = function (direction) {\n if (direction === this.touchLeftDirection) {\n var temp = this.nextPanel;\n this.nextPanel = this.currentPanel;\n this.currentPanel = temp;\n }\n else {\n var temp = this.previousPanel;\n this.previousPanel = this.currentPanel;\n this.currentPanel = temp;\n }\n };\n ScheduleTouch.prototype.confirmSwipe = function (swipeDirection) {\n var previousDate = swipeDirection === this.touchLeftDirection ? this.nextPanel.selectedDate : this.previousPanel.selectedDate;\n var navArgs = {\n action: 'date', cancel: false, previousDate: previousDate, currentDate: this.currentPanel.selectedDate\n };\n this.parent.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n this.swapPanels(swipeDirection);\n this.cancelSwipe();\n return;\n }\n this.parent.activeView.setPanel(this.currentPanel.element);\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n var translateX;\n if (this.parent.enableRtl) {\n translateX = swipeDirection === this.touchLeftDirection ?\n (this.previousPanel ? this.previousPanel.element.offsetLeft : this.currentPanel.element.offsetWidth) : 0;\n }\n else {\n translateX = swipeDirection === this.touchLeftDirection ? -this.currentPanel.element.offsetLeft : 0;\n }\n addClass([this.element], cls.TRANSLATE_CLASS);\n this.element.style.transform = 'translatex(' + (translateX) + 'px)';\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n }\n this.parent.renderModule.refreshDataManager();\n };\n ScheduleTouch.prototype.cancelSwipe = function () {\n this.parent.activeView.setPanel(this.currentPanel.element);\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n this.parent.activeView.getRenderDates();\n addClass([this.element], cls.TRANSLATE_CLASS);\n var prevWidth = this.previousPanel ? this.previousPanel.element.offsetWidth : 0;\n this.element.style.transform = 'translatex(' + (this.parent.enableRtl ? prevWidth : -this.currentPanel.element.offsetLeft) + 'px)';\n };\n ScheduleTouch.prototype.onTransitionEnd = function () {\n removeClass([this.element], cls.TRANSLATE_CLASS);\n this.element.style.transitionDuration = '';\n this.element.style.transform = '';\n if (this.previousPanel) {\n remove(this.previousPanel.element);\n this.previousPanel = null;\n removeClass([this.currentPanel.element], cls.PREVIOUS_PANEL_CLASS);\n addClass([this.currentPanel.element], cls.CURRENT_PANEL_CLASS);\n }\n if (this.nextPanel) {\n remove(this.nextPanel.element);\n this.nextPanel = null;\n removeClass([this.currentPanel.element], cls.NEXT_PANEL_CLASS);\n addClass([this.currentPanel.element], cls.CURRENT_PANEL_CLASS);\n }\n this.currentPanel = null;\n this.parent.activeView.getPanel().style.width = '';\n };\n ScheduleTouch.prototype.getTranslateX = function (element) {\n var style = window.getComputedStyle(element);\n return new WebKitCSSMatrix(style.webkitTransform).m41;\n };\n ScheduleTouch.prototype.setDimensions = function (element) {\n element.style.width = (this.parent.element.clientWidth) + 'px';\n };\n ScheduleTouch.prototype.resetValues = function () {\n this.currentPanel = null;\n this.previousPanel = null;\n this.nextPanel = null;\n this.timeStampStart = null;\n this.element.style.transform = '';\n this.element.innerHTML = '';\n removeClass([this.element], cls.TRANSLATE_CLASS);\n };\n /**\n * @hidden\n */\n ScheduleTouch.prototype.destroy = function () {\n this.touchObj.destroy();\n EventHandler.remove(this.element, 'transitionend', this.onTransitionEnd);\n this.resetValues();\n };\n return ScheduleTouch;\n}());\nexport { ScheduleTouch };\n","import { KeyboardEvents, closest, EventHandler, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Keyboard interaction\n */\nvar KeyboardInteraction = /** @class */ (function () {\n function KeyboardInteraction(parent) {\n this.selectedCells = [];\n this.selectedEvents = [];\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDownArrow: 'shift+downarrow',\n shiftUpArrow: 'shift+uparrow',\n shiftRightArrow: 'shift+rightarrow',\n shiftLeftArrow: 'shift+leftarrow',\n ctrlLeftArrow: 'ctrl+leftarrow',\n ctrlRightArrow: 'ctrl+rightarrow',\n altOne: 'alt+1',\n altTwo: 'alt+2',\n altThree: 'alt+3',\n altFour: 'alt+4',\n altFive: 'alt+5',\n altSix: 'alt+6',\n enter: 'enter',\n escape: 'escape',\n delete: 'delete',\n home: 'home',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n tab: 'tab',\n shiftTab: 'shift+tab'\n };\n this.parent = parent;\n this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;\n this.keyboardModule = new KeyboardEvents(this.parent.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.addEventListener();\n }\n KeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'downArrow':\n case 'shiftDownArrow':\n this.processDown(e, e.shiftKey);\n break;\n case 'upArrow':\n case 'shiftUpArrow':\n this.processUp(e, e.shiftKey);\n break;\n case 'leftArrow':\n case 'shiftLeftArrow':\n this.processLeft(e, e.shiftKey);\n break;\n case 'rightArrow':\n case 'shiftRightArrow':\n this.processRight(e, e.shiftKey);\n break;\n case 'ctrlLeftArrow':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-prev button').focus();\n }\n break;\n case 'ctrlRightArrow':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-next button').focus();\n }\n break;\n case 'altOne':\n case 'altTwo':\n case 'altThree':\n case 'altFour':\n case 'altFive':\n case 'altSix':\n this.processViewNavigation(e);\n break;\n case 'enter':\n this.processEnter(e);\n break;\n case 'home':\n this.focusFirstCell();\n break;\n case 'tab':\n case 'shiftTab':\n this.processTab(e, e.shiftKey);\n break;\n case 'delete':\n this.processDelete(e);\n break;\n case 'escape':\n this.processEscape();\n }\n };\n KeyboardInteraction.prototype.addEventListener = function () {\n this.parent.on(event.cellMouseDown, this.onCellMouseDown, this);\n };\n KeyboardInteraction.prototype.removeEventListener = function () {\n this.parent.off(event.cellMouseDown, this.onCellMouseDown);\n };\n KeyboardInteraction.prototype.onCellMouseDown = function (e) {\n if (e.event.shiftKey) {\n return;\n }\n this.initialTarget = e.event.target;\n if (this.parent.activeViewOptions.readonly || this.parent.currentView === 'MonthAgenda') {\n return;\n }\n if (e.event.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.add(this.parent.getContentTable(), 'mousemove', this.onMouseSelection, this);\n EventHandler.add(this.parent.getContentTable(), 'mouseup', this.onMoveup, this);\n }\n if (e.event.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n if (allDayRow) {\n EventHandler.add(allDayRow, 'mousemove', this.onMouseSelection, this);\n EventHandler.add(allDayRow, 'mouseup', this.onMoveup, this);\n }\n }\n };\n KeyboardInteraction.prototype.onMouseSelection = function (e) {\n var target = closest(e.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS);\n if (target) {\n this.selectCells(true, target);\n }\n };\n KeyboardInteraction.prototype.onAppointmentSelection = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n var selectedElements = this.parent.eventBase.getSelectedEventElements(target);\n };\n KeyboardInteraction.prototype.onMoveup = function (e) {\n if (e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.remove(this.parent.getContentTable(), 'mousemove', this.onMouseSelection);\n EventHandler.remove(this.parent.getContentTable(), 'mouseup', this.onMoveup);\n }\n if (e.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n if (allDayRow) {\n EventHandler.remove(allDayRow, 'mousemove', this.onMouseSelection);\n EventHandler.remove(allDayRow, 'mouseup', this.onMoveup);\n }\n }\n };\n KeyboardInteraction.prototype.processEnter = function (e) {\n var target = (e.target);\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n if (this.selectedCells.length > 1) {\n var start = this.parent.getCellDetails(this.selectedCells[0]);\n var end = this.parent.getCellDetails(this.selectedCells[this.selectedCells.length - 1]);\n start.endTime = end.endTime;\n start.element = target;\n this.parent.activeCellsData = start;\n }\n else {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n }\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e });\n this.parent.notify(event.cellClick, args);\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS) || target.classList.contains(cls.MORE_EVENT_CLOSE_CLASS) ||\n target.classList.contains(cls.ALLDAY_APPOINTMENT_SECTION_CLASS)) {\n target.click();\n return;\n }\n if (target.classList.contains(cls.MORE_EVENT_HEADER_DATE_CLASS)) {\n this.parent.setProperties({ selectedDate: new Date(parseInt(target.getAttribute('data-date'), 10)) }, true);\n this.parent.changeView('Day');\n this.processEscape();\n return;\n }\n };\n KeyboardInteraction.prototype.getCells = function (isInverseTable, start, end) {\n var tableEle = this.parent.getContentTable();\n var cells = [].slice.call(tableEle.querySelectorAll('td'));\n var maxRow = tableEle.rows.length;\n var maxColumn = tableEle.rows[0].cells.length;\n if (start.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n cells = [].slice.call(allDayRow.cells);\n maxRow = 1;\n maxColumn = allDayRow.cells.length;\n }\n var startIndex = cells.indexOf(start);\n var endIndex = cells.indexOf(end);\n var inverseCells = [];\n if (isInverseTable) {\n for (var i = 0; i < maxColumn; i++) {\n for (var j = 0; j < maxRow; j++) {\n inverseCells.push(cells[maxColumn * j + i]);\n }\n }\n startIndex = inverseCells.indexOf(start);\n endIndex = inverseCells.indexOf(end);\n }\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n var sCells = isInverseTable ? inverseCells : cells;\n return sCells.slice(startIndex, endIndex + 1);\n };\n KeyboardInteraction.prototype.focusFirstCell = function () {\n if (this.parent.currentView === 'Agenda') {\n var focusCell = this.parent.getContentTable().querySelector('.' + cls.AGENDA_CELLS_CLASS);\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus();\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.selectCells(false, this.parent.getWorkCellElements()[0]);\n };\n KeyboardInteraction.prototype.isInverseTableSelect = function () {\n return this.parent.activeView.isInverseTableSelect;\n };\n /** @hidden */\n KeyboardInteraction.prototype.selectCells = function (isMultiple, target) {\n this.parent.removeSelectedClass();\n if (isMultiple) {\n var selectedCells = this.getCells(this.isInverseTableSelect(), this.initialTarget, target);\n this.selectedCells = selectedCells;\n if (selectedCells.length > 2 && !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n selectedCells = selectedCells.concat(this.getAllDayCells(selectedCells));\n }\n this.parent.addSelectedClass(selectedCells, target);\n }\n else {\n this.initialTarget = target;\n this.selectedCells = [target];\n this.parent.addSelectedClass([target], target);\n }\n };\n KeyboardInteraction.prototype.selectAppointments = function (isReverse, target, isMoreEvent) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (!isMoreEvent) {\n this.parent.removeSelectedClass();\n }\n this.selectedEvents = [];\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS);\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n var selectedElement = this.getNextAppointment(isReverse, target, isMoreEvent);\n if (!isNullOrUndefined(selectedElement)) {\n this.selectedEvents.push({\n event: this.parent.eventBase.getEventByGuid(selectedElement.getAttribute('data-guid')),\n element: selectedElement\n });\n var focusElements = isMoreEvent ? [].slice.call(moreEventWrapper.\n querySelectorAll('div[data-guid=\"' + selectedElement.getAttribute('data-guid') + '\"]')) :\n [].slice.call(this.parent.element.\n querySelectorAll('div[data-guid=\"' + selectedElement.getAttribute('data-guid') + '\"]'));\n this.parent.eventBase.addSelectedAppointments(focusElements, focusElements[focusElements.length - 1]);\n if (selectedElement.classList.contains(cls.EVENT_COUNT_CLASS)) {\n this.parent.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS).click();\n }\n (focusElements[focusElements.length - 1]).focus();\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.parent.eventBase.addSelectedAppointments([target], target);\n target.focus();\n }\n }\n else {\n var focusFirstElement = (target.classList.contains(cls.WORK_CELLS_CLASS) ||\n target.classList.contains(cls.ALLDAY_CELLS_CLASS)) ?\n this.getSelectedSeriesElement(target, isReverse, isMoreEvent) : this.getAppointmentSeriesElements(isMoreEvent);\n if (focusFirstElement.length > 0) {\n var focusElement = isReverse ? focusFirstElement[focusFirstElement.length - 1] : focusFirstElement[0];\n this.selectedEvents.push({\n event: this.parent.eventBase.getEventByGuid(focusElement.getAttribute('data-guid')),\n element: focusElement\n });\n var focusElements = isMoreEvent ? [].slice.call(moreEventWrapper.\n querySelectorAll('div[data-guid=\"' + focusElement.getAttribute('data-guid') + '\"]')) :\n [].slice.call(this.parent.element.\n querySelectorAll('div[data-guid=\"' + focusElement.getAttribute('data-guid') + '\"]'));\n this.parent.eventBase.addSelectedAppointments(focusElements, focusElements[focusElements.length - 1]);\n (focusElements[focusElements.length - 1]).focus();\n }\n }\n };\n KeyboardInteraction.prototype.getNextAppointment = function (isReverse, target, isMoreEvent) {\n var _this = this;\n var appointmentElements = this.getAppointmentSeriesElements(isMoreEvent);\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS);\n var nextElement = null;\n appointmentElements.filter(function (element, index) {\n if (element.getAttribute('data-guid') === target.getAttribute('data-guid')) {\n var focusElements = isMoreEvent ? [].slice.call(moreEventWrapper.\n querySelectorAll('div[data-guid=\"' + element.getAttribute('data-guid') + '\"]')) :\n [].slice.call(_this.parent.element.\n querySelectorAll('div[data-guid=\"' + element.getAttribute('data-guid') + '\"]'));\n if (isReverse) {\n nextElement = (!isNullOrUndefined(appointmentElements[index - 1]) &&\n appointmentElements[index - 1].getAttribute('data-guid') === target.getAttribute('data-guid')) ?\n appointmentElements[index - focusElements.length] : appointmentElements[index - 1];\n }\n else {\n nextElement = (!isNullOrUndefined(appointmentElements[index + 1]) &&\n appointmentElements[index + 1].getAttribute('data-guid') === target.getAttribute('data-guid')) ?\n appointmentElements[index + (focusElements.length - 1)] : appointmentElements[index + 1];\n }\n return;\n }\n });\n return nextElement;\n };\n KeyboardInteraction.prototype.getAppointmentSeriesElements = function (isMoreEvent) {\n var appointmentElements = [];\n var moreEventList = [];\n var appointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n if (isMoreEvent) {\n moreEventList = [].slice.call(this.parent.element.\n querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS).children);\n }\n this.parent.eventsProcessed.filter(function (eventObject) {\n appointments.filter(function (element) {\n if (JSON.stringify(eventObject.Guid) === JSON.stringify(element.getAttribute('data-guid'))) {\n appointmentElements.push(element);\n }\n });\n });\n return (this.parent.currentView === 'Agenda' ||\n this.parent.currentView === 'MonthAgenda') ? appointments : isMoreEvent ? moreEventList : appointmentElements;\n };\n KeyboardInteraction.prototype.getSelectedSeriesElement = function (target, isReverse, isMoreEvent) {\n var fields = this.parent.eventFields;\n var appointmentElements = [];\n var selectedSeriedElements = this.getAppointmentSeriesElements(isMoreEvent);\n var selectedDate = parseInt(target.getAttribute('data-date'), 10);\n var selectedSeriesEvents = this.parent.eventsProcessed.filter(function (eventObject) {\n return (!isReverse ? (eventObject[fields.startTime].getTime() >= selectedDate) :\n (eventObject[fields.startTime].getTime() <= selectedDate));\n });\n selectedSeriesEvents.filter(function (event) {\n selectedSeriedElements.filter(function (element) {\n if (JSON.stringify(event.Guid) === JSON.stringify(element.getAttribute('data-guid'))) {\n appointmentElements.push(element);\n }\n });\n });\n return appointmentElements;\n };\n KeyboardInteraction.prototype.getSelectedSeriesCell = function (target) {\n var fields = this.parent.eventFields;\n var rowCells = [];\n var selectedObject = this.parent.eventBase.getEventByGuid(target.getAttribute('data-guid'));\n var eventTime = selectedObject[fields.startTime];\n var isAllDay = target.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) ? true : false;\n var allDayCells = isAllDay ? ([].slice.call(this.parent.element.\n querySelector('.' + cls.ALLDAY_ROW_CLASS).children)) :\n ([].slice.call(this.parent.element.\n querySelectorAll('.' + cls.WORK_CELLS_CLASS)));\n allDayCells.filter(function (element) {\n if (((eventTime).getDate() === new Date(parseInt(element.getAttribute('data-date'), 10)).getDate()) &&\n (eventTime).getTime() >= parseInt(element.getAttribute('data-date'), 10)) {\n rowCells.push(element);\n }\n });\n return rowCells[rowCells.length - 1];\n };\n KeyboardInteraction.prototype.getAllDayCells = function (cells) {\n var allDayRow = this.parent.getAllDayRow();\n if (!allDayRow) {\n return [];\n }\n var startCell = cells[0];\n var endCell = cells[cells.length - 1];\n var start = this.parent.getCellDetails(startCell);\n var end = this.parent.getCellDetails(endCell);\n if (end.endTime.getTime() - start.startTime.getTime() >= util.MS_PER_DAY) {\n var allDayCells = [].slice.call(allDayRow.cells);\n return allDayCells.slice(startCell.cellIndex, endCell.cellIndex + 1);\n }\n return [];\n };\n KeyboardInteraction.prototype.processViewNavigation = function (e) {\n var index = parseInt(e.key, 10) - 1;\n if (index < this.parent.views.length) {\n var view = this.parent.viewOptions[Object.keys(this.parent.viewOptions)[index]].option;\n this.parent.changeView(view, e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-active-view button').focus();\n }\n }\n };\n KeyboardInteraction.prototype.processUp = function (e, isMultiple) {\n if ((isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return;\n }\n var target = (e.target);\n var selectedElements = this.parent.getSelectedElements();\n var selectedEventElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (selectedElements.length > 0 && !e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n target = selectedElements[selectedElements.length - 1];\n }\n if (selectedEventElements.length > 0 && !moreEventWrapper.classList.contains(cls.POPUP_OPEN) &&\n ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.parent.currentView) !== -1) {\n target = this.getSelectedSeriesCell(selectedEventElements[selectedEventElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var tableEle = this.parent.getContentTable();\n var curRowIndex = target.parentNode.rowIndex;\n if (curRowIndex > 0 && curRowIndex < tableEle.rows.length) {\n this.selectCells(isMultiple, tableEle.rows[curRowIndex - 1].cells[target.cellIndex]);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointments(true, target, false);\n }\n };\n KeyboardInteraction.prototype.processDown = function (e, isMultiple) {\n if ((isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedElements();\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (selectedCells.length > 0 && !e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n if (selectedElements.length > 0 && !moreEventWrapper.classList.contains(cls.POPUP_OPEN) &&\n ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.parent.currentView) !== -1) {\n target = this.getSelectedSeriesCell(selectedElements[selectedElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n var tableEle = this.parent.getContentTable();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var curRowIndex = target.parentNode.rowIndex;\n if (curRowIndex >= 0 && curRowIndex < tableEle.rows.length - 1) {\n this.selectCells(isMultiple, tableEle.rows[curRowIndex + 1].cells[target.cellIndex]);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointments(false, target, false);\n }\n };\n KeyboardInteraction.prototype.processLeftRight = function (target, isMultiple) {\n var tableEle = this.parent.getContentTable();\n var curRowIndex = target.parentNode.rowIndex;\n var curColIndex = target.cellIndex;\n var maxColIndex = tableEle.rows[curRowIndex].cells.length;\n var key = { element: tableEle, rowIndex: curRowIndex, columnIndex: curColIndex, maxIndex: maxColIndex };\n return key;\n };\n KeyboardInteraction.prototype.isCancelLeftRightAction = function (isMultiple) {\n if (this.parent.currentView === 'Agenda' || (isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return true;\n }\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (moreEventWrapper.classList.contains(cls.POPUP_OPEN)) {\n return true;\n }\n return false;\n };\n KeyboardInteraction.prototype.processRight = function (e, isMultiple) {\n if (this.isCancelLeftRightAction(isMultiple)) {\n return;\n }\n var selectedCells = this.parent.getSelectedElements();\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\n var target = (e.target);\n if (selectedCells.length > 0 && !target.classList.contains(cls.WORK_CELLS_CLASS) &&\n !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n if (selectedAppointments.length > 0) {\n target = this.getSelectedSeriesCell(selectedAppointments[selectedAppointments.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target, isMultiple);\n if (key.columnIndex >= 0 && key.columnIndex < key.maxIndex - 1) {\n this.selectCells(isMultiple, key.element.rows[key.rowIndex].cells[target.cellIndex + 1]);\n }\n else if (key.columnIndex === key.maxIndex - 1) {\n if (!this.isInverseTableSelect() && key.rowIndex < key.element.rows.length - 1) {\n this.selectCells(isMultiple, key.element.rows[key.rowIndex + 1].cells[0]);\n }\n else if (!isMultiple) {\n var rowIndex = this.isInverseTableSelect() ? key.rowIndex : 0;\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n var tableEle = this.parent.getContentTable();\n this.selectCells(false, tableEle.rows[rowIndex].cells[0]);\n }\n }\n }\n else if (target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var curColIndex = target.cellIndex;\n var allDayRow = this.parent.getAllDayRow();\n var maxColIndex = allDayRow.cells.length;\n if (curColIndex >= 0 && curColIndex < maxColIndex - 1) {\n this.selectCells(isMultiple, allDayRow.cells[curColIndex + 1]);\n }\n else if (curColIndex === maxColIndex - 1 && !isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n var allDayRow_1 = this.parent.getAllDayRow();\n this.selectCells(false, allDayRow_1.cells[0]);\n }\n }\n };\n KeyboardInteraction.prototype.processLeft = function (e, isMultiple) {\n if (this.isCancelLeftRightAction(isMultiple)) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedElements();\n if (selectedCells.length > 0 && !target.classList.contains(cls.WORK_CELLS_CLASS) &&\n !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n if (selectedElements.length > 0) {\n target = this.getSelectedSeriesCell(selectedElements[selectedElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target, isMultiple);\n if (key.columnIndex > 0 && key.columnIndex < key.maxIndex) {\n this.selectCells(isMultiple, key.element.rows[key.rowIndex].cells[target.cellIndex - 1]);\n }\n else if (key.columnIndex === 0) {\n if (!this.isInverseTableSelect() && key.rowIndex > 0) {\n this.selectCells(isMultiple, key.element.rows[key.rowIndex - 1].cells[key.maxIndex - 1]);\n }\n else if (!isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n var tableEle = this.parent.getContentTable();\n var rowIndex = this.isInverseTableSelect() ? key.rowIndex : tableEle.rows.length - 1;\n this.selectCells(false, tableEle.rows[rowIndex].cells[key.maxIndex - 1]);\n }\n }\n }\n else if (target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var curColIndex = target.cellIndex;\n var allDayRow = this.parent.getAllDayRow();\n var maxColIndex = allDayRow.cells.length;\n if (curColIndex > 0 && curColIndex < maxColIndex) {\n this.selectCells(isMultiple, allDayRow.cells[curColIndex - 1]);\n }\n else if (curColIndex === 0 && !isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n var allDayRow_2 = this.parent.getAllDayRow();\n this.selectCells(false, allDayRow_2.cells[maxColIndex - 1]);\n }\n }\n };\n KeyboardInteraction.prototype.processTab = function (e, isReverse) {\n var target = e.target;\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (closest(target, '.' + cls.MORE_POPUP_WRAPPER_CLASS)) {\n if (isNullOrUndefined(moreEventWrapper) || !moreEventWrapper.classList.contains(cls.POPUP_OPEN)) {\n return;\n }\n var moreEventList = [].slice.call(moreEventWrapper.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS).children);\n var focusElement = moreEventList[moreEventList.length - 1];\n this.selectedEvents = [];\n if (selectedAppointments.length > 0) {\n target = selectedAppointments[selectedAppointments.length - 1];\n }\n if (target.classList.contains(cls.MORE_EVENT_CLOSE_CLASS) && !isReverse) {\n moreEventWrapper.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).focus();\n }\n else if (target.classList.contains(cls.MORE_EVENT_HEADER_DATE_CLASS) && !isReverse) {\n this.selectAppointments(isReverse, target, true);\n }\n else if (target.classList.contains(cls.MORE_EVENT_HEADER_DATE_CLASS) && isReverse) {\n moreEventWrapper.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS).focus();\n }\n else if (target.classList.contains(cls.MORE_EVENT_CLOSE_CLASS) && isReverse) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.parent.eventBase.addSelectedAppointments([focusElement], focusElement);\n focusElement.focus();\n }\n else if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n if (isReverse && (target.getAttribute('data-guid') === (moreEventList[0]).getAttribute('data-guid'))) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n moreEventWrapper.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).focus();\n }\n else if (!isReverse && (target.getAttribute('data-guid') === (focusElement).getAttribute('data-guid'))) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n moreEventWrapper.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS).focus();\n }\n else {\n this.selectAppointments(isReverse, target, true);\n }\n }\n e.preventDefault();\n return;\n }\n var appointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n if (target.classList.contains(cls.ROOT)) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n if (selectedAppointments.length > 0) {\n target = selectedAppointments[selectedAppointments.length - 1];\n }\n if (!isReverse && target.getAttribute('data-guid') === appointments[appointments.length - 1].getAttribute('data-guid')) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n return;\n }\n if (isReverse && target.getAttribute('data-guid') === appointments[0].getAttribute('data-guid')) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n return;\n }\n this.selectAppointments(isReverse, target, false);\n e.preventDefault();\n return;\n }\n var selectedCells = this.parent.getSelectedElements();\n if (selectedCells.length > 0 && !target.classList.contains(cls.APPOINTMENT_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n this.selectAppointments(isReverse, target, false);\n e.preventDefault();\n return;\n }\n };\n KeyboardInteraction.prototype.processDelete = function (e) {\n if (document.activeElement.classList.contains(cls.APPOINTMENT_CLASS)) {\n addClass([document.activeElement], cls.APPOINTMENT_BORDER);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n this.parent.quickPopup.deleteClick();\n }\n this.parent.quickPopup.morePopup.hide();\n };\n KeyboardInteraction.prototype.processEscape = function () {\n this.parent.quickPopup.onClosePopup();\n this.parent.quickPopup.morePopup.hide();\n if (this.parent.headerModule) {\n this.parent.headerModule.hideHeaderPopup();\n }\n };\n /**\n * Get module name.\n */\n KeyboardInteraction.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n KeyboardInteraction.prototype.destroy = function () {\n this.removeEventListener();\n this.keyboardModule.destroy();\n };\n return KeyboardInteraction;\n}());\nexport { KeyboardInteraction };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and data source.\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n * @private\n */\n function Data(dataSource, query) {\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n * @return {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from schedule model\n * @return {void}\n * @private\n */\n Data.prototype.generateQuery = function (startDate, endDate) {\n var query = this.query.clone();\n if (startDate) {\n query.addParams('StartDate', startDate.toISOString());\n }\n if (endDate) {\n query.addParams('EndDate', endDate.toISOString());\n }\n return query;\n };\n /**\n * The function used to get dataSource by executing given Query\n * @param {Query} query - A Query that specifies to generate dataSource\n * @return {void}\n * @private\n */\n Data.prototype.getData = function (query) {\n return this.dataManager.executeQuery(query);\n };\n return Data;\n}());\nexport { Data };\n","/**\n * Time zone\n */\nvar Timezone = /** @class */ (function () {\n function Timezone() {\n }\n Timezone.prototype.offset = function (date, timezone) {\n var localOffset = date.getTimezoneOffset();\n try {\n var convertedDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n if (!isNaN(convertedDate.getTime())) {\n return ((date.getTime() - convertedDate.getTime()) / 60000) + localOffset;\n }\n return 0;\n }\n catch (error) {\n return 0;\n }\n };\n Timezone.prototype.convert = function (date, fromOffset, toOffset) {\n if (typeof fromOffset === 'string') {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset === 'string') {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n };\n Timezone.prototype.add = function (date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n };\n Timezone.prototype.remove = function (date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n };\n Timezone.prototype.removeLocalOffset = function (date) {\n return new Date(+date - (date.getTimezoneOffset() * 60000));\n };\n return Timezone;\n}());\nexport { Timezone };\nexport var localTimezoneName = Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\nexport var timezoneData = [\n { Value: 'Pacific/Niue', Text: '(UTC-11:00) Niue' },\n { Value: 'Pacific/Pago_Pago', Text: '(UTC-11:00) Pago Pago' },\n { Value: 'Pacific/Honolulu', Text: '(UTC-10:00) Hawaii Time' },\n { Value: 'Pacific/Rarotonga', Text: '(UTC-10:00) Rarotonga' },\n { Value: 'Pacific/Tahiti', Text: '(UTC-10:00) Tahiti' },\n { Value: 'Pacific/Marquesas', Text: '(UTC-09:30) Marquesas' },\n { Value: 'America/Anchorage', Text: '(UTC-09:00) Alaska Time' },\n { Value: 'Pacific/Gambier', Text: '(UTC-09:00) Gambier' },\n { Value: 'America/Los_Angeles', Text: '(UTC-08:00) Pacific Time' },\n { Value: 'America/Tijuana', Text: '(UTC-08:00) Pacific Time - Tijuana' },\n { Value: 'America/Vancouver', Text: '(UTC-08:00) Pacific Time - Vancouver' },\n { Value: 'America/Whitehorse', Text: '(UTC-08:00) Pacific Time - Whitehorse' },\n { Value: 'Pacific/Pitcairn', Text: '(UTC-08:00) Pitcairn' },\n { Value: 'America/Denver', Text: '(UTC-07:00) Mountain Time' },\n { Value: 'America/Phoenix', Text: '(UTC-07:00) Mountain Time - Arizona' },\n { Value: 'America/Mazatlan', Text: '(UTC-07:00) Mountain Time - Chihuahua, Mazatlan' },\n { Value: 'America/Dawson_Creek', Text: '(UTC-07:00) Mountain Time - Dawson Creek' },\n { Value: 'America/Edmonton', Text: '(UTC-07:00) Mountain Time - Edmonton' },\n { Value: 'America/Hermosillo', Text: '(UTC-07:00) Mountain Time - Hermosillo' },\n { Value: 'America/Yellowknife', Text: '(UTC-07:00) Mountain Time - Yellowknife' },\n { Value: 'America/Belize', Text: '(UTC-06:00) Belize' },\n { Value: 'America/Chicago', Text: '(UTC-06:00) Central Time' },\n { Value: 'America/Mexico_City', Text: '(UTC-06:00) Central Time - Mexico City' },\n { Value: 'America/Regina', Text: '(UTC-06:00) Central Time - Regina' },\n { Value: 'America/Tegucigalpa', Text: '(UTC-06:00) Central Time - Tegucigalpa' },\n { Value: 'America/Winnipeg', Text: '(UTC-06:00) Central Time - Winnipeg' },\n { Value: 'America/Costa_Rica', Text: '(UTC-06:00) Costa Rica' },\n { Value: 'America/El_Salvador', Text: '(UTC-06:00) El Salvador' },\n { Value: 'Pacific/Galapagos', Text: '(UTC-06:00) Galapagos' },\n { Value: 'America/Guatemala', Text: '(UTC-06:00) Guatemala' },\n { Value: 'America/Managua', Text: '(UTC-06:00) Managua' },\n { Value: 'America/Cancun', Text: '(UTC-05:00) America Cancun' },\n { Value: 'America/Bogota', Text: '(UTC-05:00) Bogota' },\n { Value: 'Pacific/Easter', Text: '(UTC-05:00) Easter Island' },\n { Value: 'America/New_York', Text: '(UTC-05:00) Eastern Time' },\n { Value: 'America/Iqaluit', Text: '(UTC-05:00) Eastern Time - Iqaluit' },\n { Value: 'America/Toronto', Text: '(UTC-05:00) Eastern Time - Toronto' },\n { Value: 'America/Guayaquil', Text: '(UTC-05:00) Guayaquil' },\n { Value: 'America/Havana', Text: '(UTC-05:00) Havana' },\n { Value: 'America/Jamaica', Text: '(UTC-05:00) Jamaica' },\n { Value: 'America/Lima', Text: '(UTC-05:00) Lima' },\n { Value: 'America/Nassau', Text: '(UTC-05:00) Nassau' },\n { Value: 'America/Panama', Text: '(UTC-05:00) Panama' },\n { Value: 'America/Port-au-Prince', Text: '(UTC-05:00) Port-au-Prince' },\n { Value: 'America/Rio_Branco', Text: '(UTC-05:00) Rio Branco' },\n { Value: 'America/Halifax', Text: '(UTC-04:00) Atlantic Time - Halifax' },\n { Value: 'America/Barbados', Text: '(UTC-04:00) Barbados' },\n { Value: 'Atlantic/Bermuda', Text: '(UTC-04:00) Bermuda' },\n { Value: 'America/Boa_Vista', Text: '(UTC-04:00) Boa Vista' },\n { Value: 'America/Caracas', Text: '(UTC-04:00) Caracas' },\n { Value: 'America/Curacao', Text: '(UTC-04:00) Curacao' },\n { Value: 'America/Grand_Turk', Text: '(UTC-04:00) Grand Turk' },\n { Value: 'America/Guyana', Text: '(UTC-04:00) Guyana' },\n { Value: 'America/La_Paz', Text: '(UTC-04:00) La Paz' },\n { Value: 'America/Manaus', Text: '(UTC-04:00) Manaus' },\n { Value: 'America/Martinique', Text: '(UTC-04:00) Martinique' },\n { Value: 'America/Port_of_Spain', Text: '(UTC-04:00) Port of Spain' },\n { Value: 'America/Porto_Velho', Text: '(UTC-04:00) Porto Velho' },\n { Value: 'America/Puerto_Rico', Text: '(UTC-04:00) Puerto Rico' },\n { Value: 'America/Santo_Domingo', Text: '(UTC-04:00) Santo Domingo' },\n { Value: 'America/Thule', Text: '(UTC-04:00) Thule' },\n { Value: 'America/St_Johns', Text: '(UTC-03:30) Newfoundland Time - St. Johns' },\n { Value: 'America/Araguaina', Text: '(UTC-03:00) Araguaina' },\n { Value: 'America/Asuncion', Text: '(UTC-03:00) Asuncion' },\n { Value: 'America/Belem', Text: '(UTC-03:00) Belem' },\n { Value: 'America/Argentina/Buenos_Aires', Text: '(UTC-03:00) Buenos Aires' },\n { Value: 'America/Campo_Grande', Text: '(UTC-03:00) Campo Grande' },\n { Value: 'America/Cayenne', Text: '(UTC-03:00) Cayenne' },\n { Value: 'America/Cuiaba', Text: '(UTC-03:00) Cuiaba' },\n { Value: 'America/Fortaleza', Text: '(UTC-03:00) Fortaleza' },\n { Value: 'America/Godthab', Text: '(UTC-03:00) Godthab' },\n { Value: 'America/Maceio', Text: '(UTC-03:00) Maceio' },\n { Value: 'America/Miquelon', Text: '(UTC-03:00) Miquelon' },\n { Value: 'America/Montevideo', Text: '(UTC-03:00) Montevideo' },\n { Value: 'Antarctica/Palmer', Text: '(UTC-03:00) Palmer' },\n { Value: 'America/Paramaribo', Text: '(UTC-03:00) Paramaribo' },\n { Value: 'America/Punta_Arenas', Text: '(UTC-03:00) Punta Arenas' },\n { Value: 'America/Recife', Text: '(UTC-03:00) Recife' },\n { Value: 'Antarctica/Rothera', Text: '(UTC-03:00) Rothera' },\n { Value: 'America/Bahia', Text: '(UTC-03:00) Salvador' },\n { Value: 'America/Santiago', Text: '(UTC-03:00) Santiago' },\n { Value: 'Atlantic/Stanley', Text: '(UTC-03:00) Stanley' },\n { Value: 'America/Noronha', Text: '(UTC-02:00) Noronha' },\n { Value: 'America/Sao_Paulo', Text: '(UTC-02:00) Sao Paulo' },\n { Value: 'Atlantic/South_Georgia', Text: '(UTC-02:00) South Georgia' },\n { Value: 'Atlantic/Azores', Text: '(UTC-01:00) Azores' },\n { Value: 'Atlantic/Cape_Verde', Text: '(UTC-01:00) Cape Verde' },\n { Value: 'America/Scoresbysund', Text: '(UTC-01:00) Scoresbysund' },\n { Value: 'Africa/Abidjan', Text: '(UTC+00:00) Abidjan' },\n { Value: 'Africa/Accra', Text: '(UTC+00:00) Accra' },\n { Value: 'Africa/Bissau', Text: '(UTC+00:00) Bissau' },\n { Value: 'Atlantic/Canary', Text: '(UTC+00:00) Canary Islands' },\n { Value: 'Africa/Casablanca', Text: '(UTC+00:00) Casablanca' },\n { Value: 'America/Danmarkshavn', Text: '(UTC+00:00) Danmarkshavn' },\n { Value: 'Europe/Dublin', Text: '(UTC+00:00) Dublin' },\n { Value: 'Africa/El_Aaiun', Text: '(UTC+00:00) El Aaiun' },\n { Value: 'Atlantic/Faroe', Text: '(UTC+00:00) Faeroe' },\n { Value: 'Etc/UTC', Text: '(UTC+00:00) UTC (no daylight saving)' },\n { Value: 'Europe/Lisbon', Text: '(UTC+00:00) Lisbon' },\n { Value: 'Europe/London', Text: '(UTC+00:00) London' },\n { Value: 'Africa/Monrovia', Text: '(UTC+00:00) Monrovia' },\n { Value: 'Atlantic/Reykjavik', Text: '(UTC+00:00) Reykjavik' },\n { Value: 'UTC', Text: 'UTC' },\n { Value: 'Africa/Algiers', Text: '(UTC+01:00) Algiers' },\n { Value: 'Europe/Amsterdam', Text: '(UTC+01:00) Amsterdam' },\n { Value: 'Europe/Andorra', Text: '(UTC+01:00) Andorra' },\n { Value: 'Europe/Berlin', Text: '(UTC+01:00) Berlin' },\n { Value: 'Europe/Brussels', Text: '(UTC+01:00) Brussels' },\n { Value: 'Europe/Budapest', Text: '(UTC+01:00) Budapest' },\n { Value: 'Europe/Belgrade', Text: '(UTC+01:00) Central European Time - Belgrade' },\n { Value: 'Europe/Prague', Text: '(UTC+01:00) Central European Time - Prague' },\n { Value: 'Africa/Ceuta', Text: '(UTC+01:00) Ceuta' },\n { Value: 'Europe/Copenhagen', Text: '(UTC+01:00) Copenhagen' },\n { Value: 'Europe/Gibraltar', Text: '(UTC+01:00) Gibraltar' },\n { Value: 'Africa/Lagos', Text: '(UTC+01:00) Lagos' },\n { Value: 'Europe/Luxembourg', Text: '(UTC+01:00) Luxembourg' },\n { Value: 'Europe/Madrid', Text: '(UTC+01:00) Madrid' },\n { Value: 'Europe/Malta', Text: '(UTC+01:00) Malta' },\n { Value: 'Europe/Monaco', Text: '(UTC+01:00) Monaco' },\n { Value: 'Africa/Ndjamena', Text: '(UTC+01:00) Ndjamena' },\n { Value: 'Europe/Oslo', Text: '(UTC+01:00) Oslo' },\n { Value: 'Europe/Paris', Text: '(UTC+01:00) Paris' },\n { Value: 'Europe/Rome', Text: '(UTC+01:00) Rome' },\n { Value: 'Europe/Stockholm', Text: '(UTC+01:00) Stockholm' },\n { Value: 'Europe/Tirane', Text: '(UTC+01:00) Tirane' },\n { Value: 'Africa/Tunis', Text: '(UTC+01:00) Tunis' },\n { Value: 'Europe/Vienna', Text: '(UTC+01:00) Vienna' },\n { Value: 'Europe/Warsaw', Text: '(UTC+01:00) Warsaw' },\n { Value: 'Europe/Zurich', Text: '(UTC+01:00) Zurich' },\n { Value: 'Asia/Amman', Text: '(UTC+02:00) Amman' },\n { Value: 'Europe/Athens', Text: '(UTC+02:00) Athens' },\n { Value: 'Asia/Beirut', Text: '(UTC+02:00) Beirut' },\n { Value: 'Europe/Bucharest', Text: '(UTC+02:00) Bucharest' },\n { Value: 'Africa/Cairo', Text: '(UTC+02:00) Cairo' },\n { Value: 'Europe/Chisinau', Text: '(UTC+02:00) Chisinau' },\n { Value: 'Asia/Damascus', Text: '(UTC+02:00) Damascus' },\n { Value: 'Asia/Gaza', Text: '(UTC+02:00) Gaza' },\n { Value: 'Europe/Helsinki', Text: '(UTC+02:00) Helsinki' },\n { Value: 'Asia/Jerusalem', Text: '(UTC+02:00) Jerusalem' },\n { Value: 'Africa/Johannesburg', Text: '(UTC+02:00) Johannesburg' },\n { Value: 'Africa/Khartoum', Text: '(UTC+02:00) Khartoum' },\n { Value: 'Europe/Kiev', Text: '(UTC+02:00) Kiev' },\n { Value: 'Africa/Maputo', Text: '(UTC+02:00) Maputo' },\n { Value: 'Europe/Kaliningrad', Text: '(UTC+02:00) Moscow-01 - Kaliningrad' },\n { Value: 'Asia/Nicosia', Text: '(UTC+02:00) Nicosia' },\n { Value: 'Europe/Riga', Text: '(UTC+02:00) Riga' },\n { Value: 'Europe/Sofia', Text: '(UTC+02:00) Sofia' },\n { Value: 'Europe/Tallinn', Text: '(UTC+02:00) Tallinn' },\n { Value: 'Africa/Tripoli', Text: '(UTC+02:00) Tripoli' },\n { Value: 'Europe/Vilnius', Text: '(UTC+02:00) Vilnius' },\n { Value: 'Africa/Windhoek', Text: '(UTC+02:00) Windhoek' },\n { Value: 'Asia/Baghdad', Text: '(UTC+03:00) Baghdad' },\n { Value: 'Europe/Istanbul', Text: '(UTC+03:00) Istanbul' },\n { Value: 'Europe/Minsk', Text: '(UTC+03:00) Minsk' },\n { Value: 'Europe/Moscow', Text: '(UTC+03:00) Moscow+00 - Moscow' },\n { Value: 'Africa/Nairobi', Text: '(UTC+03:00) Nairobi' },\n { Value: 'Asia/Qatar', Text: '(UTC+03:00) Qatar' },\n { Value: 'Asia/Riyadh', Text: '(UTC+03:00) Riyadh' },\n { Value: 'Antarctica/Syowa', Text: '(UTC+03:00) Syowa' },\n { Value: 'Asia/Tehran', Text: '(UTC+03:30) Tehran' },\n { Value: 'Asia/Baku', Text: '(UTC+04:00) Baku' },\n { Value: 'Asia/Dubai', Text: '(UTC+04:00) Dubai' },\n { Value: 'Indian/Mahe', Text: '(UTC+04:00) Mahe' },\n { Value: 'Indian/Mauritius', Text: '(UTC+04:00) Mauritius' },\n { Value: 'Europe/Samara', Text: '(UTC+04:00) Moscow+01 - Samara' },\n { Value: 'Indian/Reunion', Text: '(UTC+04:00) Reunion' },\n { Value: 'Asia/Tbilisi', Text: '(UTC+04:00) Tbilisi' },\n { Value: 'Asia/Yerevan', Text: '(UTC+04:00) Yerevan' },\n { Value: 'Asia/Kabul', Text: '(UTC+04:30) Kabul' },\n { Value: 'Asia/Aqtau', Text: '(UTC+05:00) Aqtau' },\n { Value: 'Asia/Aqtobe', Text: '(UTC+05:00) Aqtobe' },\n { Value: 'Asia/Ashgabat', Text: '(UTC+05:00) Ashgabat' },\n { Value: 'Asia/Dushanbe', Text: '(UTC+05:00) Dushanbe' },\n { Value: 'Asia/Karachi', Text: '(UTC+05:00) Karachi' },\n { Value: 'Indian/Kerguelen', Text: '(UTC+05:00) Kerguelen' },\n { Value: 'Indian/Maldives', Text: '(UTC+05:00) Maldives' },\n { Value: 'Antarctica/Mawson', Text: '(UTC+05:00) Mawson' },\n { Value: 'Asia/Yekaterinburg', Text: '(UTC+05:00) Moscow+02 - Yekaterinburg' },\n { Value: 'Asia/Tashkent', Text: '(UTC+05:00) Tashkent' },\n { Value: 'Asia/Colombo', Text: '(UTC+05:30) Colombo' },\n { Value: 'Asia/Kolkata', Text: '(UTC+05:30) India Standard Time' },\n { Value: 'Asia/Katmandu', Text: '(UTC+05:45) Katmandu' },\n { Value: 'Asia/Almaty', Text: '(UTC+06:00) Almaty' },\n { Value: 'Asia/Bishkek', Text: '(UTC+06:00) Bishkek' },\n { Value: 'Indian/Chagos', Text: '(UTC+06:00) Chagos' },\n { Value: 'Asia/Dhaka', Text: '(UTC+06:00) Dhaka' },\n { Value: 'Asia/Omsk', Text: '(UTC+06:00) Moscow+03 - Omsk' },\n { Value: 'Asia/Thimphu', Text: '(UTC+06:00) Thimphu' },\n { Value: 'Antarctica/Vostok', Text: '(UTC+06:00) Vostok' },\n { Value: 'Indian/Cocos', Text: '(UTC+06:30) Cocos' },\n { Value: 'Asia/Yangon', Text: '(UTC+06:30) Rangoon' },\n { Value: 'Asia/Bangkok', Text: '(UTC+07:00) Bangkok' },\n { Value: 'Indian/Christmas', Text: '(UTC+07:00) Christmas' },\n { Value: 'Antarctica/Davis', Text: '(UTC+07:00) Davis' },\n { Value: 'Asia/Saigon', Text: '(UTC+07:00) Hanoi' },\n { Value: 'Asia/Hovd', Text: '(UTC+07:00) Hovd' },\n { Value: 'Asia/Jakarta', Text: '(UTC+07:00) Jakarta' },\n { Value: 'Asia/Krasnoyarsk', Text: '(UTC+07:00) Moscow+04 - Krasnoyarsk' },\n { Value: 'Asia/Brunei', Text: '(UTC+08:00) Brunei' },\n { Value: 'Asia/Shanghai', Text: '(UTC+08:00) China Time - Beijing' },\n { Value: 'Asia/Choibalsan', Text: '(UTC+08:00) Choibalsan' },\n { Value: 'Asia/Hong_Kong', Text: '(UTC+08:00) Hong Kong' },\n { Value: 'Asia/Kuala_Lumpur', Text: '(UTC+08:00) Kuala Lumpur' },\n { Value: 'Asia/Macau', Text: '(UTC+08:00) Macau' },\n { Value: 'Asia/Makassar', Text: '(UTC+08:00) Makassar' },\n { Value: 'Asia/Manila', Text: '(UTC+08:00) Manila' },\n { Value: 'Asia/Irkutsk', Text: '(UTC+08:00) Moscow+05 - Irkutsk' },\n { Value: 'Asia/Singapore', Text: '(UTC+08:00) Singapore' },\n { Value: 'Asia/Taipei', Text: '(UTC+08:00) Taipei' },\n { Value: 'Asia/Ulaanbaatar', Text: '(UTC+08:00) Ulaanbaatar' },\n { Value: 'Australia/Perth', Text: '(UTC+08:00) Western Time - Perth' },\n { Value: 'Asia/Pyongyang', Text: '(UTC+08:30) Pyongyang' },\n { Value: 'Asia/Dili', Text: '(UTC+09:00) Dili' },\n { Value: 'Asia/Jayapura', Text: '(UTC+09:00) Jayapura' },\n { Value: 'Asia/Yakutsk', Text: '(UTC+09:00) Moscow+06 - Yakutsk' },\n { Value: 'Pacific/Palau', Text: '(UTC+09:00) Palau' },\n { Value: 'Asia/Seoul', Text: '(UTC+09:00) Seoul' },\n { Value: 'Asia/Tokyo', Text: '(UTC+09:00) Tokyo' },\n { Value: 'Australia/Darwin', Text: '(UTC+09:30) Central Time - Darwin' },\n { Value: 'Antarctica/DumontDUrville', Text: '(UTC+10:00) Dumont D\"Urville' },\n { Value: 'Australia/Brisbane', Text: '(UTC+10:00) Eastern Time - Brisbane' },\n { Value: 'Pacific/Guam', Text: '(UTC+10:00) Guam' },\n { Value: 'Asia/Vladivostok', Text: '(UTC+10:00) Moscow+07 - Vladivostok' },\n { Value: 'Pacific/Port_Moresby', Text: '(UTC+10:00) Port Moresby' },\n { Value: 'Pacific / Chuuk', Text: '(UTC+10:00) Truk' },\n { Value: 'Australia/Adelaide', Text: '(UTC+10:30) Central Time - Adelaide' },\n { Value: 'Antarctica/Casey', Text: '(UTC+11:00) Casey' },\n { Value: 'Australia/Hobart', Text: '(UTC+11:00) Eastern Time - Hobart' },\n { Value: 'Australia/Sydney', Text: '(UTC+11:00) Eastern Time - Melbourne, Sydney' },\n { Value: 'Pacific/Efate', Text: '(UTC+11:00) Efate' },\n { Value: 'Pacific/Guadalcanal', Text: '(UTC+11:00) Guadalcanal' },\n { Value: 'Pacific/Kosrae', Text: '(UTC+11:00) Kosrae' },\n { Value: 'Asia/Magadan', Text: '(UTC+11:00) Moscow+08 - Magadan' },\n { Value: 'Pacific / Norfolk', Text: '(UTC+11:00) Norfolk' },\n { Value: 'Pacific/Noumea', Text: '(UTC+11:00) Noumea' },\n { Value: 'Pacific/Pohnpei', Text: '(UTC+11:00) Ponape' },\n { Value: 'Pacific/Funafuti', Text: '(UTC+12:00) Funafuti' },\n { Value: 'Pacific/Kwajalein', Text: '(UTC+12:00) Kwajalein' },\n { Value: 'Pacific/Majuro', Text: '(UTC+12:00) Majuro' },\n { Value: 'Asia/Kamchatka', Text: '(UTC+12:00) Moscow+09 - Petropavlovsk - Kamchatskiy' },\n { Value: 'Pacific / Nauru', Text: '(UTC+12:00) Nauru' },\n { Value: 'Pacific/Tarawa', Text: '(UTC+12:00) Tarawa' },\n { Value: 'Pacific/Wake', Text: '(UTC+12:00) Wake' },\n { Value: 'Pacific/Wallis', Text: '(UTC+12:00) Wallis' },\n { Value: 'Pacific/Auckland', Text: '(UTC+13:00) Auckland' },\n { Value: 'Pacific/Enderbury', Text: '(UTC+13:00) Enderbury' },\n { Value: 'Pacific/Fakaofo', Text: '(UTC+13:00) Fakaofo' },\n { Value: 'Pacific/Fiji', Text: '(UTC+13:00) Fiji' },\n { Value: 'Pacific/Tongatapu', Text: '(UTC+13:00) Tongatapu' },\n { Value: 'Pacific/Apia', Text: '(UTC+14:00) Apia' },\n { Value: 'Pacific/Kiritimati', Text: '(UTC+14:00) Kiritimati' }\n];\n","import { isNullOrUndefined, closest, addClass, extend, EventHandler, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { Timezone } from '../timezone/timezone';\nimport { generate } from '../../recurrence-editor/date-generator';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\n/**\n * EventBase for appointment rendering\n */\nvar EventBase = /** @class */ (function () {\n /**\n * Constructor for EventBase\n */\n function EventBase(parent) {\n this.parent = parent;\n this.timezone = new Timezone();\n }\n EventBase.prototype.processData = function (events, timeZonePropChanged, oldTimezone) {\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var fields = this.parent.eventFields;\n this.parent.eventsProcessed = [];\n var processed = [];\n var temp = 1;\n var generateID = false;\n if (events.length > 0 && isNullOrUndefined(events[0][fields.id])) {\n generateID = true;\n }\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n if (generateID) {\n event_1[fields.id] = temp++;\n }\n if (timeZonePropChanged) {\n this.processTimezoneChange(event_1, oldTimezone);\n }\n else {\n this.processTimezone(event_1);\n }\n if (!isNullOrUndefined(event_1[fields.recurrenceRule]) && isNullOrUndefined(event_1[fields.recurrenceID])) {\n processed = processed.concat(this.generateOccurrence(event_1));\n }\n else {\n event_1.Guid = this.generateGuid();\n processed.push(event_1);\n }\n }\n this.parent.eventsProcessed = this.filterEvents(start, end, processed);\n return processed;\n };\n EventBase.prototype.timezonePropertyChange = function (oldTimezone) {\n var processed = this.processData(this.parent.eventsData, true, oldTimezone);\n this.parent.notify(event.dataReady, { processedData: processed });\n };\n EventBase.prototype.processTimezoneChange = function (event, oldTimezone) {\n var fields = this.parent.eventFields;\n if (oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.timezone.convert(event[fields.startTime], oldTimezone, this.parent.timezone);\n event[fields.endTime] = this.timezone.convert(event[fields.endTime], oldTimezone, this.parent.timezone);\n }\n else if (!oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.timezone.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], this.parent.timezone);\n }\n else if (oldTimezone && !this.parent.timezone) {\n event[fields.startTime] = this.timezone.remove(event[fields.startTime], oldTimezone);\n event[fields.endTime] = this.timezone.remove(event[fields.endTime], oldTimezone);\n }\n };\n EventBase.prototype.processTimezone = function (event) {\n var fields = this.parent.eventFields;\n if (event[fields.startTimezone] || event[fields.endTimezone]) {\n var startTimezone = event[fields.startTimezone] || event[fields.endTimezone];\n var endTimezone = event[fields.endTimezone] || event[fields.startTimezone];\n event[fields.startTime] = this.timezone.add(event[fields.startTime], startTimezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], endTimezone);\n if (this.parent.timezone) {\n var zone = this.parent.timezone;\n event[fields.startTime] = this.timezone.convert(event[fields.startTime], startTimezone, zone);\n event[fields.endTime] = this.timezone.convert(event[fields.endTime], endTimezone, zone);\n }\n }\n else if (this.parent.timezone) {\n event[fields.startTime] = this.timezone.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], this.parent.timezone);\n }\n };\n EventBase.prototype.filterEvents = function (startDate, endDate, collection) {\n var appointments = !isNullOrUndefined(collection) ? collection : this.parent.eventsProcessed;\n var fieldMapping = this.parent.eventFields;\n var predicate = new Predicate(fieldMapping.startTime, 'greaterthanorequal', startDate).\n and(new Predicate(fieldMapping.endTime, 'greaterthanorequal', startDate)).\n and(new Predicate(fieldMapping.startTime, 'lessthan', endDate)).\n or(new Predicate(fieldMapping.startTime, 'lessthanorequal', startDate).\n and(new Predicate(fieldMapping.endTime, 'greaterthan', startDate)));\n var filter = new DataManager({ json: appointments }).executeLocal(new Query().where(predicate));\n return this.sortByTime(filter);\n };\n EventBase.prototype.sortByTime = function (appointments) {\n var fieldMapping = this.parent.eventFields;\n appointments.sort(function (a, b) {\n var d1 = a[fieldMapping.startTime];\n var d2 = b[fieldMapping.startTime];\n return d1.getTime() - d2.getTime();\n });\n return appointments;\n };\n EventBase.prototype.sortByDateTime = function (appointments) {\n var fieldMapping = this.parent.eventFields;\n appointments.sort(function (object1, object2) {\n var d3 = object1[fieldMapping.startTime];\n var d4 = object2[fieldMapping.startTime];\n var d5 = object1[fieldMapping.endTime];\n var d6 = object2[fieldMapping.endTime];\n var d1 = d5.getTime() - d3.getTime();\n var d2 = d6.getTime() - d4.getTime();\n return (d3.getTime() - d4.getTime() || d2 - d1);\n });\n return appointments;\n };\n EventBase.prototype.getSmallestMissingNumber = function (array) {\n var large = Math.max.apply(Math, array);\n for (var i = 0; i < large; i++) {\n if (array.indexOf(i) === -1) {\n return i;\n }\n }\n return large + 1;\n };\n EventBase.prototype.splitEventByDay = function (event) {\n var eventFields = this.parent.eventFields;\n var data = [];\n var eventStartTime = event[eventFields.startTime];\n var eventEndTime = event[eventFields.endTime];\n var isDifferentDate = util.resetTime(new Date(eventStartTime.getTime())) <\n util.resetTime(new Date(eventEndTime.getTime()));\n if (isDifferentDate) {\n var start = new Date(eventStartTime.getTime());\n var end = util.addDays(util.resetTime(new Date(eventStartTime.getTime())), 1);\n var endDate = (eventEndTime.getHours() === 0 && eventEndTime.getMinutes() === 0) ?\n eventEndTime : util.addDays(eventEndTime, 1);\n var index = 1;\n var eventLength = util.getDaysCount(eventStartTime.getTime(), endDate.getTime());\n while (end <= eventEndTime) {\n var app = extend({}, event);\n app[eventFields.startTime] = start;\n app[eventFields.endTime] = end;\n app.data = { index: index, count: eventLength };\n app.Guid = this.generateGuid();\n app.isSpanned = true;\n data.push(app);\n start = end;\n if ((new Date(start.getTime()).setHours(0, 0, 0, 0) === new Date(eventEndTime.getTime()).setHours(0, 0, 0, 0))\n && !(end.getTime() === eventEndTime.getTime())) {\n end = new Date(new Date(start.getTime()).setHours(eventEndTime.getHours(), eventEndTime.getMinutes()));\n }\n else {\n end = util.addDays(util.resetTime(new Date(start.getTime())), 1);\n }\n index++;\n }\n }\n else {\n data.push(event);\n }\n return data;\n };\n EventBase.prototype.getSelectedEventElements = function (target) {\n this.removeSelectedAppointmentClass();\n if (this.parent.selectedElements.length <= 0) {\n this.parent.selectedElements.push(target);\n }\n else {\n var isAlreadySelected = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') === target.getAttribute('data-guid');\n });\n if (isAlreadySelected.length <= 0) {\n var focusElements = [].slice.call(this.parent.element.\n querySelectorAll('div[data-guid=\"' + target.getAttribute('data-guid') + '\"]'));\n for (var _i = 0, focusElements_1 = focusElements; _i < focusElements_1.length; _i++) {\n var element = focusElements_1[_i];\n this.parent.selectedElements.push(element);\n }\n }\n else {\n var selectedElements = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') !== target.getAttribute('data-guid');\n });\n this.parent.selectedElements = selectedElements;\n }\n }\n if (target && this.parent.selectedElements.length > 0) {\n this.addSelectedAppointments(this.parent.selectedElements, this.parent.selectedElements[0]);\n }\n return this.parent.selectedElements;\n };\n EventBase.prototype.getSelectedEvents = function () {\n var _this = this;\n var eventSelect = [];\n var elementSelect = [];\n var selectAppointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n selectAppointments.filter(function (element, index, selectAppointments) {\n eventSelect.push(_this.getEventByGuid(element.getAttribute('data-guid')));\n elementSelect.push(element);\n });\n return {\n event: eventSelect.length > 1 ? eventSelect : eventSelect[0],\n element: elementSelect.length > 1 ? elementSelect : elementSelect[0]\n };\n };\n EventBase.prototype.removeSelectedAppointmentClass = function () {\n var selectedAppointments = this.getSelectedAppointments();\n for (var _i = 0, selectedAppointments_1 = selectedAppointments; _i < selectedAppointments_1.length; _i++) {\n var appointment = selectedAppointments_1[_i];\n appointment.setAttribute('aria-selected', 'false');\n }\n removeClass(selectedAppointments, cls.APPOINTMENT_BORDER);\n };\n EventBase.prototype.addSelectedAppointments = function (cells, focusCell) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n cell.setAttribute('aria-selected', 'true');\n }\n addClass(cells, cls.APPOINTMENT_BORDER);\n };\n EventBase.prototype.getSelectedAppointments = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n };\n EventBase.prototype.focusElement = function () {\n var selectedCell = this.parent.getSelectedElements();\n if (selectedCell.length > 0) {\n if (this.parent.keyboardInteractionModule) {\n var target = (this.parent.activeCellsData.element ||\n selectedCell[selectedCell.length - 1]);\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n return;\n }\n var selectedAppointments = this.getSelectedAppointments();\n if (selectedAppointments.length > 0) {\n selectedAppointments[selectedAppointments.length - 1].focus();\n return;\n }\n };\n EventBase.prototype.selectWorkCellByTime = function (eventsData) {\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n return;\n }\n if (eventsData.length > 0) {\n var selectedObject = eventsData[eventsData.length - 1];\n var eventStartTime = selectedObject[this.parent.eventFields.startTime];\n var nearestTime = new Date(+eventStartTime).setMinutes(0, 0, 0);\n var isAllDay = this.isAllDayAppointment(selectedObject);\n if (this.parent.currentView === 'Month' || isAllDay) {\n nearestTime = new Date(+eventStartTime).setHours(0, 0, 0, 0);\n }\n var targetArea = void 0;\n if (isAllDay && ['Day', 'Week', 'WorkWeek'].indexOf(this.parent.currentView) !== -1) {\n targetArea = this.parent.getAllDayRow();\n }\n else {\n targetArea = this.parent.getContentTable();\n }\n var target = targetArea.querySelector('[data-date=\"' + nearestTime + '\"]');\n if (target) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n if (this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n }\n }\n };\n EventBase.prototype.isAllDayAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var isAllDay = event[fieldMapping.isAllDay];\n var isFullDay = ((event[fieldMapping.endTime].getTime() - event[fieldMapping.startTime].getTime())\n / util.MS_PER_DAY) >= 1;\n return (isAllDay || isFullDay) ? true : false;\n };\n EventBase.prototype.addEventListener = function () {\n this.parent.on(event.documentClick, this.appointmentBorderRemove, this);\n };\n EventBase.prototype.appointmentBorderRemove = function (event) {\n var target = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n var element = event.event.target;\n if (closest(element, '.' + cls.APPOINTMENT_CLASS)) {\n this.parent.removeSelectedClass();\n }\n else if (!closest(element, '.' + cls.POPUP_OPEN)) {\n this.removeSelectedAppointmentClass();\n }\n };\n EventBase.prototype.wireAppointmentEvents = function (element) {\n EventHandler.add(element, 'click', this.eventClick, this);\n EventHandler.add(element, 'dblclick', this.eventDoubleClick, this);\n };\n EventBase.prototype.eventClick = function (eventData) {\n if (eventData.ctrlKey && eventData.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.selectedElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n this.parent.keyboardInteractionModule.onAppointmentSelection(eventData);\n return;\n }\n this.removeSelectedAppointmentClass();\n this.activeEventData(eventData);\n var args = extend(this.parent.activeEventData, { cancel: false });\n this.parent.trigger(event.eventClick, args);\n if (args.cancel) {\n this.removeSelectedAppointmentClass();\n return;\n }\n this.parent.notify(event.eventClick, this.parent.activeEventData);\n };\n EventBase.prototype.eventDoubleClick = function (e) {\n this.parent.quickPopup.quickPopup.animation = { close: { effect: 'None' } };\n this.parent.quickPopup.quickPopup.close();\n if (e.type === 'touchstart') {\n this.activeEventData(e);\n }\n this.removeSelectedAppointmentClass();\n var fieldMapping = this.parent.eventFields;\n if (!isNullOrUndefined(this.parent.activeEventData.event) &&\n isNullOrUndefined(this.parent.activeEventData.event[fieldMapping.recurrenceID])) {\n this.parent.currentAction = 'Save';\n this.parent.eventWindow.openEditor(this.parent.activeEventData.event, 'Save');\n }\n else {\n this.parent.currentAction = 'EditOccurrence';\n this.parent.quickPopup.openRecurrenceAlert();\n }\n };\n EventBase.prototype.getEventByGuid = function (guid) {\n return new DataManager({ json: this.parent.eventsProcessed }).executeLocal(new Query().where('Guid', 'equal', guid))[0];\n };\n EventBase.prototype.generateGuid = function () {\n return 'xyxxxxyx-xxxy-yxxx-xyxx-xxyxxxxyyxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = (c === 'x') ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n EventBase.prototype.getEventMaxId = function () {\n var fields = this.parent.eventFields;\n if (this.parent.eventsData.length < 1) {\n return 0;\n }\n return Math.max.apply(Math, this.parent.eventsData.map(function (event) { return event[fields.id]; }));\n };\n EventBase.prototype.activeEventData = function (eventData) {\n var target = closest(eventData.target, '.' + cls.APPOINTMENT_CLASS);\n var guid = target.getAttribute('data-guid');\n addClass([].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]')), cls.APPOINTMENT_BORDER);\n var eventObject = this.getEventByGuid(guid);\n if (eventObject.isSpanned) {\n var fields_1 = this.parent.eventFields;\n eventObject = this.parent.eventsData.filter(function (obj) {\n return obj[fields_1.id] === eventObject[fields_1.id];\n })[0];\n }\n this.parent.activeEventData = { event: eventObject, element: target };\n };\n EventBase.prototype.generateOccurrence = function (event, viewDate) {\n var fields = this.parent.eventFields;\n var startDate = event[fields.startTime];\n var endDate = event[fields.endTime];\n var occurrenceCollection = [];\n var currentViewDate = isNullOrUndefined(viewDate) ? this.parent.activeView.startDate() : viewDate;\n var dates = generate(startDate, event[fields.recurrenceRule], event[fields.recurrenceException], this.parent.firstDayOfWeek, undefined, currentViewDate);\n var date = dates.shift();\n var duration = endDate.getTime() - startDate.getTime();\n while (date) {\n var clonedObject = extend({}, event, null, true);\n clonedObject[fields.startTime] = new Date(date);\n clonedObject[fields.endTime] = new Date(new Date(date).setMilliseconds(duration));\n clonedObject[fields.recurrenceID] = clonedObject[fields.id];\n clonedObject.Guid = this.generateGuid();\n occurrenceCollection.push(clonedObject);\n date = dates.shift();\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getRecurrenceEvent = function (eventData) {\n var eventFields = this.parent.eventFields;\n var parentApp = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(eventFields.id, 'equal', eventData[eventFields.recurrenceID]));\n return parentApp[0];\n };\n EventBase.prototype.getOccurrencesByID = function (id) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n var parentObject = this.parent.eventsData.filter(function (obj) { return obj[fields.id] === id; });\n for (var _i = 0, _a = parentObject; _i < _a.length; _i++) {\n var event_2 = _a[_i];\n if (!isNullOrUndefined(event_2[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_2));\n }\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getOccurrencesByRange = function (startTime, endTime) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {\n var event_3 = _a[_i];\n if (!isNullOrUndefined(event_3[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_3));\n }\n }\n var filter = occurrenceCollection.filter(function (obj) {\n return obj[fields.startTime] >= startTime && obj[fields.endTime] <= endTime && !isNullOrUndefined(obj[fields.recurrenceID]);\n });\n return filter;\n };\n return EventBase;\n}());\nexport { EventBase };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { getRecurrenceStringFromDate } from '../../recurrence-editor/date-generator';\nimport * as events from '../base/constant';\nimport { Timezone } from '../timezone/timezone';\n/**\n * Schedule CRUD operations\n */\nvar Crud = /** @class */ (function () {\n function Crud(parent) {\n this.parent = parent;\n this.timezone = new Timezone();\n }\n Crud.prototype.getQuery = function () {\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n return this.parent.dataModule.generateQuery(start, end);\n };\n Crud.prototype.refreshData = function (args) {\n var _this = this;\n var actionArgs = { requestType: args.requestType, cancel: false, data: args.data };\n if (this.parent.dataModule.dataManager.dataSource.offline) {\n this.parent.trigger(events.actionComplete, actionArgs);\n this.parent.renderModule.refreshDataManager();\n return;\n }\n else {\n args.promise.then(function (e) {\n if (_this.parent.isDestroyed) {\n return;\n }\n _this.parent.trigger(events.actionComplete, actionArgs);\n if (actionArgs.cancel) {\n return;\n }\n _this.parent.renderModule.refreshDataManager();\n }).catch(function (e) {\n if (_this.parent.isDestroyed) {\n return;\n }\n _this.parent.trigger(events.actionFailure, { error: e });\n });\n }\n };\n Crud.prototype.addEvent = function (eventData) {\n var fields = this.parent.eventFields;\n var promise = null;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var args = { requestType: 'eventCreate', cancel: false, data: eventData };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n if (eventData instanceof Array) {\n for (var _i = 0, _a = eventData; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n this.processCrudTimezone(event_1);\n editParms.addedRecords.push(event_1);\n }\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n }\n else {\n this.processCrudTimezone(eventData);\n promise = this.parent.dataModule.dataManager.insert(eventData, null, this.getQuery());\n }\n var crudArgs = { requestType: 'eventCreated', cancel: false, data: eventData, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.saveEvent = function (event, action) {\n var fields = this.parent.eventFields;\n var promise = null;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var args = { requestType: 'eventChange', cancel: false };\n var dataObj = [];\n (event instanceof Array) ? dataObj = event : dataObj.push(event);\n var data = event;\n if (isNullOrUndefined(action)) {\n args.data = data;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n this.processCrudTimezone(data);\n promise = this.parent.dataModule.dataManager.update(fields.id, event, null, this.getQuery());\n }\n else {\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(data);\n switch (action) {\n case 'EditOccurrence':\n args.data = { occurrence: event, parent: parentEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var exDate = this.excludeDateCheck(data[fields.startTime], parentEvent[fields.recurrenceException]);\n if (exDate !== parentEvent[fields.recurrenceException]) {\n parentEvent[fields.recurrenceException] = exDate;\n data[fields.recurrenceID] = parentEvent[fields.id];\n this.processCrudTimezone(parentEvent);\n editParms.changedRecords.push(parentEvent);\n this.processCrudTimezone(data);\n editParms.addedRecords.push(data);\n }\n else {\n this.processCrudTimezone(data);\n editParms.changedRecords.push(data);\n }\n break;\n case 'EditSeries':\n args.data = data;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var delApp = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(fields.recurrenceID, 'equal', parentEvent[fields.id]));\n data[fields.id] = parentEvent[fields.id];\n data[fields.recurrenceException] = null;\n data[fields.recurrenceID] = null;\n this.processCrudTimezone(data);\n editParms.changedRecords.push(data);\n for (var _i = 0, delApp_1 = delApp; _i < delApp_1.length; _i++) {\n var event_2 = delApp_1[_i];\n editParms.deletedRecords.push(event_2);\n }\n break;\n }\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n }\n this.parent.eventBase.selectWorkCellByTime(dataObj);\n var crudArgs = { requestType: 'eventChanged', cancel: false, data: args.data, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.deleteEvent = function (id, action) {\n var fields = this.parent.eventFields;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var dataObj = [];\n var normalEvent = [];\n var recEvent = [];\n switch (typeof id) {\n case 'string':\n case 'number':\n dataObj = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(fields.id, 'equal', id));\n break;\n case 'object':\n (id instanceof Array) ? dataObj = id : dataObj.push(id);\n break;\n }\n for (var _i = 0, dataObj_1 = dataObj; _i < dataObj_1.length; _i++) {\n var event_3 = dataObj_1[_i];\n (!isNullOrUndefined(event_3[fields.recurrenceRule])) ? recEvent.push(event_3) : normalEvent.push(event_3);\n }\n var args = { requestType: 'eventRemove', cancel: false };\n if (action !== 'DeleteOccurrence') {\n args.data = dataObj;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n }\n if (isNullOrUndefined(action) || normalEvent.length > 0) {\n for (var _a = 0, normalEvent_1 = normalEvent; _a < normalEvent_1.length; _a++) {\n var event_4 = normalEvent_1[_a];\n editParms.deletedRecords.push(event_4);\n }\n }\n if (recEvent.length > 0) {\n switch (action) {\n case 'Delete':\n case 'DeleteOccurrence':\n for (var i = 0; i < recEvent.length; i++) {\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(recEvent[i]);\n args.data = { occurrence: recEvent[i], parent: parentEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n parentEvent[fields.recurrenceException] =\n this.excludeDateCheck(recEvent[i][fields.startTime], parentEvent[fields.recurrenceException]);\n this.processCrudTimezone(parentEvent);\n editParms.changedRecords.push(parentEvent);\n if (recEvent[i][fields.id] !== parentEvent[fields.id]) {\n editParms.deletedRecords.push(recEvent[i]);\n }\n }\n break;\n case 'DeleteSeries':\n for (var _b = 0, recEvent_1 = recEvent; _b < recEvent_1.length; _b++) {\n var app = recEvent_1[_b];\n var predicate = new Predicate(fields.id, 'equal', app[fields.recurrenceID]).\n or(new Predicate(fields.recurrenceID, 'equal', app[fields.recurrenceID]));\n var delApp = new DataManager(this.parent.eventsData).executeLocal(new Query().where(predicate));\n for (var _c = 0, delApp_2 = delApp; _c < delApp_2.length; _c++) {\n var event_5 = delApp_2[_c];\n editParms.deletedRecords.push(event_5);\n }\n editParms.deletedRecords.push(app);\n }\n break;\n }\n }\n var promise;\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n this.parent.eventBase.selectWorkCellByTime(dataObj);\n var crudArgs = { requestType: 'eventRemoved', cancel: false, data: args.data, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.processCrudTimezone = function (events) {\n var fields = this.parent.eventFields;\n if (events[fields.startTimezone] || events[fields.endTimezone]) {\n var startTimezone = events[fields.startTimezone] || events[fields.endTimezone];\n var endTimezone = events[fields.endTimezone] || events[fields.startTimezone];\n if (this.parent.timezone) {\n var zone = this.parent.timezone;\n events[fields.startTime] = this.timezone.convert(events[fields.startTime], startTimezone, zone);\n events[fields.endTime] = this.timezone.convert(events[fields.endTime], endTimezone, zone);\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], zone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], zone);\n }\n else {\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], startTimezone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], endTimezone);\n }\n }\n else if (this.parent.timezone) {\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], this.parent.timezone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], this.parent.timezone);\n }\n };\n Crud.prototype.excludeDateCheck = function (eventStartTime, exceptionDateList) {\n var exDate = getRecurrenceStringFromDate(eventStartTime);\n if (!isNullOrUndefined(exceptionDateList)) {\n if (exceptionDateList.indexOf(exDate) === -1) {\n exceptionDateList = !(isNullOrUndefined(exceptionDateList)) ? exceptionDateList + ',' + exDate : exDate;\n }\n }\n else {\n exceptionDateList = exDate;\n }\n return exceptionDateList;\n };\n return Crud;\n}());\nexport { Crud };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport * as cls from '../base/css-constant';\n/**\n * Appointment window field validation\n */\nvar FieldValidator = /** @class */ (function () {\n function FieldValidator(parent) {\n this.parent = parent;\n }\n FieldValidator.prototype.renderFormValidator = function (form, rules) {\n var _this = this;\n this.formObj = new FormValidator(form, {\n customPlacement: function (inputElement, error) {\n _this.errorPlacement(inputElement, error);\n },\n rules: rules,\n validationComplete: function (args) {\n _this.validationComplete(args);\n }\n });\n };\n FieldValidator.prototype.validationComplete = function (args) {\n var elem = document.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 FieldValidator.prototype.errorPlacement = function (inputElement, error) {\n var id = error.getAttribute('for');\n var elem = document.querySelector('#' + id + '_Error');\n if (!elem) {\n this.createTooltip(inputElement, error, id, '');\n }\n };\n FieldValidator.prototype.createTooltip = function (element, error, name, display) {\n var dlgContent;\n var client;\n var inputClient = element.getBoundingClientRect();\n var quickPopupElement = document.querySelector('.' + cls.QUICK_POPUP_ROOT_CLASS);\n if (quickPopupElement) {\n dlgContent = quickPopupElement.querySelector('.' + cls.QUICK_POPUP_CLASS);\n client = dlgContent.getBoundingClientRect();\n }\n else {\n dlgContent = document.querySelector('.e-schedule-dialog .e-dlg-content');\n client = dlgContent.getBoundingClientRect();\n }\n var div = createElement('div', {\n className: 'e-tooltip-wrap e-popup ' + cls.ERROR_VALIDATION_CLASS,\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n (inputClient.bottom - client.top + dlgContent.scrollTop + 9) + 'px;left:' +\n (inputClient.left - client.left + dlgContent.scrollLeft + inputClient.width / 2) + 'px;'\n });\n var content = createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow = createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n div.appendChild(content);\n div.appendChild(arrow);\n dlgContent.appendChild(div);\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n };\n FieldValidator.prototype.destroyToolTip = function () {\n var elements = [].slice.call(document.querySelectorAll('.' + cls.ERROR_VALIDATION_CLASS));\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.formObj.reset();\n };\n /**\n * @hidden\n */\n FieldValidator.prototype.destroyForm = function () {\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n };\n return FieldValidator;\n}());\nexport { FieldValidator };\n","import { compile, closest, EventHandler, isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, createElement, remove, extend } from '@syncfusion/ej2-base';\nimport { Dialog, Popup, Tooltip } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Crud } from '../actions/crud';\nimport { timezoneData } from '../timezone/timezone';\nimport { FieldValidator } from './form-validator';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\nvar moreEventHeight = 20;\n/**\n * Quick Popups interactions\n */\nvar QuickPopups = /** @class */ (function () {\n /**\n * Constructor for QuickPopups\n */\n function QuickPopups(parent) {\n this.isMultipleEventSelect = false;\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.crudAction = new Crud(parent);\n this.fieldValidator = new FieldValidator(this.parent);\n this.render();\n this.addEventListener();\n }\n QuickPopups.prototype.render = function () {\n this.renderQuickPopup();\n this.renderQuickDialog();\n this.renderMoreEventPopup();\n this.renderEventPopup();\n };\n QuickPopups.prototype.renderQuickPopup = function () {\n this.quickPopup = new Tooltip({\n animation: { open: { effect: 'FadeIn' }, close: { effect: 'FadeOut' } },\n afterOpen: this.afterQuickPopupOpen.bind(this),\n beforeOpen: this.beforeQuickPopupOpen.bind(this),\n beforeClose: this.beforeQuickPopupClose.bind(this),\n afterClose: this.afterQuickPopupClose.bind(this),\n cssClass: cls.QUICK_POPUP_ROOT_CLASS,\n enableRtl: this.parent.enableRtl, isSticky: true,\n opensOn: 'custom',\n showTipPointer: false\n });\n this.quickPopup.appendTo(this.parent.element);\n this.primaryButton = new Button({\n cssClass: 'e-primary',\n disabled: this.parent.activeViewOptions.readonly,\n enableRtl: this.parent.enableRtl\n });\n this.flatButton = new Button({\n cssClass: 'e-flat',\n disabled: this.parent.activeViewOptions.readonly,\n enableRtl: this.parent.enableRtl\n });\n };\n QuickPopups.prototype.renderQuickDialog = function () {\n this.quickDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n buttons: [\n { buttonModel: { isPrimary: true }, click: this.dialogButtonClick.bind(this) },\n { buttonModel: { isPrimary: false }, click: this.dialogButtonClick.bind(this) }\n ],\n cssClass: cls.QUICK_DIALOG_CLASS,\n closeOnEscape: true,\n enableRtl: this.parent.enableRtl,\n beforeClose: this.beforeQuickDialogClose.bind(this),\n isModal: true,\n position: { X: 'center', Y: 'center' },\n showCloseIcon: true,\n target: document.body,\n visible: false,\n width: 'auto'\n });\n var dialogElement = createElement('div', { id: this.parent.element.id + 'QuickDialog' });\n this.parent.element.appendChild(dialogElement);\n this.quickDialog.appendTo(dialogElement);\n };\n QuickPopups.prototype.renderMoreEventPopup = function () {\n var moreEventWrapper = createElement('div', { className: cls.MORE_POPUP_WRAPPER_CLASS + ' e-popup-close' });\n this.parent.element.appendChild(moreEventWrapper);\n var moreEventHeader = '
    ' +\n '
    ' +\n '
    ' +\n '
    ';\n var moreEventArgs = {\n classList: [\n cls.MORE_EVENT_POPUP_CLASS, cls.MORE_EVENT_HEADER_CLASS, cls.MORE_EVENT_DATE_HEADER_CLASS,\n cls.MORE_EVENT_HEADER_DAY_CLASS, cls.MORE_EVENT_HEADER_DATE_CLASS + ' ' + cls.NAVIGATE_CLASS, cls.MORE_EVENT_CLOSE_CLASS\n ],\n l10n: { close: this.l10n.getConstant('close'), noTitle: this.l10n.getConstant('noTitle') }\n };\n var moreEventContent = compile(moreEventHeader)(moreEventArgs)[0];\n this.morePopup = new Popup(moreEventWrapper, {\n targetType: 'relative',\n content: moreEventContent,\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'ZoomOut', duration: 300 },\n showAnimation: { name: 'ZoomIn', duration: 300 },\n open: this.afterMorePopupOpen.bind(this),\n close: this.afterMorePopupClose.bind(this),\n collision: { X: 'flip', Y: 'flip' },\n viewPortElement: this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS),\n zIndex: 10\n });\n var closeButton = new Button({ iconCss: 'e-icons e-close-icon', cssClass: 'e-round', isPrimary: false });\n closeButton.appendTo(moreEventContent.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS));\n EventHandler.add(moreEventContent.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS), 'click', this.closeClick, this);\n EventHandler.add(moreEventContent.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS), 'click', this.dayNavigationClick, this);\n };\n QuickPopups.prototype.dayNavigationClick = function (e) {\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n if (!isNullOrUndefined(navigateEle)) {\n var date = this.parent.getDateFromElement(e.currentTarget);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.closeClick();\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n }\n };\n QuickPopups.prototype.renderEventPopup = function () {\n var viewHeight = document.body.offsetHeight;\n var toolBarHeight = this.parent.element.querySelector('.' + cls.TOOLBAR_CONTAINER);\n var eventWrapper = createElement('div', {\n className: cls.SELECT_POPUP_WRAPPER_CLASS + ' e-popup-close'\n });\n this.parent.element.appendChild(eventWrapper);\n var eventTemplate = '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ';\n var eventSelectTemplate = '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ';\n var eventArgs = {\n classList: [\n cls.QUICK_POPUP_CLASS, cls.QUICK_POPUP_TABLE_CLASS, cls.SELECTED_EVENT_CLOSE_CLASS,\n cls.SELECTED_EVENT_EDIT_CLASS, cls.SELECTED_EVENT_DELETE_CLASS, cls.ICON,\n cls.QUICK_POPUP_EVENT_TITLE_CLASS, cls.QUICK_POPUP_TEXT_ALIGN_CLASS, cls.QUICK_POPUP_DATE_TIME_DETAILS_CLASS,\n cls.QUICK_POPUP_CONTENT_CLASS, cls.SELECTED_DATE_TIME_CLASS, cls.APPOINTMENT_TIME, cls.SELECTED_EVENT_TITLE_CLASS,\n cls.SELECTED_EVENT_CONTAINER_CLASS, cls.APPOINTMENT_LOCATION, cls.SELECTED_CALENDER_CLASS,\n cls.QUICK_POPUP_LOCATION_DETAILS_CLASS, cls.EVENT_WINDOW_TZ_CLASS, cls.EVENT_TIME_ZONE_CLASS,\n cls.EVENT_ZONE_DETAILS_CLASS, cls.EVENT_DETAILS_CLASS, cls.EVENT_NOTE_CLASS, cls.EVENT_NOTE_DETAILS_CLASS,\n cls.QUICK_POPUP_ICON_CLASS, cls.QUICK_POPUP_CLOSE_ICON_CLASS, cls.QUICK_POPUP_EDIT_ICON_CLASS,\n cls.DEVICE_DATE_TIME_DETAILS_CLASS, cls.DEVICE_RECURRENCE_SUMMARY_CLASS\n ],\n id: this.parent.element.id,\n l10n: {\n close: this.l10n.getConstant('closeButton'),\n delete: this.l10n.getConstant('delete'),\n editSeries: this.l10n.getConstant('editSeries'),\n editEvent: this.l10n.getConstant('editEvent')\n }\n };\n this.selectedEventPopup = compile(eventTemplate)(eventArgs)[0];\n this.multipleEventPopup = compile(eventSelectTemplate)(eventArgs)[0];\n this.eventPopup = new Popup(eventWrapper, {\n targetType: 'relative',\n content: this.selectedEventPopup,\n collision: { X: 'fit', Y: 'fit' },\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'ZoomOut' },\n showAnimation: { name: 'ZoomIn' },\n relateTo: document.body\n });\n eventWrapper.querySelector('.' + cls.QUICK_POPUP_TABLE_CLASS).style.height = formatUnit((viewHeight * 25) / 100);\n eventWrapper.querySelector('.' + cls.QUICK_POPUP_CONTENT_CLASS).style.height = formatUnit((viewHeight * 75) / 100);\n EventHandler.add(this.selectedEventPopup.querySelector('.' + cls.SELECTED_EVENT_CLOSE_CLASS), 'click', this.closeClick, this);\n EventHandler.add(this.selectedEventPopup.querySelector('.' + cls.SELECTED_EVENT_EDIT_CLASS), 'click', this.editClick, this);\n EventHandler.add(this.selectedEventPopup.querySelector('.' + cls.SELECTED_EVENT_DELETE_CLASS), 'click', this.deleteClick, this);\n EventHandler.add(this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_CLOSE_CLASS), 'click', this.closeClick, this);\n EventHandler.add(this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_EDIT_CLASS), 'click', this.editClick, this);\n EventHandler.add(this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_DELETE_CLASS), 'click', this.deleteClick, this);\n };\n QuickPopups.prototype.openRecurrenceAlert = function () {\n var dialogFooter = this.quickDialog.element.querySelector('.' + cls.DIALOG_FOOTER_CONTENT_CLASS).children;\n dialogFooter[0].innerHTML = (this.parent.currentAction === 'Delete') ? this.l10n.getConstant('deleteEvent') :\n this.l10n.getConstant('editEvent');\n dialogFooter[1].innerHTML = (this.parent.currentAction === 'Delete') ? this.l10n.getConstant('deleteSeries') :\n this.l10n.getConstant('editSeries');\n this.quickDialog.content = (this.parent.currentAction === 'Delete') ? this.l10n.getConstant('deleteRecurrenceContent') :\n this.l10n.getConstant('editContent');\n this.quickDialog.header = (this.parent.currentAction === 'Delete') ? this.l10n.getConstant('deleteEvent') :\n this.l10n.getConstant('editEvent');\n this.quickDialogClass('Recurrence');\n this.showQuickDialog('RecurrenceAlert');\n };\n QuickPopups.prototype.openDeleteAlert = function () {\n var dialogFooter = this.quickDialog.element.querySelector('.' + cls.DIALOG_FOOTER_CONTENT_CLASS).children;\n dialogFooter[0].innerHTML = this.l10n.getConstant('delete');\n dialogFooter[1].innerHTML = this.l10n.getConstant('cancel');\n this.quickDialog.content = this.l10n.getConstant('deleteContent');\n this.quickDialog.header = this.l10n.getConstant('deleteEvent');\n this.quickDialogClass('Delete');\n this.showQuickDialog('DeleteAlert');\n };\n QuickPopups.prototype.openValidationError = function (type) {\n this.quickDialog.header = this.l10n.getConstant('alert');\n this.quickDialog.content = this.l10n.getConstant(type);\n var dialogFooter = this.quickDialog.element.querySelector('.' + cls.DIALOG_FOOTER_CONTENT_CLASS).children;\n dialogFooter[0].innerHTML = this.l10n.getConstant('ok');\n dialogFooter[1].innerHTML = this.l10n.getConstant('cancel');\n this.quickDialogClass('Alert');\n this.showQuickDialog('ValidationAlert');\n };\n QuickPopups.prototype.showQuickDialog = function (popupType) {\n this.quickDialog.dataBind();\n var eventProp = {\n type: popupType, cancel: false, data: this.parent.activeEventData,\n element: this.quickDialog.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.quickDialog.show();\n };\n QuickPopups.prototype.createMoreEventList = function (events) {\n var fields = this.parent.eventFields;\n var moreEventContentEle = createElement('div', { className: cls.MORE_EVENT_CONTENT_CLASS });\n var moreEventWrapperEle = createElement('div', { className: cls.MORE_EVENT_WRAPPER_CLASS });\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n var appointmentEle = createElement('div', {\n id: '' + event_1[fields.id],\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-guid': event_1.Guid,\n 'role': 'button', 'tabindex': '0', 'aria-readonly': 'false', 'aria-selected': 'false', 'aria-grabbed': 'true',\n 'aria-label': isNullOrUndefined(event_1[fields.subject]) ?\n this.parent.eventSettings.fields.subject.default : event_1[fields.subject]\n }\n });\n appointmentEle.appendChild(createElement('div', {\n className: cls.APPOINTMENT_SUBJECT,\n innerHTML: event_1[fields.subject] || this.parent.eventSettings.fields.subject.default\n }));\n if (!isNullOrUndefined(event_1[fields.recurrenceRule])) {\n var iconClass = (event_1[fields.id] === event_1[fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentEle.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n this.parent.eventBase.wireAppointmentEvents(appointmentEle);\n moreEventWrapperEle.appendChild(appointmentEle);\n }\n moreEventContentEle.appendChild(moreEventWrapperEle);\n return moreEventContentEle;\n };\n QuickPopups.prototype.eventHold = function (args) {\n var target = args.target;\n this.isMultipleEventSelect = false;\n if (!isNullOrUndefined(closest(target, '.' + cls.APPOINTMENT_CLASS)) && this.parent.isAdaptive) {\n target = closest(target, '.' + cls.APPOINTMENT_CLASS);\n this.parent.selectedElements = [];\n this.isMultipleEventSelect = true;\n this.selectedEventDialog(target);\n return;\n }\n };\n QuickPopups.prototype.cellClick = function (args) {\n if (!this.parent.showQuickInfo || this.parent.currentView === 'MonthAgenda') {\n return;\n }\n var target = closest(args.event.target, '.' + cls.WORK_CELLS_CLASS + ',.' +\n cls.ALLDAY_CELLS_CLASS + ',.' + cls.HEADER_CELLS_CLASS);\n if (isNullOrUndefined(target) || args.event.target.classList.contains(cls.MORE_INDICATOR_CLASS) ||\n args.event.target.classList.contains(cls.APPOINTMENT_COUNT_CLASS)) {\n return;\n }\n var timeDetails = this.parent.activeCellsData.isAllDay ? this.l10n.getConstant('allDay') :\n this.getDateFormat(this.parent.activeCellsData.startTime, 'hm') + ' - ' +\n this.getDateFormat(this.parent.activeCellsData.endTime, 'hm');\n var temp = {};\n temp[this.parent.eventFields.startTime] = this.parent.activeCellsData.startTime;\n temp[this.parent.eventFields.endTime] = this.parent.activeCellsData.endTime;\n temp[this.parent.eventFields.isAllDay] = this.parent.activeCellsData.isAllDay;\n var cellDetails = this.getFormattedString(temp, 'cell');\n var cellTemplate = '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' + cellDetails.details + '
    ' +\n '
    ${l10n.moreDetails}
    ' +\n '
    ${l10n.save}
    ';\n var cellArgs = {\n classList: [\n cls.QUICK_POPUP_CLASS, cls.QUICK_POPUP_TABLE_CLASS, cls.EVENT_WINDOW_FORM_CLASS, cls.QUICK_POPUP_SUBJECT_CLASS,\n cls.QUICK_POPUP_DATE_TIME_DETAILS_CLASS, cls.QUICK_POPUP_FOOTER_CLASS, cls.QUICK_POPUP_EVENT_DETAILS_CLASS,\n cls.QUICK_POPUP_EVENT_CREATE_CLASS, cls.QUICK_POPUP_TEXT_ALIGN_CLASS\n ],\n id: this.parent.element.id,\n l10n: {\n moreDetails: this.l10n.getConstant('moreDetails'),\n save: this.l10n.getConstant('save')\n }\n };\n var quickCellPopup = compile(cellTemplate)(cellArgs)[0];\n Input.createInput({\n element: quickCellPopup.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS),\n properties: { placeholder: this.l10n.getConstant('addTitle') }\n });\n this.flatButton.appendTo(quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS));\n this.primaryButton.appendTo(quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS));\n EventHandler.add(quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS), 'click', this.saveClick, this);\n EventHandler.add(quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS), 'click', this.detailsClick, this);\n this.quickPopup.content = quickCellPopup;\n this.quickPopup.target = '.' + cls.WORK_CELLS_CLASS;\n this.quickPopup.dataBind();\n this.applyFormValidation();\n if (this.morePopup) {\n this.morePopup.hide();\n }\n if (!this.parent.isAdaptive && target.getAttribute('data-tooltip-id') === null) {\n this.quickPopup.close();\n this.quickPopup.open(target);\n }\n else {\n quickCellPopup.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS).focus();\n }\n };\n QuickPopups.prototype.applyFormValidation = function () {\n var form = this.quickPopup.content\n .querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS);\n var rules = {};\n rules[this.parent.eventSettings.fields.subject.name] = this.parent.eventSettings.fields.subject.validation;\n this.fieldValidator.renderFormValidator(form, rules);\n };\n QuickPopups.prototype.eventClick = function (events) {\n if (this.parent.eventTooltip) {\n this.parent.eventTooltip.close();\n }\n if (!this.parent.showQuickInfo) {\n return;\n }\n if (this.parent.isAdaptive) {\n if (this.isMultipleEventSelect) {\n this.selectedEventDialog(closest(events.element, '.' + cls.APPOINTMENT_CLASS));\n }\n else {\n this.deviceEventClick(events);\n }\n }\n else {\n var eventData = events.event;\n var args = this.getFormattedString(eventData, 'event');\n var eventTemplate = '
    ' +\n '' +\n '' +\n '
    ' + args.eventSubject + '
    ' + args.details + '
    ' +\n '
    ${l10n.delete}
    ' +\n '
    ${l10n.edit}
    ';\n var eventArgs = {\n classList: [\n cls.QUICK_POPUP_CLASS, cls.QUICK_POPUP_TABLE_CLASS, cls.QUICK_POPUP_EVENT_TITLE_CLASS,\n cls.QUICK_POPUP_DATE_TIME_DETAILS_CLASS, cls.QUICK_POPUP_FOOTER_CLASS, cls.QUICK_POPUP_DELETE_EVENT_CLASS,\n cls.QUICK_POPUP_EDIT_EVENT_CLASS, cls.QUICK_POPUP_TEXT_ALIGN_CLASS\n ],\n id: this.parent.element.id,\n l10n: {\n delete: this.l10n.getConstant('delete'),\n edit: this.l10n.getConstant('edit')\n }\n };\n var quickEventPopup = compile(eventTemplate)(eventArgs)[0];\n this.flatButton.appendTo(quickEventPopup.querySelector('.' + cls.QUICK_POPUP_DELETE_EVENT_CLASS));\n this.primaryButton.appendTo(quickEventPopup.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS));\n EventHandler.add(quickEventPopup.querySelector('.' + cls.QUICK_POPUP_DELETE_EVENT_CLASS), 'click', this.deleteClick, this);\n EventHandler.add(quickEventPopup.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS), 'click', this.editClick, this);\n this.quickPopup.content = quickEventPopup;\n this.quickPopup.target = '.' + cls.APPOINTMENT_CLASS;\n this.quickPopup.dataBind();\n if (this.morePopup && !closest(events.element, '.' + cls.MORE_EVENT_WRAPPER_CLASS)) {\n this.morePopup.hide();\n }\n if (!this.parent.isAdaptive && events.element.getAttribute('data-tooltip-id') === null) {\n this.quickPopup.close();\n this.quickPopup.open(events.element);\n }\n else {\n this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS).focus();\n }\n }\n };\n QuickPopups.prototype.deviceEventClick = function (events) {\n var fields = this.parent.eventFields;\n var eventData = events.event;\n var eventSelectSubject = (isNullOrUndefined(eventData[fields.subject])) ?\n this.l10n.getConstant('noTitle') : eventData[fields.subject];\n var eventTimeDetails = (eventData[fields.isAllDay]) ? this.l10n.getConstant('allDay') :\n this.getDateFormat(eventData[fields.startTime], 'hm') + ' - ' +\n this.getDateFormat(eventData[fields.endTime], 'hm');\n var eventSelectDetails = this.getTimeDetails(eventData) + ' (' + eventTimeDetails + ')';\n this.selectedEventPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_TITLE_CLASS).innerHTML = eventSelectSubject;\n this.selectedEventPopup.querySelector('.' + cls.DEVICE_DATE_TIME_DETAILS_CLASS).innerHTML = eventSelectDetails;\n this.selectedEventPopup.querySelector('.' + cls.QUICK_POPUP_LOCATION_DETAILS_CLASS).innerHTML =\n (!isNullOrUndefined(eventData[fields.location])) ? eventData[fields.location] : '';\n this.selectedEventPopup.querySelector('.' + cls.EVENT_ZONE_DETAILS_CLASS).innerHTML = this.getTimezone(eventData);\n this.selectedEventPopup.querySelector('.' + cls.EVENT_NOTE_DETAILS_CLASS).innerHTML =\n (!isNullOrUndefined(eventData[fields.description])) ? eventData[fields.description] : '';\n if (!isNullOrUndefined(eventData[fields.recurrenceRule])) {\n var recurrenceEditor = this.parent.eventWindow.getRecurrenceEditorInstance();\n var ruleSummary = recurrenceEditor.getRuleSummary(eventData[fields.recurrenceRule]);\n this.selectedEventPopup.querySelector('.' + cls.DEVICE_RECURRENCE_SUMMARY_CLASS).innerHTML =\n ruleSummary.charAt(0).toUpperCase() + ruleSummary.slice(1);\n }\n else {\n this.selectedEventPopup.querySelector('.' + cls.DEVICE_RECURRENCE_SUMMARY_CLASS).innerHTML = '';\n }\n if (isNullOrUndefined(eventData[fields.location]) || eventData[fields.location] === '') {\n addClass([this.selectedEventPopup.querySelector('.' + cls.APPOINTMENT_LOCATION)], cls.DISABLE_CLASS);\n }\n else {\n removeClass([this.selectedEventPopup.querySelector('.' + cls.APPOINTMENT_LOCATION)], cls.DISABLE_CLASS);\n }\n if (isNullOrUndefined(eventData[fields.startTimezone]) && isNullOrUndefined(eventData[fields.endTimezone])) {\n addClass([this.selectedEventPopup.querySelector('.' + cls.EVENT_WINDOW_TZ_CLASS)], cls.DISABLE_CLASS);\n }\n else {\n removeClass([this.selectedEventPopup.querySelector('.' + cls.EVENT_WINDOW_TZ_CLASS)], cls.DISABLE_CLASS);\n }\n if (isNullOrUndefined(eventData[fields.description]) || eventData[fields.description] === '') {\n addClass([this.selectedEventPopup.querySelector('.' + cls.EVENT_DETAILS_CLASS)], cls.DISABLE_CLASS);\n }\n else {\n removeClass([this.selectedEventPopup.querySelector('.' + cls.EVENT_DETAILS_CLASS)], cls.DISABLE_CLASS);\n }\n this.eventPopup.content = this.selectedEventPopup;\n if (this.eventPopup && !closest(events.element, '.' + cls.MORE_EVENT_WRAPPER_CLASS)) {\n this.showEventPopup('ViewEventInfo');\n }\n };\n QuickPopups.prototype.showEventPopup = function (popupType) {\n var eventProp = {\n type: popupType, cancel: false, data: this.parent.activeEventData.event,\n target: this.parent.activeEventData.element, element: this.eventPopup.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.eventPopup.show();\n };\n QuickPopups.prototype.getFormattedString = function (eventData, type) {\n var fields = this.parent.eventFields;\n var eventSubject = isNullOrUndefined(eventData[fields.subject]) ? this.l10n.getConstant('noTitle') :\n eventData[fields.subject];\n var startDate = eventData[fields.startTime];\n var endDate = eventData[fields.endTime];\n var startDateDetails = this.getDateFormat(startDate, 'long');\n var endDateDetails = (eventData[fields.isAllDay] && endDate.getHours() === 0 && endDate.getMinutes() === 0) ?\n this.getDateFormat(util.addDays(new Date(endDate.getTime()), -1), 'long') : this.getDateFormat(endDate, 'long');\n var startTimeDetail = this.getDateFormat(startDate, 'hm');\n var endTimeDetail = this.getDateFormat(endDate, 'hm');\n var details;\n var allDayLength = (endDate.getTime() - startDate.getTime()) / util.MS_PER_DAY;\n var spanLength = endDate.getDate() !== startDate.getDate() &&\n (endDate.getTime() - startDate.getTime()) / (60 * 60 * 1000) < 24 ? 1 : 0;\n if (eventData[fields.isAllDay] || allDayLength >= 1 || spanLength > 0) {\n details = startDateDetails + ' (' +\n ((startDate.getHours() === 0 && startDate.getMinutes() === 0) ? this.l10n.getConstant('allDay') : startTimeDetail) + ')';\n if (allDayLength > 1 || spanLength > 0) {\n details += ' - ' + endDateDetails + ' (' +\n (eventData[fields.isAllDay] ? this.l10n.getConstant('allDay') : endTimeDetail) + ')';\n }\n }\n else {\n details = startDateDetails + ' (' + (startTimeDetail + ' - ' + endTimeDetail) + ')';\n }\n return { eventSubject: eventSubject, details: details };\n };\n QuickPopups.prototype.moreEventClick = function (data) {\n if (!this.parent.showQuickInfo) {\n return;\n }\n if (this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS)) {\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS).remove();\n }\n this.morePopup.element.children[0].appendChild(this.createMoreEventList(data.event));\n var selectedDate = ((data.date).getTime()).toString();\n var target = closest(data.element, '.' + cls.MORE_INDICATOR_CLASS);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DAY_CLASS).innerHTML = this.getDateFormat(data.date, 'E');\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).innerHTML = this.getDateFormat(data.date, 'd');\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).setAttribute('data-date', selectedDate);\n this.morePopup.relateTo = closest(target, '.' + cls.WORK_CELLS_CLASS);\n var eventProp = { type: 'EventContainer', data: data, cancel: false, element: this.morePopup.element };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.morePopup.show();\n };\n QuickPopups.prototype.saveClick = function () {\n if (!this.quickPopup.content.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS)\n .ej2_instances[0].validate()) {\n return;\n }\n this.quickPopup.close();\n var fields = this.parent.eventFields;\n var saveObj = {};\n saveObj[fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n saveObj[fields.subject] =\n this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS).value ||\n this.parent.eventSettings.fields.subject.default;\n saveObj[fields.startTime] = this.parent.activeCellsData.startTime;\n saveObj[fields.endTime] = this.parent.activeCellsData.endTime;\n saveObj[fields.isAllDay] = this.parent.activeCellsData.isAllDay;\n this.crudAction.addEvent(saveObj);\n };\n QuickPopups.prototype.detailsClick = function () {\n var subject = this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS).value;\n if (subject !== '') {\n var args = extend(this.parent.activeCellsData, { subject: subject });\n }\n this.fieldValidator.destroyToolTip();\n this.quickPopup.close();\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n QuickPopups.prototype.editClick = function (event) {\n this.quickPopup.close({ effect: 'None' });\n this.morePopup.hide();\n var data = this.parent.activeEventData.event;\n this.parent.currentAction = 'EditSeries';\n if (this.parent.isAdaptive) {\n this.eventPopup.hide();\n this.isMultipleEventSelect = false;\n if (!isNullOrUndefined(data[this.parent.eventFields.recurrenceRule])) {\n this.parent.currentAction = 'EditOccurrence';\n this.openRecurrenceAlert();\n return;\n }\n }\n if (!isNullOrUndefined(data[this.parent.eventFields.recurrenceRule])) {\n this.parent.currentAction = 'EditOccurrence';\n this.openRecurrenceAlert();\n }\n else {\n this.parent.eventWindow.openEditor(data, this.parent.currentAction);\n }\n };\n QuickPopups.prototype.deleteClick = function () {\n this.quickPopup.close({ effect: 'None' });\n this.morePopup.hide();\n if (this.parent.isAdaptive) {\n this.eventPopup.hide();\n this.isMultipleEventSelect = false;\n }\n this.parent.currentAction = 'Delete';\n if (this.parent.activeEventData.event[this.parent.eventFields.recurrenceRule]) {\n this.openRecurrenceAlert();\n }\n else {\n this.openDeleteAlert();\n }\n };\n QuickPopups.prototype.closeClick = function () {\n this.morePopup.hide();\n this.eventPopup.hide();\n this.isMultipleEventSelect = false;\n };\n QuickPopups.prototype.dialogButtonClick = function (event) {\n this.quickDialog.hide();\n if (event.target.classList.contains(cls.QUICK_DIALOG_EDIT_EVENT_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteOccurrence' : 'EditOccurrence';\n switch (this.parent.currentAction) {\n case 'EditOccurrence':\n this.parent.eventWindow.openEditor(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n case 'DeleteOccurrence':\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n }\n }\n else if (event.target.classList.contains(cls.QUICK_DIALOG_EDIT_SERIES_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteSeries' : 'EditSeries';\n switch (this.parent.currentAction) {\n case 'EditSeries':\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(this.parent.activeEventData.event);\n this.parent.eventWindow.openEditor(parentEvent, this.parent.currentAction);\n break;\n case 'DeleteSeries':\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n }\n }\n else if (event.target.classList.contains(cls.QUICK_DIALOG_DELETE_CLASS)) {\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n }\n };\n QuickPopups.prototype.selectedEventDialog = function (target) {\n var selectedElements = this.parent.eventBase.getSelectedEventElements(target);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n if (selectedElements.length === 1) {\n this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_TITLE_CLASS).innerHTML =\n selectedElements[0].querySelector('.' + cls.APPOINTMENT_SUBJECT).textContent;\n removeClass([this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_EDIT_CLASS)], cls.EVENT_EDIT_DISABLE_CLASS);\n this.eventPopup.content = this.multipleEventPopup;\n if (this.eventPopup && !closest(target, '.' + cls.MORE_EVENT_WRAPPER_CLASS)) {\n this.showEventPopup('EditEventInfo');\n }\n }\n else if (selectedElements.length <= 0) {\n this.parent.selectedElements = [];\n this.isMultipleEventSelect = false;\n this.eventPopup.hide();\n }\n else if (selectedElements.length > 1) {\n this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_TITLE_CLASS).innerHTML =\n '(' + selectedElements.length.toString() + ')' + ' ' + this.l10n.getConstant('selectedItems');\n addClass([this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_EDIT_CLASS)], cls.EVENT_EDIT_DISABLE_CLASS);\n }\n };\n QuickPopups.prototype.getTimezone = function (event) {\n var fields = this.parent.eventFields;\n var zoneDetails = '';\n timezoneData.filter(function (zoneData) {\n if (!isNullOrUndefined(event[fields.startTimezone]) && zoneData.Value === event[fields.startTimezone]) {\n zoneDetails = zoneData.Text.split(') ')[0] + ')' + zoneDetails;\n }\n if (!isNullOrUndefined(event[fields.endTimezone]) && zoneData.Value === event[fields.endTimezone]) {\n zoneDetails = zoneDetails + ' ' + zoneData.Text.split(') ')[0] + ')';\n }\n });\n return zoneDetails;\n };\n QuickPopups.prototype.getTimeDetails = function (event) {\n var fields = this.parent.eventFields;\n var startDate = event[fields.startTime];\n var endDate = event[fields.endTime];\n var allDayLength = (endDate.getTime() - startDate.getTime()) / util.MS_PER_DAY;\n var timeDetails = '';\n if (this.getDateFormat(startDate, 'yMd') === this.getDateFormat(endDate, 'yMd') || (event[fields.isAllDay] && allDayLength === 1)) {\n timeDetails = this.parent.globalize.formatDate(startDate, { format: 'MMMM d, yyyy' });\n }\n else {\n timeDetails = this.parent.globalize.formatDate(startDate, { format: 'MMM dd' }) + ' - ' +\n this.parent.globalize.formatDate(endDate, { format: 'MMM dd, yyyy' });\n }\n return timeDetails;\n };\n QuickPopups.prototype.getDateFormat = function (date, formatString) {\n return this.parent.globalize.formatDate(date, { skeleton: formatString });\n };\n QuickPopups.prototype.afterQuickPopupOpen = function (args) {\n if (this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS)) {\n this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS).focus();\n }\n if (this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS)) {\n this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS).focus();\n }\n };\n QuickPopups.prototype.beforeQuickPopupOpen = function (args) {\n args.element.querySelector('.' + cls.TOOLTIP_CLOSE_CLASS).setAttribute('title', this.l10n.getConstant('close'));\n EventHandler.add(args.element, 'keydown', this.keyPress, this);\n var eventProp = {\n type: 'QuickInfo', cancel: false, data: this.getDataFromTarget(args.target),\n target: args.target, element: args.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n args.cancel = true;\n }\n };\n QuickPopups.prototype.getDataFromTarget = function (target) {\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n return this.parent.activeEventData.event;\n }\n return this.parent.activeCellsData;\n };\n QuickPopups.prototype.beforeQuickPopupClose = function (args) {\n EventHandler.remove(args.element, 'keydown', this.keyPress);\n };\n QuickPopups.prototype.beforeQuickDialogClose = function (args) {\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.keyPress = function (event) {\n var popupElement = this.quickPopup.content;\n if (event.keyCode === 9) {\n var buttonObj = void 0;\n if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS) && !event.shiftKey) {\n event.preventDefault();\n (popupElement.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS)).focus();\n }\n if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS) && !event.shiftKey) {\n event.preventDefault();\n popupElement.querySelector('.' + cls.QUICK_POPUP_DELETE_EVENT_CLASS).focus();\n }\n if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS) && event.shiftKey) {\n event.preventDefault();\n popupElement.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS).focus();\n }\n if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_DELETE_EVENT_CLASS) && event.shiftKey) {\n event.preventDefault();\n popupElement.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS).focus();\n }\n }\n if (event.keyCode === 13) {\n if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS)) {\n event.target.click();\n }\n else if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS) ||\n event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS) ||\n event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_DELETE_EVENT_CLASS)) {\n event.target.click();\n }\n else if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS)) {\n popupElement.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS).click();\n event.preventDefault();\n }\n }\n if (event.keyCode === 27) {\n this.parent.quickPopup.onClosePopup();\n }\n };\n QuickPopups.prototype.afterMorePopupOpen = function (event) {\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n moreEventWrapper.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).focus();\n this.morePopup.refreshPosition();\n };\n QuickPopups.prototype.afterMorePopupClose = function (event) {\n //this.parent.eventBase.focusElement();\n if (!isNullOrUndefined(this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS))) {\n (this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS)).remove();\n }\n };\n QuickPopups.prototype.afterQuickPopupClose = function (args) {\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.quickDialogClass = function (action) {\n var buttonElement = this.quickDialog.element.querySelector('.' + cls.DIALOG_FOOTER_CONTENT_CLASS).children;\n var classList = [\n cls.QUICK_DIALOG_EDIT_EVENT_CLASS, cls.QUICK_DIALOG_EDIT_SERIES_CLASS,\n cls.QUICK_DIALOG_DELETE_CLASS, cls.QUICK_DIALOG_CANCEL_CLASS, cls.QUICK_DIALOG_ALERT_BTN_CLASS, cls.QUICK_DIALOG_HIDE_BTN_CLASS\n ];\n removeClass(buttonElement, classList);\n switch (action) {\n case 'Recurrence':\n addClass([buttonElement[0]], cls.QUICK_DIALOG_EDIT_EVENT_CLASS);\n addClass([buttonElement[1]], cls.QUICK_DIALOG_EDIT_SERIES_CLASS);\n addClass([buttonElement[1]], 'e-flat');\n break;\n case 'Delete':\n addClass([buttonElement[0]], cls.QUICK_DIALOG_DELETE_CLASS);\n addClass([buttonElement[1]], cls.QUICK_DIALOG_CANCEL_CLASS);\n removeClass([buttonElement[1]], 'e-flat');\n break;\n case 'Alert':\n addClass([buttonElement[0]], cls.QUICK_DIALOG_ALERT_BTN_CLASS);\n addClass([buttonElement[1]], cls.QUICK_DIALOG_HIDE_BTN_CLASS);\n break;\n }\n };\n QuickPopups.prototype.documentClick = function (e) {\n var target = e.event.target;\n if (!closest(target, '.' + cls.QUICK_POPUP_ROOT_CLASS) && target.getAttribute('data-tooltip-id') === null) {\n this.quickPopup.close();\n }\n if (!closest(target, '.' + cls.MORE_POPUP_WRAPPER_CLASS) && !target.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n this.morePopup.hide();\n }\n };\n QuickPopups.prototype.onClosePopup = function () {\n this.quickPopup.close();\n this.eventPopup.hide();\n this.isMultipleEventSelect = false;\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.addEventListener = function () {\n this.parent.on(event.cellClick, this.cellClick, this);\n this.parent.on(event.eventClick, this.eventClick, this);\n this.parent.on(event.documentClick, this.documentClick, this);\n };\n QuickPopups.prototype.destroy = function () {\n this.quickPopup.destroy();\n this.morePopup.destroy();\n this.eventPopup.destroy();\n this.quickDialog.destroy();\n remove(this.quickDialog.element);\n this.quickDialog.element = null;\n this.fieldValidator.destroyForm();\n };\n return QuickPopups;\n}());\nexport { QuickPopups };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Tooltip on appointments in Schedule\n */\nvar EventTooltip = /** @class */ (function () {\n function EventTooltip(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.tooltipObj = new Tooltip({\n content: 'No title',\n position: 'BottomRight',\n offsetY: 10,\n mouseTrail: this.parent.isAdaptive ? false : true,\n showTipPointer: false,\n cssClass: cls.EVENT_TOOLTIP_ROOT_CLASS,\n target: '.' + cls.APPOINTMENT_CLASS,\n beforeRender: this.onBeforeRender.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.tooltipObj.appendTo(this.parent.element);\n }\n EventTooltip.prototype.onBeforeRender = function (args) {\n if (!isNullOrUndefined(args.target.getAttribute('data-tooltip-id'))) {\n return;\n }\n var record = this.parent.eventBase.getEventByGuid(args.target.getAttribute('data-guid'));\n var content = '';\n if (!isNullOrUndefined(this.parent.eventSettings.tooltipTemplate)) {\n content = this.parent.getEventTooltipTemplate()(record)[0];\n }\n else {\n var globalize = this.parent.globalize;\n var fields = this.parent.eventFields;\n var eventStart = new Date('' + record[fields.startTime]);\n var eventEnd = new Date('' + record[fields.endTime]);\n eventEnd = (eventEnd.getHours() === 0 && eventEnd.getMinutes() === 0) ? new Date(eventEnd.setMilliseconds(-1000)) : eventEnd;\n var startDate = util.resetTime(new Date('' + eventStart));\n var endDate = util.resetTime(new Date('' + eventEnd));\n var tooltipSubject = isNullOrUndefined(record[fields.subject]) ? this.parent.eventSettings.fields.subject.default :\n record[fields.subject];\n var tooltipLocation = !isNullOrUndefined(record[fields.location]) ? record[fields.location] : '';\n var startMonthDate = globalize.formatDate(eventStart, { type: 'date', skeleton: 'MMMd' });\n var endMonthDate = globalize.formatDate(eventEnd, { type: 'date', skeleton: 'MMMd' });\n var startMonthYearDate = globalize.formatDate(eventStart, { type: 'date', skeleton: 'yMMMd' });\n var endMonthYearDate = globalize.formatDate(eventEnd, { type: 'date', skeleton: 'yMMMd' });\n var startTime = globalize.formatDate(eventStart, { type: 'time', skeleton: 'short' });\n var endTime = globalize.formatDate(eventEnd, { type: 'time', skeleton: 'short' });\n var tooltipDetails = void 0;\n if (startDate.getTime() === endDate.getTime()) {\n tooltipDetails = globalize.formatDate(eventStart, { type: 'date', skeleton: 'long' });\n }\n else {\n tooltipDetails = (startDate.getFullYear() === endDate.getFullYear()) ? (startMonthDate + ' - ' + endMonthYearDate) :\n (startMonthYearDate + ' - ' + endMonthYearDate);\n }\n var tooltipTime = (record[fields.isAllDay]) ? this.l10n.getConstant('allDay') : (startTime + ' - ' + endTime);\n content = '
    ' + tooltipSubject + '
    ' +\n '
    ' + tooltipLocation + '
    ' +\n '
    ' + tooltipDetails + '
    ' +\n '
    ' + tooltipTime + '
    ';\n }\n this.tooltipObj.content = content;\n };\n EventTooltip.prototype.close = function () {\n this.tooltipObj.close();\n };\n /**\n * To destroy the event tooltip.\n * @return {void}\n * @private\n */\n EventTooltip.prototype.destroy = function () {\n this.tooltipObj.destroy();\n this.tooltipObj = null;\n };\n return EventTooltip;\n}());\nexport { EventTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, NotifyPropertyChanges, Event, Browser } from '@syncfusion/ej2-base';\nimport { getDefaultDateObject, getValue, cldrData, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { extractObjectFromRule, generate, generateSummary, getRecurrenceStringFromDate } from './date-generator';\nvar HEADER = 'e-editor';\nvar INPUTWARAPPER = 'e-input-wrapper';\nvar INPUTWARAPPERSIDE = 'e-input-wrapper-side';\nvar REPEATELEMENT = 'e-repeat-element';\nvar REPEATINTERVAL = 'e-repeat-interval';\nvar INTERVALCLASS = 'e-interval';\nvar DAYWRAPPER = 'e-days';\nvar WEEKWRAPPER = 'e-non-week';\nvar WEEKPOSITION = 'e-week-position';\nvar YEAREXPANDERWRAPPER = 'e-year-expander';\nvar YEAREXPANDERELEMENT = 'e-year-expander-element';\nvar MONETHEXPANDERWRAPPER = 'e-month-expander';\nvar MONTHEXPANDERELEMENT = 'e-month-expander-element';\nvar MONTHEXPANDERCHECKBOXWRAPPER = 'e-month-expander-checkbox-wrapper';\nvar FORMLEFT = 'e-form-left';\nvar FORMRIGHT = 'e-form-right';\nvar MONTHDAYWRAPPER = 'e-month-day';\nvar MONTHEXPANNDERELEM = 'e-month-expander-wrapper';\nvar MONTHPOS = 'e-month-pos';\nvar MONTHWEEK = 'e-month-week';\nvar ENDON = 'e-end-on';\nvar MONTHEXPANDERLABEL = 'e-month-expander-label';\nvar WEEKEXPANDERLABEL = 'e-week-expander-label';\nvar ENDONLABEL = 'e-end-on-label';\nvar ENDONLEFT = 'e-end-on-left';\nvar MONTHDAYELEMENT = 'e-monthday-element';\nvar ENDONELEMENT = 'e-end-on-element';\nvar ENDONDATE = 'e-end-on-date';\nvar UNTILDATE = 'e-until-date';\nvar ENDONCOUNTWRAPPER = 'e-end-on-count';\nvar ENDONCOUNT = 'e-recurrence-count';\nvar HIDEWRAPPER = 'e-hide-recurrence-element';\nvar RTLCLASS = 'e-rtl';\nvar PRIMARY = 'e-primary';\nvar ACTIVE = 'e-active';\nvar RECURRENCETABLE = 'e-recurrence-table';\nvar REPEATCONTENT = 'e-repeat-content';\nvar NONE = 'none';\nvar DAILY = 'daily';\nvar WEEKLY = 'weekly';\nvar MONTHLY = 'monthly';\nvar YEARLY = 'yearly';\nvar NEVER = 'never';\nvar UNTIL = 'until';\nvar COUNT = 'count';\nvar TEXTFIELD = 'text';\nvar VALUEFIELD = 'value';\nvar LAST = 'last';\nvar REPEAT = 'repeat';\nvar REPEATEVERY = 'repeatEvery';\nvar ON = 'on';\nvar END = 'end';\nvar MONTH = 'month';\nvar RADIOLABEL = 'onDay';\nvar RULEUNTIL = 'UNTIL';\nvar RULEBYDAY = 'BYDAY';\nvar RULEBYMONTHDAY = 'BYMONTHDAY';\nvar RULEBYMONTH = 'BYMONTH';\nvar RULEBYYEARDAY = 'BYYEARDAY';\nvar RULEBYWEEKNO = 'BYWEEKNO';\nvar RULEINTERVAL = 'INTERVAL';\nvar RULECOUNT = 'COUNT';\nvar RULESETPOS = 'BYSETPOS';\nvar RULEFREQ = 'FREQ';\nvar RULEDAILY = 'DAILY';\nvar RULEWEEKLY = 'WEEKLY';\nvar RULEMONTHLY = 'MONTHLY';\nvar RULEYEARLY = 'YEARLY';\nvar RULESUNDAY = 'SU';\nvar RULEMONDAY = 'MO';\nvar RULETUESDAY = 'TU';\nvar RULEWEDNESDAY = 'WE';\nvar RULETHURSDAY = 'TH';\nvar RULEFRIDAY = 'FR';\nvar RULESATURDAY = 'SA';\nvar KEYSUNDAY = 'sun';\nvar KEYMONDAY = 'mon';\nvar KEYTUESDAY = 'tue';\nvar KEYWEDNESDAY = 'wed';\nvar KEYTHURSDAY = 'thu';\nvar KEYFRIDAY = 'fri';\nvar KEYSATURDAY = 'sat';\nvar EQUAL = '=';\nvar SEMICOLON = ';';\nvar COMMA = ',';\nvar FIRST = 'first';\nvar SECOND = 'second';\nvar THIRD = 'third';\nvar FOURTH = 'fourth';\nvar DAYS = '';\nvar MONTHS = 'months';\nvar YEARS = 'years';\nvar contentType = {\n none: '',\n daily: 'days',\n weekly: 'weeks',\n monthly: 'months',\n yearly: 'years'\n};\nvar valueData = {\n 'sun': RULESUNDAY,\n 'mon': RULEMONDAY,\n 'tue': RULETUESDAY,\n 'wed': RULEWEDNESDAY,\n 'thu': RULETHURSDAY,\n 'fri': RULEFRIDAY,\n 'sat': RULESATURDAY\n};\nvar neverClassList = [DAYWRAPPER, WEEKWRAPPER, ENDON, INTERVALCLASS, YEAREXPANDERWRAPPER, MONETHEXPANDERWRAPPER];\nvar weekClassList = [WEEKWRAPPER];\nvar monthClassList = [DAYWRAPPER, YEAREXPANDERWRAPPER];\nvar yearClassList = [DAYWRAPPER];\nvar dailyClassList = [DAYWRAPPER, WEEKWRAPPER, YEAREXPANDERWRAPPER, MONETHEXPANDERWRAPPER];\nvar noEndClassList = [ENDONDATE, ENDONCOUNTWRAPPER];\nvar endOnCountClassList = [ENDONDATE];\nvar endOnDateClassList = [ENDONCOUNTWRAPPER];\n/**\n * Represents the RecurrenceEditor component.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar RecurrenceEditor = /** @class */ (function (_super) {\n __extends(RecurrenceEditor, _super);\n /**\n * Constructor for creating the widget\n * @param {object} options?\n */\n function RecurrenceEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultLocale = {\n none: 'None',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n month: 'Month',\n yearly: 'Yearly',\n never: 'Never',\n until: 'Until',\n count: 'Count',\n first: 'First',\n second: 'Second',\n third: 'Third',\n fourth: 'Fourth',\n last: 'Last',\n repeat: 'Repeat',\n repeatEvery: 'Repeat every',\n on: 'Repeat On',\n end: 'End',\n onDay: 'Day',\n days: 'Day(s)',\n weeks: 'Week(s)',\n months: 'Month(s)',\n years: 'Year(s)',\n every: 'every',\n summaryTimes: 'time(s)',\n summaryOn: 'on',\n summaryUntil: 'until',\n summaryRepeat: 'Repeats',\n summaryDay: 'day(s)',\n summaryWeek: 'week(s)',\n summaryMonth: 'month(s)',\n summaryYear: 'year(s)',\n };\n _this.renderStatus = false;\n _this.destroyStatus = false;\n _this.dayButtons = [];\n _this.monthButtons = [];\n return _this;\n }\n RecurrenceEditor.prototype.startState = function (freq, endOn, startDate) {\n this.showFormElement();\n this.updateForm(freq);\n this.freshOnEndForm();\n this.updateEndOnForm(endOn);\n this.selectMonthDay(startDate);\n this.updateUntilDate(startDate);\n this.onMonthDay.setProperties({ checked: true });\n };\n RecurrenceEditor.prototype.preRender = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n // pre render code snippets\n };\n RecurrenceEditor.prototype.applyCustomClass = function (cssClass) {\n if (cssClass) {\n this.element.classList.add(cssClass);\n }\n };\n RecurrenceEditor.prototype.initialize = function () {\n this.destroyStatus = false;\n this.renderComponent();\n this.startState(this.repeatType.value.toString().toUpperCase(), NEVER, this.startDate);\n this.updateForm(this.repeatType.value.toString());\n this.applyCustomClass(this.cssClass);\n };\n RecurrenceEditor.prototype.triggerChangeEvent = function () {\n if (this.renderStatus) {\n var value = this.getRecurrenceRule();\n this.trigger('change', { value: value });\n this.setProperties({ value: value }, false);\n }\n };\n RecurrenceEditor.prototype.resetDayButton = function () {\n var elements = this.element.querySelectorAll('.' +\n DAYWRAPPER + ' button');\n for (var index = 0; index < elements.length; index++) {\n elements[index].classList.remove(ACTIVE);\n elements[index].classList.remove(PRIMARY);\n }\n };\n RecurrenceEditor.prototype.daySelection = function (dayIndex) {\n this.resetDayButton();\n var days = [0, 1, 2, 3, 4, 5, 6];\n this.rotateArray(days, this.firstDayOfWeek);\n var element = this.element.querySelector('.' +\n DAYWRAPPER + ' button[data-index=\"' + days.indexOf(dayIndex) + '\"]');\n if (element) {\n element.classList.add(ACTIVE);\n element.classList.add(PRIMARY);\n }\n };\n RecurrenceEditor.prototype.rtlClass = function (status) {\n if (status) {\n this.element.classList.add(RTLCLASS);\n }\n else {\n this.element.classList.remove(RTLCLASS);\n }\n };\n RecurrenceEditor.prototype.updateUntilDate = function (date) {\n var tempDate = new Date(date.getTime());\n tempDate.setDate(tempDate.getDate() + 60);\n this.untilDateObj.setProperties({ value: tempDate });\n };\n RecurrenceEditor.prototype.selectMonthDay = function (date) {\n var weekday = [KEYSUNDAY, KEYMONDAY, KEYTUESDAY, KEYWEDNESDAY, KEYTHURSDAY, KEYFRIDAY, KEYSATURDAY];\n this.monthDate.setProperties({ value: date.getDate() });\n this.monthWeekDays.setProperties({ value: valueData[weekday[date.getDay()]] });\n this.monthValue.setProperties({ value: '' + (date.getMonth() + 1) });\n this.monthWeekPos.setProperties({ value: this.getDayPosition(date) });\n this.daySelection(date.getDay());\n };\n RecurrenceEditor.prototype.updateForm = function (state) {\n var elements;\n var btn;\n this.repeatType.setProperties({ value: state });\n switch (state) {\n case NONE:\n for (var index = 0; index < neverClassList.length; index++) {\n btn = this.element.querySelector('.' + neverClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case WEEKLY:\n for (var index = 0; index < weekClassList.length; index++) {\n btn = this.element.querySelector('.' + weekClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case MONTHLY:\n for (var index = 0; index < monthClassList.length; index++) {\n btn = this.element.querySelector('.' + monthClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case YEARLY:\n for (var index = 0; index < yearClassList.length; index++) {\n btn = this.element.querySelector('.' + yearClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case DAILY:\n for (var index = 0; index < dailyClassList.length; index++) {\n btn = this.element.querySelector('.' + dailyClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n }\n };\n RecurrenceEditor.prototype.updateEndOnForm = function (state) {\n var element;\n this.endType.setProperties({ value: state });\n switch (state) {\n case NEVER:\n for (var index = 0; index < noEndClassList.length; index++) {\n element = this.element.querySelector('.' + noEndClassList[index]);\n element.classList.add(HIDEWRAPPER);\n }\n break;\n case UNTIL:\n for (var index = 0; index < endOnDateClassList.length; index++) {\n element = this.element.querySelector('.' + endOnDateClassList[index]);\n element.classList.add(HIDEWRAPPER);\n }\n break;\n case COUNT:\n for (var index = 0; index < endOnCountClassList.length; index++) {\n element = this.element.querySelector('.' + endOnCountClassList[index]);\n element.classList.add(HIDEWRAPPER);\n }\n break;\n }\n };\n RecurrenceEditor.prototype.freshOnEndForm = function () {\n var btn;\n for (var index = 0; index < noEndClassList.length; index++) {\n btn = this.element.querySelector('.' + noEndClassList[index]);\n if (btn) {\n btn.classList.remove(HIDEWRAPPER);\n }\n }\n };\n RecurrenceEditor.prototype.showFormElement = function () {\n var btn;\n var elements = this.element.querySelectorAll('.' + HIDEWRAPPER);\n for (var index = 0; index < neverClassList.length; index++) {\n btn = this.element.querySelector('.' + neverClassList[index]);\n btn.classList.remove(HIDEWRAPPER);\n }\n };\n RecurrenceEditor.prototype.renderDropdowns = function () {\n var self = this;\n this.repeatType = new DropDownList({\n //set the data to dataSource property\n dataSource: this.getRepeatData(),\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n index: this.selectedType,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n placeholder: this.localeObj.getConstant(REPEAT),\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.setProperties({ selectedType: args.value }, false);\n self.element.querySelector('.' + REPEATCONTENT).innerHTML = self.localeObj.getConstant(contentType[args.value]);\n self.showFormElement();\n self.updateForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n // set placeholder to DropDownList input element\n this.repeatType.appendTo(this.element.querySelector('.' + REPEATELEMENT));\n this.endType = new DropDownList({\n dataSource: this.getEndData(),\n popupWidth: this.getPopupWidth(),\n enableRtl: this.enableRtl,\n index: 1,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.freshOnEndForm();\n self.updateEndOnForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.endType.appendTo(this.element.querySelector('.' + ENDONELEMENT));\n this.monthWeekPos = new DropDownList({\n dataSource: this.getMonthPosData(),\n popupWidth: this.getPopupWidth(),\n enableRtl: this.enableRtl,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n index: 1,\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.onWeekDay.setProperties({ checked: true });\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.monthDayRendering();\n // render initialized DropDownList\n };\n RecurrenceEditor.prototype.setDefaultValue = function () {\n var formelement = [].slice.call(this.element.querySelectorAll('.e-control .e-numerictextbox'));\n for (var index = 0, len = formelement.length; index < len; index++) {\n var element = formelement[index];\n var value = void 0;\n var instance = element.ej2_instances[0];\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n instance.value = 1;\n instance.dataBind();\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n instance.value = 10;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.resetFormValues = function () {\n var recurreneElement = [].slice.call(this.element.querySelectorAll('.e-control [type=\"text\"]'));\n for (var index = 0, len = recurreneElement.length; index < len; index++) {\n var element = recurreneElement[index];\n var value = void 0;\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n if (instance.value) {\n instance.value = instance.value;\n instance.dataBind();\n }\n else {\n this.updateUntilDate(this.startDate);\n }\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.index = instance.index || 0;\n instance.dataBind();\n }\n else if (element.classList.contains('e-numerictextbox')) {\n var instance = element.ej2_instances[0];\n var value_1 = void 0;\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n value_1 = 1;\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n value_1 = 10;\n }\n else {\n value_1 = this.startDate.getDate();\n }\n instance.value = instance.value || value_1;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.getPopupWidth = function () {\n return Browser.isDevice ? '100%' : 'auto';\n };\n RecurrenceEditor.prototype.monthDayRendering = function () {\n var self = this;\n this.monthWeekPos.appendTo(this.element.querySelector('.' + MONTHPOS));\n //dayData\n this.monthWeekDays = new DropDownList({\n //set the data to dataSource property\n dataSource: this.getDayData('wide'),\n popupWidth: this.getPopupWidth(),\n enableRtl: this.enableRtl,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n index: 1,\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.onWeekDay.setProperties({ checked: true });\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n // render initialized DropDownList\n this.monthWeekDays.appendTo(this.element.querySelector('.' + MONTHWEEK));\n //dayData\n this.monthValue = new DropDownList({\n //set the data to dataSource property\n dataSource: this.getMonthData(),\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n index: 7,\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n // render initialized DropDownList\n this.monthValue.appendTo(this.element.querySelector('.' + YEAREXPANDERELEMENT));\n };\n RecurrenceEditor.prototype.renderDatePickers = function () {\n var self = this;\n this.untilDateObj = new DatePicker({\n enableRtl: this.enableRtl,\n min: this.minDate,\n max: this.maxDate,\n change: function (args) {\n if (args.value) {\n self.triggerChangeEvent();\n }\n }\n });\n this.untilDateObj.appendTo(this.element.querySelector('.' + UNTILDATE));\n };\n RecurrenceEditor.prototype.dayButtonRender = function () {\n var _this = this;\n var btns = this.element.querySelectorAll('.' +\n DAYWRAPPER + ' button');\n var btn;\n var self = this;\n for (var index = 0; index < btns.length; index++) {\n btn = btns[index];\n var button = new Button({\n isToggle: true,\n enableRtl: this.enableRtl\n });\n button.appendTo(btn);\n this.dayButtons.push(button);\n EventHandler.add(btn, 'click', function (args) {\n var btns = _this.element.querySelectorAll('.' +\n DAYWRAPPER + ' button.' + PRIMARY);\n var element = args.target;\n if (!element.classList.contains(PRIMARY)) {\n element.classList.add(PRIMARY);\n self.triggerChangeEvent();\n }\n else if (btns.length > 1) {\n element.classList.remove(PRIMARY);\n self.triggerChangeEvent();\n }\n });\n }\n };\n RecurrenceEditor.prototype.radioButtonRender = function () {\n var self = this;\n this.onMonthDay = new RadioButton({\n label: this.localeObj.getConstant(RADIOLABEL),\n enableRtl: this.enableRtl,\n name: 'monthType',\n value: 'day',\n change: function (args) {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.onMonthDay.appendTo(this.element.querySelector('.' + MONTHEXPANDERELEMENT));\n this.monthButtons.push(this.onMonthDay);\n this.onWeekDay = new RadioButton({\n label: '',\n name: 'monthType',\n enableRtl: this.enableRtl,\n value: 'daypos',\n change: function (args) {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.onWeekDay.appendTo(this.element.querySelector('.' + MONTHEXPANNDERELEM));\n this.monthButtons.push(this.onWeekDay);\n };\n RecurrenceEditor.prototype.numericTextboxRender = function () {\n var self = this;\n this.recurrenceCount = new NumericTextBox({\n value: 10,\n format: '#',\n enableRtl: this.enableRtl,\n floatLabelType: 'Always',\n min: 1,\n change: function (args) {\n self.triggerChangeEvent();\n }\n });\n this.recurrenceCount.appendTo(this.element.querySelector('.' + ENDONCOUNT));\n this.monthDate = new NumericTextBox({\n value: 1,\n format: '#',\n enableRtl: this.enableRtl,\n min: 1,\n max: 31,\n change: function (args) {\n self.onMonthDay.setProperties({ checked: true });\n self.triggerChangeEvent();\n }\n });\n this.monthDate.appendTo(this.element.querySelector('.' + MONTHDAYWRAPPER));\n this.repeatInterval = new NumericTextBox({\n value: 1,\n format: '#',\n min: 1,\n enableRtl: this.enableRtl,\n floatLabelType: 'Always',\n placeholder: this.localeObj.getConstant(REPEATEVERY),\n change: function (args) {\n self.triggerChangeEvent();\n }\n });\n this.repeatInterval.appendTo(this.element.querySelector('.' + REPEATINTERVAL));\n };\n RecurrenceEditor.prototype.renderComponent = function () {\n this.setTemplate();\n this.renderDropdowns();\n this.renderDatePickers();\n this.dayButtonRender();\n this.radioButtonRender();\n this.numericTextboxRender();\n };\n RecurrenceEditor.prototype.rotateArray = function (data, count) {\n var temp;\n for (var index = 0; index < count; index++) {\n temp = data.shift();\n data.push(temp);\n }\n };\n RecurrenceEditor.prototype.getEndData = function () {\n var endData = [NEVER, UNTIL, COUNT];\n var self = this;\n var dataSource = [];\n endData.forEach(function (data) {\n dataSource.push({ text: self.localeObj.getConstant(data), value: data });\n });\n return dataSource;\n };\n RecurrenceEditor.prototype.getDayPosition = function (date) {\n var temp = new Date(date.getTime());\n var endDate = new Date(date.getTime());\n var day = date.getDay();\n var positionCollection = [];\n temp.setDate(1);\n endDate.setDate(1);\n endDate.setMonth(endDate.getMonth() + 1);\n while (temp < endDate) {\n if (temp.getDay() === day) {\n positionCollection.push(temp.getTime());\n }\n temp.setDate(temp.getDate() + 1);\n }\n if (positionCollection.indexOf(date.getTime()) === positionCollection.length - 1) {\n return -1;\n }\n return (positionCollection.indexOf(date.getTime()) + 1);\n };\n RecurrenceEditor.prototype.getRepeatData = function () {\n var data = [];\n var self = this;\n this.frequencies.forEach(function (element) {\n var textValue = (element === NONE) ? NEVER : element;\n data.push({ text: self.localeObj.getConstant(textValue), value: element });\n });\n return data;\n };\n RecurrenceEditor.prototype.getMonthPosData = function () {\n var monthpos = [FIRST, SECOND, THIRD, FOURTH, LAST];\n var monthposValue = {\n first: 1,\n second: 2,\n third: 3,\n fourth: 4,\n last: -1\n };\n var self = this;\n var dataSource = [];\n monthpos.forEach(function (data) {\n dataSource.push({ text: self.localeObj.getConstant(data), value: monthposValue[data] });\n });\n return dataSource;\n };\n RecurrenceEditor.prototype.getDayData = function (format) {\n var weekday = [KEYSUNDAY, KEYMONDAY, KEYTUESDAY, KEYWEDNESDAY, KEYTHURSDAY, KEYFRIDAY, KEYSATURDAY];\n var dayData = [];\n var cldrObj;\n var temp = ((format === 'narrow') ? 'narrow' : 'wide');\n this.rotateArray(weekday, this.firstDayOfWeek);\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.' + temp, getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.stand-alone.' + temp, cldrData));\n }\n for (var _i = 0, weekday_1 = weekday; _i < weekday_1.length; _i++) {\n var obj = weekday_1[_i];\n dayData.push({ text: getValue(obj, cldrObj), value: valueData[obj] });\n }\n return dayData;\n };\n RecurrenceEditor.prototype.getMonthData = function () {\n var monthData = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('months.stand-alone.wide', getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.months.stand-alone.wide', cldrData));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n monthData.push({\n text: getValue(obj, cldrObj),\n value: obj\n });\n }\n return monthData;\n };\n RecurrenceEditor.prototype.setTemplate = function () {\n var dayData = this.getDayData('narrow');\n this.element.innerHTML = '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(ON) + '
    ' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(ON) + '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(END) + '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ';\n };\n RecurrenceEditor.prototype.getSelectedDaysData = function () {\n var ruleData = RULEBYDAY + EQUAL;\n var elements = this.element.querySelectorAll('.' + DAYWRAPPER + ' button.' + PRIMARY);\n var weekday = [RULESUNDAY, RULEMONDAY, RULETUESDAY, RULEWEDNESDAY, RULETHURSDAY, RULEFRIDAY, RULESATURDAY];\n this.rotateArray(weekday, this.firstDayOfWeek);\n for (var index = 0; index < elements.length; index++) {\n ruleData += weekday[parseInt(elements[index].getAttribute('data-index'), 10)] + (index === (elements.length - 1) ? '' : COMMA);\n }\n return ruleData + SEMICOLON;\n };\n RecurrenceEditor.prototype.getSelectedMonthData = function () {\n var ruleData;\n if (this.onWeekDay.checked) {\n ruleData = RULEBYDAY + EQUAL + this.monthWeekDays.value + SEMICOLON\n + RULESETPOS + EQUAL + this.monthWeekPos.value + SEMICOLON;\n }\n else {\n ruleData = RULEBYMONTHDAY + EQUAL + this.monthDate.value + SEMICOLON;\n }\n return ruleData;\n };\n RecurrenceEditor.prototype.getIntervalData = function () {\n return RULEINTERVAL + EQUAL + this.repeatInterval.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.getEndOnCount = function () {\n return RULECOUNT + EQUAL + this.recurrenceCount.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.getYearMonthRuleData = function () {\n return RULEBYMONTH + EQUAL + this.monthValue.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.updateWeekButton = function (keys) {\n var weekday = [RULESUNDAY, RULEMONDAY, RULETUESDAY, RULEWEDNESDAY, RULETHURSDAY, RULEFRIDAY, RULESATURDAY];\n this.rotateArray(weekday, this.firstDayOfWeek);\n var index;\n for (var _i = 0, _a = this.dayButtons; _i < _a.length; _i++) {\n var obj = _a[_i];\n index = parseInt(obj.element.getAttribute('data-index'), 10);\n if (keys.indexOf(weekday[index]) !== -1) {\n obj.setProperties({ isPrimary: true });\n }\n else {\n obj.setProperties({ isPrimary: false });\n }\n }\n };\n RecurrenceEditor.prototype.updateMonthUI = function () {\n if (this.ruleObject.monthDay.length) {\n this.monthDate.setProperties({ value: this.ruleObject.monthDay[0] });\n this.onMonthDay.setProperties({ checked: true });\n }\n else {\n this.onWeekDay.setProperties({ checked: true });\n this.monthWeekPos.setProperties({ value: this.ruleObject.setPosition });\n for (var _i = 0, _a = Object.keys(valueData); _i < _a.length; _i++) {\n var key = _a[_i];\n if (valueData[key] === this.ruleObject.day[0]) {\n this.monthWeekDays.setProperties({ value: this.ruleObject.day[0] });\n break;\n }\n }\n }\n };\n RecurrenceEditor.prototype.updateUI = function (repeat, state) {\n this.repeatInterval.setProperties({ value: this.ruleObject.interval });\n switch (state) {\n case UNTIL:\n this.untilDateObj.setProperties({ value: this.ruleObject.until });\n break;\n case COUNT:\n this.recurrenceCount.setProperties({ value: this.ruleObject.count });\n break;\n }\n switch (repeat) {\n case WEEKLY:\n this.updateWeekButton(this.ruleObject.day);\n break;\n case YEARLY:\n this.monthValue.setProperties({ index: (this.ruleObject.month[0] - 1) });\n this.updateMonthUI();\n break;\n case MONTHLY:\n this.updateMonthUI();\n break;\n }\n };\n RecurrenceEditor.prototype.getUntilData = function () {\n var tempStr = getRecurrenceStringFromDate(this.untilDateObj.value);\n return RULEUNTIL + EQUAL + tempStr + SEMICOLON;\n };\n RecurrenceEditor.prototype.destroyComponents = function () {\n this.recurrenceCount.destroy();\n this.monthDate.destroy();\n this.repeatInterval.destroy();\n this.untilDateObj.destroy();\n this.repeatType.destroy();\n this.endType.destroy();\n this.monthWeekPos.destroy();\n this.monthWeekDays.destroy();\n this.monthValue.destroy();\n this.dayButtons.forEach(function (element) {\n element.destroy();\n });\n this.monthButtons.forEach(function (element) {\n element.destroy();\n });\n };\n RecurrenceEditor.prototype.resetFields = function () {\n this.startState(NONE, NEVER, this.startDate);\n this.setDefaultValue();\n };\n RecurrenceEditor.prototype.getRuleSummary = function (rule) {\n if (rule === void 0) { rule = this.getRecurrenceRule(); }\n return generateSummary(rule, this.localeObj, this.locale);\n };\n RecurrenceEditor.prototype.getRecurrenceDates = function (startDate, rule, excludeDate, maximumCount, viewDate) {\n if (viewDate === void 0) { viewDate = this.startDate; }\n return generate(startDate, rule, excludeDate, this.firstDayOfWeek, maximumCount, viewDate);\n };\n RecurrenceEditor.prototype.getRecurrenceRule = function () {\n var ruleData = RULEFREQ + EQUAL;\n switch (this.repeatType.value) {\n case DAILY:\n ruleData += RULEDAILY + SEMICOLON;\n break;\n case WEEKLY:\n ruleData += RULEWEEKLY + SEMICOLON + this.getSelectedDaysData();\n break;\n case MONTHLY:\n ruleData += RULEMONTHLY +\n SEMICOLON +\n this.getSelectedMonthData();\n break;\n case YEARLY:\n ruleData += RULEYEARLY +\n SEMICOLON +\n this.getSelectedMonthData() +\n this.getYearMonthRuleData();\n break;\n case NONE:\n return '';\n }\n ruleData += this.getIntervalData();\n switch (this.endType.value) {\n case UNTIL:\n ruleData += this.getUntilData();\n break;\n case COUNT:\n ruleData += this.getEndOnCount();\n break;\n }\n return ruleData;\n };\n RecurrenceEditor.prototype.setRecurrenceRule = function (rule, startDate) {\n if (startDate === void 0) { startDate = this.startDate; }\n if (!rule) {\n this.repeatType.setProperties({ value: NONE });\n }\n this.ruleObject = extractObjectFromRule(rule);\n var endon = this.ruleObject.count ? COUNT : (this.ruleObject.until ? UNTIL : NEVER);\n switch (this.ruleObject.freq) {\n case RULEDAILY:\n this.startState(DAILY, endon, startDate);\n this.updateUI(DAILY, endon);\n break;\n case RULEWEEKLY:\n this.startState(WEEKLY, endon, startDate);\n this.updateUI(WEEKLY, endon);\n break;\n case RULEMONTHLY:\n this.startState(MONTHLY, endon, startDate);\n this.updateUI(MONTHLY, endon);\n break;\n case RULEYEARLY:\n this.startState(YEARLY, endon, startDate);\n this.updateUI(YEARLY, endon);\n break;\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n RecurrenceEditor.prototype.destroy = function () {\n this.destroyStatus = true;\n this.destroyComponents();\n this.element.innerHTML = '';\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n RecurrenceEditor.prototype.getModuleName = function () {\n return 'recurrenceeditor';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n RecurrenceEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n RecurrenceEditor.prototype.render = function () {\n this.initialize();\n this.rtlClass(this.enableRtl);\n this.renderStatus = true;\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n RecurrenceEditor.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 'startDate':\n this.selectMonthDay(newProp.startDate);\n this.updateUntilDate(newProp.startDate);\n this.endType.setProperties({ index: 0 });\n break;\n case 'enableRtl':\n this.rtlClass(newProp.enableRtl);\n break;\n case 'cssClass':\n this.applyCustomClass(newProp.cssClass);\n break;\n case 'selectedType':\n this.repeatType.setProperties({ index: this.selectedType });\n break;\n case 'minDate':\n this.untilDateObj.setProperties({ minDate: this.minDate });\n break;\n case 'maxDate':\n this.untilDateObj.setProperties({ maxDate: this.maxDate });\n break;\n }\n }\n };\n __decorate([\n Property(['none', 'daily', 'weekly', 'monthly', 'yearly'])\n ], RecurrenceEditor.prototype, \"frequencies\", void 0);\n __decorate([\n Property(0)\n ], RecurrenceEditor.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(new Date())\n ], RecurrenceEditor.prototype, \"startDate\", void 0);\n __decorate([\n Property('null')\n ], RecurrenceEditor.prototype, \"dateFormat\", void 0);\n __decorate([\n Property('en-US')\n ], RecurrenceEditor.prototype, \"locale\", void 0);\n __decorate([\n Property('')\n ], RecurrenceEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RecurrenceEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('')\n ], RecurrenceEditor.prototype, \"value\", void 0);\n __decorate([\n Property(new Date(1900, 1, 1))\n ], RecurrenceEditor.prototype, \"minDate\", void 0);\n __decorate([\n Property(new Date(2099, 12, 31))\n ], RecurrenceEditor.prototype, \"maxDate\", void 0);\n __decorate([\n Property(0)\n ], RecurrenceEditor.prototype, \"selectedType\", void 0);\n __decorate([\n Event()\n ], RecurrenceEditor.prototype, \"change\", void 0);\n RecurrenceEditor = __decorate([\n NotifyPropertyChanges\n ], RecurrenceEditor);\n return RecurrenceEditor;\n}(Component));\nexport { RecurrenceEditor };\n","import { createElement, isNullOrUndefined, addClass, remove, EventHandler, extend, append } from '@syncfusion/ej2-base';\nimport { cldrData, removeClass, getValue, getDefaultDateObject } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { Timezone, localTimezoneName, timezoneData } from '../timezone/timezone';\nimport { FieldValidator } from './form-validator';\nimport { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_FIELD = 'e-field';\nvar REPEAT_CONTAINER_CLASS = 'e-recurrence-container';\nvar REPEAT_BUTTON_ICON_CLASS = 'e-recurrence-edit';\nvar REPEAT_BUTTON_CLASS = 'e-recurrence-edit-button';\nvar REPEAT_DIALOG_CLASS = 'e-recurrence-dialog';\nvar HIDE_STYLE_CLASS = 'e-hide';\n/**\n * Event editor window\n */\nvar EventWindow = /** @class */ (function () {\n /**\n * Constructor for event window\n */\n function EventWindow(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.fields = this.parent.eventFields;\n this.fieldValidator = new FieldValidator(this.parent);\n this.timezone = new Timezone();\n this.renderEventWindow();\n }\n EventWindow.prototype.renderEventWindow = function () {\n var dialogContent = this.getEventWindowContent();\n this.element = createElement('div', { id: this.parent.element.id + '_dialog_wrapper' });\n this.parent.element.appendChild(this.element);\n if (this.parent.isAdaptive) {\n this.dialogObject = new Dialog({\n animationSettings: { effect: 'Zoom' },\n content: dialogContent,\n cssClass: cls.EVENT_WINDOW_DIALOG_CLASS + ' ' + cls.EVENT_WINDOW_DEVICE_CLASS,\n enableRtl: this.parent.enableRtl,\n header: '
    ' +\n this.l10n.getConstant('newEvent') + '
    ',\n height: '100%',\n isModal: true,\n showCloseIcon: false,\n target: document.body,\n visible: false,\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n }\n else {\n this.dialogObject = new Dialog({\n animationSettings: { effect: 'Zoom' },\n buttons: [{\n buttonModel: { content: this.l10n.getConstant('deleteButton'), cssClass: cls.EVENT_WINDOW_DELETE_BUTTON_CLASS },\n click: this.eventDelete.bind(this)\n }, {\n buttonModel: {\n content: this.l10n.getConstant('saveButton'), cssClass: 'e-primary ' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS,\n isPrimary: true\n },\n click: this.eventSave.bind(this)\n }, {\n buttonModel: { cssClass: cls.EVENT_WINDOW_CANCEL_BUTTON_CLASS, content: this.l10n.getConstant('cancelButton') },\n click: this.dialogClose.bind(this)\n }],\n content: dialogContent,\n cssClass: cls.EVENT_WINDOW_DIALOG_CLASS,\n enableRtl: this.parent.enableRtl,\n header: '
    ' + this.l10n.getConstant('newEvent') + '
    ',\n isModal: true,\n showCloseIcon: true,\n target: document.body,\n visible: false,\n width: '500px',\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n }\n this.dialogObject.appendTo(this.element);\n addClass([this.element.parentElement], cls.EVENT_WINDOW_DIALOG_CLASS + '-container');\n if (this.parent.isAdaptive) {\n EventHandler.add(this.element.querySelector('.' + cls.EVENT_WINDOW_BACK_ICON_CLASS), 'click', this.dialogClose, this);\n EventHandler.add(this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_ICON_CLASS), 'click', this.eventSave, this);\n }\n this.applyFormValidation();\n };\n EventWindow.prototype.openEditor = function (data, type) {\n this.parent.quickPopup.quickPopup.close({ effect: 'None' });\n if (!this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n removeClass([this.dialogObject.element.querySelector('.e-recurrenceeditor')], cls.DISABLE_CLASS);\n }\n switch (type) {\n case 'Add':\n this.cellClickAction = true;\n this.onCellDetailsUpdate(data);\n break;\n case 'Save':\n case 'EditOccurrence':\n case 'EditSeries':\n if (type === 'EditOccurrence' && !this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n addClass([this.dialogObject.element.querySelector('.e-recurrenceeditor')], cls.DISABLE_CLASS);\n }\n this.cellClickAction = false;\n this.onEventDetailsUpdate(data);\n break;\n }\n };\n EventWindow.prototype.setDialogContent = function () {\n this.dialogObject.content = this.getEventWindowContent();\n this.dialogObject.dataBind();\n };\n EventWindow.prototype.onBeforeOpen = function (args) {\n var eventProp = { type: 'Editor', data: this.eventData, cancel: false, element: this.element };\n this.parent.trigger(event.popupOpen, eventProp);\n args.cancel = eventProp.cancel;\n };\n EventWindow.prototype.onBeforeClose = function (args) {\n this.parent.eventBase.focusElement();\n };\n EventWindow.prototype.getEventWindowContent = function () {\n var container = createElement('div', { className: cls.EVENT_WINDOW_FORM_DIV_CLASS });\n var form = createElement('form', {\n id: this.parent.element.id + 'EditForm',\n className: cls.EVENT_WINDOW_FORM_CLASS\n });\n if (!isNullOrUndefined(this.parent.editorTemplate)) {\n var templeteEle = this.parent.getEditorTemplate()();\n append([].slice.call(templeteEle), form);\n }\n else {\n var content = this.getDefaultEventWindowContent();\n form.appendChild(content);\n }\n container.appendChild(form);\n return container;\n };\n EventWindow.prototype.getDefaultEventWindowContent = function () {\n var parentDiv = this.createDivElement('e-dialog-parent');\n var titleLocationDiv = this.createDivElement(cls.EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS);\n var titleDiv = this.renderTextBox(cls.EVENT_WINDOW_TITLE_CLASS);\n var locationDiv = this.renderTextBox(cls.EVENT_WINDOW_LOCATION_CLASS);\n titleLocationDiv.appendChild(titleDiv);\n titleLocationDiv.appendChild(locationDiv);\n var startEndDateTimeDiv = this.createDivElement(cls.EVENT_WINDOW_START_END_DIV_CLASS);\n var startDateTimeDiv = this.renderDateTimePicker(cls.EVENT_WINDOW_START_CLASS);\n var endDateTimeDiv = this.renderDateTimePicker(cls.EVENT_WINDOW_END_CLASS);\n startEndDateTimeDiv.appendChild(startDateTimeDiv);\n startEndDateTimeDiv.appendChild(endDateTimeDiv);\n var timezoneParentDiv = this.createDivElement(cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS);\n var startTimezoneDiv = this.renderDropDown(cls.EVENT_WINDOW_START_TZ_CLASS);\n var endTimezoneDiv = this.renderDropDown(cls.EVENT_WINDOW_END_TZ_CLASS);\n timezoneParentDiv.appendChild(startTimezoneDiv);\n timezoneParentDiv.appendChild(endTimezoneDiv);\n var allDayTimezoneDiv = this.createDivElement(cls.EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS);\n var allDayDiv = this.renderCheckBox(cls.EVENT_WINDOW_ALL_DAY_CLASS);\n var timezoneDiv = this.renderCheckBox(cls.EVENT_WINDOW_TZ_CLASS);\n allDayTimezoneDiv.appendChild(allDayDiv);\n allDayTimezoneDiv.appendChild(timezoneDiv);\n var repeatParentDiv = this.createDivElement(cls.EVENT_WINDOW_REPEAT_DIV_CLASS);\n var repeatDiv = this.renderCheckBox(cls.EVENT_WINDOW_REPEAT_CLASS);\n var repeatEditConainer = createElement('span', {\n className: REPEAT_CONTAINER_CLASS\n });\n var button = createElement('button', {\n className: REPEAT_BUTTON_CLASS,\n attrs: { type: 'button', 'title': this.l10n.getConstant('editRecurrence') }\n });\n var buttonObj = new Button({ iconCss: REPEAT_BUTTON_ICON_CLASS + ' e-icons', cssClass: 'e-medium' });\n repeatEditConainer.appendChild(button);\n buttonObj.appendTo(button);\n repeatDiv.appendChild(repeatEditConainer);\n repeatParentDiv.appendChild(repeatDiv);\n var description = this.createDivElement(cls.EVENT_WINDOW_DESCRIPTION_CLASS + '-row');\n var descriptionDiv = this.renderTextBox(cls.EVENT_WINDOW_DESCRIPTION_CLASS);\n description.appendChild(descriptionDiv);\n parentDiv.appendChild(titleLocationDiv);\n parentDiv.appendChild(startEndDateTimeDiv);\n parentDiv.appendChild(allDayTimezoneDiv);\n parentDiv.appendChild(timezoneParentDiv);\n parentDiv.appendChild(repeatParentDiv);\n if (!this.parent.isAdaptive) {\n this.createRecurrenceEditor(parentDiv);\n }\n else {\n EventHandler.add(button, 'click', this.loadRecurrenceEditor, this);\n }\n parentDiv.appendChild(description);\n return parentDiv;\n };\n EventWindow.prototype.createRecurrenceEditor = function (parentDiv) {\n var rec = createElement('div');\n parentDiv.appendChild(rec);\n this.recurrenceEditor = this.renderRecurrenceEditor();\n this.recurrenceEditor.appendTo(rec);\n };\n EventWindow.prototype.createDivElement = function (className) {\n return createElement('div', { className: className });\n };\n EventWindow.prototype.createInputElement = function (className, fieldName, type) {\n return createElement(type || 'input', {\n className: className, attrs: {\n type: 'text', name: fieldName, value: ''\n }\n });\n };\n EventWindow.prototype.renderDateTimePicker = function (value) {\n var dateTimeDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var dateTimeInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n dateTimeDiv.appendChild(dateTimeInput);\n var dateTimePicker = new DateTimePicker({\n change: this.onTimeChange.bind(this), enableRtl: this.parent.enableRtl, floatLabelType: 'Always',\n format: (isNullOrUndefined(this.parent.dateFormat) ?\n this.getFormat('dateFormats') : this.parent.dateFormat) + ' ' + this.getFormat('timeFormats'),\n placeholder: this.l10n.getConstant(value.substr(2)), value: new Date(), width: '100%'\n });\n dateTimePicker.appendTo(dateTimeInput);\n return dateTimeDiv;\n };\n EventWindow.prototype.onTimeChange = function (args) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n if (startObj.element.parentElement.classList.contains('e-input-focus')) {\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n var duration = 0;\n if (this.cellClickAction) {\n duration = util.MS_PER_MINUTE * 30;\n }\n else {\n var eventData = this.parent.activeEventData.event;\n duration = eventData[this.fields.endTime].getTime() - eventData[this.fields.startTime].getTime();\n }\n endObj.value = new Date(startObj.value.getTime() + duration);\n endObj.dataBind();\n }\n };\n EventWindow.prototype.renderDropDown = function (value) {\n var labelValue;\n var fieldName = this.getFieldName(value);\n labelValue = value === cls.EVENT_WINDOW_START_TZ_CLASS ? 'startTimezone' : 'endTimezone';\n var timezoneDiv = this.createDivElement(value + '-container');\n var timezoneInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n timezoneDiv.appendChild(timezoneInput);\n var drowDownList = new DropDownList({\n allowFiltering: true, change: this.onTimezoneChange, dataSource: timezoneData,\n enableRtl: this.parent.enableRtl, fields: { text: 'Text', value: 'Value' },\n filterBarPlaceholder: 'Search Timezone', filtering: function (e) {\n var query = new Query();\n query = (e.text !== '') ? query.where('Text', 'contains', e.text, true) : query;\n e.updateData(timezoneData, query);\n },\n floatLabelType: 'Always', placeholder: this.l10n.getConstant(labelValue), popupHeight: '230px'\n });\n drowDownList.appendTo(timezoneInput);\n timezoneInput.setAttribute('name', fieldName);\n return timezoneDiv;\n };\n EventWindow.prototype.onTimezoneChange = function () {\n if (this.element.getAttribute('name') === 'StartTimezone') {\n var startTimezoneObj = document.querySelector('.' + cls.EVENT_WINDOW_START_TZ_CLASS).ej2_instances[0];\n var endTimezoneObj = document.querySelector('.' + cls.EVENT_WINDOW_END_TZ_CLASS).ej2_instances[0];\n endTimezoneObj.value = startTimezoneObj.value;\n endTimezoneObj.dataBind();\n }\n };\n EventWindow.prototype.renderCheckBox = function (value) {\n var checkBoxDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var checkBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n checkBoxDiv.appendChild(checkBoxInput);\n var labelText;\n if (value === cls.EVENT_WINDOW_ALL_DAY_CLASS) {\n labelText = 'e-allDay';\n }\n else if (value === cls.EVENT_WINDOW_TZ_CLASS) {\n labelText = 'e-timezone';\n }\n else {\n labelText = value;\n }\n var checkBox = new CheckBox({\n change: this.onChange.bind(this),\n cssClass: value,\n enableRtl: this.parent.enableRtl,\n label: this.l10n.getConstant(labelText.substr(2)),\n });\n checkBox.appendTo(checkBoxInput);\n checkBoxInput.setAttribute('name', fieldName);\n if (fieldName === 'Repeat') {\n this.repeatStatus = checkBox;\n }\n return checkBoxDiv;\n };\n EventWindow.prototype.renderTextBox = function (value) {\n var textBoxDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var labelText = value === cls.EVENT_WINDOW_TITLE_CLASS ? 'e-title' : value;\n var textBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName, (value === cls.EVENT_WINDOW_DESCRIPTION_CLASS) ? 'textarea' : 'input');\n textBoxDiv.appendChild(textBoxInput);\n Input.createInput({\n element: textBoxInput, floatLabelType: 'Always',\n properties: {\n enableRtl: this.parent.enableRtl,\n placeholder: this.l10n.getConstant(labelText.substr(2))\n }\n });\n return textBoxDiv;\n };\n EventWindow.prototype.getFieldName = function (name) {\n var fieldName;\n if (name === 'e-subject') {\n fieldName = this.fields.subject;\n }\n else if (name === 'e-location') {\n fieldName = this.fields.location;\n }\n else if (name === 'e-start') {\n fieldName = this.fields.startTime;\n }\n else if (name === 'e-end') {\n fieldName = this.fields.endTime;\n }\n else if (name === 'e-description') {\n fieldName = this.fields.description;\n }\n else if (name === 'e-all-day') {\n fieldName = this.fields.isAllDay;\n }\n else if (name === 'e-start-time-zone') {\n fieldName = this.fields.startTimezone;\n }\n else if (name === 'e-end-time-zone') {\n fieldName = this.fields.endTimezone;\n }\n else if (name === 'e-time-zone') {\n fieldName = 'Timezone';\n }\n else if (name === 'e-repeat') {\n fieldName = 'Repeat';\n }\n return fieldName;\n };\n EventWindow.prototype.onChange = function (args) {\n var target = (args.event.target);\n if (target.classList.contains(cls.EVENT_WINDOW_ALL_DAY_CLASS)) {\n this.onAllDayChange(args.checked);\n }\n else if (target.classList.contains(cls.EVENT_WINDOW_TZ_CLASS)) {\n this.timezoneChangeStyle(args.checked);\n }\n else if (target.classList.contains(cls.EVENT_WINDOW_REPEAT_CLASS)) {\n this.onRepeatChange(args.checked);\n }\n };\n EventWindow.prototype.renderRepeatDialog = function () {\n var element = createElement('div');\n this.repeatDialogObject = new Dialog({\n header: this.l10n.getConstant('recurrence'),\n visible: false,\n content: '
    ',\n closeOnEscape: true,\n width: '90%',\n buttons: [{\n click: this.repeatSaveDialog.bind(this),\n buttonModel: { content: this.l10n.getConstant('save'), cssClass: 'e-save', isPrimary: true }\n },\n { click: this.repeatCancelDialog.bind(this), buttonModel: { cssClass: 'e-cancel', content: this.l10n.getConstant('cancel') } }],\n target: this.element,\n animationSettings: { effect: 'Zoom' },\n enableRtl: this.parent.enableRtl,\n isModal: true,\n cssClass: REPEAT_DIALOG_CLASS,\n open: this.repeatOpenDialog.bind(this)\n });\n this.element.appendChild(element);\n this.repeatDialogObject.appendTo(element);\n this.createRecurrenceEditor(this.repeatDialogObject.element.querySelector('.e-dlg-content'));\n };\n EventWindow.prototype.loadRecurrenceEditor = function () {\n this.repeatDialogObject.setProperties({ visible: true });\n if (this.recurrenceEditor && this.repeatRule) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatRule);\n }\n };\n EventWindow.prototype.onRepeatChange = function (state) {\n if (state) {\n if (!this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n this.recurrenceEditor.setProperties({ startDate: this.repeatStartDate, selectedType: 0 });\n this.loadRecurrenceEditor();\n }\n else {\n if (this.repeatDialogObject) {\n this.repeatDialogObject.setProperties({ visible: false });\n }\n this.repeatRule = '';\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatRule);\n this.updateRepeatLabel(this.repeatRule);\n }\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n element.classList.add(HIDE_STYLE_CLASS);\n }\n };\n EventWindow.prototype.repeatSaveDialog = function () {\n this.repeatRule = this.recurrenceEditor.getRecurrenceRule();\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (this.recurrenceEditor.getRecurrenceRule()) {\n element.classList.remove(HIDE_STYLE_CLASS);\n }\n else {\n element.classList.add(HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n this.closeRepeatDialog();\n };\n EventWindow.prototype.closeRepeatDialog = function () {\n this.repeatDialogObject.setProperties({ visible: false });\n };\n EventWindow.prototype.repeatCancelDialog = function () {\n this.closeRepeatDialog();\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatTempRule);\n }\n if (!this.repeatTempRule) {\n this.repeatStatus.setProperties({ checked: false });\n }\n };\n EventWindow.prototype.repeatOpenDialog = function () {\n this.repeatTempRule = this.recurrenceEditor.getRecurrenceRule();\n };\n EventWindow.prototype.onCellDetailsUpdate = function (args) {\n this.element.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS).removeAttribute('data-id');\n var event = args;\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('newEvent');\n var eventObj = {};\n if (event.subject) {\n eventObj[this.fields.subject] = event.subject;\n }\n eventObj[this.fields.startTime] = event.startTime;\n eventObj[this.fields.endTime] = event.endTime;\n eventObj[this.fields.isAllDay] = event.isAllDay;\n eventObj.Timezone = false;\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n this.showDetails(eventObj);\n if (this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS)) {\n this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS).setAttribute('style', 'display:none');\n }\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setProperties({ startDate: event.startTime, selectedType: 0 });\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n element.classList.add(HIDE_STYLE_CLASS);\n this.updateRepeatLabel(this.repeatRule);\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.applyFormValidation = function () {\n var form = this.element.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS);\n var rules = {};\n rules[this.parent.eventSettings.fields.subject.name] = this.parent.eventSettings.fields.subject.validation;\n rules[this.parent.eventSettings.fields.location.name] = this.parent.eventSettings.fields.location.validation;\n rules[this.parent.eventSettings.fields.startTime.name] = this.parent.eventSettings.fields.startTime.validation;\n rules[this.parent.eventSettings.fields.endTime.name] = this.parent.eventSettings.fields.endTime.validation;\n rules[this.parent.eventSettings.fields.description.name] = this.parent.eventSettings.fields.description.validation;\n this.fieldValidator.renderFormValidator(form, rules);\n };\n EventWindow.prototype.showDetails = function (eventData) {\n var eventObj = extend({}, eventData, null, true);\n if (eventObj[this.fields.isAllDay] && this.cellClickAction) {\n eventObj[this.fields.endTime] = util.addDays(new Date(eventObj[this.fields.endTime].getTime()), -1);\n }\n this.eventData = eventObj;\n var formelement = this.getFormElements();\n var keyNames = Object.keys(eventObj);\n for (var index = 0, len = formelement.length; index < len; index++) {\n var columnName = formelement[index].name;\n if (!isNullOrUndefined(columnName)) {\n if (keyNames.indexOf(columnName) !== -1) {\n this.setValueToElement(formelement[index], eventObj[columnName]);\n }\n else {\n this.setDefaultValueToElement(formelement[index]);\n }\n }\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n this.onAllDayChange(eventObj[this.fields.isAllDay]);\n var timezoneObj = this.getInstance(cls.EVENT_WINDOW_TZ_CLASS + '.' + EVENT_FIELD);\n if (!(isNullOrUndefined(eventObj[this.fields.startTimezone]) && isNullOrUndefined(eventObj[this.fields.endTimezone]))) {\n timezoneObj.checked = true;\n timezoneObj.dataBind();\n }\n this.timezoneChangeStyle(timezoneObj.checked);\n delete eventObj.Timezone;\n }\n };\n EventWindow.prototype.onAllDayChange = function (allDayStatus) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n var format;\n if (allDayStatus) {\n format = (isNullOrUndefined(this.parent.dateFormat)) ? this.getFormat('dateFormats') : this.parent.dateFormat;\n addClass(this.element.querySelectorAll('.e-time-icon'), cls.EVENT_WINDOW_ICON_DISABLE_CLASS);\n startObj.format = endObj.format = format;\n }\n else {\n format = (isNullOrUndefined(this.parent.dateFormat)) ? this.getFormat('dateFormats') + ' ' + this.getFormat('timeFormats') :\n this.parent.dateFormat + ' ' + this.getFormat('timeFormats');\n removeClass(this.element.querySelectorAll('.e-time-icon'), cls.EVENT_WINDOW_ICON_DISABLE_CLASS);\n startObj.format = endObj.format = format;\n }\n if (this.cellClickAction) {\n this.updateDateTime(allDayStatus, startObj, endObj);\n }\n startObj.dataBind();\n endObj.dataBind();\n };\n EventWindow.prototype.updateDateTime = function (allDayStatus, startObj, endObj) {\n var startDate;\n var endDate;\n if (allDayStatus) {\n startDate = util.resetTime(new Date(this.parent.activeCellsData.startTime.getTime()));\n endDate = this.parent.activeCellsData.isAllDay ?\n util.addDays(new Date(this.parent.activeCellsData.endTime.getTime()), -1) :\n util.resetTime(new Date(this.parent.activeCellsData.startTime.getTime()));\n }\n else {\n startDate = new Date(this.parent.activeCellsData.startTime.getTime());\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'MonthAgenda' || this.parent.activeCellsData.isAllDay) {\n var startHour = this.parent.globalize.parseDate(this.parent.workHours.start, { skeleton: 'Hm' });\n startDate.setHours(startHour.getHours(), startHour.getMinutes(), startHour.getSeconds());\n endDate = new Date(startDate.getTime());\n endDate.setMilliseconds(util.MS_PER_MINUTE * 30);\n }\n else {\n endDate = new Date(this.parent.activeCellsData.endTime.getTime());\n }\n }\n startObj.value = startDate;\n endObj.value = endDate;\n startObj.dataBind();\n endObj.dataBind();\n };\n EventWindow.prototype.getFormat = function (formatType) {\n var format;\n if (this.parent.locale === 'en' || this.parent.locale === 'en-US') {\n format = getValue(formatType + '.short', getDefaultDateObject());\n }\n else {\n format = getValue('main.' + '' + this.parent.locale + '.dates.calendars.gregorian.' + formatType + '.short', cldrData);\n }\n return format;\n };\n EventWindow.prototype.onEventDetailsUpdate = function (eventObj) {\n if (!this.parent.isAdaptive) {\n this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS).setAttribute('style', 'display:inline');\n }\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('editEvent');\n this.element.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS).setAttribute('data-id', eventObj[this.fields.id].toString());\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n eventObj = extend({}, eventObj, null, true);\n var timezoneObj = this.getInstance(cls.EVENT_WINDOW_TZ_CLASS + '.' + EVENT_FIELD);\n var timezoneValue = void 0;\n if (eventObj[this.fields.startTimezone] || eventObj[this.fields.endTimezone]) {\n timezoneValue = true;\n eventObj[this.fields.startTimezone] = eventObj[this.fields.startTimezone] || eventObj[this.fields.endTimezone];\n eventObj[this.fields.endTimezone] = eventObj[this.fields.endTimezone] || eventObj[this.fields.startTimezone];\n if (this.parent.timezone) {\n var startTz = eventObj[this.fields.startTimezone];\n var endTz = eventObj[this.fields.endTimezone];\n eventObj[this.fields.startTime] =\n this.timezone.convert(eventObj[this.fields.startTime], this.parent.timezone, startTz);\n eventObj[this.fields.endTime] =\n this.timezone.convert(eventObj[this.fields.endTime], this.parent.timezone, endTz);\n }\n }\n else {\n timezoneValue = false;\n }\n eventObj.Timezone = timezoneValue;\n timezoneObj.checked = timezoneValue;\n timezoneObj.dataBind();\n }\n this.showDetails(eventObj);\n if (eventObj[this.fields.recurrenceRule] && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n else if (!this.parent.isAdaptive && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule('');\n }\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n if (eventObj[this.fields.recurrenceRule]) {\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n this.repeatRule = eventObj[this.fields.recurrenceRule];\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (eventObj[this.fields.recurrenceRule]) {\n element.classList.remove(HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: true });\n }\n else {\n element.classList.add(HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n }\n if (this.parent.readonly) {\n var saveButton = this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS);\n saveButton.ej2_instances[0].disabled = true;\n var deleteButton = this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS);\n deleteButton.ej2_instances[0].disabled = true;\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.renderRecurrenceEditor = function () {\n return new RecurrenceEditor({\n cssClass: this.parent.cssClass,\n dateFormat: this.parent.dateFormat,\n enableRtl: this.parent.enableRtl,\n firstDayOfWeek: this.parent.firstDayOfWeek,\n locale: this.parent.locale\n });\n };\n EventWindow.prototype.updateRepeatLabel = function (repeatRule) {\n if (this.parent.isAdaptive && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n var data = repeatRule ?\n (this.l10n.getConstant('repeats') + ' ' + this.recurrenceEditor.getRuleSummary(repeatRule)) : this.l10n.getConstant('repeat');\n this.repeatStatus.setProperties({ label: data });\n };\n EventWindow.prototype.dialogClose = function (args) {\n this.dialogObject.hide();\n this.fieldValidator.destroyToolTip();\n this.resetFormFields();\n if (!this.parent.isAdaptive && this.recurrenceEditor) {\n this.recurrenceEditor.resetFields();\n }\n };\n EventWindow.prototype.timezoneChangeStyle = function (value) {\n var timezoneDiv = this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS);\n if (value) {\n addClass([timezoneDiv], cls.ENABLE_CLASS);\n var startTimezoneObj = this.getInstance(cls.EVENT_WINDOW_START_TZ_CLASS);\n var endTimezoneObj = this.getInstance(cls.EVENT_WINDOW_END_TZ_CLASS);\n var timezone = startTimezoneObj.dataSource;\n if (!startTimezoneObj.value || !this.parent.timezone) {\n var found = timezone.some(function (tz) { return tz.Value === localTimezoneName; });\n if (!found) {\n var obj = {};\n obj = { Value: localTimezoneName, Text: localTimezoneName };\n timezone.push(obj);\n startTimezoneObj.dataSource = timezone;\n endTimezoneObj.dataSource = timezone;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n }\n startTimezoneObj.value = startTimezoneObj.value || this.parent.timezone || localTimezoneName;\n endTimezoneObj.value = endTimezoneObj.value || this.parent.timezone || localTimezoneName;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n else {\n removeClass([timezoneDiv], cls.ENABLE_CLASS);\n }\n };\n EventWindow.prototype.resetFormFields = function () {\n var formelement = this.getFormElements();\n for (var index = 0, len = formelement.length; index < len; index++) {\n var columnName = formelement[index].name;\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n this.setDefaultValueToElement(formelement[index]);\n }\n }\n };\n EventWindow.prototype.eventSave = function () {\n if (!this.element.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS)\n .ej2_instances[0].validate()) {\n return;\n }\n var eventObj = {};\n var formelement = this.getFormElements();\n for (var index = 0, len = formelement.length; index < len; index++) {\n var columnName = formelement[index].name;\n if (!isNullOrUndefined(columnName) && columnName !== '' && isNullOrUndefined(eventObj[columnName])) {\n eventObj[columnName] = this.getValueFromElement(formelement[index]);\n }\n }\n if (!eventObj.Timezone) {\n eventObj[this.fields.startTimezone] = null;\n eventObj[this.fields.endTimezone] = null;\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n delete eventObj.Timezone;\n delete eventObj.Repeat;\n if (!eventObj[this.fields.startTime] || !eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('invalidDateError');\n return;\n }\n if (eventObj[this.fields.startTime] > eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('startEndError');\n return;\n }\n }\n var eventId = this.getEventIdFromForm();\n if (!isNullOrUndefined(eventObj[this.fields.subject])) {\n eventObj[this.fields.subject] = eventObj[this.fields.subject] !== '' ?\n eventObj[this.fields.subject] : this.parent.eventSettings.fields.subject.default;\n }\n if (eventObj[this.fields.isAllDay] && this.cellClickAction) {\n eventObj[this.fields.endTime] = util.addDays(new Date(eventObj[this.fields.endTime].getTime()), 1);\n }\n var ruleData = this.recurrenceEditor ? this.recurrenceEditor.getRecurrenceRule() : null;\n eventObj[this.fields.recurrenceRule] = ruleData ? ruleData : undefined;\n if (!isNullOrUndefined(eventId)) {\n var editedData = new DataManager({ json: this.parent.eventsData }).\n executeLocal(new Query().where(this.fields.id, 'equal', parseInt(eventId, 10)))[0];\n eventObj = extend({}, editedData, eventObj);\n if (!isNullOrUndefined(editedData[this.fields.recurrenceRule])) {\n if (this.parent.currentAction === 'EditOccurrence' && !eventObj[this.fields.recurrenceID]) {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n }\n if (this.parent.currentAction === 'EditSeries' || eventObj[this.fields.id] !==\n editedData[this.fields.id]) {\n eventObj[this.fields.recurrenceID] = editedData[this.fields.id];\n }\n this.parent.saveEvent(eventObj, this.parent.currentAction);\n }\n else {\n this.parent.saveEvent(eventObj);\n }\n }\n else {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n this.parent.addEvent(eventObj);\n }\n this.dialogObject.hide();\n };\n EventWindow.prototype.getEventIdFromForm = function () {\n return this.element.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS).getAttribute('data-id');\n };\n EventWindow.prototype.getFormElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + EVENT_FIELD));\n };\n EventWindow.prototype.getValueFromElement = function (element) {\n var value;\n if (element.classList.contains('e-datepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-datetimepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-dropdownlist')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-checkbox')) {\n value = element.ej2_instances[0].checked;\n }\n else {\n if (element.type === 'checkbox') {\n value = element.checked;\n }\n else {\n value = element.value;\n }\n }\n return value;\n };\n EventWindow.prototype.setValueToElement = function (element, value) {\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-datetimepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-checkbox')) {\n var instance = element.ej2_instances[0];\n instance.checked = value;\n instance.dataBind();\n }\n else {\n if (element.type !== 'checkbox') {\n element.value = value;\n }\n else {\n element.checked = value;\n }\n }\n };\n EventWindow.prototype.setDefaultValueToElement = function (element) {\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = new Date();\n instance.dataBind();\n }\n else if (element.classList.contains('e-datetimepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = new Date();\n instance.dataBind();\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.value = null;\n instance.dataBind();\n }\n else if (element.classList.contains('e-checkbox')) {\n var instance = element.ej2_instances[0];\n instance.checked = false;\n instance.dataBind();\n }\n else {\n if (element.type === 'checkbox') {\n element.checked = false;\n }\n else {\n element.value = null;\n }\n }\n };\n EventWindow.prototype.getInstance = function (className) {\n return this.element.querySelector('.' + className).ej2_instances[0];\n };\n EventWindow.prototype.eventDelete = function (args) {\n switch (this.parent.currentAction) {\n case 'EditOccurrence':\n var fields = this.parent.eventFields;\n if (!isNullOrUndefined(this.parent.activeEventData.event[fields.recurrenceRule])) {\n this.parent.currentAction = 'DeleteOccurrence';\n }\n else {\n this.parent.currentAction = 'Delete';\n }\n break;\n case 'EditSeries':\n this.parent.currentAction = 'DeleteSeries';\n break;\n }\n this.dialogObject.hide();\n this.parent.quickPopup.openDeleteAlert();\n };\n EventWindow.prototype.getRecurrenceEditorInstance = function () {\n if (this.parent.isAdaptive && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n return this.recurrenceEditor;\n };\n /**\n * To destroy the event window.\n * @return {void}\n * @private\n */\n EventWindow.prototype.destroy = function () {\n if (this.recurrenceEditor) {\n this.recurrenceEditor.destroy();\n }\n if (this.repeatDialogObject) {\n this.repeatDialogObject.destroy();\n remove(this.repeatDialogObject.element);\n }\n if (this.dialogObject) {\n this.dialogObject.destroy();\n this.dialogObject = null;\n }\n if (this.element) {\n remove(this.element);\n this.element = null;\n }\n this.fieldValidator.destroyForm();\n };\n return EventWindow;\n}());\nexport { EventWindow };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Schedule DOM rendering\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render\n */\n function Render(parent) {\n this.parent = parent;\n }\n Render.prototype.render = function (viewName) {\n this.initializeLayout(viewName);\n this.refreshDataManager();\n };\n Render.prototype.initializeLayout = function (viewName) {\n if (this.parent.activeView) {\n this.parent.activeView.removeEventListener();\n this.parent.activeView.destroy();\n }\n switch (viewName) {\n case 'Day':\n this.parent.activeView = this.parent.dayModule;\n break;\n case 'Week':\n this.parent.activeView = this.parent.weekModule;\n break;\n case 'WorkWeek':\n this.parent.activeView = this.parent.workWeekModule;\n break;\n case 'Month':\n this.parent.activeView = this.parent.monthModule;\n break;\n case 'Agenda':\n this.parent.activeView = this.parent.agendaModule;\n break;\n // case 'weekAgenda':\n // this.parent.activeView = this.parent.weekAgendaModule;\n // break;\n // case 'workWeekAgenda':\n // this.parent.activeView = this.parent.workWeekAgendaModule;\n // break;\n case 'MonthAgenda':\n this.parent.activeView = this.parent.monthAgendaModule;\n break;\n }\n if (isNullOrUndefined(this.parent.activeView)) {\n var firstView = this.parent.viewOptions[Object.keys(this.parent.viewOptions)[0]].option;\n if (firstView) {\n this.parent.setProperties({ currentView: firstView }, true);\n if (this.parent.headerModule) {\n this.parent.headerModule.updateActiveView();\n this.parent.headerModule.setCalendarView();\n }\n return this.initializeLayout(firstView);\n }\n throw Error('Inject required modules');\n }\n this.updateLabelText(viewName);\n this.parent.activeView.addEventListener();\n this.parent.activeView.getRenderDates();\n this.parent.activeView.renderLayout(cls.CURRENT_PANEL_CLASS);\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n }\n };\n Render.prototype.updateLabelText = function (view) {\n var content = this.parent.activeView.getLabelText(view);\n this.parent.element.setAttribute('role', 'presentation');\n this.parent.element.setAttribute('aria-label', content);\n };\n Render.prototype.refreshDataManager = function () {\n var _this = this;\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var dataManager = this.parent.dataModule.getData(this.parent.dataModule.generateQuery(start, end));\n dataManager.then(function (e) { return _this.dataManagerSuccess(e); })\n .catch(function (e) { return _this.dataManagerFailure(e); });\n };\n Render.prototype.dataManagerSuccess = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.dataBinding, e);\n this.parent.eventsData = extend([], e.result, null, true);\n var processed = this.parent.eventBase.processData(this.parent.eventsData);\n this.parent.notify(events.dataReady, { processedData: processed });\n this.parent.trigger(events.dataBound);\n };\n Render.prototype.dataManagerFailure = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.actionFailure, { error: e });\n };\n return Render;\n}());\nexport { Render };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * Configuration of options related to working hours on Schedule.\n */\nvar WorkHours = /** @class */ (function (_super) {\n __extends(WorkHours, _super);\n function WorkHours() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], WorkHours.prototype, \"highlight\", void 0);\n __decorate([\n Property('09:00')\n ], WorkHours.prototype, \"start\", void 0);\n __decorate([\n Property('18:00')\n ], WorkHours.prototype, \"end\", void 0);\n return WorkHours;\n}(ChildProperty));\nexport { WorkHours };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 * A Class that holds the collection of event fields that requires to be mapped with the dataSource\n * fields along with its available configuration settings. Each field in it accepts both string and Object\n * data type. When each of the field is assigned with simple `string` value, it is assumed that the dataSource field\n * name is mapped with it. If the `object` type is defined on each fields, then the validation related settings and mapping of\n * those fields with dataSource can be given altogether within it.\n */\nvar Field = /** @class */ (function (_super) {\n __extends(Field, _super);\n function Field() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ name: 'Id' })\n ], Field.prototype, \"id\", void 0);\n __decorate([\n Property({ name: 'Subject', default: 'Add title' })\n ], Field.prototype, \"subject\", void 0);\n __decorate([\n Property({ name: 'StartTime' })\n ], Field.prototype, \"startTime\", void 0);\n __decorate([\n Property({ name: 'EndTime' })\n ], Field.prototype, \"endTime\", void 0);\n __decorate([\n Property({ name: 'StartTimezone' })\n ], Field.prototype, \"startTimezone\", void 0);\n __decorate([\n Property({ name: 'EndTimezone' })\n ], Field.prototype, \"endTimezone\", void 0);\n __decorate([\n Property({ name: 'Location' })\n ], Field.prototype, \"location\", void 0);\n __decorate([\n Property({ name: 'Description' })\n ], Field.prototype, \"description\", void 0);\n __decorate([\n Property({ name: 'IsAllDay' })\n ], Field.prototype, \"isAllDay\", void 0);\n __decorate([\n Property({ name: 'RecurrenceID' })\n ], Field.prototype, \"recurrenceID\", void 0);\n __decorate([\n Property({ name: 'RecurrenceRule' })\n ], Field.prototype, \"recurrenceRule\", void 0);\n __decorate([\n Property({ name: 'RecurrenceException' })\n ], Field.prototype, \"recurrenceException\", void 0);\n return Field;\n}(ChildProperty));\nexport { Field };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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';\nimport { Field } from './fields';\n/**\n * Holds the configuration of event related options and dataSource binding to Schedule.\n */\nvar EventSettings = /** @class */ (function (_super) {\n __extends(EventSettings, _super);\n function EventSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], EventSettings.prototype, \"template\", void 0);\n __decorate([\n Property([])\n ], EventSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"query\", void 0);\n __decorate([\n Complex({}, Field)\n ], EventSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], EventSettings.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"tooltipTemplate\", void 0);\n return EventSettings;\n}(ChildProperty));\nexport { EventSettings };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, Animation } from '@syncfusion/ej2-base';\nimport { EventHandler, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';\nimport { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, addClass, createElement } from '@syncfusion/ej2-base';\nimport { HeaderRenderer } from '../renderer/header-renderer';\nimport { Scroll } from '../actions/scroll';\nimport { ScheduleTouch } from '../actions/touch';\nimport { KeyboardInteraction } from '../actions/keyboard';\nimport { Data } from '../actions/data';\nimport { EventBase } from '../event-renderer/event-base';\nimport { QuickPopups } from '../popups/quick-popups';\nimport { EventTooltip } from '../popups/event-tooltip';\nimport { EventWindow } from '../popups/event-window';\nimport { Render } from '../renderer/renderer';\nimport { WorkHours } from '../models/work-hours';\nimport { Crud } from '../actions/crud';\nimport { EventSettings } from '../models/event-settings';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Represents the Schedule component that displays a list of events scheduled against specific date and timings,\n * thus helping us to plan and manage it properly.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Schedule = /** @class */ (function (_super) {\n __extends(Schedule, _super);\n /**\n * Constructor for creating the Schedule widget\n * @hidden\n */\n function Schedule(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Schedule.prototype.render = function () {\n addClass([this.element], cls.ROOT);\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n if (this.isAdaptive) {\n addClass([this.element], cls.DEVICE);\n }\n else {\n removeClass([this.element], cls.DEVICE);\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass);\n }\n this.validateDate();\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n this.scrollModule = new Scroll(this);\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n if (this.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n }\n this.element.appendChild(createElement('div', { className: cls.TABLE_CONTAINER_CLASS }));\n if (Browser.isDevice || Browser.isTouch) {\n this.scheduleTouchModule = new ScheduleTouch(this);\n }\n this.renderModule = new Render(this);\n this.eventBase = new EventBase(this);\n this.initializeDataModule();\n this.initializeView(this.currentView);\n this.initializePopups();\n this.wireEvents();\n };\n Schedule.prototype.validateDate = function () {\n // persist the selected date value\n this.setProperties({ selectedDate: new Date('' + this.selectedDate) }, true);\n };\n Schedule.prototype.setViewOptions = function (isModuleLoad) {\n if (isModuleLoad === void 0) { isModuleLoad = false; }\n this.viewOptions = {};\n var viewName;\n var selectedView;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var view = _a[_i];\n var isOptions = (typeof view === 'string') ? false : true;\n if (typeof view === 'string') {\n viewName = view;\n }\n else {\n viewName = view.option;\n if (view.isSelected) {\n selectedView = viewName;\n }\n }\n var obj = extend({ option: viewName }, isOptions ? view : {});\n var fieldViewName = viewName.charAt(0).toLowerCase() + viewName.slice(1);\n this.viewOptions[fieldViewName] = obj;\n }\n if (!isModuleLoad && selectedView) {\n this.setProperties({ currentView: selectedView }, true);\n }\n };\n Schedule.prototype.getActiveViewOptions = function (viewName) {\n var scheduleOptions = {\n dateFormat: this.dateFormat,\n endHour: this.endHour,\n isSelected: false,\n option: null,\n readonly: this.readonly,\n startHour: this.startHour,\n allowVirtualScrolling: true,\n cellTemplate: this.cellTemplate,\n eventTemplate: this.eventSettings.template,\n dateHeaderTemplate: this.dateHeaderTemplate,\n workDays: this.workDays,\n showWeekend: this.showWeekend\n };\n return extend(scheduleOptions, this.viewOptions[viewName.charAt(0).toLowerCase() + viewName.slice(1)]);\n };\n Schedule.prototype.initializeDataModule = function () {\n this.eventFields = {\n id: this.eventSettings.fields.id.name,\n subject: this.eventSettings.fields.subject.name,\n startTime: this.eventSettings.fields.startTime.name,\n endTime: this.eventSettings.fields.endTime.name,\n startTimezone: this.eventSettings.fields.startTimezone.name,\n endTimezone: this.eventSettings.fields.endTimezone.name,\n location: this.eventSettings.fields.location.name,\n description: this.eventSettings.fields.description.name,\n isAllDay: this.eventSettings.fields.isAllDay.name,\n recurrenceID: this.eventSettings.fields.recurrenceID.name,\n recurrenceRule: this.eventSettings.fields.recurrenceRule.name,\n recurrenceException: this.eventSettings.fields.recurrenceException.name,\n };\n this.dataModule = new Data(this.eventSettings.dataSource, this.eventSettings.query);\n this.crudModule = new Crud(this);\n };\n Schedule.prototype.initializeView = function (viewName) {\n this.activeViewOptions = this.getActiveViewOptions(viewName);\n this.initializeTemplates();\n this.renderModule.render(viewName);\n };\n Schedule.prototype.initializeTemplates = function () {\n this.cellTemplateFn = this.templateParser(this.activeViewOptions.cellTemplate);\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n };\n Schedule.prototype.initializePopups = function () {\n if (this.eventSettings.enableTooltip) {\n this.eventTooltip = new EventTooltip(this);\n }\n this.eventWindow = new EventWindow(this);\n this.quickPopup = new QuickPopups(this);\n };\n Schedule.prototype.getDayNames = function (type) {\n var culShortNames = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.' + type, getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.' + type, cldrData));\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 Schedule.prototype.changeView = function (view, event, muteOnChange) {\n if (!muteOnChange && view === this.currentView) {\n return;\n }\n var args = { requestType: 'viewNavigate', cancel: false, event: event };\n this.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var navArgs = { action: 'view', cancel: false, previousView: this.currentView, currentView: view };\n this.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n return;\n }\n this.setProperties({ currentView: view }, true);\n if (this.headerModule) {\n this.headerModule.updateActiveView();\n this.headerModule.setCalendarView();\n }\n this.initializeView(this.currentView);\n this.animateLayout();\n args = { requestType: 'viewNavigate', cancel: false, event: event };\n this.trigger(events.actionComplete, args);\n };\n Schedule.prototype.changeDate = function (selectedDate, event) {\n var args = { requestType: 'dateNavigate', cancel: false, event: event };\n this.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var navArgs = {\n action: 'date', cancel: false, previousDate: this.selectedDate, currentDate: selectedDate\n };\n this.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n return;\n }\n this.setProperties({ selectedDate: selectedDate }, true);\n if (this.headerModule) {\n this.headerModule.setCalendarDate(selectedDate);\n }\n this.initializeView(this.currentView);\n this.animateLayout();\n args = { requestType: 'dateNavigate', cancel: false, event: event };\n this.trigger(events.actionComplete, args);\n };\n Schedule.prototype.isSelectedDate = function (date) {\n return date.setHours(0, 0, 0, 0) === new Date('' + this.selectedDate).setHours(0, 0, 0, 0);\n };\n Schedule.prototype.animateLayout = function () {\n new Animation({ duration: 600, name: 'FadeIn', timingFunction: 'easeIn' }).animate(this.activeView.element);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n Schedule.prototype.requiredModules = function () {\n var modules = [];\n this.setViewOptions(true);\n for (var _i = 0, _a = Object.keys(this.viewOptions); _i < _a.length; _i++) {\n var view = _a[_i];\n modules.push({\n member: view,\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Schedule.prototype.preRender = function () {\n this.isAdaptive = Browser.isDevice;\n this.globalize = new Internationalization(this.locale);\n this.uiStateValues = { expand: false, isInitial: true, left: 0, top: 0 };\n this.activeCellsData = { startTime: new Date(), endTime: new Date(), isAllDay: false };\n this.defaultLocale = {\n day: 'Day',\n week: 'Week',\n workWeek: 'Work Week',\n month: 'Month',\n agenda: 'Agenda',\n weekAgenda: 'Week Agenda',\n workWeekAgenda: 'Work Week Agenda',\n monthAgenda: 'Month Agenda',\n today: 'Today',\n noEvents: 'No events',\n allDay: 'All day',\n start: 'Start',\n end: 'End',\n more: 'more',\n close: 'Close',\n cancel: 'Cancel',\n noTitle: '(No Title)',\n delete: 'Delete',\n deleteEvent: 'Delete Event',\n selectedItems: 'Items selected',\n deleteSeries: 'Delete Series',\n edit: 'Edit',\n editSeries: 'Edit Series',\n editEvent: 'Edit Event',\n createEvent: 'Create',\n subject: 'Subject',\n addTitle: 'Add title',\n moreDetails: 'More Details',\n save: 'Save',\n editContent: 'Do you want to edit only this event or entire series?',\n deleteRecurrenceContent: 'Do you want to delete only this event or entire series?',\n deleteContent: 'Are you sure you want to delete this event?',\n newEvent: 'New Event',\n title: 'Title',\n location: 'Location',\n description: 'Description',\n timezone: 'Timezone',\n startTimezone: 'Start Timezone',\n endTimezone: 'End Timezone',\n repeat: 'Repeat',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n deleteButton: 'Delete',\n recurrence: 'Recurrence',\n editRecurrence: 'Edit Recurrence',\n repeats: 'Repeats',\n alert: 'Alert',\n startEndError: 'The selected end date occurs before the start date.',\n invalidDateError: 'The entered date value is invalid.',\n ok: 'Ok'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.eventsData = [];\n this.eventsProcessed = [];\n this.currentAction = null;\n this.selectedElements = [];\n this.setViewOptions();\n };\n /**\n * Binding events to the Schedule element.\n * @hidden\n */\n Schedule.prototype.wireEvents = function () {\n var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';\n EventHandler.add(window, resize, this.onScheduleResize, this);\n EventHandler.add(document, Browser.touchStartEvent, this.onDocumentClick, this);\n if (this.allowKeyboardInteraction) {\n this.keyboardInteractionModule = new KeyboardInteraction(this);\n }\n };\n Schedule.prototype.removeSelectedClass = function () {\n var selectedCells = this.getSelectedElements();\n for (var _i = 0, selectedCells_1 = selectedCells; _i < selectedCells_1.length; _i++) {\n var cell = selectedCells_1[_i];\n cell.setAttribute('aria-selected', 'false');\n cell.removeAttribute('tabindex');\n }\n removeClass(selectedCells, cls.SELECTED_CELL_CLASS);\n };\n Schedule.prototype.addSelectedClass = function (cells, focusCell) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n cell.setAttribute('aria-selected', 'true');\n }\n addClass(cells, cls.SELECTED_CELL_CLASS);\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus();\n };\n Schedule.prototype.selectCell = function (element) {\n this.removeSelectedClass();\n this.addSelectedClass([element], element);\n };\n Schedule.prototype.getSelectedElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.SELECTED_CELL_CLASS));\n };\n Schedule.prototype.getAllDayRow = function () {\n return this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n };\n Schedule.prototype.getContentTable = function () {\n return this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n };\n Schedule.prototype.getWorkCellElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n };\n Schedule.prototype.getIndexOfDate = function (collection, date) {\n return collection.map(Number).indexOf(+date);\n };\n Schedule.prototype.isAllDayCell = function (td) {\n if (this.currentView === 'Month' || td.classList.contains(cls.ALLDAY_CELLS_CLASS) ||\n td.classList.contains(cls.HEADER_CELLS_CLASS)) {\n return true;\n }\n return false;\n };\n Schedule.prototype.getDateFromElement = function (td) {\n if (!isNullOrUndefined(td.getAttribute('data-date'))) {\n var dateInMS = parseInt(td.getAttribute('data-date'), 10);\n return new Date(dateInMS);\n }\n return undefined;\n };\n Schedule.prototype.getCellTemplate = function () {\n return this.cellTemplateFn;\n };\n Schedule.prototype.getDateHeaderTemplate = function () {\n return this.dateHeaderTemplateFn;\n };\n Schedule.prototype.getAppointmentTemplate = function () {\n return this.appointmentTemplateFn;\n };\n Schedule.prototype.getEventTooltipTemplate = function () {\n return this.eventTooltipTemplateFn;\n };\n Schedule.prototype.getEditorTemplate = function () {\n return this.editorTemplateFn;\n };\n Schedule.prototype.onDocumentClick = function (args) {\n this.notify(events.documentClick, { event: args });\n };\n Schedule.prototype.onScheduleResize = function (args) {\n if (this.currentView === 'Month') {\n this.notify(events.dataReady, {});\n }\n };\n Schedule.prototype.templateParser = function (template) {\n if (template) {\n var error = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (error) {\n return compile(template);\n }\n }\n return undefined;\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Schedule.prototype.unwireEvents = function () {\n var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';\n EventHandler.remove(window, resize, this.onScheduleResize);\n EventHandler.remove(document, 'click', this.onDocumentClick);\n if (this.keyboardInteractionModule) {\n this.keyboardInteractionModule.destroy();\n }\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Schedule.prototype.getModuleName = function () {\n return 'schedule';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Schedule.prototype.getPersistData = function () {\n return this.addOnPersist(['currentView', 'selectedDate']);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Schedule.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\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 case 'height':\n this.notify(events.uiUpdate, {\n module: 'scroll',\n properties: { width: newProp.width, height: newProp.height }\n });\n break;\n case 'views':\n this.setViewOptions();\n if (this.headerModule) {\n this.headerModule.updateItems();\n }\n this.changeView(this.currentView, null, true);\n break;\n case 'currentView':\n this.changeView(newProp.currentView, null, true);\n break;\n case 'selectedDate':\n this.changeDate(newProp.selectedDate);\n break;\n case 'dateFormat':\n this.activeViewOptions = this.getActiveViewOptions(this.currentView);\n if (this.headerModule) {\n this.headerModule.updateDateRange(this.activeView.getDateRangeText());\n }\n break;\n case 'showHeaderBar':\n if (this.headerModule) {\n this.headerModule.destroy();\n this.headerModule = null;\n }\n if (newProp.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n }\n var cssProps = this.enableRtl ? { border: 'borderLeftWidth', padding: 'paddingLeft' } :\n { border: 'borderRightWidth', padding: 'paddingRight' };\n var uiArgs = { cssProperties: cssProps };\n this.notify(events.scrollUiUpdate, uiArgs);\n break;\n case 'showWeekend':\n case 'workDays':\n case 'startHour':\n case 'endHour':\n case 'workHours':\n case 'readonly':\n requireRefresh = true;\n break;\n case 'locale':\n this.refresh();\n break;\n case 'firstDayOfWeek':\n if (this.headerModule) {\n this.headerModule.setDayOfWeek(newProp.firstDayOfWeek);\n }\n requireRefresh = true;\n break;\n case 'showTimeIndicator':\n this.activeView.highlightCurrentTime();\n break;\n case 'cellTemplate':\n this.activeViewOptions.cellTemplate = newProp.cellTemplate;\n this.cellTemplateFn = this.templateParser(this.activeViewOptions.cellTemplate);\n requireRefresh = true;\n break;\n case 'dateHeaderTemplate':\n this.activeViewOptions.dateHeaderTemplate = newProp.dateHeaderTemplate;\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n requireRefresh = true;\n break;\n case 'eventSettings':\n this.onEventSettingsPropertyChanged(newProp.eventSettings, oldProp.eventSettings);\n break;\n case 'timezone':\n this.eventBase.timezonePropertyChange(oldProp.timezone);\n break;\n case 'enableRtl':\n if (this.headerModule) {\n this.headerModule.setRtl(this.enableRtl);\n }\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n requireRefresh = true;\n break;\n default:\n this.extendedPropertyChange(prop, newProp, oldProp);\n break;\n }\n }\n if (requireRefresh) {\n this.initializeView(this.currentView);\n }\n };\n Schedule.prototype.extendedPropertyChange = function (prop, newProp, oldProp) {\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass);\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass);\n }\n break;\n case 'hideEmptyAgendaDays':\n case 'agendaDaysCount':\n this.activeViewOptions = this.getActiveViewOptions(this.currentView);\n this.changeView(this.currentView, null, true);\n break;\n case 'allowKeyboardInteraction':\n if (this.keyboardInteractionModule) {\n this.keyboardInteractionModule.destroy();\n this.keyboardInteractionModule = null;\n }\n if (newProp.allowKeyboardInteraction) {\n this.keyboardInteractionModule = new KeyboardInteraction(this);\n }\n break;\n case 'editorTemplate':\n if (!isNullOrUndefined(this.editorTemplate)) {\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n }\n this.eventWindow.setDialogContent();\n break;\n }\n };\n Schedule.prototype.onEventSettingsPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'dataSource':\n case 'query':\n case 'fields':\n this.initializeDataModule();\n requireRefresh = true;\n break;\n case 'template':\n this.activeViewOptions.eventTemplate = newProp.template;\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n requireRefresh = true;\n break;\n case 'enableTooltip':\n if (this.eventTooltip) {\n this.eventTooltip.destroy();\n this.eventTooltip = null;\n }\n if (newProp.enableTooltip) {\n this.eventTooltip = new EventTooltip(this);\n }\n break;\n case 'tooltipTemplate':\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n break;\n }\n }\n if (requireRefresh) {\n this.renderModule.refreshDataManager();\n }\n };\n /**\n * Sets different working hours on the required working days by accepting the required start and end time as well as the date collection\n * as its parameters.\n * @method setWorkHours\n * @param {date} dates Collection of dates on which the given start and end hour range needs to be applied.\n * @param {string} start Defines the work start hour.\n * @param {string} end Defines the work end hour.\n * @returns {void}\n */\n Schedule.prototype.setWorkHours = function (dates, start, end) {\n var startHour = this.globalize.parseDate(start, { skeleton: 'Hm' });\n var endHour = this.globalize.parseDate(end, { skeleton: 'Hm' });\n var tableEle = this.getContentTable();\n if (isNullOrUndefined(startHour) || isNullOrUndefined(endHour) || !tableEle) {\n return;\n }\n startHour.setMilliseconds(0);\n endHour.setMilliseconds(0);\n var viewStartHour = this.activeView.getStartHour();\n if (startHour < viewStartHour) {\n startHour = viewStartHour;\n }\n if (endHour > this.activeView.getEndHour()) {\n endHour = this.activeView.getEndHour();\n }\n var msMajorInterval = 60 * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / 2;\n var startIndex = Math.round((util.getDateInMs(startHour) - util.getDateInMs(viewStartHour)) / msInterval);\n var endIndex = Math.ceil((util.getDateInMs(endHour) - util.getDateInMs(viewStartHour)) / msInterval);\n var cells = [];\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var date = dates_1[_i];\n util.resetTime(date);\n var colIndex = this.getIndexOfDate(this.activeView.renderDates, date);\n if (colIndex >= 0) {\n for (var i = startIndex; i < endIndex; i++) {\n cells.push(tableEle.rows[i].cells[colIndex]);\n }\n }\n }\n addClass(cells, cls.WORK_HOURS_CLASS);\n };\n /**\n * Retrieves the start and end time information of the specific cell element.\n * @method getCellDetails\n * @param {Element} td The cell element whose start and end time details are to be retrieved.\n * @returns {CellClickEventArgs} Object An object holding the startTime, endTime and all-day information along with the target HTML\n * element will be returned.\n */\n Schedule.prototype.getCellDetails = function (td) {\n var startTime = this.getDateFromElement(td);\n var endTime;\n if (td.classList.contains(cls.ALLDAY_CELLS_CLASS) || td.classList.contains(cls.HEADER_CELLS_CLASS)) {\n endTime = util.addDays(new Date(startTime.getTime()), 1);\n }\n else {\n endTime = this.activeView.getEndDateFromStartDate(startTime);\n }\n var data = {\n startTime: startTime,\n endTime: endTime,\n isAllDay: this.isAllDayCell(td),\n element: td\n };\n return data;\n };\n /**\n * Scrolls the Schedule content area to the specified time.\n * @method scrollTo\n * @param {string} hour Accepts the time value in the skeleton format of 'Hm'.\n * @returns {void}\n */\n Schedule.prototype.scrollTo = function (hour) {\n if (this.activeView.scrollToHour) {\n this.activeView.scrollToHour(hour);\n }\n };\n /**\n * Adds the newly created event into the Schedule dataSource.\n * @method addEvent\n * @param {Object | Object[]} data Single or collection of event objects to be added into Schedule.\n * @returns {void}\n */\n Schedule.prototype.addEvent = function (data) {\n this.crudModule.addEvent(data);\n };\n /**\n * Updates the changes made in the event object by passing it as an parameter into the dataSource.\n * @method saveEvent\n * @param {[key: string]: Object} data Single or collection of event objects to be saved into Schedule.\n * @param {CurrentAction} currentAction Denotes the action that takes place either for editing occurrence or series.\n * The valid current action names are `EditOccurrence` or `EditSeries`.\n * @returns {void}\n */\n Schedule.prototype.saveEvent = function (data, currentAction) {\n this.crudModule.saveEvent(data, currentAction);\n };\n /**\n * Deletes the events based on the provided ID or event collection in the argument list.\n * @method deleteEvent\n * @param {{[key: string]: Object}} id Single event objects to be removed from the Schedule.\n * @param {{[key: string]: Object }[]} id Collection of event objects to be removed from the Schedule.\n * @param {string | number} id Accepts the ID of the event object which needs to be removed from the Schedule.\n * @param {CurrentAction} currentAction Denotes the delete action that takes place either on occurrence or series events.\n * The valid current action names are `Delete`, `DeleteOccurrence` or `DeleteSeries`.\n * @returns {void}\n */\n Schedule.prototype.deleteEvent = function (id, currentAction) {\n this.crudModule.deleteEvent(id, currentAction);\n };\n /**\n * Retrieves the entire collection of events bound to the Schedule.\n * @method getEvents\n * @returns {Object[]} Returns the collection of event objects from the Schedule.\n */\n Schedule.prototype.getEvents = function () {\n return this.eventsData;\n };\n /**\n * Retrieves the occurrences of a single recurrence event based on the provided parent ID.\n * @method getOccurrencesByID\n * @param {number} eventID ID of the parent recurrence data from which the occurrences are fetched.\n * @returns {Object[]} Returns the collection of occurrence event objects.\n */\n Schedule.prototype.getOccurrencesByID = function (eventID) {\n var occurrenceObj = this.eventBase.getOccurrencesByID(eventID);\n return occurrenceObj;\n };\n /**\n * Retrieves all the occurrences that lies between the specific start and end time range.\n * @method getOccurrencesByRange\n * @param {Date} startTime Denotes the start time range.\n * @param {Date} endTime Denotes the end time range.\n * @returns {Object[]} Returns the collection of occurrence event objects that lies between the provided start and end time.\n */\n Schedule.prototype.getOccurrencesByRange = function (startTime, endTime) {\n var occurrenceObj = this.eventBase.getOccurrencesByRange(startTime, endTime);\n return occurrenceObj;\n };\n /**\n * Retrieves the events that lies on the current date range of the active view of Schedule.\n * @method getCurrentViewEvents\n * @returns {Object[]} Returns the collection of events.\n */\n Schedule.prototype.getCurrentViewEvents = function () {\n return this.eventsProcessed;\n };\n /**\n * Refreshes the event dataSource. This method may be useful when the events alone in the Schedule needs to be re-rendered.\n * @method refreshEvents\n * @returns {void}\n */\n Schedule.prototype.refreshEvents = function () {\n this.renderModule.refreshDataManager();\n };\n /**\n * To get the appointment object from element.\n * @method getEventDetails\n * @param {Element} element Denotes the event UI element on the Schedule.\n * @returns {Object} Returns the event details.\n */\n Schedule.prototype.getEventDetails = function (element) {\n var guid = element.getAttribute('data-guid');\n if (guid) {\n return this.eventBase.getEventByGuid(guid);\n }\n return {};\n };\n /**\n * To check whether the given time range slots are available for event creation or already occupied by other events.\n * @method isSlotAvailable\n * @param {Date} startTime Denotes the start time of the slot.\n * @param {Date} endTime Denotes the end time of the slot.\n * @returns {boolean} Returns true, if the slot that lies in the provided time range does not contain any other events.\n */\n Schedule.prototype.isSlotAvailable = function (startTime, endTime) {\n var getAvailableObject = this.eventBase.filterEvents(startTime, endTime);\n return (getAvailableObject.length) ? false : true;\n };\n /**\n * To manually open the event editor on specific time or on certain events.\n * @method openEditor\n * @param {Object} data It can be either cell data or event data.\n * @param {CurrentAction} action Defines the action for which the editor needs to be opened such as either for new event creation or\n * for editing of existing events. The applicable action names that can be used here are `Add`, `Save`, `EditOccurrence`\n * and `EditSeries`.\n * @returns {void}\n */\n Schedule.prototype.openEditor = function (data, action) {\n this.eventWindow.openEditor(data, action);\n };\n /**\n * This method has been added to adjust the size of the outer event wrapper class that holds the collection of events,\n * while trying to set manual height and width to the Schedule cells.\n * @method adjustEventWrapper\n * @returns {void}\n */\n Schedule.prototype.adjustEventWrapper = function () {\n this.activeView.adjustEventWrapper();\n };\n /**\n * Destroys the Schedule component.\n * @method destroy\n * @return {void}\n */\n Schedule.prototype.destroy = function () {\n if (this.quickPopup) {\n this.quickPopup.destroy();\n }\n if (this.eventWindow) {\n this.eventWindow.destroy();\n }\n this.unwireEvents();\n if (this.headerModule) {\n this.headerModule.destroy();\n this.headerModule = null;\n }\n if (this.scrollModule) {\n this.scrollModule.destroy();\n }\n if (this.activeView) {\n this.activeView.removeEventListener();\n this.activeView.destroy();\n this.activeView = null;\n }\n if (this.scheduleTouchModule) {\n this.scheduleTouchModule.destroy();\n }\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n removeClass([this.element], cls.ROOT);\n };\n __decorate([\n Property('auto')\n ], Schedule.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Schedule.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showHeaderBar\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showTimeIndicator\", void 0);\n __decorate([\n Property('Week')\n ], Schedule.prototype, \"currentView\", void 0);\n __decorate([\n Property(['Day', 'Week', 'WorkWeek', 'Month', 'Agenda'])\n ], Schedule.prototype, \"views\", void 0);\n __decorate([\n Property(new Date())\n ], Schedule.prototype, \"selectedDate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateFormat\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showWeekend\", void 0);\n __decorate([\n Property(0)\n ], Schedule.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property([1, 2, 3, 4, 5])\n ], Schedule.prototype, \"workDays\", void 0);\n __decorate([\n Property('00:00')\n ], Schedule.prototype, \"startHour\", void 0);\n __decorate([\n Property('24:00')\n ], Schedule.prototype, \"endHour\", void 0);\n __decorate([\n Complex({}, WorkHours)\n ], Schedule.prototype, \"workHours\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowKeyboardInteraction\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateHeaderTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cellTemplate\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showQuickInfo\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"editorTemplate\", void 0);\n __decorate([\n Property(7)\n ], Schedule.prototype, \"agendaDaysCount\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"hideEmptyAgendaDays\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"timezone\", void 0);\n __decorate([\n Complex({}, EventSettings)\n ], Schedule.prototype, \"eventSettings\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellDoubleClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"navigating\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"renderCell\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventRendered\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBinding\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBound\", void 0);\n Schedule = __decorate([\n NotifyPropertyChanges\n ], Schedule);\n return Schedule;\n}(Component));\nexport { Schedule };\n","import { createElement, prepend, isNullOrUndefined, getValue, getDefaultDateObject, cldrData } from '@syncfusion/ej2-base';\nimport { getDateInMs, addDays, resetTime, WEEK_LENGTH } from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * view base\n */\nvar ViewBase = /** @class */ (function () {\n /**\n * Constructor\n */\n function ViewBase(parent) {\n var _this = this;\n this.customHelper = {\n getDayName: function (dt) {\n return _this.parent.getDayNames('abbreviated')[dt.getDay()];\n },\n getDate: function (dt) {\n return _this.parent.globalize.formatDate(dt, { format: 'd' });\n },\n getTime: function (dt) {\n if (_this.parent.isAdaptive) {\n return _this.parent.globalize.formatDate(dt, { skeleton: 'h' });\n }\n return _this.parent.globalize.formatDate(dt, { skeleton: 'hm' });\n }\n };\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n }\n ViewBase.prototype.createTableLayout = function (className) {\n var clsName = className || '';\n var table = createElement('table', { className: cls.SCHEDULE_TABLE_CLASS + ' ' + clsName });\n var tbody = createElement('tbody');\n table.appendChild(tbody);\n return table;\n };\n ViewBase.prototype.renderPanel = function (type) {\n if (type === cls.PREVIOUS_PANEL_CLASS) {\n prepend([this.element], this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS));\n }\n else {\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n }\n };\n ViewBase.prototype.setPanel = function (panel) {\n this.element = panel;\n };\n ViewBase.prototype.getPanel = function () {\n return this.element;\n };\n ViewBase.prototype.adjustEventWrapper = function () {\n // Here adjust the events wrapper width based in work cells\n };\n ViewBase.prototype.startDate = function () {\n return this.renderDates[0];\n };\n ViewBase.prototype.endDate = function () {\n return addDays(this.renderDates[this.renderDates.length - 1], 1);\n };\n ViewBase.prototype.getStartHour = function () {\n var startHour = this.parent.globalize.parseDate(this.parent.activeViewOptions.startHour, { skeleton: 'Hm' });\n if (isNullOrUndefined(startHour)) {\n startHour = new Date(2000, 0, 0, 0);\n }\n return startHour;\n };\n ViewBase.prototype.getEndHour = function () {\n var endHour = this.parent.globalize.parseDate(this.parent.activeViewOptions.endHour, { skeleton: 'Hm' });\n if (isNullOrUndefined(endHour)) {\n endHour = new Date(2000, 0, 0, 0);\n }\n return endHour;\n };\n ViewBase.prototype.isCurrentDate = function (date) {\n return date.setHours(0, 0, 0, 0) === new Date().setHours(0, 0, 0, 0);\n };\n ViewBase.prototype.isCurrentMonth = function (date) {\n return date.getFullYear() === new Date().getFullYear() && date.getMonth() === new Date().getMonth();\n };\n ViewBase.prototype.isWorkDay = function (date) {\n if (this.parent.activeViewOptions.workDays.indexOf(date.getDay()) >= 0) {\n return true;\n }\n return false;\n };\n ViewBase.prototype.isWorkHour = function (date) {\n var startHour = this.parent.globalize.parseDate(this.parent.workHours.start, { skeleton: 'Hm' });\n var endHour = this.parent.globalize.parseDate(this.parent.workHours.end, { skeleton: 'Hm' });\n if (isNullOrUndefined(startHour) || isNullOrUndefined(endHour)) {\n return false;\n }\n startHour.setMilliseconds(0);\n endHour.setMilliseconds(0);\n if (getDateInMs(date) < getDateInMs(startHour) || getDateInMs(date) >= getDateInMs(endHour) || !this.isWorkDay(date)) {\n return false;\n }\n return true;\n };\n ViewBase.prototype.getRenderDates = function () {\n this.renderDates = [];\n this.renderDates.push(resetTime(this.parent.selectedDate));\n };\n ViewBase.prototype.getNextPreviousDate = function (type) {\n if (type === 'next') {\n return addDays(this.parent.selectedDate, WEEK_LENGTH);\n }\n else {\n return addDays(this.parent.selectedDate, -WEEK_LENGTH);\n }\n };\n ViewBase.prototype.getLabelText = function (view) {\n return this.parent.localeObj.getConstant(view) + ' of ' +\n this.parent.globalize.formatDate(this.parent.selectedDate, { skeleton: 'long' });\n };\n ViewBase.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive) {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n return this.formatDateRange(this.renderDates[0], this.renderDates[this.renderDates.length - 1]);\n };\n ViewBase.prototype.formatDateRange = function (startDate, endDate) {\n var globalize = this.parent.globalize;\n if (!isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {\n if (!endDate) {\n return globalize.formatDate(startDate, { format: this.parent.activeViewOptions.dateFormat });\n }\n return globalize.formatDate(startDate, { format: this.parent.activeViewOptions.dateFormat }) + ' - ' +\n globalize.formatDate(endDate, { format: this.parent.activeViewOptions.dateFormat });\n }\n var formattedStr;\n var longDateFormat;\n if (this.parent.locale === 'en' || this.parent.locale === 'en-US') {\n longDateFormat = getValue('dateFormats.long', getDefaultDateObject());\n }\n else {\n longDateFormat = getValue('main.' + '' + this.parent.locale + '.dates.calendars.gregorian.dateFormats.long', cldrData);\n }\n if (!endDate) {\n return globalize.formatDate(startDate, { format: longDateFormat });\n }\n var dateFormat = longDateFormat.trim().toLocaleLowerCase();\n if (dateFormat.substr(0, 1) === 'd') {\n if (startDate.getFullYear() === endDate.getFullYear()) {\n if (startDate.getMonth() === endDate.getMonth()) {\n formattedStr = globalize.formatDate(startDate, { format: 'dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMMM yyyy' });\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'dd MMM' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMM yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'dd MMM yyyy' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMM yyyy' });\n }\n }\n else if (dateFormat.substr(0, 1) === 'm') {\n if (startDate.getFullYear() === endDate.getFullYear()) {\n if (startDate.getMonth() === endDate.getMonth()) {\n formattedStr = globalize.formatDate(startDate, { format: 'MMMM dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd, yyyy' });\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'MMM dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'MMM dd, yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'MMM dd, yyyy' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'MMM dd, yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: longDateFormat }) + ' - ' +\n globalize.formatDate(endDate, { format: longDateFormat });\n }\n return formattedStr;\n };\n ViewBase.prototype.getMobileDateElement = function (date, className) {\n var wrap = createElement('div', { className: className });\n var dateEle = createElement('div', { className: 'e-m-date' });\n dateEle.innerHTML = this.parent.globalize.formatDate(date, { format: 'd' });\n var dayEle = createElement('div', { className: 'e-m-day' });\n dayEle.innerHTML = this.parent.globalize.formatDate(date, { format: 'E' });\n wrap.appendChild(dateEle);\n wrap.appendChild(dayEle);\n return wrap;\n };\n return ViewBase;\n}());\nexport { ViewBase };\n","import { extend, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Work cell interactions\n */\nvar WorkCellInteraction = /** @class */ (function () {\n function WorkCellInteraction(parent) {\n this.parent = parent;\n }\n WorkCellInteraction.prototype.cellMouseDown = function (e) {\n this.parent.notify(event.cellMouseDown, { event: e });\n };\n WorkCellInteraction.prototype.cellClick = function (e) {\n if (closest(e.target, '.' + cls.APPOINTMENT_CLASS)) {\n return;\n }\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n if (isNullOrUndefined(navigateEle) || isNullOrUndefined(this.parent.viewOptions.day) || (this.parent.currentView === 'Day')) {\n if (this.parent.activeViewOptions.readonly) {\n return;\n }\n var target = e.currentTarget;\n var isWorkCell = target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS);\n if (isWorkCell && e.shiftKey && e.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.onMouseSelection(e);\n return;\n }\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellClick' });\n this.parent.trigger(event.cellClick, args);\n if (args.cancel) {\n return;\n }\n if (isWorkCell) {\n this.parent.selectCell(target);\n }\n this.parent.notify(event.cellClick, args);\n }\n else {\n var date = this.parent.getDateFromElement(e.currentTarget);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n }\n };\n WorkCellInteraction.prototype.cellDblClick = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n if (!isNullOrUndefined(target) || this.parent.activeViewOptions.readonly) {\n return;\n }\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellDoubleClick' });\n this.parent.trigger(event.cellDoubleClick, args);\n if (args.cancel) {\n return;\n }\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n return WorkCellInteraction;\n}());\nexport { WorkCellInteraction };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { append, createElement, extend, EventHandler, prepend, Animation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { EventBase } from './event-base';\nimport * as util from '../base/util';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Vertical view appointment rendering\n */\nvar AppointmentRendering = /** @class */ (function (_super) {\n __extends(AppointmentRendering, _super);\n /**\n * Constructor for vertical view\n */\n function AppointmentRendering(parent) {\n var _this = _super.call(this, parent) || this;\n _this.renderedEvents = [];\n _this.renderedAllDayEvents = [];\n _this.overlapEvents = [];\n _this.moreEvents = [];\n _this.minorSlotCount = 2;\n _this.majorSlot = 60;\n _this.allDayLevel = 0;\n _this.startHour = _this.parent.activeView.getStartHour();\n _this.endHour = _this.parent.activeView.getEndHour();\n _this.element = _this.parent.activeView.getPanel();\n _this.animation = new Animation({ progress: _this.animationUiUpdate.bind(_this) });\n _this.addEventListener();\n return _this;\n }\n AppointmentRendering.prototype.renderAppointments = function () {\n var expandCollapse = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n EventHandler.remove(expandCollapse, 'click', this.rowExpandCollapse);\n EventHandler.add(expandCollapse, 'click', this.rowExpandCollapse, this);\n var appointmentWrapper = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var _i = 0, appointmentWrapper_1 = appointmentWrapper; _i < appointmentWrapper_1.length; _i++) {\n var wrap = appointmentWrapper_1[_i];\n remove(wrap);\n }\n var alldayCountWrapper = [].slice.call(this.element.querySelectorAll('.' + cls.ROW_COUNT_WRAPPER_CLASS));\n for (var _a = 0, alldayCountWrapper_1 = alldayCountWrapper; _a < alldayCountWrapper_1.length; _a++) {\n var wrap = alldayCountWrapper_1[_a];\n remove(wrap);\n }\n this.allDayElement = [].slice.call(this.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS + ':first-child'));\n this.setAllDayRowHeight(0);\n this.renderedEvents = [];\n this.renderedAllDayEvents = [];\n var allDayEvents = [];\n this.dateRender = this.parent.activeView.renderDates;\n var eventsList = this.parent.eventsProcessed;\n if (eventsList.length > 0) {\n for (var day = 0, length_1 = this.dateRender.length; day < length_1; day++) {\n var startDateTime = new Date(this.dateRender[day].getTime());\n var endDateTime = util.addDays(this.dateRender[day], 1);\n var fieldMapping = this.parent.eventFields;\n var filterEvents = this.filterEvents(startDateTime, endDateTime);\n for (var count = 0, length1 = filterEvents.length; count < length1; count++) {\n var event_1 = filterEvents[count];\n if (this.isAllDayAppointment(event_1)) {\n allDayEvents.push(extend({}, event_1, null, true));\n }\n else {\n this.renderVerticalEvents(event_1, day);\n }\n }\n }\n if (allDayEvents.length > 0) {\n allDayEvents = allDayEvents.filter(function (item, index, arr) {\n return index === arr.map(function (item) { return item.Guid; }).indexOf(item.Guid);\n });\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n this.renderAllDayEvents(this.sortByDateTime(allDayEvents));\n }\n this.parent.notify(events.contentReady, {});\n addClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n }\n };\n AppointmentRendering.prototype.createAppointmentElement = function (record, isAllDay, data) {\n var fieldMapping = this.parent.eventFields;\n var appointmentWrapper = createElement('div', {\n id: 'Appointment_' + record[fieldMapping.id],\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-guid': record.Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-readonly': 'false',\n 'aria-selected': 'false',\n 'aria-grabbed': 'true',\n 'aria-label': isNullOrUndefined(record[fieldMapping.subject]) ?\n this.parent.eventSettings.fields.subject.default : record[fieldMapping.subject]\n }\n });\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n var templateElement;\n var eventData = data;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateElement = this.parent.getAppointmentTemplate()(record);\n }\n else {\n var recordSubject = isNullOrUndefined(record[fieldMapping.subject]) ?\n this.parent.eventSettings.fields.subject.default : record[fieldMapping.subject];\n var appointmentSubject = createElement('div', {\n className: cls.APPOINTMENT_SUBJECT,\n innerHTML: recordSubject\n });\n if (isAllDay) {\n if (record[fieldMapping.isAllDay]) {\n templateElement = [appointmentSubject];\n }\n else {\n templateElement = [];\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.globalize.formatDate(record[fieldMapping.startTime], { skeleton: 'hm' })\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.globalize.formatDate(record[fieldMapping.endTime], { skeleton: 'hm' }),\n });\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n else {\n var timeStr = this.parent.globalize.formatDate(record[fieldMapping.startTime], { skeleton: 'hm' }) + ' - ' +\n this.parent.globalize.formatDate(record[fieldMapping.endTime], { skeleton: 'hm' });\n var appointmentTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: timeStr,\n });\n var appointmentLocation = createElement('div', {\n className: cls.APPOINTMENT_LOCATION, innerHTML: record[fieldMapping.location]\n });\n templateElement = [appointmentSubject, appointmentTime, appointmentLocation];\n }\n }\n append([].slice.call(templateElement), appointmentDetails);\n if (!isNullOrUndefined(record[fieldMapping.recurrenceRule])) {\n var iconClass = (record[fieldMapping.id] === record[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n var recurrenceIcon = createElement('div', {\n className: cls.ICON + ' ' + iconClass + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : '')\n });\n isAllDay ? appointmentDetails.appendChild(recurrenceIcon) : appointmentWrapper.appendChild(recurrenceIcon);\n }\n if (isAllDay) {\n this.renderSpannedIcon(appointmentDetails, eventData, isAllDay);\n }\n else {\n this.renderSpannedIcon(appointmentWrapper, eventData, isAllDay);\n }\n return appointmentWrapper;\n };\n AppointmentRendering.prototype.createMoreIndicator = function (allDayRow, count, currentDay) {\n var countWrapper = allDayRow[currentDay + count];\n if (countWrapper.childElementCount <= 0) {\n var innerCountWrap = createElement('div', {\n className: cls.ROW_COUNT_WRAPPER_CLASS,\n id: cls.ROW_COUNT_WRAPPER_CLASS + '-' + (currentDay + count).toString()\n });\n var appointmentCount = createElement('div', {\n className: cls.APPOINTMENT_COUNT_CLASS,\n attrs: { 'data-index': (currentDay + count).toString(), 'data-count': '1' },\n innerHTML: '+1 ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))\n });\n innerCountWrap.appendChild(appointmentCount);\n countWrapper.appendChild(innerCountWrap);\n EventHandler.add(appointmentCount, 'click', this.rowExpandCollapse, this);\n }\n else {\n var countCell = countWrapper.firstChild;\n countCell.firstChild.setAttribute('data-count', (parseInt(countCell.firstChild.getAttribute('data-count'), 10) + 1).toString());\n countCell.firstChild.innerHTML =\n '+' + (parseInt(countCell.firstChild.getAttribute('data-count'), 10)).toString() + ' ' +\n (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));\n }\n };\n AppointmentRendering.prototype.renderSpannedIcon = function (element, spanEvent, isAllDay) {\n if (isAllDay) {\n if (spanEvent.isLeft) {\n var iconLeft = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_LEFT_CLASS\n });\n prepend([iconLeft], element);\n }\n if (spanEvent.isRight) {\n var iconRight = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_RIGHT_CLASS\n });\n append([iconRight], element);\n }\n }\n else {\n if (spanEvent.isTop) {\n var iconTop = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_UP_CLASS\n });\n prepend([iconTop], element);\n }\n if (spanEvent.isBottom) {\n var iconBottom = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_DOWN_CLASS\n });\n append([iconBottom], element);\n }\n }\n };\n AppointmentRendering.prototype.isSpannedEvent = function (record, day, isAllDay) {\n var currentDate = util.resetTime(this.dateRender[day]);\n var fieldMapping = this.parent.eventFields;\n var startEndHours = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var event = extend({}, record, null, true);\n if (isAllDay) {\n var viewEndDate = util.addDays(this.dateRender[this.dateRender.length - 1], 1);\n event.isSpanned = { isLeft: false, isRight: false };\n if (record[fieldMapping.startTime] < currentDate) {\n event[fieldMapping.startTime] = currentDate;\n event.isSpanned.isLeft = true;\n }\n if (viewEndDate < record[fieldMapping.endTime]) {\n event[fieldMapping.endTime] = viewEndDate;\n event.isSpanned.isRight = true;\n }\n }\n else {\n event.isSpanned = { isBottom: false, isTop: false };\n if (record[fieldMapping.startTime].getTime() < startEndHours.startHour.getTime()) {\n event[fieldMapping.startTime] = startEndHours.startHour;\n event.isSpanned.isTop = true;\n }\n if (record[fieldMapping.endTime].getTime() > startEndHours.endHour.getTime()) {\n event[fieldMapping.endTime] = startEndHours.endHour;\n event.isSpanned.isBottom = true;\n }\n }\n return event;\n };\n AppointmentRendering.prototype.getAllDayCounts = function (record, eStart, eEnd, day) {\n var datesRender = this.dateRender;\n var fieldMapping = this.parent.eventFields;\n var objectSpan = record.isSpanned;\n var daysCount = 0;\n if (this.parent.currentView === 'WorkWeek' || this.parent.currentView === 'Week' && !this.parent.activeViewOptions.showWeekend) {\n for (var day1 = day, length_2 = datesRender.length; day1 < length_2; day1++) {\n if (datesRender[day1].getTime() === (objectSpan.isRight ?\n util.addDays(new Date(new Date(eEnd.getFullYear(), eEnd.getMonth(), eEnd.getDate()).getTime()), -1).setHours(0, 0, 0) :\n new Date(eEnd.getFullYear(), eEnd.getMonth(), eEnd.getDate()).getTime())) {\n daysCount = record[fieldMapping.isAllDay] ? (day1 - day) : (day1 - day) + 1;\n break;\n }\n else if (datesRender[day1].getTime() > new Date(eEnd.getFullYear(), eEnd.getMonth(), eEnd.getDate()).getTime()) {\n record[fieldMapping.endTime] = datesRender[day1 - 1];\n daysCount = record[fieldMapping.isAllDay] ? ((day1 - 1) - day) : ((day1 - 1) - day) + 1;\n break;\n }\n }\n }\n if (daysCount <= 0) {\n if (eEnd.getHours() === 0 && eEnd.getMinutes() === 0) {\n daysCount = (Math.ceil((record[fieldMapping.endTime].getTime() -\n record[fieldMapping.startTime].getTime()) / util.MS_PER_DAY));\n }\n else {\n daysCount = Math.ceil((util.addDays(new Date(eEnd.getTime()), 1).setHours(0, 0, 0) -\n new Date(eStart.setHours(0, 0, 0)).getTime()) / util.MS_PER_DAY);\n record[fieldMapping.endTime] = util.addDays(util.resetTime(new Date(record[fieldMapping.endTime].getTime())), 1);\n }\n }\n return daysCount;\n };\n AppointmentRendering.prototype.renderAllDayEvents = function (event) {\n this.moreEvents = [];\n this.overlapList = [];\n this.allDayLevel = 0;\n for (var day = 0, length_3 = this.dateRender.length; day < length_3; day++) {\n var fieldMapping = this.parent.eventFields;\n var filterEvents = this.filterEvents(new Date(this.dateRender[day].getTime()), util.addDays(this.dateRender[day], 1), event);\n var allDayRowCell = this.element.querySelector('.' + cls.ALLDAY_CELLS_CLASS + ':first-child');\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_WRAPPER_CLASS + ':nth-child(' + (day + 1) + ')');\n var _loop_1 = function (count, length1) {\n var eventObj = filterEvents[count];\n var record = this_1.isSpannedEvent(eventObj, day, true);\n var cellTop = allDayRowCell.offsetTop;\n var eStart = new Date(record[fieldMapping.startTime].getTime());\n var eEnd = new Date(record[fieldMapping.endTime].getTime());\n var dates = this_1.dateRender;\n var appWidth = 0;\n var appLeft = '0%';\n var topValue = 1;\n var appLevel = 0;\n var isDateRange = dates[0].getTime() <= eStart.getTime() &&\n util.addDays(dates[dates.length - 1], 1).getTime() >= eStart.getTime();\n if (eStart <= eEnd && isDateRange) {\n var isAlreadyRendered = this_1.renderedAllDayEvents.filter(function (event) {\n return event.Guid === eventObj.Guid;\n });\n if (isAlreadyRendered.length === 0) {\n var allDayDifference = this_1.getAllDayCounts(record, eStart, eEnd, day);\n var allDayIndex = this_1.getOverlapIndex(record, day, true);\n record.Index = allDayIndex;\n this_1.allDayLevel = (this_1.allDayLevel < allDayIndex) ? allDayIndex : this_1.allDayLevel;\n var widthAdjustment = record.isSpanned.isRight ? 0 :\n this_1.parent.currentView === 'Day' ? 4 : 7;\n if (allDayDifference >= 0) {\n appWidth = (allDayDifference * 100) - widthAdjustment;\n }\n this_1.renderedAllDayEvents.push(extend({}, record, null, true));\n var allDayRow = [].slice.call(this_1.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).children);\n var appointmentElement = this_1.createAppointmentElement(eventObj, true, record.isSpanned);\n addClass([appointmentElement], cls.ALLDAY_APPOINTMENT_CLASS);\n eventWrapper.appendChild(appointmentElement);\n var appHeight = appointmentElement.offsetHeight;\n topValue += (allDayIndex === 0 ? cellTop : (cellTop + (allDayIndex * appHeight))) + 1;\n setStyleAttribute(appointmentElement, { 'width': appWidth + '%', 'top': topValue + 'px' });\n var args = { data: eventObj, element: appointmentElement };\n this_1.parent.trigger(events.eventRendered, args);\n if (allDayIndex > 1) {\n this_1.moreEvents.push(appointmentElement);\n for (var count_1 = 0, length_4 = allDayDifference; count_1 < length_4; count_1++) {\n this_1.createMoreIndicator(allDayRow, count_1, day);\n }\n }\n allDayRowCell.setAttribute('data-count', this_1.allDayLevel.toString());\n var allDayRowHeight = ((!this_1.parent.uiStateValues.expand && this_1.allDayLevel > 2) ?\n (3 * appHeight) : ((this_1.allDayLevel + 1) * appHeight)) + 4;\n this_1.setAllDayRowHeight(allDayRowHeight);\n this_1.addOrRemoveClass();\n this_1.wireAppointmentEvents(appointmentElement);\n }\n }\n };\n var this_1 = this;\n for (var count = 0, length1 = filterEvents.length; count < length1; count++) {\n _loop_1(count, length1);\n }\n }\n };\n AppointmentRendering.prototype.renderVerticalEvents = function (eventObj, day) {\n var record = this.isSpannedEvent(eventObj, day, false);\n var fieldMapping = this.parent.eventFields;\n var cellWidth = this.element.querySelector('.' + cls.WORK_CELLS_CLASS).offsetWidth;\n var cellHeight = this.element.querySelector('.' + cls.WORK_CELLS_CLASS).offsetHeight;\n var eStart = record[fieldMapping.startTime];\n var eEnd = record[fieldMapping.endTime];\n var dates = this.dateRender;\n var appWidth = '0%';\n var appLeft = '0%';\n var topValue = 0;\n var appLevel = 0;\n var isDateRange = dates[0].getTime() <= eStart.getTime() &&\n util.addDays(dates[dates.length - 1], 1).getTime() >= eStart.getTime();\n if (eStart < eEnd && isDateRange) {\n var appHeight = 0;\n var startEndHours = util.getStartEndHours(util.resetTime(this.dateRender[day]), this.startHour, this.endHour);\n if (startEndHours.endHour.getTime() <= eEnd.getTime() && startEndHours.startHour.getTime() >= eStart.getTime()) {\n appHeight = this.getAppointmentHeight(cellHeight, startEndHours.startHour, startEndHours.endHour);\n }\n else if (startEndHours.endHour.getTime() <= eEnd.getTime()) {\n appHeight = this.getAppointmentHeight(cellHeight, eStart, startEndHours.endHour);\n }\n else if (startEndHours.startHour.getTime() >= eStart.getTime()) {\n appHeight = this.getAppointmentHeight(cellHeight, startEndHours.startHour, eEnd);\n }\n else {\n appHeight = (eEnd.getTime() - eStart.getTime()) / (60 * 1000) * (cellHeight * this.minorSlotCount) / this.majorSlot;\n }\n appHeight = (appHeight < cellHeight) ? cellHeight : appHeight;\n if (eStart.getTime() > startEndHours.startHour.getTime()) {\n topValue = this.getTopValue(eStart, day);\n }\n var appIndex = this.getOverlapIndex(record, day, false);\n record.Index = appIndex;\n this.overlapList.push(record);\n if (this.overlapList.length > 1) {\n (isNullOrUndefined(this.overlapEvents[appIndex])) ? this.overlapEvents[appIndex] = [record] :\n this.overlapEvents[appIndex].push(record);\n }\n else {\n this.overlapEvents = [];\n this.overlapEvents.push([record]);\n }\n var width = this.parent.currentView === 'Day' ? 97 : 94;\n appWidth = ((width - this.overlapEvents.length) / this.overlapEvents.length) + '%';\n var argsData = { index: appIndex, left: appLeft, width: appWidth, day: day, record: record };\n var tempData = this.adjustOverlapElements(argsData);\n appWidth = (tempData.appWidth);\n this.renderedEvents.push(extend({}, record, null, true));\n var appointmentWrap = [].slice.call(this.element.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).children);\n var appointmentElement = this.createAppointmentElement(eventObj, false, record.isSpanned);\n setStyleAttribute(appointmentElement, { 'width': tempData.appWidth, 'height': appHeight + 'px', 'top': topValue + 'px' });\n var iconHeight = appointmentElement.querySelectorAll('.' + cls.EVENT_INDICATOR_CLASS).length * 15;\n var maxHeight = appHeight - 40 - iconHeight;\n if (!this.parent.isAdaptive && appointmentElement.querySelector('.' + cls.APPOINTMENT_SUBJECT)) {\n appointmentElement.querySelector('.' + cls.APPOINTMENT_SUBJECT).style.maxHeight = maxHeight + 'px';\n }\n if (this.parent.enableRtl) {\n setStyleAttribute(appointmentElement, { 'right': tempData.appLeft });\n }\n else {\n setStyleAttribute(appointmentElement, { 'left': tempData.appLeft });\n }\n appointmentWrap[argsData.day].appendChild(appointmentElement);\n var args = { data: eventObj, element: appointmentElement };\n this.parent.trigger(events.eventRendered, args);\n this.wireAppointmentEvents(appointmentElement);\n }\n };\n AppointmentRendering.prototype.getTopValue = function (date, day) {\n var cellHeight = this.element.querySelector('.' + cls.WORK_CELLS_CLASS).offsetHeight;\n var startEndHours = util.getStartEndHours(util.resetTime(this.dateRender[day]), this.startHour, this.endHour);\n var startHour = startEndHours.startHour;\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (diffInMinutes * cellHeight * this.minorSlotCount) / this.majorSlot;\n };\n AppointmentRendering.prototype.getAppointmentHeight = function (cellHeight, startDate, endDate) {\n return (((endDate.getTime() - startDate.getTime()) / (1000 * 60)) / (this.majorSlot / this.minorSlotCount)) * cellHeight;\n };\n AppointmentRendering.prototype.getOverlapIndex = function (record, day, isAllDay) {\n var _this = this;\n var fieldMapping = this.parent.eventFields;\n var eventsList;\n this.overlapEvents = [];\n if (isAllDay) {\n var dates_1 = new Date(this.dateRender[day].getTime());\n var eStart_1 = util.resetTime(util.addDays(new Date(this.dateRender[day].getTime()), 1));\n eventsList = this.renderedAllDayEvents.filter(function (obj) {\n return ((obj[fieldMapping.endTime] > dates_1 && obj[fieldMapping.startTime] <= eStart_1) ||\n (obj[fieldMapping.startTime] >= dates_1 && obj[fieldMapping.startTime] <= eStart_1));\n });\n }\n else {\n var appointmentList_1 = this.renderedEvents;\n var appointment_1 = [];\n this.overlapList = appointmentList_1.filter(function (obj) {\n return obj[fieldMapping.endTime] > record[fieldMapping.startTime] &&\n obj[fieldMapping.startTime] < record[fieldMapping.endTime];\n });\n this.overlapList.forEach(function (obj) {\n var filterList = appointmentList_1.filter(function (list) {\n return list[fieldMapping.endTime] >= obj[fieldMapping.startTime] &&\n list[fieldMapping.startTime] <= obj[fieldMapping.endTime];\n });\n var collection = _this.overlapList.filter(function (val) { return filterList.indexOf(val) === -1; });\n return appointment_1.concat(collection);\n });\n this.overlapList = this.overlapList.concat(appointment_1);\n eventsList = this.overlapList.filter(function (obj) {\n return obj[fieldMapping.endTime] > record[fieldMapping.startTime] &&\n obj[fieldMapping.startTime] < record[fieldMapping.endTime];\n });\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_2 = eventsList_1[_i];\n var record_1 = event_2;\n var index = record_1.Index;\n (isNullOrUndefined(this.overlapEvents[index])) ? this.overlapEvents[index] = [event_2] :\n this.overlapEvents[index].push(event_2);\n }\n }\n var appIndex;\n if (eventsList.length > 0) {\n var appLevel = eventsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n else {\n appIndex = -1;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n AppointmentRendering.prototype.adjustOverlapElements = function (args) {\n var data = { appWidth: args.width, appLeft: args.left };\n for (var i = 0, length1 = this.overlapEvents.length; i < length1; i++) {\n if (!isNullOrUndefined(this.overlapEvents[i])) {\n for (var j = 0, length2 = this.overlapEvents[i].length; j < length2; j++) {\n var element = this.element.querySelector('#e-appointment-wrapper-' + args.day);\n if (element.childElementCount > 0) {\n var eleGuid = this.overlapEvents[i][j].Guid;\n if (element.querySelectorAll('div[data-guid=\"' + eleGuid + '\"]').length > 0 && eleGuid !== args.record.Guid) {\n var apps = element.querySelector('div[data-guid=\"' + eleGuid + '\"]');\n if (parseFloat(args.width) <= parseFloat(apps.style.width)) {\n (this.parent.enableRtl) ? apps.style.right = ((parseFloat(args.width) + 1) * i) + '%' :\n apps.style.left = ((parseFloat(args.width) + 1) * i) + '%';\n apps.style.width = ((parseFloat(args.width))) + '%';\n data.appWidth = apps.style.width;\n }\n }\n else {\n var appWidth = args.width;\n if (isNullOrUndefined(this.overlapEvents[i - 1])) {\n var width = this.parent.currentView === 'Day' ? 97 : 94;\n appWidth = ((width - this.overlapEvents.length) / this.overlapEvents.length) + '%';\n }\n var leftPosition = ((parseInt(appWidth, 0) + 1) * args.index) + '%';\n data.appWidth = appWidth;\n data.appLeft = leftPosition;\n }\n }\n }\n }\n }\n return data;\n };\n AppointmentRendering.prototype.setAllDayRowHeight = function (height) {\n for (var _i = 0, _a = this.allDayElement; _i < _a.length; _i++) {\n var element = _a[_i];\n element.style.height = (height / 12) + 'em';\n }\n this.animation.animate(this.allDayElement[0]);\n };\n AppointmentRendering.prototype.addOrRemoveClass = function () {\n var _this = this;\n this.moreEvents.filter(function (element) {\n (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) ? addClass([element], cls.EVENT_COUNT_CLASS) :\n removeClass([element], cls.EVENT_COUNT_CLASS);\n });\n var moreEventCount = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n if (this.parent.uiStateValues.expand) {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n }\n else {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n }\n (this.allDayLevel > 2) ? removeClass([moreEventCount], cls.DISABLE_CLASS) : addClass([moreEventCount], cls.DISABLE_CLASS);\n var countCell = [].slice.call(this.element.querySelectorAll('.' + cls.ROW_COUNT_WRAPPER_CLASS));\n countCell.filter(function (element) {\n (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) ? removeClass([element], cls.DISABLE_CLASS) :\n addClass([element], cls.DISABLE_CLASS);\n });\n };\n AppointmentRendering.prototype.getEventHeight = function () {\n var eventElement = createElement('div', { className: cls.APPOINTMENT_CLASS, styles: 'visibility:hidden' });\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_WRAPPER_CLASS + ':first-child');\n eventWrapper.appendChild(eventElement);\n var height = eventElement.offsetHeight;\n eventElement.remove();\n return height;\n };\n AppointmentRendering.prototype.isRowExpand = function () {\n var target = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n target.setAttribute('title', 'Collapse-all-day-section');\n target.setAttribute('aria-label', 'Collapse section');\n var rowHeight = ((this.allDayLevel + 1) * this.getEventHeight()) + 4;\n this.setAllDayRowHeight(rowHeight);\n this.addOrRemoveClass();\n };\n AppointmentRendering.prototype.isRowCollapse = function () {\n var target = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n target.setAttribute('title', 'Expand-all-day-section');\n target.setAttribute('aria-label', 'Expand section');\n var rowHeight = (3 * this.getEventHeight()) + 4;\n this.setAllDayRowHeight(rowHeight);\n this.addOrRemoveClass();\n };\n AppointmentRendering.prototype.rowExpandCollapse = function (event) {\n var target = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n this.parent.uiStateValues.expand = target.classList.contains(cls.APPOINTMENT_ROW_EXPAND_CLASS);\n if (this.parent.uiStateValues.expand) {\n this.isRowExpand();\n }\n else {\n this.isRowCollapse();\n }\n this.animation.animate(target);\n };\n AppointmentRendering.prototype.animationUiUpdate = function () {\n this.parent.notify(events.contentReady, {});\n };\n return AppointmentRendering;\n}(EventBase));\nexport { AppointmentRendering };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { compile, isNullOrUndefined, extend, EventHandler, formatUnit } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, append, prepend } from '@syncfusion/ej2-base';\nimport { WorkCellInteraction } from '../actions/work-cells';\nimport { ViewBase } from './view-base';\nimport { AppointmentRendering } from '../event-renderer/vertical-view';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nvar DATE_HEADER_TEMPLATE = '
    ${getDayName(date)}
    ' +\n '
    ${getDate(date)}
    ';\nvar MAJOR_SLOT_TEMPLATE = '${getTime(date)}';\nvar MINOR_SLOT_TEMPLATE = ' ';\n/**\n * vertical view\n */\nvar VerticalView = /** @class */ (function (_super) {\n __extends(VerticalView, _super);\n /**\n * Constructor for vertical view\n */\n function VerticalView(parent) {\n var _this = _super.call(this, parent) || this;\n _this.currentDateIndex = 0;\n _this.minorSlotCount = 2;\n _this.majorSlot = 60;\n _this.viewClass = 'e-day-view';\n _this.isInverseTableSelect = true;\n _this.workCellAction = new WorkCellInteraction(parent);\n return _this;\n }\n VerticalView.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.scrollUiUpdate, this);\n this.parent.on(event.dataReady, this.renderEvents, this);\n };\n VerticalView.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.scrollUiUpdate);\n this.parent.off(event.dataReady, this.renderEvents);\n };\n VerticalView.prototype.renderEvents = function () {\n var appointment = new AppointmentRendering(this.parent);\n appointment.renderAppointments();\n };\n VerticalView.prototype.onContentScroll = function (e) {\n var target = e.target;\n this.getTimeCellsElement().scrollTop = target.scrollTop;\n this.getDatesHeaderElement().firstChild.scrollLeft = target.scrollLeft;\n this.parent.uiStateValues.top = target.scrollTop;\n this.parent.uiStateValues.left = target.scrollLeft;\n this.parent.quickPopup.quickPopup.close();\n };\n VerticalView.prototype.scrollUiUpdate = function (args) {\n var headerHeight = 0;\n if (this.parent.headerModule) {\n headerHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n }\n var timecells = this.getTimeCellsElement();\n var content = this.getScrollableElement();\n var header = this.getDatesHeaderElement();\n // if (this.parent.isAdaptive) {\n // content.style.height = 'auto';\n // } else {\n // timecells.style.height = content.style.height = 'auto';\n // }\n var scrollerHeight = formatUnit(this.parent.element.offsetHeight - headerHeight - header.offsetHeight - 2);\n if (this.parent.isAdaptive) {\n content.style.height = scrollerHeight;\n }\n else {\n timecells.style.height = content.style.height = scrollerHeight;\n }\n var scrollBarWidth = util.getScrollBarWidth();\n // tslint:disable:no-any\n if (content.offsetWidth - content.clientWidth > 0) {\n header.firstChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n // tslint:enable:no-any\n timecells.style.paddingBottom = (content.offsetHeight - content.clientHeight > 0) ? formatUnit(scrollBarWidth) : '';\n if (this.parent.uiStateValues.isInitial) {\n this.scrollToWorkHour();\n this.parent.uiStateValues.isInitial = false;\n }\n else {\n this.getScrollableElement().scrollTop = this.parent.uiStateValues.top;\n }\n };\n VerticalView.prototype.scrollToWorkHour = function () {\n if (this.parent.workHours.highlight) {\n var firstWorkHourCell = this.element.querySelector('.' + cls.WORK_HOURS_CLASS);\n if (firstWorkHourCell) {\n this.getScrollableElement().scrollTop = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.top = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.left = 0;\n }\n }\n };\n VerticalView.prototype.scrollToHour = function (hour) {\n var date = this.parent.globalize.parseDate(hour, { skeleton: 'Hm' });\n if (isNullOrUndefined(date)) {\n return;\n }\n this.getScrollableElement().scrollTop = this.getTopFromDateTime(date);\n };\n VerticalView.prototype.generateColLevels = function () {\n var columns = this.renderDates;\n var colLevels = [];\n var level = [];\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentDate(col)) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n level.push({ date: col, type: 'dateHeader', className: classList });\n }\n colLevels.push(level);\n return colLevels;\n };\n VerticalView.prototype.isWorkHourRange = function (date) {\n return (this.getStartHour().getTime() <= date.getTime()) && (this.getEndHour().getTime() >= date.getTime());\n };\n VerticalView.prototype.highlightCurrentTime = function () {\n var _this = this;\n if (this.parent.showTimeIndicator && this.isWorkHourRange(new Date())) {\n var flag = false;\n for (var i = 0; i < this.renderDates.length; i++) {\n if (this.isCurrentDate(this.renderDates[i])) {\n flag = true;\n this.currentDateIndex = i;\n break;\n }\n }\n if (flag) {\n this.changeCurrentTimePosition();\n if (isNullOrUndefined(this.currentTimeIndicatorTimer)) {\n this.currentTimeIndicatorTimer = window.setInterval(function () { _this.changeCurrentTimePosition(); }, util.MS_PER_MINUTE);\n }\n }\n else {\n this.clearCurrentTimeIndicatorTimer();\n }\n }\n else {\n this.clearCurrentTimeIndicatorTimer();\n }\n };\n VerticalView.prototype.clearCurrentTimeIndicatorTimer = function () {\n if (!isNullOrUndefined(this.currentTimeIndicatorTimer)) {\n window.clearInterval(this.currentTimeIndicatorTimer);\n this.currentTimeIndicatorTimer = null;\n this.removeCurrentTimeIndicatorElements();\n }\n };\n VerticalView.prototype.removeCurrentTimeIndicatorElements = function () {\n var currentTimeEle = this.element.querySelector('.' + cls.CURRENT_TIME_CLASS);\n var timelineEle = this.element.querySelector('.' + cls.TIMELINE_WRAPPER_CLASS);\n if (currentTimeEle) {\n remove(currentTimeEle);\n }\n if (timelineEle) {\n remove(timelineEle);\n }\n };\n VerticalView.prototype.changeCurrentTimePosition = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeCurrentTimeIndicatorElements();\n var firstRow = this.parent.getContentTable().rows[0];\n var firstCell = firstRow.cells[0];\n var currentCell = firstRow.cells[this.currentDateIndex];\n var cellWidth = 100 / firstRow.cells.length;\n var prevLineWidth = (cellWidth * (currentCell.cellIndex - firstCell.cellIndex)) + '%';\n var currentLineWidth = cellWidth + '%';\n var top = this.getTopFromDateTime(new Date());\n var topInPx = formatUnit(top);\n var timeCellsWrap = this.getTimeCellsElement();\n var rowIndex = Math.floor(top / firstCell.offsetHeight);\n if (isNullOrUndefined(rowIndex)) {\n return;\n }\n removeClass(timeCellsWrap.querySelectorAll('.' + cls.HIDE_CHILDS_CLASS), cls.HIDE_CHILDS_CLASS);\n addClass([timeCellsWrap.querySelectorAll('tr')[rowIndex].lastChild], cls.HIDE_CHILDS_CLASS);\n var timelineWrap = createElement('div', { className: cls.TIMELINE_WRAPPER_CLASS });\n var previousDateTimelineEle = createElement('div', {\n className: cls.PREVIOUS_TIMELINE_CLASS,\n styles: 'width:' + formatUnit(prevLineWidth) + '; left: 0; right: 0; top:' + topInPx\n });\n var currentDateTimelineEle = createElement('div', {\n className: cls.CURRENT_TIMELINE_CLASS,\n styles: 'width:' + currentLineWidth + '; ' + (this.parent.enableRtl ? 'right:' : 'left:') + prevLineWidth + ';top:' + topInPx\n });\n var currentTimeEle = createElement('div', {\n innerHTML: this.parent.globalize.formatDate(new Date(), { skeleton: 'hm' }),\n className: cls.CURRENT_TIME_CLASS,\n styles: 'width: 100%; position: absolute; left: 0; right: 0; top:' + topInPx\n });\n prepend([currentTimeEle], timeCellsWrap);\n currentTimeEle.style.top = formatUnit(currentTimeEle.offsetTop - (currentTimeEle.offsetHeight / 2));\n prepend([previousDateTimelineEle, currentDateTimelineEle], timelineWrap);\n prepend([timelineWrap], this.getContentAreaElement().querySelector('.' + cls.WRAPPER_CLASS));\n };\n VerticalView.prototype.getTopFromDateTime = function (date) {\n var startHour = this.getStartHour();\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (diffInMinutes * this.getWorkCellHeight() * this.minorSlotCount) / this.majorSlot;\n };\n VerticalView.prototype.getWorkCellHeight = function () {\n return this.element.querySelector('.e-work-cells').offsetHeight;\n };\n VerticalView.prototype.getTdContent = function (date, type) {\n var cntEle;\n switch (type) {\n case 'dateHeader':\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getDateHeaderTemplate()(args);\n }\n else {\n cntEle = compile(DATE_HEADER_TEMPLATE, this.customHelper)({ date: date });\n }\n break;\n case 'majorSlot':\n cntEle = compile(MAJOR_SLOT_TEMPLATE, this.customHelper)({ date: date });\n break;\n case 'minorSlot':\n cntEle = compile(MINOR_SLOT_TEMPLATE, this.customHelper)({ date: date });\n break;\n case 'alldayCells':\n if (this.parent.cellTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getCellTemplate()(args);\n }\n break;\n }\n return cntEle;\n };\n VerticalView.prototype.renderLayout = function (type) {\n this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));\n var clsList = ['e-vertical-view', this.viewClass];\n clsList.push(type);\n this.renderPanel(type);\n addClass([this.element], clsList);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.colLevels = this.generateColLevels();\n this.renderHeader();\n this.renderContent();\n this.highlightCurrentTime();\n this.parent.notify(event.contentReady, {});\n };\n VerticalView.prototype.renderHeader = function () {\n var tr = createElement('tr');\n var indentTd = createElement('td', { className: cls.LEFT_INDENT_CLASS });\n var dateTd = createElement('td');\n indentTd.appendChild(this.renderLeftIndent());\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(indentTd);\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n VerticalView.prototype.renderContent = function () {\n var tr = createElement('tr');\n var workTd = createElement('td');\n if (this.parent.isAdaptive) {\n workTd.setAttribute('colspan', '2');\n var scrollContainer = createElement('div', { className: cls.SCROLL_CONTAINER_CLASS });\n scrollContainer.appendChild(this.renderTimeCells());\n scrollContainer.appendChild(this.renderContentArea());\n workTd.appendChild(scrollContainer);\n tr.appendChild(workTd);\n }\n else {\n var timesTd = createElement('td');\n timesTd.appendChild(this.renderTimeCells());\n workTd.appendChild(this.renderContentArea());\n tr.appendChild(timesTd);\n tr.appendChild(workTd);\n }\n this.element.querySelector('tbody').appendChild(tr);\n };\n VerticalView.prototype.renderLeftIndent = function () {\n var wrap = createElement('div', { className: cls.LEFT_INDENT_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var rowCount = this.colLevels.length;\n for (var i = 0; i < rowCount; i++) {\n var ntr_1 = trEle.cloneNode();\n var level = this.colLevels[i];\n var data_1 = { className: [level[0].className[0]], type: 'emptyCells' };\n ntr_1.appendChild(this.createTd(data_1));\n tbl.querySelector('tbody').appendChild(ntr_1);\n }\n var ntr = trEle.cloneNode();\n var appointmentExpandCollapse = createElement('div', {\n attrs: { 'tabindex': '0', title: 'Expand-all-day-section', 'aria-disabled': 'false', 'aria-label': 'Expand section' },\n className: cls.ALLDAY_APPOINTMENT_SECTION_CLASS + ' ' + cls.APPOINTMENT_ROW_EXPAND_CLASS + ' ' +\n cls.ICON + ' ' + cls.DISABLE_CLASS,\n });\n var data = { className: [cls.ALLDAY_CELLS_CLASS], type: 'emptyCells' };\n var nth = this.createTd(data);\n nth.appendChild(appointmentExpandCollapse);\n ntr.appendChild(nth);\n tbl.querySelector('tbody').appendChild(ntr);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n var innerWrap = createElement('div', { className: cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS });\n container.appendChild(wrap);\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var rowCount = this.colLevels.length;\n var lastLevel = this.colLevels[rowCount - 1];\n for (var i = 0; i < rowCount; i++) {\n var ntr_2 = trEle.cloneNode();\n addClass([ntr_2], cls.HEADER_ROW_CLASS);\n var level = this.colLevels[i];\n var colspan = lastLevel.length / level.length;\n for (var j = 0; j < level.length; j++) {\n var td = level[j];\n td.colSpan = colspan;\n ntr_2.appendChild(this.createTd(td));\n }\n tbl.querySelector('tbody').appendChild(ntr_2);\n }\n var ntr = trEle.cloneNode();\n addClass([ntr], cls.ALLDAY_ROW_CLASS);\n for (var j = 0; j < lastLevel.length; j++) {\n var td = extend({}, lastLevel[j]);\n td.className = [cls.ALLDAY_CELLS_CLASS];\n td.type = 'alldayCells';\n var ntd = this.createTd(td);\n ntd.setAttribute('data-date', td.date.getTime().toString());\n ntd.setAttribute('data-index', j.toString());\n var appointmentWrap = createElement('div', {\n id: cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS + '-' + j.toString(),\n className: cls.ALLDAY_WRAPPER_CLASS,\n attrs: { 'data-index': j.toString() },\n styles: 'width:calc(' + 100 / this.renderDates.length + '%)'\n });\n innerWrap.appendChild(appointmentWrap);\n this.wireCellEvents(ntd);\n ntr.appendChild(ntd);\n }\n tbl.querySelector('tbody').appendChild(ntr);\n wrap.appendChild(innerWrap);\n wrap.appendChild(tbl);\n return container;\n };\n VerticalView.prototype.createTd = function (td) {\n var tdEle = createElement('th');\n if (td.className) {\n addClass([tdEle], td.className);\n }\n if (td.date && td.type) {\n var ele = this.getTdContent(td.date, td.type);\n if (ele && ele.length) {\n append([].slice.call(ele), tdEle);\n }\n }\n if (td.type === 'dateHeader' && td.className.indexOf(cls.HEADER_CELLS_CLASS) >= 0) {\n tdEle.setAttribute('data-date', td.date.getTime().toString());\n EventHandler.add(tdEle, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(tdEle, 'dblclick', this.workCellAction.cellDblClick, this);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n VerticalView.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.workCellAction.cellMouseDown, this);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this);\n };\n VerticalView.prototype.renderTimeCells = function () {\n var _this = this;\n var wrap = createElement('div', { className: cls.TIME_CELLS_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var handler = function (r) {\n r.type = r.first ? 'majorSlot' : 'minorSlot';\n r.className = r.last ? [cls.TIME_CELLS_CLASS] : [];\n var ntr = trEle.cloneNode();\n var data = { date: r.date, type: r.type, className: r.className };\n ntr.appendChild(_this.createTd(data));\n tbl.querySelector('tbody').appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderContentArea = function () {\n var _this = this;\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var innerWrap = createElement('div', { className: cls.WRAPPER_CLASS });\n wrap.appendChild(innerWrap);\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var tbody = tbl.querySelector('tbody');\n var columns = this.renderDates;\n var handler = function (r) {\n var ntr = tr.cloneNode();\n for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n var col = columns_2[_i];\n var ntd = td.cloneNode();\n var clsName = r.last ? [cls.WORK_CELLS_CLASS] : [cls.WORK_CELLS_CLASS, cls.ALTERNATE_CELLS_CLASS];\n var cellDate = util.resetTime(new Date('' + col));\n util.setTime(cellDate, util.getDateInMs(r.date));\n if (_this.parent.workHours.highlight && _this.isWorkHour(cellDate)) {\n clsName.push(cls.WORK_HOURS_CLASS);\n }\n addClass([ntd], clsName);\n if (_this.parent.cellTemplate) {\n var args_1 = { date: cellDate, type: 'workCells' };\n append([].slice.call(_this.parent.getCellTemplate()(args_1)), ntd);\n }\n ntd.setAttribute('data-date', cellDate.getTime().toString());\n _this.wireCellEvents(ntd);\n var args = { elementType: 'workCells', element: ntd, date: cellDate };\n _this.parent.trigger(event.renderCell, args);\n ntr.appendChild(ntd);\n }\n tbody.appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n var innerAppointmentWrap = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n for (var day = 0, length_1 = this.renderDates.length; day < length_1; day++) {\n var appointmentWrap = createElement('div', {\n id: cls.APPOINTMENT_WRAPPER_CLASS + '-' + day.toString(),\n className: cls.DAY_WRAPPER_CLASS,\n attrs: { 'data-dayindex': day.toString() },\n styles: 'width:calc(' + 100 / this.renderDates.length + '%)'\n });\n innerAppointmentWrap.appendChild(appointmentWrap);\n }\n innerWrap.appendChild(innerAppointmentWrap);\n wrap.appendChild(tbl);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n return wrap;\n };\n VerticalView.prototype.getScrollableElement = function () {\n if (this.parent.isAdaptive) {\n return this.element.querySelector('.' + cls.SCROLL_CONTAINER_CLASS);\n }\n else {\n return this.getContentAreaElement();\n }\n };\n VerticalView.prototype.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n VerticalView.prototype.getTimeCellsElement = function () {\n return this.element.querySelector('.' + cls.TIME_CELLS_WRAP_CLASS);\n };\n VerticalView.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n VerticalView.prototype.getEndDateFromStartDate = function (start) {\n var msMajorInterval = this.majorSlot * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.minorSlotCount;\n var end = new Date(start.getTime());\n end.setMilliseconds(end.getMilliseconds() + msInterval);\n return end;\n };\n VerticalView.prototype.adjustEventWrapper = function () {\n var tblWidth = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetWidth;\n this.element.querySelector('.' + cls.WRAPPER_CLASS).style.width = tblWidth + 'px';\n this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS).style.width = tblWidth + 'px';\n };\n VerticalView.prototype.getTimeSlotRows = function (handler) {\n var rows = [];\n var startHour = this.getStartHour();\n var endHour = this.getEndHour();\n var msMajorInterval = this.majorSlot * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.minorSlotCount;\n var length = Math.round(util.MS_PER_DAY / msInterval);\n var msStartHour = startHour.getTime();\n var msEndHour = endHour.getTime();\n if (msStartHour !== msEndHour) {\n length = Math.round((msEndHour - msStartHour) / msInterval);\n }\n var dt = new Date(msStartHour);\n for (var i = 0; i < length; i++) {\n var majorTickDivider = i % (msMajorInterval / msInterval);\n var row = {\n date: new Date('' + dt),\n first: (majorTickDivider === 0),\n middle: (majorTickDivider < this.minorSlotCount - 1),\n last: (majorTickDivider === this.minorSlotCount - 1),\n type: ''\n };\n if (handler) {\n handler(row);\n }\n rows.push(row);\n dt.setMilliseconds(msInterval);\n }\n return rows;\n };\n /**\n * Get module name.\n */\n VerticalView.prototype.getModuleName = function () {\n return 'verticalView';\n };\n /**\n * To destroy the vertical view.\n * @return {void}\n * @private\n */\n VerticalView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.clearCurrentTimeIndicatorTimer();\n if (this.element) {\n EventHandler.remove(this.getContentAreaElement(), 'scroll', this.onContentScroll);\n remove(this.element);\n this.element = null;\n if (this.parent.scheduleTouchModule) {\n this.parent.scheduleTouchModule.resetValues();\n }\n }\n };\n return VerticalView;\n}(ViewBase));\nexport { VerticalView };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * day view\n */\nvar Day = /** @class */ (function (_super) {\n __extends(Day, _super);\n /**\n * Constructor for day view\n */\n function Day(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-day-view';\n return _this;\n }\n Day.prototype.getNextPreviousDate = function (type) {\n var daysCount = (type === 'next') ? 1 : -1;\n if (this.parent.activeViewOptions.showWeekend) {\n return util.addDays(this.parent.selectedDate, daysCount);\n }\n else {\n var date = util.addDays(this.parent.selectedDate, daysCount);\n while (!this.isWorkDay(date)) {\n date = util.addDays(date, daysCount);\n }\n return date;\n }\n };\n Day.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive) {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n return this.formatDateRange(this.parent.selectedDate);\n };\n /**\n * Get module name.\n */\n Day.prototype.getModuleName = function () {\n return 'day';\n };\n return Day;\n}(VerticalView));\nexport { Day };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * week view\n */\nvar Week = /** @class */ (function (_super) {\n __extends(Week, _super);\n /**\n * Constructor\n */\n function Week(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-week-view';\n return _this;\n }\n Week.prototype.getRenderDates = function () {\n this.renderDates = [];\n var selectedDate = util.resetTime(this.parent.selectedDate);\n var start = util.getWeekFirstDate(selectedDate, this.parent.firstDayOfWeek);\n for (var i = 0, length_1 = util.WEEK_LENGTH; i < length_1; i++) {\n if (this.parent.activeViewOptions.showWeekend) {\n this.renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start)) {\n this.renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n }\n };\n /**\n * Get module name.\n */\n Week.prototype.getModuleName = function () {\n return 'week';\n };\n return Week;\n}(VerticalView));\nexport { Week };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * work week view\n */\nvar WorkWeek = /** @class */ (function (_super) {\n __extends(WorkWeek, _super);\n /**\n * Constructor\n */\n function WorkWeek(par) {\n var _this = _super.call(this, par) || this;\n _this.viewClass = 'e-work-week-view';\n return _this;\n }\n WorkWeek.prototype.getRenderDates = function () {\n this.renderDates = [];\n var start = util.getWeekFirstDate(util.resetTime(this.parent.selectedDate), this.parent.firstDayOfWeek);\n for (var i = 0, length_1 = util.WEEK_LENGTH; i < length_1; i++) {\n if (this.isWorkDay(start)) {\n this.renderDates.push(start);\n }\n start = util.addDays(start, 1);\n }\n };\n /**\n * Get module name.\n */\n WorkWeek.prototype.getModuleName = function () {\n return 'workWeek';\n };\n return WorkWeek;\n}(VerticalView));\nexport { WorkWeek };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { append, prepend, createElement, extend, EventHandler, closest, addClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { EventBase } from './event-base';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_GAP = 0;\n/**\n * Month view events render\n */\nvar MonthEvent = /** @class */ (function (_super) {\n __extends(MonthEvent, _super);\n /**\n * Constructor for month events\n */\n function MonthEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.renderedEvents = [];\n _this.slots = [];\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.addEventListener();\n return _this;\n }\n MonthEvent.prototype.renderAppointments = function () {\n var appointmentWrapper = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_CLASS));\n for (var _i = 0, appointmentWrapper_1 = appointmentWrapper; _i < appointmentWrapper_1.length; _i++) {\n var wrap = appointmentWrapper_1[_i];\n remove(wrap);\n }\n this.renderedEvents = [];\n this.dateRender = this.parent.activeView.renderDates;\n this.workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n this.cellWidth = this.workCells[0].offsetWidth;\n this.cellHeight = this.workCells[0].offsetHeight;\n this.eventHeight = this.getElementHeightFromClass(this.element, cls.APPOINTMENT_CLASS);\n this.monthHeaderHeight = this.getOuterHeight(this.workCells[0].querySelector('.' + cls.DATE_HEADER_CLASS));\n var eventsList = this.parent.eventsProcessed;\n this.sortByDateTime(eventsList);\n var dates = this.dateRender.map(function (date) { return +date; });\n this.slots = [];\n var noOfDays = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : this.parent.activeViewOptions.workDays.length;\n while (dates.length > 0) {\n this.slots.push(dates.splice(0, noOfDays));\n }\n for (var _a = 0, eventsList_1 = eventsList; _a < eventsList_1.length; _a++) {\n var event_1 = eventsList_1[_a];\n var splittedEvents = this.splitEvent(event_1);\n for (var _b = 0, splittedEvents_1 = splittedEvents; _b < splittedEvents_1.length; _b++) {\n var event_2 = splittedEvents_1[_b];\n this.renderAppointmentMonth(event_2);\n }\n }\n };\n MonthEvent.prototype.splitEvent = function (event) {\n var start = util.resetTime(new Date(event[this.fields.startTime] + '')).getTime();\n var end = util.resetTime(new Date(event[this.fields.endTime] + '')).getTime();\n if (util.getDateInMs(event[this.fields.endTime]) <= 0) {\n var temp = util.addDays(util.resetTime(new Date(event[this.fields.endTime] + '')), -1).getTime();\n end = start > temp ? start : temp;\n }\n var orgStart = start;\n var orgEnd = end;\n var ranges = [];\n if (start !== end) {\n if (start < this.dateRender[0].getTime()) {\n start = this.dateRender[0].getTime();\n }\n if (end > this.dateRender[this.dateRender.length - 1].getTime()) {\n end = this.dateRender[this.dateRender.length - 1].getTime();\n }\n var cStart = start;\n for (var level = 0; level < this.slots.length; level++) {\n var slot = this.slots[level];\n var firstSlot = slot[0];\n cStart = (cStart <= firstSlot && end >= firstSlot) ? firstSlot : cStart;\n if (cStart > end || firstSlot > end) {\n break;\n }\n if (this.parent.activeViewOptions.showWeekend) {\n var startIndex = slot.indexOf(cStart);\n if (startIndex !== -1) {\n var endIndex = slot.indexOf(end);\n var hasBreak = endIndex !== -1;\n endIndex = hasBreak ? endIndex : slot.length - 1;\n var count = ((endIndex - startIndex) + 1);\n var isLeft = (slot[startIndex] !== orgStart);\n var isRight = (slot[endIndex] !== orgEnd);\n ranges.push(this.cloneEventObject(event, slot[startIndex], slot[endIndex], count, isLeft, isRight));\n if (hasBreak) {\n break;\n }\n }\n }\n else {\n if (this.dateInRange(cStart, slot[0], slot[slot.length - 1])) {\n var availSlot = [];\n for (var i = 0; i < slot.length; i++) {\n if (this.dateInRange(slot[i], orgStart, orgEnd)) {\n availSlot.push(slot[i]);\n }\n }\n if (availSlot.length > 0) {\n var cnt = availSlot.length;\n var isLeft = (availSlot[0] !== orgStart);\n var isRight = (availSlot[availSlot.length - 1] !== orgEnd);\n ranges.push(this.cloneEventObject(event, availSlot[0], availSlot[availSlot.length - 1], cnt, isLeft, isRight));\n }\n }\n }\n }\n }\n else {\n ranges.push(this.cloneEventObject(event, start, end, 1, false, false));\n }\n return ranges;\n };\n MonthEvent.prototype.cloneEventObject = function (event, start, end, count, isLeft, isRight) {\n var e = extend({}, event, null, true);\n var data = { count: count, isLeft: isLeft, isRight: isRight };\n data[this.fields.startTime] = event[this.fields.startTime];\n data[this.fields.endTime] = event[this.fields.endTime];\n e.data = data;\n e[this.fields.startTime] = new Date(start);\n e[this.fields.endTime] = new Date(end);\n return e;\n };\n MonthEvent.prototype.dateInRange = function (date, start, end) {\n return start <= date && date <= end;\n };\n MonthEvent.prototype.getElementHeightFromClass = function (container, elementClass) {\n var height = 0;\n var el = createElement('div', { className: elementClass }).cloneNode();\n el.style.visibility = 'hidden';\n el.style.position = 'absolute';\n container.appendChild(el);\n height = this.getOuterHeight(el);\n remove(el);\n return height;\n };\n MonthEvent.prototype.getOuterHeight = function (element) {\n var style = getComputedStyle(element);\n return element.offsetHeight + (parseInt(style.marginTop, 10) || 0) + (parseInt(style.marginBottom, 10) || 0);\n };\n MonthEvent.prototype.createAppointmentElement = function (record) {\n var appointmentWrapper = createElement('div', {\n id: 'Appointment_' + record[this.fields.id],\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-guid': record.Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-readonly': 'false',\n 'aria-selected': 'false',\n 'aria-grabbed': 'true',\n 'aria-label': isNullOrUndefined(record[this.fields.subject]) ?\n this.parent.eventSettings.fields.subject.default : record[this.fields.subject]\n }\n });\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n var templateElement;\n var eventData = record.data;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateElement = this.parent.getAppointmentTemplate()(record);\n }\n else {\n var eventSubject = isNullOrUndefined(record[this.fields.subject]) ?\n this.parent.eventSettings.fields.subject.default : record[this.fields.subject];\n var eventLocation = isNullOrUndefined(record[this.fields.location]) ?\n this.parent.eventSettings.fields.location.default : record[this.fields.location];\n var appointmentSubject = createElement('div', {\n className: cls.APPOINTMENT_SUBJECT,\n innerHTML: eventSubject + (eventLocation ? ('; ' + eventLocation) : '')\n });\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME,\n innerHTML: this.parent.globalize.formatDate(eventData[this.fields.startTime], { skeleton: 'hm' }),\n styles: 'display:' + (this.parent.isAdaptive ? 'none' : 'block')\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME,\n innerHTML: this.parent.globalize.formatDate(eventData[this.fields.endTime], { skeleton: 'hm' }),\n styles: 'display:' + (this.parent.isAdaptive ? 'none' : 'block')\n });\n if (record[this.fields.isAllDay]) {\n templateElement = [appointmentSubject];\n addClass([appointmentSubject], 'e-text-center');\n }\n else if (eventData.count <= 1 && !eventData.isLeft && !eventData.isRight) {\n templateElement = [appointmentStartTime, appointmentSubject];\n }\n else {\n templateElement = [];\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n append([].slice.call(templateElement), appointmentDetails);\n if (!isNullOrUndefined(record[this.fields.recurrenceRule])) {\n var iconClass = (record[this.fields.id] === record[this.fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentDetails.appendChild(createElement('div', {\n className: cls.ICON + ' ' + iconClass,\n styles: 'display:' + (this.parent.isAdaptive ? 'none' : 'block')\n }));\n }\n if (eventData.isLeft) {\n var iconLeft = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_LEFT_CLASS\n });\n prepend([iconLeft], appointmentDetails);\n }\n if (eventData.isRight) {\n var iconRight = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_RIGHT_CLASS\n });\n append([iconRight], appointmentDetails);\n }\n return appointmentWrapper;\n };\n MonthEvent.prototype.renderAppointmentMonth = function (event) {\n var startTime = event[this.fields.startTime];\n var endTime = event[this.fields.endTime];\n var day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(startTime));\n if (day < 0) {\n return;\n }\n var overlapCount = this.getIndex(event, startTime);\n event.Index = overlapCount;\n var appWidth;\n var appTop = 0;\n var moreIndicatorHeight = 19;\n var appHeight = this.eventHeight;\n this.renderedEvents.push(extend({}, event, null, true));\n var diffInDays = event.data.count;\n if (startTime.getTime() <= endTime.getTime()) {\n var appWidth_1 = (diffInDays * this.cellWidth) - 1;\n var cellTd = this.workCells[day];\n appTop = (overlapCount * (appHeight + EVENT_GAP));\n if (this.cellHeight > this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + moreIndicatorHeight) {\n var appointmentElement = this.createAppointmentElement(event);\n this.wireAppointmentEvents(appointmentElement);\n setStyleAttribute(appointmentElement, { 'width': appWidth_1 + 'px', 'height': appHeight + 'px', 'top': appTop + 'px' });\n if (cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(appointmentElement);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(appointmentElement);\n cellTd.appendChild(wrapper);\n }\n var args = { data: event, element: appointmentElement };\n this.parent.trigger(events.eventRendered, args);\n }\n else {\n for (var i = 0; i < diffInDays; i++) {\n var cellTd_1 = this.workCells[day + i];\n if (cellTd_1 && isNullOrUndefined(cellTd_1.querySelector('.' + cls.MORE_INDICATOR_CLASS))) {\n var startDateTime = new Date(this.dateRender[day + i].getTime());\n var endDateTime = util.addDays(this.dateRender[day + i], 1);\n var filterEvents = this.filterEvents(startDateTime, endDateTime, this.parent.eventsProcessed);\n var appArea = this.cellHeight - this.monthHeaderHeight - moreIndicatorHeight;\n var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));\n var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n innerHTML: '+' + count + ' ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))\n });\n moreIndicatorElement.style.top = appArea + 'px';\n moreIndicatorElement.setAttribute('data-start-date', startDateTime.getTime().toString());\n moreIndicatorElement.setAttribute('data-end-date', endDateTime.getTime().toString());\n if (cellTd_1.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd_1.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(moreIndicatorElement);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(moreIndicatorElement);\n cellTd_1.appendChild(wrapper);\n }\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n }\n }\n }\n };\n MonthEvent.prototype.getIndex = function (record, date) {\n var appIndex = -1;\n var appointments = this.renderedEvents;\n if (appointments.length > 0) {\n var appointmentsList = [];\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(date).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(date).getTime())) {\n appointmentsList.push(app);\n }\n }\n var appLevel = appointmentsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n MonthEvent.prototype.moreIndicatorClick = function (event) {\n var target = closest(event.target, '.' + cls.MORE_INDICATOR_CLASS);\n var startDate = new Date(parseInt(target.getAttribute('data-start-date'), 10));\n var endDate = new Date(parseInt(target.getAttribute('data-end-date'), 10));\n var filteredEvents = this.filterEvents(startDate, endDate, this.parent.eventsProcessed);\n var moreEventArgs = { date: startDate, event: filteredEvents, element: event.target };\n if (!isNullOrUndefined(startDate) && this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: startDate }, true);\n this.parent.changeView('Day');\n }\n else {\n this.parent.quickPopup.moreEventClick(moreEventArgs);\n }\n };\n return MonthEvent;\n}(EventBase));\nexport { MonthEvent };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, append, prepend } from '@syncfusion/ej2-base';\nimport { WorkCellInteraction } from '../actions/work-cells';\nimport { ViewBase } from './view-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport { MonthEvent } from '../event-renderer/month';\n/**\n * month view\n */\nvar Month = /** @class */ (function (_super) {\n __extends(Month, _super);\n /**\n * Constructor for month view\n */\n function Month(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dayNameFormat = 'wide';\n _this.viewClass = 'e-month-view';\n _this.isInverseTableSelect = false;\n _this.workCellAction = new WorkCellInteraction(parent);\n return _this;\n }\n Month.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.onScrollUiUpdate, this);\n this.parent.on(event.dataReady, this.onDataReady, this);\n this.parent.on(event.cellClick, this.onCellClick, this);\n };\n Month.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.onScrollUiUpdate);\n this.parent.off(event.dataReady, this.onDataReady);\n this.parent.off(event.cellClick, this.onCellClick);\n };\n Month.prototype.onDataReady = function (args) {\n var monthEvent = new MonthEvent(this.parent);\n monthEvent.renderAppointments();\n };\n Month.prototype.onCellClick = function (event) {\n // Here cell click\n };\n Month.prototype.onContentScroll = function (e) {\n this.getDatesHeaderElement().firstChild.scrollLeft = e.target.scrollLeft;\n };\n Month.prototype.onScrollUiUpdate = function (args) {\n var headerHeight = 0;\n if (this.parent.headerModule) {\n headerHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n }\n var header = this.getDatesHeaderElement();\n var content = this.getContentAreaElement();\n content.style.height = 'auto';\n content.style.height = formatUnit(this.parent.element.offsetHeight - headerHeight - header.offsetHeight - 2);\n // tslint:disable:no-any\n if (content.offsetWidth - content.clientWidth > 0) {\n var scrollBarWidth = util.getScrollBarWidth();\n header.firstChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n // tslint:enable:no-any\n };\n Month.prototype.generateColLevels = function () {\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : this.parent.activeViewOptions.workDays.length;\n var colLevels = [];\n var level = [];\n for (var col = 0; col < count; col++) {\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentMonth(this.parent.selectedDate) && new Date().getDay() === col) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n level.push({ date: this.renderDates[col], type: 'monthHeader', className: classList });\n }\n colLevels.push(level);\n return colLevels;\n };\n Month.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive) {\n return 'abbreviated';\n }\n return 'wide';\n };\n Month.prototype.renderLayout = function (type) {\n this.dayNameFormat = this.getDayNameFormat();\n this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));\n var clsList = [this.viewClass];\n clsList.push(type);\n addClass([this.element], clsList);\n this.renderPanel(type);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.colLevels = this.generateColLevels();\n this.renderHeader();\n this.renderContent();\n this.parent.notify(event.contentReady, {});\n };\n Month.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.workCellAction.cellMouseDown, this);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this);\n };\n Month.prototype.renderHeader = function () {\n var tr = createElement('tr');\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n Month.prototype.renderContent = function () {\n var tr = createElement('tr');\n var workTd = createElement('td');\n workTd.appendChild(this.renderContentArea());\n tr.appendChild(workTd);\n this.element.querySelector('tbody').appendChild(tr);\n this.renderAppointmentContainer();\n };\n Month.prototype.renderAppointmentContainer = function () {\n //Here needs to render mobile view appointment details on selected date\n };\n Month.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n container.appendChild(wrap);\n var table = this.createTableLayout();\n var trEle = createElement('tr');\n var rowsCount = this.colLevels.length;\n var lastLevel = this.colLevels[rowsCount - 1];\n for (var i = 0; i < rowsCount; i++) {\n var level = this.colLevels[i];\n var ntr = trEle.cloneNode();\n var colspan = lastLevel.length / level.length;\n for (var j = 0; j < level.length; j++) {\n var td = level[j];\n td.colSpan = colspan;\n ntr.appendChild(this.createHeaderCell(td));\n }\n table.querySelector('tbody').appendChild(ntr);\n }\n wrap.appendChild(table);\n return container;\n };\n Month.prototype.createHeaderCell = function (td) {\n var tdEle = createElement('th');\n if (td.className) {\n addClass([tdEle], td.className);\n }\n if (td.type === 'monthHeader') {\n var ele = createElement('span', { innerHTML: this.parent.getDayNames(this.dayNameFormat)[td.date.getDay()] });\n tdEle.appendChild(ele);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n Month.prototype.isOtherMonth = function (date) {\n return this.parent.selectedDate.getMonth() !== date.getMonth();\n };\n Month.prototype.renderContentArea = function () {\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n var tbody = tbl.querySelector('tbody');\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : this.parent.activeViewOptions.workDays.length;\n var noOfRows = this.renderDates.length / count;\n var startCol = 0;\n var endCol = count;\n for (var row = 0; row < noOfRows; row++) {\n var ntr = tr.cloneNode();\n for (startCol = 0 + startCol; startCol < endCol; startCol++) {\n var data = { date: this.renderDates[startCol], type: 'monthCells', className: [cls.WORK_CELLS_CLASS] };\n var ntd = td.cloneNode();\n if (this.isOtherMonth(data.date)) {\n data.className.push(cls.OTHERMONTH_CLASS);\n }\n if (this.parent.workHours.highlight && this.isWorkDay(data.date)) {\n data.className.push(cls.WORKDAY_CLASS);\n }\n if (this.isCurrentDate(data.date)) {\n data.className.push(cls.CURRENTDATE_CLASS);\n }\n if (this.parent.currentView === 'MonthAgenda' && this.parent.isSelectedDate(data.date)) {\n data.className.push(cls.SELECTED_CELL_CLASS);\n }\n addClass([ntd], data.className);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n this.renderDateHeaderElement(data, ntd);\n if (this.parent.cellTemplate) {\n var args_1 = { date: data.date, type: data.type };\n append([].slice.call(this.parent.getCellTemplate()(args_1)), ntd);\n }\n this.wireCellEvents(ntd);\n var args = { elementType: data.type, element: ntd, date: data.date };\n this.parent.trigger(event.renderCell, args);\n ntr.appendChild(ntd);\n }\n endCol = endCol + count;\n startCol = startCol + 0;\n tbody.appendChild(ntr);\n }\n wrap.appendChild(tbl);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n return wrap;\n };\n Month.prototype.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n Month.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n Month.prototype.renderDateHeaderElement = function (data, ntd) {\n var dateHeader = createElement('div', { className: cls.DATE_HEADER_CLASS });\n dateHeader.innerHTML = (data.date.getDate() === 1 && !this.isCurrentDate(data.date) && !this.parent.isAdaptive) ?\n this.parent.globalize.formatDate(data.date, { format: 'MMM d' }) :\n this.parent.globalize.formatDate(data.date, { skeleton: 'd' });\n ntd.appendChild(dateHeader);\n if (this.getModuleName() === 'month') {\n addClass([dateHeader], cls.NAVIGATE_CLASS);\n }\n };\n Month.prototype.getRenderDates = function () {\n this.renderDates = [];\n var currentDate = util.resetTime(this.parent.selectedDate);\n var monthStart = util.getWeekFirstDate(util.firstDateOfMonth(currentDate), this.parent.firstDayOfWeek);\n var lastWeekOfMonth = util.getWeekFirstDate(util.lastDateOfMonth(currentDate), this.parent.firstDayOfWeek);\n var monthEnd = util.addDays(lastWeekOfMonth, util.WEEK_LENGTH - 1);\n var start = new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());\n do {\n if (this.parent.activeViewOptions.showWeekend) {\n this.renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start)) {\n this.renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n } while (start.getTime() <= monthEnd.getTime());\n };\n Month.prototype.getNextPreviousDate = function (type) {\n if (type === 'next') {\n return util.addMonths(this.parent.selectedDate, 1);\n }\n else {\n return util.addMonths(this.parent.selectedDate, -1);\n }\n };\n Month.prototype.getEndDateFromStartDate = function (start) {\n return util.addDays(new Date(start.getTime()), 1);\n };\n Month.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive || isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n return this.formatDateRange(this.parent.selectedDate);\n };\n Month.prototype.getLabelText = function (view) {\n return this.parent.localeObj.getConstant(view) + ' of ' +\n this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n };\n /**\n * Get module name.\n */\n Month.prototype.getModuleName = function () {\n return 'month';\n };\n /**\n * To destroy the month.\n * @return {void}\n * @private\n */\n Month.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n remove(this.element);\n this.element = null;\n if (this.parent.scheduleTouchModule) {\n this.parent.scheduleTouchModule.resetValues();\n }\n }\n };\n return Month;\n}(ViewBase));\nexport { Month };\n","import { isNullOrUndefined, addClass, Internationalization, createElement, append, EventHandler } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\n/**\n * AgendaBase for event rendering\n */\nvar AgendaBase = /** @class */ (function () {\n /**\n * Constructor for AgendaBase\n */\n function AgendaBase(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n }\n AgendaBase.prototype.createAgendaContentElement = function (type, listData, aTd) {\n var listElement;\n if (type === 'noEvents') {\n var noEvents = [{ 'subject': this.l10n.getConstant('noEvents') }];\n listElement = ListBase.createList(noEvents, {\n moduleName: 'agenda',\n listClass: this.parent.activeView.viewClass,\n itemClass: this.parent.activeView.viewClass,\n template: '
    ${subject}
    '\n });\n }\n else {\n listElement = ListBase.createList(listData, {\n moduleName: 'agenda',\n listClass: this.parent.activeView.viewClass,\n itemClass: this.parent.activeView.viewClass\n });\n for (var li = 0, length_1 = listData.length; li < length_1; li++) {\n var appWrapper = createElement('div', {\n id: 'Appointment_' + listData[li][this.parent.eventFields.id],\n className: cls.APPOINTMENT_CLASS, attrs: {\n 'data-guid': listData[li].Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-readonly': 'false',\n 'aria-selected': 'false',\n 'aria-grabbed': 'true',\n 'aria-label': isNullOrUndefined(listData[li][this.parent.eventFields.subject]) ?\n this.parent.eventSettings.fields.subject.default : listData[li][this.parent.eventFields.subject]\n }\n });\n var templateEle = void 0;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateEle = this.parent.getAppointmentTemplate()(listData[li]);\n }\n else {\n templateEle = this.createAppointment(listData[li]);\n }\n append([].slice.call(templateEle), appWrapper);\n listElement.children[li].innerHTML = appWrapper.outerHTML;\n var args = { data: listData[li], element: listElement.children[li] };\n this.parent.trigger(event.eventRendered, args);\n }\n }\n aTd.appendChild(listElement);\n addClass([aTd], cls.AGENDA_DAY_BORDER_CLASS);\n return aTd;\n };\n AgendaBase.prototype.createAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var recordSubject = isNullOrUndefined(event[fieldMapping.subject]) ?\n this.parent.eventSettings.fields.subject.default : event[fieldMapping.subject];\n var appSubjectWrap = createElement('div', { className: cls.APPOINTMENT_SUBJECT_WRAP });\n if (!isNullOrUndefined(event[fieldMapping.location]) && event[fieldMapping.location] !== '') {\n recordSubject += ',';\n }\n appSubjectWrap.appendChild(createElement('div', {\n className: cls.APPOINTMENT_SUBJECT,\n innerHTML: recordSubject\n }));\n if (!isNullOrUndefined(event[fieldMapping.location])) {\n appSubjectWrap.appendChild(createElement('div', {\n className: cls.APPOINTMENT_LOCATION,\n innerHTML: event[fieldMapping.location]\n }));\n }\n if (!isNullOrUndefined(event[fieldMapping.recurrenceRule])) {\n var iconClass = (event[fieldMapping.id] === event[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appSubjectWrap.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n var strDate = event[fieldMapping.startTime];\n var endDate = event[fieldMapping.endTime];\n var instance = new Internationalization();\n var isAllDay = event[fieldMapping.isAllDay];\n var allDayStr = this.l10n.getConstant('allDay');\n var timeStr = instance.formatDate(strDate, { skeleton: 'hm' }) + ' - ' +\n instance.formatDate(endDate, { skeleton: 'hm' });\n if (!isNullOrUndefined(event.data)) {\n var eventString = (endDate.getTime() - strDate.getTime()) / util.MS_PER_DAY >= 1 ? allDayStr : timeStr;\n allDayStr = eventString + ' (' + this.l10n.getConstant('day') + ' ' + event.data.index + '/' +\n event.data.count + ')';\n }\n var appDateTime = createElement('div', {\n className: cls.AGENDA_DATETIME_CLASS,\n innerHTML: (!isNullOrUndefined(event.data) || isAllDay) ? allDayStr : timeStr\n });\n return [appSubjectWrap, appDateTime];\n };\n AgendaBase.prototype.processAgendaEvents = function (events) {\n var eventsProcessed = [];\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n var splited = this.parent.eventBase.splitEventByDay(event_1);\n eventsProcessed = eventsProcessed.concat(splited.length > 1 ? splited : event_1);\n }\n return eventsProcessed;\n };\n AgendaBase.prototype.wireEventActions = function () {\n var eventElement = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var _i = 0, eventElement_1 = eventElement; _i < eventElement_1.length; _i++) {\n var element = eventElement_1[_i];\n this.parent.eventBase.wireAppointmentEvents(element);\n }\n var dateHeaderElement = [].slice.call(this.parent.element.querySelectorAll('.e-m-date'));\n for (var _a = 0, dateHeaderElement_1 = dateHeaderElement; _a < dateHeaderElement_1.length; _a++) {\n var element = dateHeaderElement_1[_a];\n EventHandler.add(element, 'click', this.parent.agendaModule.dayNavigationClick, this);\n }\n };\n return AgendaBase;\n}());\nexport { AgendaBase };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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 { formatUnit, isNullOrUndefined, append, closest } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, EventHandler } from '@syncfusion/ej2-base';\nimport { AgendaBase } from '../event-renderer/agenda-base';\nimport { ViewBase } from './view-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * agenda view\n */\nvar Agenda = /** @class */ (function (_super) {\n __extends(Agenda, _super);\n /**\n * Constructor for agenda view\n */\n function Agenda(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-agenda-view';\n _this.isInverseTableSelect = false;\n _this.agendaDates = {};\n _this.virtualScrollTop = 1;\n _this.minDate = new Date(1900, 0, 1);\n _this.maxDate = new Date(2099, 11, 31);\n _this.agendaBase = new AgendaBase(parent);\n return _this;\n }\n /**\n * Get module name.\n */\n Agenda.prototype.getModuleName = function () {\n return 'agenda';\n };\n Agenda.prototype.renderLayout = function () {\n this.agendaDates = {};\n this.element = createElement('div', { className: cls.TABLE_WRAP_CLASS });\n addClass([this.element], this.viewClass);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n var eTr = createElement('tr');\n this.element.querySelector('tbody').appendChild(eTr);\n var workTd = createElement('td');\n eTr.appendChild(workTd);\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n workTd.appendChild(wrap);\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n wrap.appendChild(tbl);\n var tBody = tbl.querySelector('tbody');\n var agendaDate = util.resetTime(this.parent.selectedDate);\n this.renderEmptyContent(tBody, agendaDate);\n this.wireEvents();\n this.parent.notify(event.contentReady, {});\n };\n Agenda.prototype.eventLoad = function (args) {\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(args.processedData);\n var agendaDate = util.resetTime(this.parent.selectedDate);\n var tBody = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS + ' tbody');\n tBody.innerHTML = '';\n this.renderContent(tBody, agendaDate);\n this.agendaBase.wireEventActions();\n var contentArea = closest(tBody, '.' + cls.CONTENT_WRAP_CLASS);\n contentArea.scrollTo(0, 1);\n };\n Agenda.prototype.renderContent = function (tBody, agendaDate) {\n var fieldMapping = this.parent.eventFields;\n var firstDate = new Date(agendaDate.getTime());\n var lastDate = this.getEndDateFromStartDate(firstDate);\n var isObject = this.appointmentFiltering(firstDate, lastDate);\n if (isObject.length === 0) {\n lastDate = firstDate;\n firstDate = new Date(this.minDate.getTime());\n isObject = this.appointmentFiltering(firstDate, lastDate);\n if (isObject.length === 0) {\n firstDate = lastDate;\n lastDate = new Date(this.maxDate.getTime());\n isObject = this.appointmentFiltering(firstDate, lastDate);\n }\n }\n if (isObject.length > 0) {\n var appoint = isObject;\n agendaDate = appoint[0][fieldMapping.startTime];\n this.updateHeaderText(appoint[0][fieldMapping.startTime]);\n }\n var endDate;\n if (!this.parent.hideEmptyAgendaDays || (this.parent.agendaDaysCount > 0 && isObject.length > 0)) {\n var noOfDays = (!this.parent.hideEmptyAgendaDays || !this.parent.activeViewOptions.allowVirtualScrolling ||\n this.parent.agendaDaysCount < isObject.length) ? this.parent.agendaDaysCount : isObject.length;\n for (var day = 0; day < noOfDays; day++) {\n var filterData = [];\n filterData = this.appointmentFiltering(agendaDate);\n var nTr = this.createTableRowElement(agendaDate, 'data');\n if (this.element.querySelector('tr[aria-rowindex=\"' + parseInt(nTr.getAttribute('aria-rowindex'), 10) + '\"]')) {\n continue;\n }\n var dTd = nTr.children[0];\n var aTd = nTr.children[1];\n if (filterData.length > 0 || (!this.parent.hideEmptyAgendaDays && filterData.length === 0)) {\n var elementType = (!this.parent.hideEmptyAgendaDays && filterData.length === 0) ? 'noEvents' : 'data';\n dTd.appendChild(this.createDateHeaderElement(agendaDate));\n nTr.appendChild(dTd);\n nTr.appendChild(this.agendaBase.createAgendaContentElement(elementType, filterData, aTd));\n tBody.appendChild(nTr);\n }\n else if (this.parent.activeViewOptions.allowVirtualScrolling) {\n day--;\n }\n if (this.isCurrentDate(new Date(agendaDate.getTime()))) {\n addClass(dTd.children, cls.AGENDA_CURRENT_DAY_CLASS);\n }\n agendaDate = util.addDays(agendaDate, 1);\n if (agendaDate.getTime() > lastDate.getTime()) {\n break;\n }\n }\n endDate = new Date(agendaDate.getTime() - util.MS_PER_DAY);\n }\n else {\n this.renderEmptyContent(tBody, agendaDate);\n endDate = util.addDays(agendaDate, this.parent.agendaDaysCount - 1);\n }\n this.agendaDates = { start: firstDate, end: endDate };\n };\n Agenda.prototype.renderEmptyContent = function (tBody, agendaDate) {\n var eTr = this.createTableRowElement(agendaDate, 'noEvents');\n var eTd = eTr.children[0];\n var noEvents = createElement('div', {\n className: cls.AGENDA_EMPTY_EVENT_CLASS,\n innerHTML: this.l10n.getConstant('noEvents')\n });\n eTd.appendChild(noEvents);\n tBody.appendChild(eTr);\n };\n Agenda.prototype.createTableRowElement = function (date, type) {\n var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), date.getTime());\n var tr = createElement('tr', { attrs: { 'role': 'row', 'aria-rowindex': daysCount.toString() } });\n var td = createElement('td', {\n attrs: {\n 'class': cls.AGENDA_CELLS_CLASS,\n 'role': 'gridcell',\n 'aria-selected': 'false',\n 'aria-colindex': daysCount.toString(),\n 'data-date': date.getTime().toString()\n }\n });\n var dTd = td.cloneNode();\n var aTd = td.cloneNode();\n tr.appendChild(dTd);\n if (type !== 'noEvents') {\n tr.appendChild(aTd);\n }\n return tr;\n };\n Agenda.prototype.createDateHeaderElement = function (date) {\n var dateHeader;\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n dateHeader = createElement('div', { className: cls.AGENDA_HEADER_CLASS });\n var templateArgs = { date: date, type: 'dateHeader' };\n var template = this.parent.getDateHeaderTemplate()(templateArgs);\n append([].slice.call(template), dateHeader);\n }\n else {\n dateHeader = this.getMobileDateElement(date, cls.AGENDA_HEADER_CLASS);\n }\n return dateHeader;\n };\n Agenda.prototype.agendaScrolling = function (event) {\n this.parent.quickPopup.quickPopup.close();\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n this.virtualScrolling(event);\n }\n };\n Agenda.prototype.virtualScrolling = function (event) {\n var target = event.target;\n var scrollTop = target.scrollTop;\n var scrollHeight = target.scrollHeight;\n var offsetHeight = target.clientHeight;\n var totalHeight = scrollTop + offsetHeight;\n var direction = (this.virtualScrollTop < scrollTop) ? 'next' : 'previous';\n var tBody = target.querySelector('tbody');\n var emptyTBody = createElement('tbody');\n var topElement = this.getElementFromScrollerPosition(event, direction);\n var scrollDate = new Date(parseInt(topElement.getAttribute('data-date'), 0));\n var filterDate;\n var filterData;\n if (scrollTop === 0) {\n filterDate = this.getPreviousNextDate(util.addDays(scrollDate, -1), direction);\n filterData = this.appointmentFiltering(filterDate.start, filterDate.end);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n this.renderContent(emptyTBody, filterDate.start);\n tBody.innerHTML = emptyTBody.innerHTML + tBody.innerHTML;\n this.agendaBase.wireEventActions();\n for (var s = 0, element = tBody.children; s < element.length; s++) {\n if (element[s].getAttribute('aria-rowindex') === topElement.getAttribute('aria-colindex')) {\n var scrollToValue = element[s].offsetTop -\n this.element.querySelector('.e-agenda-item').offsetHeight;\n target.scrollTo(0, scrollToValue);\n break;\n }\n }\n this.updateHeaderText(scrollDate);\n }\n }\n else if (totalHeight === scrollHeight) {\n filterDate = this.getPreviousNextDate(util.addDays(scrollDate, 1), direction);\n filterData = this.appointmentFiltering(filterDate.start, filterDate.end);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n this.renderContent(emptyTBody, filterDate.start);\n tBody.innerHTML += emptyTBody.innerHTML;\n this.agendaBase.wireEventActions();\n this.updateHeaderText(scrollDate);\n }\n }\n else {\n this.updateHeaderText(scrollDate);\n }\n this.virtualScrollTop = scrollTop;\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n if (selectedElements.length > 0) {\n selectedElements[selectedElements.length - 1].focus();\n }\n };\n Agenda.prototype.getElementFromScrollerPosition = function (event, direction) {\n var filterElement;\n var target = event.target;\n var scrollTop = target.scrollTop;\n var scrollHeight = target.scrollHeight;\n var offsetHeight = target.clientHeight;\n var totalHeight = scrollTop + offsetHeight;\n var liCollection = [].slice.call(target.querySelectorAll('.e-agenda-item'));\n var li;\n var liDetails;\n if (liCollection.length > 0) {\n if (scrollTop === 0) {\n li = liCollection[0];\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n }\n else if (totalHeight === scrollHeight) {\n li = liCollection[liCollection.length - 1];\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n }\n else {\n for (var a = 0, length_1 = liCollection.length; a < length_1; a++) {\n li = liCollection[a];\n liDetails = li.getBoundingClientRect();\n if (liDetails.top >= 0) {\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n break;\n }\n }\n }\n }\n return filterElement;\n };\n Agenda.prototype.updateHeaderText = function (date) {\n if (this.parent.showHeaderBar) {\n var dateRangeText = this.getDateRangeText(date);\n var headerElement = this.parent.headerModule.element.querySelector('.e-date-range');\n headerElement.setAttribute('aria-label', dateRangeText);\n headerElement.querySelector('.e-tbar-btn-text').innerHTML = dateRangeText;\n }\n };\n Agenda.prototype.getPreviousNextDate = function (date, type) {\n var currentDate = new Date(date.getTime());\n var firstDate = this.getStartDateFromEndDate(date);\n var lastDate = this.getEndDateFromStartDate(date);\n var daysCount = 0;\n do {\n var filterData = this.appointmentFiltering(currentDate);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n daysCount++;\n }\n currentDate = util.addDays(currentDate, (type === 'next') ? 1 : -1);\n if (currentDate < firstDate || currentDate > lastDate) {\n break;\n }\n } while (daysCount !== this.parent.agendaDaysCount);\n var endDate = util.addDays(currentDate, (type === 'next') ? -1 : 1);\n return (type === 'next') ? { start: date, end: util.addDays(endDate, 1) } : { start: endDate, end: util.addDays(date, 1) };\n };\n Agenda.prototype.appointmentFiltering = function (startDate, endDate) {\n var dateStart;\n var dateEnd;\n if (!isNullOrUndefined(startDate) && isNullOrUndefined(endDate)) {\n dateStart = util.resetTime(new Date(startDate.getTime()));\n dateEnd = util.setTime(new Date(dateStart.getTime()), util.MS_PER_DAY);\n }\n else {\n dateStart = new Date(startDate.getTime());\n dateEnd = new Date(endDate.getTime());\n }\n var filterData = this.parent.eventBase.filterEvents(dateStart, dateEnd);\n return filterData;\n };\n Agenda.prototype.getStartDateFromEndDate = function (endDate) {\n var filterDate;\n var fieldMapping = this.parent.eventFields;\n if (this.parent.eventsProcessed.length > 0) {\n var firstDate = Math.min.apply(Math, this.parent.eventsProcessed.map(function (a) {\n var date = a[fieldMapping.startTime];\n return date.getTime();\n }));\n filterDate = this.parent.hideEmptyAgendaDays ? new Date(firstDate) : this.minDate;\n }\n else {\n filterDate = this.parent.hideEmptyAgendaDays ? util.addMonths(endDate, -1) : this.minDate;\n }\n return util.resetTime(filterDate);\n };\n Agenda.prototype.getEndDateFromStartDate = function (startDate) {\n var filterDate;\n var fieldMapping = this.parent.eventFields;\n if (this.parent.eventsProcessed.length > 0) {\n var lastDate = Math.max.apply(Math, this.parent.eventsProcessed.map(function (a) {\n var date = a[fieldMapping.endTime];\n return date.getTime();\n }));\n filterDate = this.parent.hideEmptyAgendaDays ? new Date(lastDate) : this.maxDate;\n }\n else {\n filterDate = this.parent.hideEmptyAgendaDays ? util.addMonths(startDate, 1) : this.maxDate;\n }\n return util.resetTime(util.addDays(filterDate, 1));\n };\n Agenda.prototype.getNextPreviousDate = function (type) {\n var noOfDays = (type === 'next') ? 1 : -1;\n return util.addDays(this.parent.selectedDate, noOfDays);\n };\n Agenda.prototype.startDate = function () {\n return util.resetTime(this.parent.selectedDate);\n };\n Agenda.prototype.endDate = function () {\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n return this.getEndDateFromStartDate(this.startDate());\n }\n else {\n return util.addDays(this.startDate(), this.parent.agendaDaysCount);\n }\n };\n Agenda.prototype.getDateRangeText = function (date) {\n var formatDate = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';\n if (this.parent.activeViewOptions.allowVirtualScrolling || this.parent.isAdaptive) {\n var currentDate = isNullOrUndefined(date) ? this.parent.selectedDate : date;\n return this.parent.globalize.formatDate(currentDate, { format: formatDate });\n }\n else {\n var startDate = this.parent.selectedDate;\n var endDate = util.addDays(startDate, this.parent.agendaDaysCount - 1);\n return this.formatDateRange(startDate, endDate);\n }\n };\n Agenda.prototype.dayNavigationClick = function (e) {\n var date = this.parent.getDateFromElement(closest(e.currentTarget, '.' + cls.AGENDA_CELLS_CLASS));\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n };\n Agenda.prototype.wireEvents = function () {\n EventHandler.add(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), event.scroll, this.agendaScrolling, this);\n };\n Agenda.prototype.unWireEvents = function () {\n EventHandler.remove(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), event.scroll, this.agendaScrolling);\n var dateHeaderElement = [].slice.call(this.element.querySelectorAll('.e-m-date'));\n for (var _i = 0, dateHeaderElement_1 = dateHeaderElement; _i < dateHeaderElement_1.length; _i++) {\n var element = dateHeaderElement_1[_i];\n EventHandler.remove(element, 'click', this.dayNavigationClick);\n }\n };\n Agenda.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.onAgendaScrollUiUpdate, this);\n this.parent.on(event.dataReady, this.eventLoad, this);\n };\n Agenda.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.onAgendaScrollUiUpdate);\n this.parent.off(event.dataReady, this.eventLoad);\n };\n Agenda.prototype.onAgendaScrollUiUpdate = function (args) {\n var headerHeight = 2;\n if (this.parent.headerModule) {\n headerHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n addClass(this.parent.headerModule.element.querySelectorAll('.e-prev,.e-next'), cls.AGENDA_HIDDEN_CLASS);\n addClass([this.parent.headerModule.element.querySelector('.e-date-range')], cls.AGENDA_ALIGN_CLASS);\n }\n else {\n removeClass(this.parent.headerModule.element.querySelectorAll('.e-prev,.e-next'), cls.AGENDA_HIDDEN_CLASS);\n removeClass([this.parent.headerModule.element.querySelector('.e-date-range')], cls.AGENDA_ALIGN_CLASS);\n }\n }\n var contentArea = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n contentArea.style.height = formatUnit(this.parent.element.offsetHeight - headerHeight);\n };\n /**\n * To destroy the agenda.\n * @return {void}\n * @private\n */\n Agenda.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n this.unWireEvents();\n remove(this.element);\n this.element = null;\n if (this.parent.headerModule && this.parent.activeViewOptions.allowVirtualScrolling) {\n removeClass(this.parent.headerModule.element.querySelectorAll('.e-prev,.e-next'), cls.AGENDA_HIDDEN_CLASS);\n removeClass([this.parent.headerModule.element.querySelector('.e-date-range')], cls.AGENDA_ALIGN_CLASS);\n }\n }\n };\n return Agenda;\n}(ViewBase));\nexport { Agenda };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, addClass, formatUnit, remove } from '@syncfusion/ej2-base';\nimport { AgendaBase } from '../event-renderer/agenda-base';\nimport { Month } from './month';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * month agenda view\n */\nvar MonthAgenda = /** @class */ (function (_super) {\n __extends(MonthAgenda, _super);\n /**\n * Constructor\n */\n function MonthAgenda(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dayNameFormat = 'narrow';\n _this.viewClass = 'e-month-agenda-view';\n _this.agendaDates = {};\n _this.agendaBase = new AgendaBase(parent);\n return _this;\n }\n MonthAgenda.prototype.renderAppointmentContainer = function () {\n var contentArea = this.getContentAreaElement();\n var appWrap = createElement('div', { className: cls.APPOINTMENT_WRAP_CLASS });\n contentArea.appendChild(appWrap);\n this.appendAppContainer(appWrap);\n this.setEventWrapperHeight();\n };\n MonthAgenda.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive) {\n return 'narrow';\n }\n return 'abbreviated';\n };\n MonthAgenda.prototype.setEventWrapperHeight = function () {\n var headerHeight = (this.parent.headerModule ? this.parent.headerModule.getHeaderElement().offsetHeight : 0) + 2;\n var contentArea = this.getContentAreaElement().firstChild;\n var dateHeader = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n var availableHeight = this.parent.element.offsetHeight - headerHeight - dateHeader.offsetHeight - contentArea.offsetHeight;\n var eventWrapper = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n eventWrapper.style.height = formatUnit(availableHeight);\n };\n MonthAgenda.prototype.onDataReady = function (args) {\n this.setEventWrapperHeight();\n this.clearElements();\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(args.processedData);\n var count = 0;\n for (var _i = 0, _a = this.renderDates; _i < _a.length; _i++) {\n var date = _a[_i];\n var filterData = this.appointmentFiltering(date);\n var workCell = this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS)[count];\n if (filterData.length > 0) {\n if (!workCell.querySelector('.' + cls.APPOINTMENT_INDICATOR_CLASS)) {\n workCell.appendChild(createElement('div', { className: cls.APPOINTMENT_INDICATOR_CLASS }));\n }\n if (date.getTime() === util.resetTime(new Date(this.parent.selectedDate.getTime())).getTime()) {\n this.onEventRender(filterData);\n }\n }\n count++;\n }\n };\n MonthAgenda.prototype.onCellClick = function (event) {\n var filterData = this.appointmentFiltering(event.startTime);\n this.onEventRender(filterData);\n this.parent.setProperties({ selectedDate: new Date('' + event.startTime) }, true);\n };\n MonthAgenda.prototype.onEventRender = function (events) {\n var appWrap = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n appWrap.innerHTML = '';\n if (events.length > 0) {\n var appContainer = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n appWrap.appendChild(this.agendaBase.createAgendaContentElement('data', events, appContainer));\n }\n else {\n this.appendAppContainer(appWrap);\n }\n this.agendaBase.wireEventActions();\n };\n MonthAgenda.prototype.appointmentFiltering = function (date) {\n var dateStart = util.resetTime(new Date(date.getTime()));\n var dateEnd = util.setTime(new Date(dateStart.getTime()), util.MS_PER_DAY);\n return this.parent.eventBase.filterEvents(dateStart, dateEnd);\n };\n MonthAgenda.prototype.clearElements = function () {\n var appointmentIndicators = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_INDICATOR_CLASS));\n for (var _i = 0, appointmentIndicators_1 = appointmentIndicators; _i < appointmentIndicators_1.length; _i++) {\n var appointmentIndicator = appointmentIndicators_1[_i];\n remove(appointmentIndicator);\n }\n this.appendAppContainer(this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS));\n };\n MonthAgenda.prototype.appendAppContainer = function (appWrap) {\n var app = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n addClass([app], cls.AGENDA_NO_EVENT_CLASS);\n app.innerHTML = this.l10n.getConstant('noEvents');\n appWrap.innerHTML = '';\n appWrap.appendChild(app);\n };\n /**\n * Get module name.\n */\n MonthAgenda.prototype.getModuleName = function () {\n return 'monthAgenda';\n };\n return MonthAgenda;\n}(Month));\nexport { MonthAgenda };\n","import * as index from '@syncfusion/ej2-schedule';\nindex.Schedule.Inject( index.Day,index.Week,index.WorkWeek,index.Month,index.Agenda,index.MonthAgenda);\nexport * from '@syncfusion/ej2-schedule';\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, addClass, attributes } from '@syncfusion/ej2-base';\nimport { createElement, getUniqueID, closest, rippleEffect } from '@syncfusion/ej2-base';\nimport { Component, select } from '@syncfusion/ej2-base';\nimport { Browser, 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 div = 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: Browser.isDevice ? 'fit' : 'flip', Y: 'flip' },\n position: { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n content: this.target ? this.getTargetElement() : ''\n });\n div.style.zIndex = this.getZIndex();\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));\n if (this.cssClass) {\n addClass([div], this.cssClass.split(' '));\n }\n if (this.enableRtl) {\n div.classList.add(classNames.RTL);\n }\n var _a;\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 = createElement('ul', {\n attrs: { 'tabindex': '0' }\n });\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n li = 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 = 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 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, cssClass: this.cssClass, content: this.content,\n disabled: this.disabled, enableRtl: this.enableRtl, enablePersistence: this.enablePersistence\n });\n this.button.appendTo(this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n this.setIconPositionTop();\n this.appendArrowSpan();\n this.createPopup();\n this.setActiveElem();\n };\n DropDownButton.prototype.setIconPositionTop = function () {\n var iconSpan = this.element.querySelector('.e-icon-left');\n if (iconSpan && this.iconPosition === 'Top') {\n addClass([this.element], classNames.VERTICAL);\n removeClass([iconSpan], 'e-icon-left');\n addClass([iconSpan], 'e-icon-top');\n }\n };\n DropDownButton.prototype.appendArrowSpan = function () {\n this.element.appendChild(createElement('span', {\n className: 'e-btn-icon e-icons ' + 'e-icon-' + (this.cssClass === classNames.VERTICAL ? 'bottom' : 'right') + ' e-caret'\n }));\n };\n DropDownButton.prototype.setActiveElem = function () {\n this.activeElem = this.element;\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 detach(this.element.querySelector('span.e-caret'));\n _super.prototype.destroy.call(this);\n this.button.destroy();\n ['role', 'aria-haspopup', 'aria-expanded', 'aria-owns'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n removeClass([this.element, this.activeElem], ['e-ddb-active', 'e-btn']);\n detach(this.getPopUpElement());\n this.unWireEvents();\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 EventHandler.add(document, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n if (!this.target) {\n EventHandler.add(popupElement, 'keydown', this.keyBoardHandler, this);\n }\n 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 else {\n if (e.keyCode !== 9) {\n e.preventDefault();\n }\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 var ul = this.getULElement();\n var defaultIdx = e.keyCode === 40 ? 0 : ul.childElementCount - 1;\n var liIdx = defaultIdx;\n var li = null;\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.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 (e.keyCode === 27 || e.keyCode === 38 || e.keyCode === 9) {\n if (!this.canOpen()) {\n this.closePopup(e);\n this.element.focus();\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.getZIndex = function () {\n var idx;\n var pos;\n var props;\n var zIndex = ['999'];\n for (var i = 0, len = document.body.children.length; i < len; i++) {\n props = document.defaultView.getComputedStyle(document.body.children[i]);\n idx = props.getPropertyValue('z-index');\n pos = props.getPropertyValue('position');\n if (idx !== 'auto' && pos !== 'static') {\n zIndex.push(idx);\n }\n }\n return (Math.max.apply(Math, zIndex) + 1).toString();\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);\n this.activeElem.focus();\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);\n this.activeElem.focus();\n }\n }\n else {\n if (!canOpen) {\n this.closePopup(e);\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();\n addClass([this.activeElem], 'e-ddb-active');\n this.activeElem.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) {\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.dropDown.hide();\n removeClass([this.activeElem], 'e-ddb-active');\n this.activeElem.setAttribute('aria-expanded', 'false');\n var closeArgs = { element: ul, items: this.items };\n this.trigger('close', closeArgs);\n if (!this.target) {\n detach(ul);\n }\n }\n };\n DropDownButton.prototype.unWireEvents = function () {\n EventHandler.remove(document, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\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', 'disabled', 'enableRtl'];\n if (newProp.iconPosition === 'Left') {\n btnModel.push('iconPosition');\n }\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 'cssClass':\n if (newProp.cssClass === classNames.VERTICAL) {\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 addClass([popupElement], newProp.cssClass.split(' '));\n break;\n case 'iconPosition':\n this.setIconPositionTop();\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 DropDownButton = __decorate([\n NotifyPropertyChanges\n ], DropDownButton);\n return DropDownButton;\n}(Component));\nexport { DropDownButton };\n","var __extends = (this && this.__extends) || (function () {\n var 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 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, createElement, 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 = createElement('button');\n var wrapper = 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.setAria();\n this.wireEvents();\n };\n SplitButton.prototype.initWrapper = function () {\n if (!this.wrapper) {\n this.wrapper = 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 content: this.content,\n disabled: this.disabled\n };\n this.primaryBtnObj = new Button(btnModel, this.element);\n this.element.classList.add('e-' + this.getModuleName());\n this.wrapper.appendChild(this.element);\n this.setIconPositionTop();\n this.setActiveElem();\n };\n SplitButton.prototype.createSecondaryButton = function () {\n var _this = this;\n var btnElem = 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 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, btnElem);\n this.secondaryBtnObj.dropDown.relateTo = this.wrapper;\n this.dropDown = this.secondaryBtnObj.dropDown;\n this.secondaryBtnObj.activeElem = this.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 this.primaryBtnObj.destroy();\n this.secondaryBtnObj.destroy();\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], ['e-' + this.getModuleName(), RTL]);\n ['role', 'aria-label', 'aria-haspopup', 'aria-expanded', 'aria-owns'].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 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', 'cssClass', 'disabled', 'enableRtl'];\n if (newProp.iconPosition === 'Left') {\n model.push('iconPosition');\n }\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 'iconPosition':\n this.setIconPositionTop();\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 SplitButton = __decorate([\n NotifyPropertyChanges\n ], SplitButton);\n return SplitButton;\n}(DropDownButton));\nexport { SplitButton };\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","split","isUndefined","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","isObject","constructor","getEnumValue","enumObject","enumValue","merge","destination","temrObj","tempProp","_i","keys_1","Object","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","indexOf","getInstance","component","elem","querySelector","instances","_a","inst","tagName","properties","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","test","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","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","compile","template","helper","fnCode","str","localKeys","replace","LINES","DBL_QUOTED_STR","exp","match","cnt","matchStr","CALL_FUNCTION","rlStr","IF_STMT","WORD","trim","addNameSpace","QUOTES","FOR_STMT","rlStr_1","mtc","fnStr","fNameSpace","ELSE_STMT","IF_OR_FOR","evalExp","addNS","ignoreList","NOT_NUMBER","templateString","compiler","engineObj","propName","HAS_ROW","childNodes","wrapperInitialize","tag","WRAPPER","ejInstance","input","wrapper","role","aria-checked","index","nodeName","nodeValue","getTextNode","childnode","createCheckBox","enableRipple","options","cssClass","enableRtl","rippleSpan","frameSpan","checked","label","labelSpan","rippleMouseHandler","event_1","createEvent","initEvent","dispatchEvent","calculateRelativeBasedPosition","anchor","fixedElement","anchorPos","tempAnchor","offsetParent","position","offsetLeft","offsetTop","parentElement","calculatePosition","currentElement","positionX","positionY","fixedParent","parentDocument","ownerDocument","posX","posY","pos","elementRect","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","toLowerCase","getBodyScrollTop","documentElement","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","finalValue","concat","createSpinner","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","parseFloat","calculateRadius","setTheme","labelEle","CLS_SPINLABEL","textContent","createLabel","CLS_SPINTEMPLATE","replaceContent","spinCSSClass","CLS_HIDESPIN","createMaterialSpinner","uniqueID","random_generator","globalTimeOut","timeOut","innerContainer","svgMaterial","createElementNS","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","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","getAttribute","isAnimate","globalObject","globalVariables","timeOutVar","startMatAnimate","boot_animate","rotation","animateBootstrap","hideSpinner","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","wireEvents","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","unwireEvents","unstrippedValue","strippedValue","k","checkMask","regExpCollec","focusEventArgs","selectionStart","selectionEnd","trigger","isFocus","placeholder","setSelectionRange","floatLabelType","labelElement","TOPLABEL","sIndex_1","eIndex_1","oldValue_1","redoCollec","maskKeyPress","validateValue","sIndex_2","eIndex","undoCollec","startIndex","endIndex","value_1","preventDefault","keyCode","ctrlKey","removeMaskInputValues","startValue","collec","splice","mobileRemoveFunction","sIndex","oldEventVal","isRemove","isDeleted","initStartIndex","initEndIndex","maskValue","curMask","multipleDel","prompt_1","elementValue","triggerMaskChangeEvent","code","String","fromCharCode","isIosInvalid","changeEventArgs","maskedValue","isInteraction","removeMaskError","addedValues","val_1","startIndex_1","isSpace","isAndroid","preventUnsupportedValues","val","prevValue","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","curVal","caseCount","toUpperCase","addMaskErrorClass","sIdx","idx","ctrl","chkSupport","timer","INPUTGROUP","FLOATINPUT","ERROR","BOTTOMLABEL","Input","getMaskInput","UTILMASK","inputEle","regularExpressions","getUtilMaskEle","getFieldValues","dataItem","fields","fieldData","isHeader","field","property","validateNullOrUndefined","defaultToString","getSeriesColor","palette","getThemeColor","axisLabel","axisTitle","axisLine","majorGridLine","minorGridLine","majorTickLine","minorTickLine","chartTitle","legendLabel","background","areaBorder","errorBar","crosshairLine","crosshairFill","crosshairLabel","tooltipFill","tooltipBoldLabel","tooltipLightLabel","tooltipHeaderLine","markerShadow","selectionRectFill","selectionRectStroke","selectionCircleStroke","measureText","text","font","htmlObject","getElementById","fontSize","size","fontWeight","fontStyle","fontFamily","whiteSpace","lineHeight","Size","clientWidth","clientHeight","rotateTextSize","chart","box","renderer","SvgRenderer","font-size","font-style","font-family","font-weight","text-anchor","createText","delayRedraw","svgObject","removeElement","getElement","logBase","base","log","showTooltip","areaWidth","isTouch","tooltip","inside","range","withIn","withInRange","previousPoint","currentPoint","nextPoint","mX2","logWithIn","xValue","mX1","mX3","xStart","visibleRange","xEnd","ceil","sum","values","values_1","subArraySum","last","yName","subtractThickness","rect","thickness","subtractRect","degreeToLocation","degree","center","radian","ChartLocation","getAngle","point","atan2","subArray","valueToCoefficient","isInversed","TransformToVisible","isInverted","valueType","labelPlacement","CoefficientToVector","valueToPolarCoefficient","primaryXAxis","startAngle","clipRect","indexFinder","isPoint","ids","Index","parseInt","coefficient","delta","dateTimeInterval","visibleLabels","createTooltip","createZoomingLabels","isVertical","arrowLocation","direction","opposedPosition","chartRect","availableSize","endLabel","startLabel","labelStyle","findDirection","Rect","drawPath","PathOption","textElement","TextOption","color","withInBounds","bounds","getValueXByPoint","getValueYByPoint","findClipRect","requireInvertedAxis","firstToLowerCase","substr","getMinPointsDelta","seriesCollection","xValues","minVal","minDelta","Number","MAX_VALUE","visible","name","xAxisName","points","map","sort","xMin","getAnimationFunction","effect","functionName","linear","endValue","markerAnimate","pointIndex","isLabel","Animation","animate","progress","timeStamp","model","templateAnimate","drawSymbol","location","shape","url","temp","calculateShapes","renderOption","locX","locY","rx","ry","cx","cy","d","yValue","href","calculateLegendShapes","getRectLocation","startLocation","endLocation","outerRect","minMax","getTemplateFunction","templateFn","templateComplier","createTemplate","childElement","content","templateElement","getFontStyle","measureElementRect","findlElement","length_1","getPoint","xLength","yLength","appendElement","hasChildNodes","getDraggedRectLocation","x1","y1","x2","y2","checkBounds","getLabelText","labelFormat","customLabelFormat","seriesType","high","low","median","maximum","minimum","upperQuartile","lowerQuartile","outliers","liers","format","stopTimer","collections","currentRect","some","isOverlap","containsRect","calculateRect","textSize","margin","convertToHexCode","componentToHex","r","g","b","hex","convertHexToColor","exec","ColorValue","colorNameToHex","isRGBValue","getSaturationColor","factor","colorCode","rgb","round","getMedian","half","fill","space","stroke","mode","cartesianlarge","cartesiansmall","getAccumulationLegend","textTrim","maxWidth","stringToNumber","containerSize","rX","rY","arrowPadding","tipX","tipY","tipRadius","startX","startY","isMinus","tspanElement","renderOptions","dominant-baseline","baseLine","createTSpan","calculateSize","createSvg","getTitle","title","titleCollection","textOverflow","textWrap","titlePositionX","chartSize","leftPadding","rightPadding","titleStyle","textAlignment","currentLabel","maximumWidth","textCollection","labelCollection","getSeriesFromIndex","visibleSeries","visibleSeries_1","pointByIndex","points_1","toPixel","maxDimension","setStyles","border","stroke-width","appendPath","gauge","calculateSum","from","to","getAngleFromValue","maximumValue","minimumValue","endAngle","isClockWise","isCompleteAngle","getDegree","getValueFromAngle","totalAngle","getAngleFromLocation","getLocationFromAngle","GaugeLocation","getPathArc","startWidth","endWidth","startRadius","endRadius","arcRadius","getRangePath","getCirclePath","innerStart","innerEnd","clockWise","getCompleteArc","innerRadius","getCompletePath","getPointer","targetId","tempString","axisIndex","pointerIndex","getLabelFormat","getRangeColor","ranges","currentRange","filter","rangeColor","incrementalSearch","items","selectedIndex","ignoreCase","queryString","prevString","activeClass","listItems","strLength","innerText","Search","inputVal","searchType","itemData","queryStr","toLocaleLowerCase","itemsData","highlightSearch","query","contentElement","parent_1","createTextNode","replaceChild","revert","ignoreRegex","replaceQuery","li","doesImplementInterface","checkFor","valueAccessor","column","getUpdateUsingRaf","updateFunction","callBack","requestAnimationFrame","iterateArrayOrObject","collection","predicate","pred","templateCompiler","baseTemplateComplier","setStyleAndAttributes","customAttributes","copyAttr","literals","baseExtend","exclude","moved","prepareColumns","columns","autoWidth","c","Column","headerText","foreignKeyValue","foreignKeyField","setCssInGridPopUp","popUp","isBottomTail","popUpSpan","targetPosition","display","clientY","changedTouches","offsetHeight","popup","getPosition","getPopupLeftPosition","getActualProperties","ChildProperty","parentsUntil","isID","getElementIndex","inArray","getActualPropFromColl","coll","clientX","getUid","appendChildren","parents","calculateAggregate","customAggregate","DataUtil","aggregates","getScrollBarWidth","scrollWidth","divNode","cssText","getRowHeight","rowHeight","table","isEditable","col","row","isOldRow","isIdentity","isPrimaryKey","allowEditing","isActionPrevent","dlg","editSettings","showConfirmDialog","action","Array","changeButtonType","elements_1","setFormatter","serviceLocator","fmtr","getService","getFormatFunction","skeleton","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","fdata","dataSource","DataManager","offline","json","columnData","getDay","where","getDatePredicate","operator","matchCase","executeLocal","getColumnByForeignKeyValue","filterObject","datePredicate","prevDate","nextDate","prevObj","nextObj","setHours","predicateSt","Predicate","predicateEnd","and","or","ejpredicate","renderMovable","frzCols","mEle","childElementCount","setStateAndProperties","attribute","withInRange$1","pointerRect","pointerElement","Size$2","lineBounds","newSize","tempDiv","enableDrag","getTemplateFunction$2","desiredIntervalsCount","niceInterval","intervalDivs_1","pointer","getRangeColor$1","orientation","rectWidth","boxName","addValue","y1_1","bottomRadius","topRadius","x1_1","lat","lng","mapSize","longitudeMinMax","longitude","mapModel","latitude","latRadian","lngRadian","layer","latitudeMinMax","degreesToRadians","Infinity","sinLatitude","totalSize","mapObject","measureText$3","templateHtml","tempGroup","startY1","xSum","startX1","ySum","rightMinPoint","rightMaxPoint","leftMinPoint","leftMaxPoint","bottomMaxPoint","topMinPoint","topMaxPoint","alignment","scaleFactor","zoomFactor","baseMapRectBounds","mapAreaRect","mapWidth","mapHeight","leftPosition","getTemplateFunction$3","layerIndex","shapeIndex","cancel","eventName","selection","maps","getElement$3","l","currentStroke","touches","getDistance","a","getWeekFirstDate","date1","setDate","getFullYear","tzOffsetDiff","getTimezoneOffset","date","addMonths","day","getHours","date2","endHour","getMonthSummary","summary","ruleObject","monthDay","getConstant","cldrObj","startDate","maximumCount","viewDate","cacheDate","tempViewDate","until","parsedDate","freq","tempDate","expectedCount","endDate","modifiedDate","expectedDays","excludeDateHandler","state","startDay","weekNo","maxDate","stDate","weekNos","dayIndex","firstWeekSpan","tempExcludeDate","validateMonthlyRuleType","month","dayCycleData","monthCollection","setMonth","weekCollection","week","dayData","monthlyDayTypeProcess","mainDate","monthInit","setNextValidDate","beginDate","monthData","getMonth","setFullYear","getStartDateForWeek","getDate","yearDay","splitData","validRules","startDateCollection","currentDate","diff","shift","days","rule","checkDayIndex","checkMonth","expectedDate","checkDate","roundDateValues","getUTCMonth","getUTCHours","getUTCMinutes","headerRegex","defaultType","Ajax","async","send","Promise","resolve","reject","httpRequest","XMLHttpRequest","onreadystatechange","stateChange","setRequestHeader","contentType","beforeSend","successHandler","onSuccess","failureHandler","reason","onFailure","responseText","dataType","JSON","parse","error","readyState","status","statusText","getResponseHeader","responseHeaders","header","headers","getAllResponseHeaders","addOrGetEventData","__eventList","listener","bindTo","intDebounce","debounceListener","eventData","copyData","eventProp","eventData_1","Observer","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","curObject","argument","curObject_1","cur","destroy","boundedEvents_1","Base","isProtectedOnChange","changedProperties","oldProperties","refreshing","finalUpdate","childChangedProperties","modelObserver","addInstance","isDestroyed","muteOnChange","prevDetection","dataBind","callChildDataBind","obj_1","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","moduleClass","getModuleName","ej2_instances","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","version","language","navigator","getEvent","isDevice","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","regX","uA","info","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","__extends","extendStatics","setPrototypeOf","__proto__","p","__","create","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","_super","ease","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","getModel","element_1","delayAnimation","animation","animationId","frameId","cancelAnimationFrame","applyAnimation","step","timerId","prevTimeStamp","startAnimation","avg","timingFunction","performance","now","fail","newProp","oldProp","CanvasRenderer","rootID","rootId","getOptionValue","createCanvas","canvasObj","ctx","getContext","setCanvasSize","setAttributes","lineWidth","dashArray","dashArrayString","setLineDash","strokeStyle","drawLine","save","beginPath","moveTo","lineTo","restore","dataUrl","toDataURL","drawRectangle","canvasCtx","cornerRadius","globalAlpha","drawCornerRadius","fillStyle","fillRect","arcTo","closePath","canvasTranslate","dataSplit","borderWidth","flag","translate","innerR","c1","c2","c3","c4","bezierCurveTo","arc","counterClockWise","drawText","textAlign","baseline","textBaseline","labelRotation","fillText","drawCircle","drawPolyline","drawEllipse","circumference","scaleX","scaleY","scale","drawImage","imageObj","Image","createLinearGradient","colors","myGradient","colorStop","setGradientValues","createRadialGradient","colorName","newColorStop","stopColor","addColorStop","setElementAttributes","updateCanvasAttributes","img_1","onload","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","isArray","parentObj","controlParent","isParentArray","updateChange","updateTimeOut","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","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","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","groupNumbers","latnParseRegex","nlead","nend","toPrecision","level1","sep","decimalSymbol","level2","lead","getResultantPattern","resPattern","iType","basicPatterns","dPattern","tPattern","defaultObject","patternMatcher","needFraction","cSymbol","fractionOnly","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","sym","isCurrencyPercent","parts","actual","symbol","part","loc","typeMapper","patternRegex","patternMatch","G","M","L","H","'"," a","yy","EEEE","E","$","%","-","0","1","dateParseRegex","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","sun","mon","tue","wed","thu","fri","sat","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","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","monthIndex","C","P","N","A","currencyCode","formatSplit","integerPart","fractionPart","customNumberFormat","dateObj","getActualDateTimeFormat","isExcelFormat","actualPattern","tLength","timeZonePattern","options_1","timeZone","numMapper","timezone","DateFormat","getTimeZoneValue","getActualNumberFormat","minFrac","parseOptions","custom","minDigits","maxDigits","fractionDigitsPattern","integer","minimumIntegerPattern","no","groupingPattern","abbreviateRegexGlobal","weekdayKey","timeSetter","m","datePartMatcher","z","Z","dateFormat","formatOptions","dateSeperator","patternMatch_1","char","weekday","designator","eText","era","intDateFormatter","matches_1","curval","processNumber","curstr","desig","dec","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","getDateObject","setMilliseconds","year","tKeys_1","tValue","pDate","lDate","lastDay","tzValue","setMinutes","getMinutes","retOptions","props_1","matchString","internalNumberParser","tmatch","getZoneValue","tZone","splitStr","cRegex","parseRegex","groupRegex","NumberParser","numberParser","symbolRegex","symbolpattern","getParsedNumber","isNegative","NaN","exponent","rightToLeft","Internationalization","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","getNumberPattern","Component","needsID","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","mergePersistData","event_2","getInjectedModules","injectedModules","Inject","localStorage","getItem","setItem","getPersistData","clearTemplate","templateName","addOnPersist","persistObj","objValue","stringify","ignoreOnPersist","iterateJsonProperties","newObj","newList","this_1","defaultPosition","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","padding","diffX","diffY","droppables","toggleEvents","isIE","scope","isUnWire","handle","initialize","evt","currentTarget","abort","intCoord","getCoordinates","initialPosition","relativeXPosition","relativeYPosition","intDragStart","intDestroy","intCordinate","styleProp","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","calculateParentPosition","getMousePosition","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","dragStart","curTarget","getProperTargetElement","dragArea","setDragArea","enableTailMode","posValue","getProcessedPositionValue","intDrag","intDragStop","setGlobalDroppables","queryPositionInfo","pageXOffset","pageYOffset","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","intOver","dragData","hoverObject","intOut","tLeft","tTop","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","dragValue","docBody","docEle","dragStop","dragStopCalled","intDrop","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","elementFromPoint","cursorAt","sender","reset","draggable","draggedElement","dropIns","getDropInstance","drop","eleInst","eleInst_1","Droppable","mouseOver","area","accept","isDrag","isDropArea","canDrop","droppedElement","coord","backspace","tab","enter","control","alt","pause","capslock","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","getKeyCode","keyVal","charCodeAt","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","svgLink","svgObj","setSVGSize","line","rectangle","polyline","ellipse","drawPolygon","polygon","img","setAttributeNS","preserveAspectRatio","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","tapHoldThreshold","moveEvent","endEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","endPoint","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","calcPoints","swipeArgs","swipeDirection","defaultArgs","canTrigger","scrollBool","isScrollable","checkSwipe","tap","tapThreshold","modeClear","lastTapTime","eTapArgs","pnt","newX","newY","newT","xDist","yDist","Engine","isRipple","data_1","complexFactorySetter","complexFactoryGetter","complexArrayFactorySetter","complexArrayFactoryGetter","builderFunction","classObj","array","keys_2","encodeURIComponent","siblings","childNodes_1","curNode","Node","ELEMENT_NODE","attrVal","cssClassName","Button","isPrimary","setIconCss","disabled","controlStatus","iconCss","iconPosition","isToggle","btnClickHandler","unWireEvents","DISABLED","RIPPLE","RIPPLECHECK","RIPPLEINDETERMINATE","CheckBox","isKeyPressed","changeState","ariaState","getWrapper","indeterminate","clickHandler","focusOutHandler","focusHandler","setDisabled","initWrapper","for","labelPosition","setText","keyDownHandler","labelMouseHandler","mouseDownHandler","labelWrap","RadioButton","RadioButton_1","changeHandler","radioGrp","radioWrap","getLabel","nextElementSibling","labelRippleHandler","textLabel","rippleLabel","PositionData","CLASSNAMES","Popup","setEnableRtl","refreshPosition","setContent","actionOnScroll","wireScrollEvents","unwireScrollEvents","orientationOnChange","getRelateToElement","scrollRefresh","parent_2","relateToElement","relateTo","hide","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","parent_3","isElementVisible","parent_4","win","windowView","scrollY","scrollX","outerWidth","outerHeight","reposition","checkFixedParent","checkCollision","getAnchorPosition","anchorEle","eleRect","anchorRect","targetType","callFlip","param","callFit","horz","collision","vert","show","animationOptions","showAnimation","hideAnimation","ButtonProps","AnimationSettings","DLG_HEADER_CONTENT","DLG_HEADER","DLG_FOOTER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","SCROLL_DISABLED","FULLSCREEN","DLG_CLOSE_ICON_BTN","Dialog","initRender","headerContent","closeIconClickEventHandler","closedFrom","dlgOverlayClickEventHandler","l10n","keyDown","isModal","buttonObj","btnObj","activeElement","focusableElements","isTagName","isContentEdit","hasAttribute","closeOnEscape","primaryButtonEle","buttonIndex_1","buttons","buttonModel","click","targetEle","setCSSClass","setMaxHeight","setTargetContent","setHeader","showCloseIcon","renderCloseIcon","contentEle","footerTemplate","setFooterTemplate","setButton","allowDragging","setAllowDragging","aria-modal","setIsModal","dlgContainer","popupObj","focusContent","unBindEvent","storeActiveElement","positionChange","setEnableRTL","dlgOverlay","dragObj","buttonContent","btn","ftrTemplateContent","aria-describedby","maxHeight","isContent","contentDiv","headerEle","aria-labelledby","createHeaderContent","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","u","tabIndex","disableElement","getAutoFocusNode","validNode","t","elementMatch","Element","bindEvent","classArray","isFullScreen","fullScreen","openAnimation","animationSettings","dialogOpen","closeAnimation","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","isSticky","tipClose","ICON","onStickyClose","addDescribedBy","describedby","data-tooltip-id","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","targetList_1","ctrlId","target_1","restoreElement","wireMouseEvents","showTimer","hideTimer","isHidden","TOOLTIP_WRAP","aria-hidden","PopupAnimation","openDelay","horizontal","vertical","affectedPos","collidedPosition","eleOffset","arrowleft","targetElement","closeAnimation_1","closeDelay","unwireMouseEvents","onMouseOut","onMouseMove","eventPageX","eventPageY","colpos","touchEnd","scrollHandler","opensOn","triggerList_1","getTriggerList","wireFocusEvents","touchModule","tapHold","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","trgt","RTL","DISABLE","INPUT","FLOATLINE","FLOATTEXT","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","_focusFn","getParentNode","_blurFn","createFloatingInput","inputObject","floatLinelement","floatLabelElement","wireFloatingEvents","createInputContainer","customTag","updateLabelState","updateIconState","button","validateLabel","tagClass","setCssClass","oldClass","setPlaceholder","aria-placeholder","setReadonly","isReadonly","readonly","isRtl","setEnabled","isEnable","disabledAttrs","aria-disabled","removeAttributes","addAttributes","appendSpan","iconClass","readOnly","createInput","clearButton","showClearButton","wireClearBtnEvents","createClearButton","enabled","setPropertyValue","removeFloating","unwireFloatingEvents","addFloating","iconEle","inputObj","floatLine","floatText","ErrorOption","SPINICON","INCREMENT","DECREMENT","INTREGEXP","NumericTextBox","isPrevFocused","decimalSeparator","intRegExp","isCalled","cloneElement","angularTagName","tabindex","incrementTitle","decrementTitle","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","checkAttributes","validateMinMax","validateStep","updatePlaceholder","createWrapper","showSpinButton","spinBtnCreation","changeValue","decimals","roundNumber","attributes_1","ROOT","aria-readonly","hiddenInput","spinDown","aria-label","spinUp","wireSpinBtnEvents","formattedValue","aria-valuemin","aria-valuemax","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","focusIn","focusOut","pasteHandler","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","updateValue","previousValue","beforeUpdate","updatedValue","correctRounding","strictMode","trimValue","floatExp","floatValue","floatStep","valueCount","stepCount","roundValue","precision","divide","pow","updateCurrency","propVal","numberOfDecimals","decimalPart","modifyText","validateState","result1","result2","cancelEvent","metaKey","currentChar","stopPropagation","fractionRule","validateDecimalOnType","mouseWheel","rawEvent","wheelDelta","detail","formatValue","ele_1","getElementData","mouseUpClick","decrement","getText","propValue","#","?","&","MaskUndo","MaskedTextBox","isInitial","resetMaskedTextBox","setMaskPlaceholder","setWidth","setVal","strippedValue_1","strippedVal","getMaskedValue","TicksData","TooltipData","classNames","Slider","horDir","verDir","transition","rangeBar","transitionOnMaterialTooltip","scaleTransform","customAriaText","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","internationalization","ticks","formatString","formatInfo","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","setZindex","tooltipElement","firstTooltipElement","secondTooltipElement","sliderContainer","showOn","sliderTrack","isMaterial","setHandler","createRangeBar","setOrientClass","class","showButtons","setButtons","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","placement","renderScale","renderTooltip","firstHandle","secondHandle","setAriaAttributes","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","content_1","formatContent","handleVal1","content_2","ariaContent","handleVal2","count_1","getTooltipTransformProperties","previousTooltipClass","tooltipPlacement","tooltipPosition","tooltipBeforeOpen","transformProperties","wireMaterialTooltipEvent","sliderDown","tooltipPositionCalculation","cursor","checkTooltipPosition","firstHandleTooltipPosition","secondHandleTooltipPosition","tooltipClass","beforeOpen","beforeCollision","afterClose","tooltipAfterClose","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","openTooltip","hVal","handleValueUpdate","changeHandleValue","refreshTooltipOnMove","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","orien","ul","smallStep","showSmallTicks","largeStep","steps","tickWidth","islargeTick","largestep","repeat","createTick","formatTicksValue","decimalPoints","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","tickText","tickElement","tickValuePosition","other","otherChild","ariaValueText","isTickFormatted","valuenow","aria-valuetext","buttonUp","setRangeBar","checkHandlePosition","preHandlePos1","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","updateRangeValue","previous","setPreviousVal","rtl","preHandlePos2","tempStartEnd","onResize","xyToPosition","top_1","stepValueCalculation","percentStep","remain","addition","f","positionToValue","sliderBarClick","handlepos","handleVal","focusedElement","checkRepeatedValue","sliderBarMove","sliderBarUp","currentValue","wireButtonEvt","sliderFocusOut","onresize","keyUp","hover","relatedTarget","blur","transformProperties_1","hiddenHandle_1","handle_1","changeSliderType","updateConfig","changeRtl","changeOrientation","setMinMaxValue","setTooltip","setReadOnly","VALIDATE_EMAIL","VALIDATE_URL","VALIDATE_DATE_ISO","VALIDATE_DIGITS","VALIDATE_PHONE","VALIDATE_CREDITCARD","ListBase","FormValidator","validated","errorRules","allowSubmit","required","infoElement","inputElement","selectQuery","defaultMessages","email","dateIso","creditcard","number","maxLength","minLength","rangeLength","tel","equalTo","inputElements","createHTML5Rules","FormValidator_1","addRules","rules","removeRules","validate","selected","validateRules","rules_1","name_1","clearForm","getInputElement","errorClass","validClass","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","defRule","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","annotationMessage","isCheckable","keyUpHandler","submitHandler","resetHandler","rules_2","errorMessage","getErrorMessage","errorRule","isValid","removeErrorRules","showMessage","createErrorElement","errorElement","currentRule","formElement","checkValidator","ruleValue","formats","errorOption","Message","errorContainer","containerId","customPlacement","nextSibling","checkRequired","inputType","compareTo","Label","LIST_PARENT","FILE","STATUS","CLEAR_ICON","REMOVE_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","ICON_FOCUSED","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","multiple","fileList","filesData","uploadedFilesData","isForm","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","upload","renderButtonTemplates","unBindDropEvents","setDropArea","listParent","showFileList","actionButtons","renderPreLoadFiles","setLocalizedTexts","preLocaleObj","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","removeActionButtons","createFileList","renderActionButtons","localeText","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","checkHTMLAttributes","asyncSettings","saveUrl","removeUrl","next","renderBrowseButton","initializeUpload","wireActionButtonEvents","uploadButtonClick","clearButtonClick","unwireActionButtonEvents","uploadText","clearText","inputWrapper","dropAreaWrapper","fileDropArea","aria-activedescendant","files","clearData","files_1","fileData","getFileNameOnly","rawFile","validationMessages","minSize","maxSize","statusCode","checkActionButtonStatus","dropTextArea","dropArea","dropZoneElement","enableDropText","bindDropEvents","newAttr","createAttribute","setAttributeNode","checkAutoUpload","browseButtonClick","onSelectFiles","removeFocus","keyboardModule","keyActionHandler","resetForm","setTabFocus","setReverseFocus","removeFiles","iconElements","iconElement","dropElement","dragHover","onDragLeave","selectedElement","removeFilesData","file","customTemplate","getLiElement","removeUploadedFile","selectedFiles","ajax","formData","FormData","removeCompleted","removeFailed","updateStatus","rootElement","statusElement","targetFiles","dataTransfer","sortFileList","eventArgs_1","getFileType","validatedFileSize","isModified","modifiedFilesData","progressInterval","checkExtension","dataFiles","updateSortedFileList","previousListClone","added","liElement","removedList_1","oldList","createParentUL","dropFiles","extensions_1","extension","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","createCustomfileList","fileData_1","listItem","data-file-name","uploadTemplateFn","length_2","fileData_2","textContainer","fileExtension","rtlContainer","bytesToSize","truncateName","nameElement","dataset","tail","setInitialAttributes","filterfileList","filterFiles","liElements","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","updateProgressBarClasses","uploadComplete","removeProgressbar","uploadFailed","callType","progressAnimation","animateProgressBar","extensions","uploadTemplate","exception","bytes","fileNames","sortedFilesData","sortedFileNames_1","customFormData","name_2","i_1","customData","state_1","validUrl","removeFiles_1","getFilesData","subQuery","isChild","queries","fKey","fromTable","lookups","expands","sortedColumns","groupedColumns","setKey","using","dataManager","execute","always","executeQuery","cloned","subQuerySelector","isCountRequired","tableName","addParams","fn","expand","tables","fieldName","ignoreAccent","search","searchKey","fieldNames","comparer","fnOperators","sortBy","isFromGroup","sorts","order","endsWith","fnSort","filterQueries","sortByDesc","page","pageIndex","pageSize","take","nos","skip","hierarchy","selectorFn","foreignKey","requiresCount","aggregate","q","filterQueryLists","singles","filtered","isComplex","processOperator","condition","predicates","combinePredicates","fromJson","fromJSONData","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","ds","middle","ignoreDiacritics","diacritics","callAdaptorFunction","adaptor","fnName","param1","param2","isnull","isPlainObject","isCors","xhr","getGuid","rand","arr","Uint8Array","isNull","getItemFromComparer","castRequired","distinct","requiresCompleteRecord","tmp","serverTimezoneOffset","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","processSymbols","parseJson","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","dupValue","dateParse","toTimeZone","isJson","isGuid","replacer","jsonReplacer","arrayReplacer","keys_3","addSelfOffset","toJSON","toUTC","utc","unix","Adaptor","requestType","pvt","processResponse","JsonAdaptor","processQuery","countFlg","agg","batchRequest","dm","changes","addedRecords","changedRecords","update","deletedRecords","onWhere","onAggregates","onSearch","onSortBy","fnCompare","onGroup","aggQuery","onPage","onRange","onTake","onSkip","onSelect","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","request","groups","filters","searches","getFiltersFrom","req","getRequestQuery","reqParams","pvtData","convertToQueryString","request1","requests","getAggregateResult","batchUrl","crudUrl","changed","deleted","insertUrl","keyColumn","updateUrl","predicats","aggregateData","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","contentId","batchContent","changeSetContent","batchChangeSetContentType","onPredicate","requiresCast","guid","returnValue","getField","onComplexPredicate","onEachWhere","onEachSearch","onEachSort","reverse","onCount","settings","overrideMimeType","dataCopy","results","emptyAndBatch","processBatchResponse","versionCheck","requiresFormat","keys_4","initialGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","generateBodyContent","method","stat","cIdx","jsonObj","exVal","changeGuid","ODataV4Adaptor","getModulename","isDate","WebApiAdaptor","Count","Items","WebMethodAdaptor","RemoteSaveAdaptor","CacheAdaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","forDel","requestTime","removeItem","generateKey","currentFilter","newQuery","cachedItems","crossDomain","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","catch","all","pResult","cResult","deff","doAjaxRequest","defer","icon","check","expanded","hasChild","collapsible","image","iconWrapper","createListFromArray","isSingleLevel","generateUL","createListItemFromArray","subChild","curOpt","defaultListBaseOptions","getModuleClass","moduleName","genUID","itemCreating","generateSingleLevelLI","generateLI","itemCreated","createListItemFromJson","defaultMappedFields","ariaAttributes","defaultAriaAttributes","typeofData","curItem","innerEle","showCheckBox","showIcon","itemClass","htmlAttributes","imageUrl","attr","imageAttributes","subDS","hasChildren","processSubChild","subLi","createListFromJson","expandCollapse","expandElement","expandIconPosition","expandIconClass","listClass","elementArray","addSorting","sortOrder","getDataSource","createJsonFromElement","curEle","jsonAr","childs","getAllAttributes","urlAttributes","typeof","elementAttributes","innerElements","grpLI","elementID","groupItemRole","itemRole","anchorTag","uID","groupTemplate","compiledString","innerDiv","wrapperRole","itemText","ulElement","listRole","isChecked","groupBy","createList","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","groupDataSource","cusQuery","itemObj","grpItem","renderContentTemplate","liCollection","renderGroupTemplate","headerItems","category","headerData","headerItems_1","generateIcon","TimePickerBase","effectsConfig","None","SlideLeft","SlideDown","Zoom","Fade","effectsRTLConfig","FieldSettings","ListView","curDSLevel","curViewDS","moveDown","moveUp","back","animateOptions","isNestedList","currentLiElements","resetList","selectedData","selectedId","aniObj","setHTMLAttribute","setEnable","setSize","listBaseOption","reRender","headerTitle","setCheckbox","getSubDS","resetCurrentList","enableElement","enable","isEnabled","showBack","showHeader","innerHeaderEle","textEle","hedBackButton","switchView","fromView","toView","fPos_1","overflow_1","anim","curUL","renderCheckbox","isValidLI","checkboxRevert","checkboxElement","frameElement_1","checkItem","checkBoxPosition","args_1","getItemData","setCheckboxLI","setSelectLI","hoverHandler","curLi","setHoverLI","leaveHandler","removeHover","homeKeyHandler","arrowKeyHandler","prev","enterKeyHandler","spaceKeyHandler","tabFocus","swipeActionHandler","focusout","swipe","hoverLI","removeSelect","selectedLI_1","checkIcon","selectEventData","isInteracted","selectedLI","renderSubList","lastLi","hoverSiblingLI","curLIs","levelKeys","localData","levelKeys_1","curDSJSON","findItemFromDS","getElementUID","curDS","resultJSON","getQuery","setViewDataSource","isInAnimation","setLocalData","renderList","contentContainer","renderIntoDom","getSelectedItems","rippleFn","classAr","pID","pop","toUL","fromUL","selectItem","getLiFromObjOrElement","selectMultipleItems","liTextCollection","liDataCollection","findItem","enableItem","setItemState","disableItem","showItem","showHideItem","hideItem","addItem","removeItemFromList","valid","liCollection_1","idx_1","liCollection_2","idx_2","ds_1","curAr_1","fields_1","idx_3","removeMultipleItems","OVERLAY","OTHERMONTH","SELECTED","FOCUSEDDATE","OTHERMONTHROW","ZOOMIN","Calendar","controlUp","controlDown","moveLeft","moveRight","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","globalize","todayDisabled","todayDate","data-role","calendarElement","processDate","validateDate","minMaxUpdate","checkDateValue","changedArgs","headerElement","iconContainer","previousIcon","nextIcon","headerTitleElement","aria-atomic","previousDate","contentHdr","contentBody","showTodayButton","contentFooter","getCultureValues","culShortNames","getCultureObjects","shortNames","html","firstDayOfWeek","tableHeadElement","weekNumber","shiftArray","renderYears","renderDecades","renderMonths","updateFooter","todayElement","l10","toDateString","today","footer","todayButtonClick","navTitle","keyActionHandle","setSeconds","getSeconds","navigateTo","view","getViewNumber","currentView","focusedDate","tableBodyElement","selectedDate","depthValue","depth","levelRestrict","KeyboardNavigate","selectDate","contentClick","firstDay","addYears","isMinMaxRange","addDay","navigatePreviousHandler","navigatePrevious","navigateNextHandler","navigateNext","triggerChange","navigateHandler","triggerNavigate","minMaxDate","localDate","minDate","numCells","tdEles","renderDays","renderTemplate","currentMonth","titleUpdate","getMilliseconds","setTime","weekEle","weekAnchor","getWeek","dateFormatOptions","tdEle","dayCell","dayLink","renderDaycellArg","isDisabled","isOutOfRange","renderDayCellEvent","otherMnthBool","disabledCls","getDateVal","removeTheadEle","valueUtil","curDate","yr","curYrs","minYr","minMonth","maxYr","maxMonth","localMonth","localYr","startYr","endYr","startHdrYr","endHdrYr","startYear","rowIterator","valueOf","aria-selected","lastDate","timeOffset","findlastDay","classNm","trEle","iconHandler","setAriaActivedescendant","eve","getIdValue","setvalue","setActiveDescendant","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","stringVal","ld","time","getMaxDays","dateString","setDateDecade","setDateYear","navigatedEvent","navigatedArgs","compare","modifier","findNextTD","rangeValue","tmpDate","INPUTFOCUS","ACTIVE","DatePicker","previousEleValue","isDateIconClicked","altUpArrow","altDownArrow","calendarKeyConfigs","bindEvents","updateInput","ariaAttrs","aria-haspopup","aria-owns","aria-expanded","ngTag","INPUTWRAPPER","isCalendar","disabledDates","dateOptions","dateTimeFormat","dateValue","tempFormat","dateIconHandler","inputFocusHandler","inputBlurHandler","bindClearEvent","keyboardModules","inputKeyActionHandle","CalendarKeyActionHandle","strictModeUpdate","changeTrigger","calendarKeyboardModules","documentHandler","createCalendar","popupWrapper","modelHeader","modal","yearHeading","h2","daySpan","monthSpan","selectCalendar","prevent","preventArgs","triggerEvent","insertAdjacentElement","inputEleCopy","ej2Instance","checkHtmlAttributes","valueCopy","previousValCopy","dateIdString","LEFTCALENDER","RIGHTCALENDER","STARTDATE","ENDDATE","RANGEHOVER","STARTLABEL","ENDLABEL","CALENDAR","HEADER","TITLE","ICONCONTAINER","RANGECONTAINER","FOCUSDATE","CONTENT","DAYSPAN","WEEKNUMBER","DATEDISABLED","ICONDISABLED","LISTCLASS","ListBaseClasses","HOVER","OVERFLOW","Presets","DateRangePicker","isCustomRange","isCustomWindow","presetsItem","isTab","isKeyPopup","dateDisabled","isRangeIconClicked","isMaxDaysClicked","disabledDays","presetKeyConfig","keyInputConfigs","defaultConstant","customRange","applyText","cancelText","selectedDays","isMobile","matchMedia","angularTag","initProperty","navNextFunction","navNextMonth","navPrevFunction","navPreviousMonth","deviceNavNextFunction","deviceNavNext","deviceNavPrevFunction","deviceNavPrevious","shiftTab","processPresets","presets","validateDates","activeIndex","rangeIconHandler","iconBlurHandler","inputKeyboardModule","inputHandler","isPopupOpen","applyFunction","minDays","maxDays","createPopup","isPreset","createPresets","listRippleEffect","renderControl","createControl","bindCalendarEvents","updateRange","leftCalendar","rightCalendar","disabledDateRender","updateHeader","clearCalendarEvents","leftCalPrevIcon","leftCalNextIcon","rightCalPrevIcon","rightCalNextIcon","updateNavIcons","compareMonths","leftCalCurrentDate","rightCalCurrentDate","calendarIconEvent","deviceCalendarEvent","startButton","deviceHeaderClick","endButton","calendarIconRipple","leftKeyboardModule","keyInputHandler","rightKeyboardModule","bindCalendarCellEvents","removeFocusedDate","calendar","updateDeviceCalendar","deviceNavigation","deviceCalendar","removeClassDisabled","updateMinMaxDays","selectableDates","separator","refreshControl","clearRange","previousStartValue","previousEndValue","inputStr","keyCalendarUpdate","isLeftCalendar","updateCalendarElement","navInCalendar","leftLimit","rightLimit","keyNavigation","rightDateLimit","leftDateLimit","selectRange","yearDate","presetElement","checkMinMaxDays","presetHeight","isDateDisabled","tdCells_1","hoverSelection","focusedDate_1","tdCells_2","isDisabledCell","eleDate","elementCollection","elementCollection_1","tdCells_3","addSelectedAttributes","rangeArgs","inputValue","otherMonthSelect","isStartDate","sameDate","tdCell","MouseEvent","removeSelection","applyButton","endEle","endEle_1","endEle_2","ele_2","removeSelectedAttributes","tdCells_4","maxEle","tdCells_5","calendar_1","tdCells_6","disabledDayCnt","start_1","end_1","updateControl","createHeader","labelContainer","endBtn","startBtn","changeIcon","disableInput","validateRangeStrict","validateMinMaxDays","validateRange","renderCalendar","isSameMonth","selectNextMonth","selectStartMonth","calendarContainer","prevIcon","leftContainer","rightContainer","controlContainer","headerContainer","footerSection","cancelBtn","CANCEL","applyBtn","APPLY","cancelButton","cancelFunction","deviceHeaderUpdate","addIconTabindex","popupKeyboardModule","popupKeyActionHandle","onMouseClick","setListSelection","onMouseOver","onMouseLeave","renderCustomPopup","removeListSelection","applyPresetRange","calendarFocus","listTag","wireListEvents","unWireListEvents","popupWidth","btnKeyboardModule","presetKeyboardModule","presetKeyActionHandler","popupKeyBoardHandler","rangeContainer","listMoveDown","setScrollPosition","listMoveUp","hvrItem","getHoverLI","actItem","getActiveLI","previousElementSibling","listHeight","active","nextEle","liHeight","removeIconTabindex","virtualRenderCellArgs","virtualRenderCellEvent","isStartDisabled","isEndDisabled","getSelectedRange","DAY","MONTH","YEAR","NAVIGATION","FOCUS","createListItems","timeFormat","timeCollections","TimePicker","disableItemCollection","keyConfigure","down","up","inputTag","createInputElement","validateInterval","validateDisable","getFormattedValue","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","aria-autocomplete","isNullOrEmpty","unBindEvents","generateList","listWrapper","addSelection","getPopupHeight","popupHeight","popupCalculation","firstItem","isEmptyList","textIndent","paddingRight","paddingLeft","containerStyle","setPopupPosition","createDateObj","checkErrorState","disableTimeIcon","selectInputText","getMeridianText","getCursorSelection","getActiveElement","borderLeftWidth","scrollTo","setScrollTo","findScrollTop","initialTime","scrollTime","cldrTimeFormat","cldrDateFormat","getCultureDateObject","getCultureTimeObject","dateToNumeric","getExactDateTime","checkValue","updatePlaceHolder","popupHandler","closePopup","mouseUpHandler","curPos","cursorDetails","focusSelection","isSeparator","keyHandler","objToString","previousState","setSelection","animModel","documentClickHandler","checkValueChange","isNavigation","valueProcess","currentLi","setHover","maxVal","dateVal","strictOperation","setCurrentDate","maxValue","minValue","inputEvent","clearHandler","setZIndex","getSeparator","getTextFormat","strArray","newval","findNextElement","textVal","timeVal","validLiElement","backward","elementIndex","isCheck","nextItem","offsetValue","lastItemOffsetValue","ulPadding","paddingTop","isUpdate","hoveredItem","getHoverItem","setActiveClass","TimeParse","listBaseOptions","getProperty","HOUR","MINUTE","SECOND","MILLISECOND","DATETIMEPOPUPWRAPPER","DateTimePicker","previousDateTime","isTimePopupOpen","popupObject","dateTimeWrapper","ariaAttribute","keyboardHandler","unBindInputEvents","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isDisable","timeIcon","renderTimeIcon","timeHandler","dateHandler","inputKeyAction","getCldrFormat","isDatePopupOpen","toggle","listCreation","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","setPopupWidth","TimeKeyActionHandle","unWireTimeListEvents","setTimeHover","removeTimeHover","setInputValue","popupElement","getFullDateTime","combineDateTime","minutes","seconds","timeValue","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","hours","milliseconds","tempStartValue","tempMin","tempEndValue","tempMax","getUTCFullYear","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","Encoding","includeBom","emitBOM","encodingType","initBOM","getByteCount","chars","utf8Len","getByteCountInternal","codePoint","isHighSurrogate","codeUnit","toCodepoint","highCodeUnit","lowCodeUnit","charIndex","charCount","byteCount","isUtf8","charCode","getBytes","RangeError","ArrayBuffer","getBytesOfUtf8Encoding","getBytesOfUnicodeEncoding","getBytesOfAnsiEncoding","getString","byteLength","byteCal","getStringOfUtf8Encoding","byteUnicode","getStringofUnicodeEncoding","bufview","charcode","uint","uint16","byteUni","byte16","Save","fileName","buffer","mimeType","getMimeType","Blob","isMicrosoftBrowser","msSaveBlob","downloadLink","saveInternal","hasDownloadAttribute","download","dataUrl_1","URL","createObjectURL","revokeObjectURL","reader_1","FileReader","onloadend","readAsDataURL","StreamWriter","encoding","bufferBlob","bufferText","init","flush","enc","setBomByte","arrayUnicode","uint8","arrayUtf8","utf8","bufferArray","writeLine","arrLiteralCodes","Int16Array","arrLiteralLengths","arrDistanceCodes","arrDistanceLengths","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","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","hash","curMatch","chainLen","niceLen","scan","bestEnd","bestLength","limit","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","isClose","writer","elementCount","minCodes","codeMinCount","codeFrequency","lengthCount","Int32Array","codeCount","codeLength","codes","lengths","lengthTemp","nextCode","bitsCount","bitReverse","reverseBits","blTree","maxCount","minCount","curLen","nextLen","maxRepeatCount","minRepeatCount","currentRepeatCount","currentCodeLength","codesCount","arrTree","n","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","ZipArchiveItem","addDirectory","directoryName","zipArchive","saveAsBlob","blob","skipFileSave","zipData","dirLength","getCompressedData","constructZippedObject","isDirectory","writeZippedContent","crc32Value","compressedData","compressedSize","uncompressedDataSize","compressionType","calculateCrc32Value","readAsArrayBuffer","compressor","currentIndex","nextIndex","zipParts","extFileAttr","writeHeader","localHeader","centralDir","writeCentralDirectory","zipHeader","getModifiedTime","getModifiedDate","localDirLen","cenDirLen","getArrayBuffer","writeFooter","externalFileAttribute","centralLength","localLength","modTime","modiDate","itemName","InternalEnum","Dictionary","toStringFunction","nElements","toStr","pair","previousElement","keysArray","namesOfKeys","index1","pair1","valuesArray","namesOfValues","index2","pair2","containsKey","PdfName","stringStartMark","internalValue","isSaving6","position6","normalizeValue","status6","index6","escapeString","crossTable","newName","stringValue","len_1","ch","delimiters","replacements","Operators","forTest","endObj","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","root","decodeParms","type1","baseFont","subtype","contents","procset","colorSpace","extGState","xObject","bitsPerComponent","dctdecode","blackIs1","predictor","deviceRgb","link","annot","uri","annots","ca","CA","xyz","dest","BM","flatedecode","bBox","form","PdfDictionary","dictionary","position7","primitiveItems","suffix","object","archive","encrypt","dictionaryProperties","freezeChanges","status7","isSaving7","index7","getArchive","setArchive","setEncrypt","modify","getEncrypt","freezer","bChanged","onBeginSave","beginSave","onTemplateBeginSave","pageBeginDrawTemplate","pageBeginSave","onBeginAnnotationSave","annotationBeginSave","onSectionBeginSave","saveEvent","sectionBeginSave","bRaiseEvent","saveItems","SaveSectionCollectionEventHandler","SaveAnnotationEventHandler","SaveSectionEventHandler","SaveTemplateEventHandler","PdfNumber","position5","status5","isSaving5","index5","intValue","floatToString","returnString","PdfArray","startMark","endMark","position9","clonedObject9","internalElements","tempArray","tempNumberArray","pdfNumber","status9","isSaving9","index9","pdfCrossTable","markedChange","tempElement","getItems","newArray","fromRectangle","tempElements","markChanged","removeAt","PdfStream","dicPrefix","dicSuffix","clonedObject2","bCompress","dataStream2","bCompress2","clearStream","internalStream","compressContent","sw","getCompressedString","addFilter","filterName","PdfReferenceHolder","bytesToString","byteArray","output","ForceEncoding","SourceType","PdfHorizontalAlignment","PdfString","bHex","position1","clonedObject1","bDecrypted","isParentDecrypted","isPacked","isFormField","isColorSpace","isHexString","status1","isSaving1","bytesToHex","stringMark","CrossTable","newString","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","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","isEmpty","rgbToString","ifStroking","colour","rgbStrings","toArray","Rgb","grayStringsSroke","grayStringsFill","PointF","SizeF","RectangleF","arg1","arg2","arg3","arg4","pointf","sizef","PdfBrush","PdfSolidBrush","pdfColor","monitorChanges","brush","streamWriter","getResources","currentColorSpace","setColorAndSpace","resetChanges","PdfFontFamily","PdfFontType","PdfWordWrapType","PdfSubSuperScript","FontEncoding","LineType","PdfStringFormat","scalingFactor","internalLineLimit","wordWrapType","Word","verticalAlignment","Top","isRightToLeft","internalCharacterSpacing","internalWordSpacing","leading","clip","pdfSubSuperScript","internalParagraphIndent","firstLineIndent","trailingSpaces","isNoClip","initialLineIndent","StringTokenizer","textValue","currentPosition","getCharsCount","numSymbols","readLine","text2","peekLine","readWord","peekWord","word","read","peek","spaces","whiteSpacePattern","PdfStringLayouter","isOverloadWithPosition","layout","arg5","arg6","arg7","clientSize","doLayout","rectSize","pageHeight","reader","PdfStringLayoutResult","lineResult","lines","lineIndent","getLineIndent","layoutLine","numSymbolsInserted","returnedValue","copyToResult","numInserted","finalizeResult","firstLine","paragraphIndent","getLineHeight","lineSpacing","getLineWidth","layoutLineHeight","lineType","FirstParagraphLine","addToLineResult","NewLineBreak","builder","curLine","curIndent","isSingleWord","curLineWidth","getWrapType","Character","ln","LayoutBreak","LastParagraphLine","layoutLines","breakType","LineInfo","actualSize","lineLimit","expHeight","trimLine","size_1","wordWrap","textRemainder","empty","ObjectStatus","PdfFont","Regular","setStyle","metrics","getHeight","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","blobData","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","tempIndex","tempkey","tempvalue","bForceNew","saveIndirectObject","currentSavingObj","doSaveObject","free","RegisteredObject","dereference","tempOffset","offsetNumber","tempReference","Normal","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","setLeading","setTextRenderingMode","renderingMode","setCharacterSpacing","charSpacing","setWordSpacing","showNextLineText","checkTextParam","writeText","setColorSpace","temparg1","op","matrix","opcode","updateY","string","writeComment","forStroking","setLineDashPattern","patternOffset","setLineDashPatternHelper","tempPattern","miterLimit","setLineCap","lineCapStyle","setLineJoin","lineJoinStyle","PdfPen","dashOffsetValue","penDashPattern","pdfDashStyle","Solid","pdfLineCap","pdfLineJoin","penWidth","internalMiterLimit","setBrush","Custom","Dash","Dot","DashDot","DashDotDot","sBrush","pdfBrush","currentPen","dashControl","lineJoin","lineCap","pen","getPattern","dashOffset","dashPattern","PdfTransformationMatrix","radDegFactor","transformationMatrix","Matrix","multiply","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","currentPage","pageNumberFieldLocation","pageNumberField","PdfGraphics","previousTextRenderingMode","Fill","previousCharacterSpacing","previousWordSpacing","previousTextScaling","procedureSets","isNormalRender","isUseFontSize","isItalic","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","arg8","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","layoutedRectangle","Center","Right","lineAlignment","Middle","Bottom","setLayer","pageSave","performDraw","applyStringSettings","horizontalScalingFactor","subSuperScript","SubScript","getDescent","getAscent","resultHeight","remainingString","drawLayoutResult","underlineStrikeoutText","getNextPage","section","getPages","setClip","tm","getTextRenderingMode","cs","ws","textHeight","boundsHeight","vAlignShift","lineInfo","hAlignShift","drawAsciiLine","justifyLine","boundsWidth","hasWordSpacing","whitespacesCount","wordSpace","initializeCoordinates","justifyStyle","Justify","goodWidth","hasSpaces","goodLineBreakStyle","underline","strikeout","linePen","createUnderlineStikeoutPen","vShift","underlineYOffset","strikeoutYOffset","FillStroke","Stroke","ClipFlag","layoutBounds","firstParagraphLine","Left","lastDocumentCS","lastGraphicsCS","initCurrentColorSpace","penControl","brushControl","fontControl","colorspace","curSubSuper","prevSubSuper","fontName","setTransparency","trasparencies","transp","td","TransparencyData","name_3","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","getActualBounds","pageSettings","PdfCollection","parentLayerCount","optionalContent","PdfPageBase","lPage","parseLayers","firstArgument","secondArgument","addLayer","insertLayer","loadedPage","saveStream","restoreStream","saveData","PdfTemplate","writeTransformation","tempSize","templateSize","PdfResources","addType","addSubType","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","decodedString","imageDataAsNumberArray","compress","getColorSpace","getDecodeParams","decodeParams","mPngHeader","GIF_HEADER","BMP_HEADER","PdfUnitConverter","dpi","updateProportionsHelper","convertUnits","convertFromPixels","convertToPixels","proportions","pixelPerInch","horizontalResolution","verticalResolution","PdfImage","imageWidth","imageHeight","imagePhysicalDimension","getPointSize","dpiX","dpiY","ucX","ucY","ptWidth","Pixel","Point","ptHeight","PdfBitmap","imageStatus","loadImage","initializeAsync","decoder","baseDictionary","getNames","primitive","names","sName","generateName","pdfNames","fonts","procedureSetName","procSets","removeFont","Guid","getNewGuidString","xobjects","savable","transDic","parentXObjects","hasSameImageStream","oldReference","randomString","randomNumber","defLayerIndex","modified","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","doc","drawPageTemplates","containsTemplates","backLayer","drawTemplates","frontLayer","PageAddedEventArgs","PdfSectionPageCollection","PdfDocumentTemplate","leftTemplate","checkElement","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","PdfSectionTemplate","rightValue","bottomValue","stampValue","PdfSection","pageAdded","pdfPages","initialSettings","sectionCollection","pagesReferences","pageTemplate","pagesCollection","pointToNativePdf","setPageSettings","PageSettingsState","pageCount","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","getPage","sectionStartIndex","numPages","PdfCacheCollection","referenceObjects","pdfFontCollection","createNewGroup","isMerging","defaultMargin","documentPageCollection","cacheCollection","defaultStandardFont","PdfStandardFont","Helvetica","Cmyk","GrayScale","checkPagesPresence","PdfFontMetrics","lineGap","ascent","descent","getLineGap","clearTypeFonts","clearTypeFontCollection","subScriptSizeFactor","SuperScript","superscriptSizeFactor","widthTable","WidthTable","internalWidthTable","StandardWidthTable","widths","PdfStandardFontMetricsFactory","getMetrics","getHelveticaMetrics","Courier","getCourierMetrics","TimesRoman","getTimesMetrics","Symbol","getSymbolMetrics","ZapfDingbats","getZapfDingbatsMetrics","subSuperScriptFactor","helveticaBoldItalicAscent","helveticaBoldItalicDescent","postScriptName","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","createInternals","WinAnsiEncoding","charOffset","PdfAnnotation","textBrush","textFont","internalColor","darkness","nativeRectangle","initialHeight","tempLoacation","PdfLinkAnnotation","PdfActionLinkAnnotation","pdfAction","getSetAction","PdfDocumentLinkAnnotation","pdfDestination","PdfLayoutBreakType","PdfDestinationMode","ElementLayouter","layoutElement","isBoundsChanged","layoutInternal","PdfLayoutFormat","baseFormat","break","paginateBounds","boundsSet","usePaginateBounds","layoutType","Paginate","FitPage","layoutPaginateBounds","PdfLayoutParams","layoutFormat","PdfLayoutResult","PdfLayoutElement","bEmbedFonts","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","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","destinationLocation","initializePrimitive","simplePage","FitToPage","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","leftPad","rightPad","topPad","bottomPad","PdfHorizontalOverflowType","PdfGridStyleBase","gridBackgroundBrush","gridTextBrush","gridTextPen","gridFont","PdfGridStyle","gridBorderOverlapStyle","Overlap","bAllowHorizontalOverflow","gridHorizontalOverflowType","LastPage","gridCellSpacing","gridCellPadding","PdfGridCellStyle","gridCellBorders","default","PdfGridRowStyle","gridRowBackgroundBrush","setBackgroundBrush","getCell","backgroundBrush","gridRowTextBrush","setTextBrush","gridRowTextPen","setTextPen","textPen","gridRowFont","gridRowBorder","setBorder","borders","setParent","Theme","PdfGridCell","cellWidth","cellHeight","finsh","rowSpanRemainingHeight","gridRowSpan","colSpan","gridRow","internalIsCellMergeContinue","internalIsRowMergeContinue","internalIsCellMergeStart","internalIsRowMergeStart","remaining","objectValue","rowSpanExists","cellStyle","measureHeight","columnSpanExists","isComplete","measureWidth","layouter","getTextFont","webLink","cellPadding","cellSpacing","drawCellBackground","getBackgroundBrush","adjustContentLayoutArea","returnBounds","rowSpan","cancelSubsequentSpans","allowHorizontalOverflow","rowOverflowIndex","adjustOuterLayoutArea","getTextPen","getTextBrush","strFormat","getStringFormat","innerLayoutArea","imageBounds","drawCellBorders","borderOverlapStyle","Inside","p1","p2","Square","currentColIndex","columnSpan","totalWidth","compWidth","getColumn","currentRowIndex","rows","rowCollection","totalHeight","getHeader","getRow","rowMergeComplete","calculateWidth","cellIndex","PdfGridCellCollection","tempcell","PdfGridColumn","columnWidth","isCustomWidth","PdfGridColumnCollection","internalColumns","measureColumnsWidth","initialWidth","isPageWidth","getDefaultWidths","subFactor","PdfGridRow","gridRowOverflowIndex","isRowHeightSet","isRowMergeComplete","pdfGrid","bRowSpanExists","gridCells","rowStyle","gridRowBreakHeight","bColumnSpanExists","PdfGridRowCollection","addRow","temprow","PdfGridHeaderCollection","PdfGridLayoutFormat","PdfGrid","gridSize","isRearranged","pageBounds","listOfNavigatePages","columnRanges","breakRow","beginCellDraw","endCellDraw","beginPageLayout","endPageLayout","bRepeatHeader","gridColumns","gridRows","gridHeaders","gridInitialWidth","gridStyle","pageWidth","childGrid","measure","isGridLayouter","setSpan","gridLocation","currentCellIndex","rowCount","colCount","isCellMergeContinue","isRowMergeContinue","isCellMergeStart","isRowMergeStart","getFormat","currentPageBounds","currentGraphics","isChildGrid","hType","horizontalOverflowType","determineColumnDrawRanges","rowWidth","internalWidth","internalHeight","isCorrectWidth","isCorrectHeight","startColumn","endColumn","cellWidths","availableWidth","subWidths","layoutedPages","startPage","cellBounds","cellStartIndex","cellEndIndex","returnObject","raiseBeforePageLayout","drawRow","repeatRow","originalHeight","repeatRowIndex","rowResult","isFinish","OnePage","repeatHeader","i_2","maximumCellBoundsWidth","rowLayoutBoundsWidth","NextPage","reArrangePages","raisePageLayouted","nextPage","pageindex","PdfGridLayoutResult","ReCalculateHeight","currentRow","raiseBeginPageLayout","PdfGridBeginPageLayoutEventArgs","startRowIndex","PdfGridEndPageLayoutEventArgs","raiseEndPageLayout","result_1","RowLayoutResult","rowHeightWithSpan","maxSpan","currRowIndex","rowMaxHeight","nextRow","calculatedHeight","rowBreakHeight","location_2","cancelSpans","CheckIfDefaultFormat","cellstyle","RaiseBeforeCellDraw","RaiseAfterCellDraw","defaultFormat","measureTrailingSpaces","noClip","rowIndex","raiseBeginCellDraw","PdfGridBeginCellDrawEventArgs","raiseEndCellDraw","PdfGridEndCellDrawEventArgs","GridCellEventArgs","gridRowIndex","gridCellIndex","gridBounds","bSkip","PdfCancelEventArgs","isCancel","BeginPageLayoutEventArgs","EndPageLayoutEventArgs","nextPdfPage","startRow","layoutedBounds","bIsFinished","axisLabelFont","axisTitleFont","chartTitleFont","crosshairLabelFont","tooltipLabelFont","legendLabelFont","stripLineLabelFont","Connector","Font","Border","ChartArea","Margin","Indexes","CornerRadius","seriesIndex","EmptyPointSettings","TooltipSettings","Mean","verticalStandardMean","verticalSquareRoot","horizontalStandardMean","horizontalSquareRoot","verticalMean","horizontalMean","PolarArc","currentXPosition","CustomizeOption","StackValues","startValues","endValues","RectOption","CircleOption","PolygonOption","Thickness","PointData","lierIndex","AccPointData","ControlPoints","controlPoint1","controlPoint2","DoubleRange","mStart","mEnd","Double","calculateNumericNiceInterval","actualDesiredIntervalsCount","getActualDesiredIntervalsCount","desiredIntervals","minInterval","intervalDivs","currentInterval","getActualRange","initializeDoubleRange","actualRange","doubleRange","POSITIVE_INFINITY","NEGATIVE_INFINITY","calculateRangeAndInterval","calculateRange","applyRangePadding","calculateVisibleLabels","setRange","series_1","paddingInterval","rangePadding","findMinMax","yMin","yMax","xMax","getRangePadding","findAdditional","findNormal","updateActualRange","calculateVisibleRange","zoomPosition","enableAutoIntervalOnZooming","triggerRangeRender","tempInterval","isCustom","intl","useGroupingSeparator","triggerLabelRender","getMaxLabelWidth","isStack100","legendRender","textRender","pointRender","seriesRender","axisLabelRender","axisRangeCalculated","axisMultiLabelRender","tooltipRender","chartMouseMove","chartMouseClick","chartMouseLeave","chartMouseDown","chartMouseUp","zoomComplete","dragComplete","annotationRender","ChartAnnotationSettings","LabelBorder","MultiLevelCategories","StripLineSettings","MultiLevelLabels","Row","axes","nearSizes","farSizes","computeSize","findTickSize","crossInAxis","findLabelSize","lineStyle","MajorGridLines","MinorGridLines","AxisLine","MajorTickLines","MinorTickLines","CrosshairTooltip","Axis","axisBottomLine","crossAt","updatedRect","multiLevelLabelHeight","crossAxis","tickPosition","isInside","majorTickLines","innerPadding","titleSize","labelSize","maxLabelSize","placeNextToAxisLine","findDifference","updateCrossValue","baseRange","maximumLabels","argsData","VisibleLabels","pointX","previousEnd","isIntersect","labelIntersectAction","rotatedLabel","edgeLabelPlacement","findMultiRows","multiLevelLabelModule","multiLevelLabels","getMultilevelLabelsHeight","currentX","store","getModule","baseModule","originalText","CartesianAxisLayoutPanel","chartModule","measureAxis","seriesClipRect","initialClipRect","leftSize","rightSize","topSize","bottomSize","measureRowAxis","measureColumnAxis","calculateAxisSize","refreshAxis","calculateRowSize","arrangeAxis","measureDefinition","computedHeight","calculateColumnSize","computedWidth","definition","axis_1","nearCount","farCount","len_2","computedTop","plotOffset","len_3","len_4","computedLeft","actualIndex","axisCollections","axis_2","verticalAxes","getActualRow","pushAxis","horizontalAxes","getActualColumn","crossesAt","isTransposed","crossesInAxis","updateCrossAt","primaryYAxis","dateFormatter","labels","axisCollection","actualLength","columnIndex","rowTop","remainingHeight","columnLeft","remainingWidth","renderAxes","outsideElement","axisElement","axisLineElement","findAxisPosition","drawAxisLine","majorGridLines","drawXAxisGridLine","drawXAxisLabels","drawXAxisBorder","drawXAxisTitle","drawYAxisGridLine","drawYAxisLabels","drawYAxisBorder","drawYAxisTitle","drawBottomLine","isRow","definitionName","optionsLine","plotX","plotY","stroke-dasharray","themeStyle","minorDirection","pointY","majorGrid","majorTick","minorGird","minorTick","tickSize","axisLineSize","ticksbwtLabel","isBorder","minorGridLines","minorTickLines","minorTicksPerInterval","drawAxisMinorLine","renderGridLine","renderTickLine","chartArea","elementSize","isLabelInside","isOpposed","createZoomingLabel","gap","endY","labelBorder","endX","createAxisBorderElement","renderYAxisMultiLevelLabels","description","labelIndex","logStart","coor","isTickInside","logInterval","logPosition","ticksX","ticksY","findLogNumeric","labelPadding","rotateSize","diffHeight","yLocation","intervalLength","islabelInside","anglePadding","findAxisLabel","axisRect","renderXAxisMultiLevelLabels","borderElement","findParentNode","zoomElement","ChartData","currentPoints","previousPoints","getData","drawType","isRectSeries","marker","mouseX","mouseY","getRectPoint","isSelected","selectionMode","selectionModule","rectPoints","fromCenterX","fromCenterY","clickAngle","distanceFromCenter","arcAngle","regionData","regions","chartAreaType","checkRegionContainsPoint","regionRect","region","getClosest","xData","xData_1","getClosestX","DataLabelSettings","MarkerSettings","Points","symbolLocations","Trendline","setDataSource","trendLineModule","initDataSource","visibleSeriesCount","ErrorBarCapSettings","ChartSegment","ErrorBarSettings","SeriesBase","currentViewData","processJsonData","textMappingName","Series","dataLabel","processWaterfallData","sizeMax","getSeriesType","dataPoint","pushCategoryData","pushData","setEmptyPoint","isArea","findSplinePoint","xName","volume","interior","pointColorMapping","findVisibility","emptyPointSettings","yData","getAverage","yValues","setXYMinMax","setHiloMinMax","isIndexed","refreshDataManager","dataModule","generateQuery","dataManagerSuccess","isRemoteData","recordsCount","refreshChart","refreshTechnicalIndicator","trendlines","refreshBound","drawPoints","delayedAnimation","refreshAxisLabel","findSeriesCollection","isStack","rowSeries","_d","_e","_f","_g","rectSeriesInChart","calculateStackedValue","isStacking100","columnItem","calculateStackingValues","stackingGroup","lastValue","lastPositive","lastNegative","frequencies","findFrequencies","seriesCollection_1","pointsLength","percent","stackedValues","seriesCollection_2","renderSeries","createSeriesElements","errorBarModule","dataLabelModule","appendSeriesElement","seriesElements","performAnimation","elementId","explodeValue","markerHeight","markerWidth","clipRectElement","symbolElement","seriesElement","clip-path","errorBarElement","dataLabelElements","shapeElement","animateSeries","doAnimation","doErrorBarAnimation","markerRender","doMarkerAnimation","doDataLabelAnimation","setPointColor","setBorderColor","Data","initDataManager","MarkerExplode","mouseMoveHandler","crosshair","markerMove","startMove","explodeSeries","shared","chartAxisLayoutPanel","pointData","chartSeries","enableTooltip","removeHighlightedMarker","markerExplode","drawTrackBall","seriesMarker","symbolId","borderColor","colorValue","Marker","renderMarker","shapeOption","isBoxPlot","markerClipRect","getRangeLowPoint","markerElements","incFactor","lowPoint","LegendSettings","BaseLegend","columnCount","pageButtonSize","pageXCollections","maxColumns","isTrimmed","legend","legendSettings","legendID","isChartControl","calculateLegendBounds","legendBounds","library","getLegendBounds","getLocation","setBounds","maxItemHeight","legendHeight","legendWidth","alignLegend","legendSize","renderLegend","firstLegend","findFirstLegendPosition","legendCollections","shapeHeight","legendGroup","legendTranslateGroup","createLegendElements","legendSeriesGroup","shapeWidth","textOptions","totalPages","textPadding","shapePadding","previousLegend","legendOption","generateId","getRenderPoint","renderSymbol","renderText","toggleVisibility","isPaging","renderPagingElements","legendCollection","legendCollection_1","legendItemsGroup","clippath","symbolColor","markerShape","symbolOption","markerVisibility","fontcolor","textStyle","textOption","paginggroup","iconSize","clipPathHeight","pageTextElement","translatePage","pagingText","pageNumber","changePage","pageText","clearTooltip","LegendOptions","TechnicalIndicator","targetSeries","ExportUtils","resizeTo","screen","availWidth","availHeight","htmlContent","getHTMLContent","export","isDownload","svgData","XMLSerializer","serializeToString","triggerDownload","image_1","ctx_1","imageString","msSaveOrOpenBlob","msToBlob","bubbles","cancelable","CrosshairSettings","ZoomSettings","Chart","initPrivateVariable","refreshDefinition","tooltipModule","createChartSvg","calculateAreaType","calculateVisibleSeries","initTechnicalIndicators","initTrendLines","calculateVisibleAxis","getLocalizedLabel","legendModule","getLegendOptions","isCalculateStacking","rectCount","renderElements","renderBorder","renderTitle","renderAreaBorder","renderSeriesElements","applyZoomkit","performSelection","setSecondaryElementPosition","renderAnnotation","yAxisElements","stripLineModule","renderStripLine","svgRect","initializeModuleElements","dataLabelCollections","indicators","indicatorElements","hasTrendlines","trendLineElements","isTrendline","tooltipDiv","initializeIndicator","initializeTrendLine","appendElementsAfterSeries","indicator","createIndicatorElements","getTrendLineElements","zoomModule","isZoomed","zoomSettings","enablePan","performedUI","applyZoomToolkit","annotationModule","renderAnnotations","selectedDataIndexes","invokeSelection","redrawSelection","initializeDataModule","techIndicator","titleHeight","trendIndex","trendLine","sourceIndex","initSeriesCollection","yAxisName","polarSeriesModule","radarSeriesModule","isPanning","isAxisZoomed","series_2","initAxis","isSeries","seriesName","palettes","addSeries","removeSeries","removeSvg","stopEvent","chartOnMouseDown","mouseMove","mouseEnd","chartOnMouseClick","chartRightClick","mouseLeave","chartResize","longPress","crosshairModule","pointerType","zooming","disableScroll","enableSelectionZooming","enableMouseWheelZooming","enablePinchZooming","msTouchAction","msContentZooming","msUserSelect","webkitUserSelect","isOrientation","setMouseXY","touchArg","chartOnMouseMove","chartOnMouseLeave","isChartDrag","pointClick","triggerPointEvent","pointMove","titleTooltip","axisTooltip","texts","categories","mouseDownX","previousMouseMoveX","mouseDownY","previousMouseMoveY","isDoubleTap","threshold","chartOnMouseUp","setLocaleConstants","defaultLocalConstants","setAnnotationValue","annotationIndex","processAnnotation","ZoomIn","ZoomOut","Pan","Reset","ResetZoom","enableAnnotation","errorBarVisible","dataLabelEnable","isLegend","currentModule","findIndicatorModules","findTrendLineModules","findAxisModule","datetimeEnabled","categoryEnabled","logarithmicEnabled","striplineEnabled","dateTimeCategoryEnabled","multiLevelEnabled","axisCollections_1","findStriplineVisibility","stripLines","macdEnable","bandEnable","isLine","isSpline","markerEnable","trendline","striplines","striplines_1","removeLength","pinchTarget","definitions","definitions_1","axisChange","refreshBounds","crosshairTooltip","isMultiSelect","NiceInterval","calculateDateTimeNiceInterval","totalDays","actualIntervalType","intervalType","getSkeleton","DateTime","datetimeInterval","getYear","getHour","endMinute","endSecond","endYear","endMonth","endDay","increaseDateTimeInterval","alignRangeStart","skeletonType","sDate","intervalSize","sResult","Category","Logarithmic","logEnd","calculateLogNiceInterval","axisFormat","isCustomFormat","DateTimeCategory","axisSize","sameInterval","sameValue","StripLine","measureStripLine","stripline","actualStart","actualEnd","getFromTovalue","startFromAxis","findValue","getToValue","striplineGroup","axes_1","renderRectangle","textMid","ty","tx","getTextStart","horizontalAlignment","invertAlignment","xy","LineBase","improveChartPerformance","tempPoints","xVisibleRange","yVisibleRange","seriesPoints","areaBounds","xTolerance","yTolerance","prevXValue","prevYValue","xVal","yVal","seriesPoints_1","currentPoint_1","getLineDirection","firstPoint","secondPoint","getPointLocation","point1","point2","appendLinePath","pathElement","doProgressiveAnimation","strokeDashArray","pathLength","getTotalLength","storePointLocation","doLinearAnimation","elementHeight","elementWidth","xCenter","yCenter","LineSeries","prevPoint","getCoordinate","visiblePoints","visiblePoints_1","isClosed","ColumnBase","getSideBySideInfo","enableSideBySidePlacement","getSideBySidePositions","seriesSpacing","columnSpacing","pointSpacing","getRectangle","findRectPosition","vSeries","updateSymbolLocation","updateYRegion","updateXRegion","calculateRoundedRectPath","topLeft","topRight","bottomLeft","bottomRight","rectElements","animateRect","isPlot","ColumnSeries","sideBySideInfo","pointColumn","MultiColoredSeries","getAreaPathDirection","startPath","getAreaEmptyDirection","isXSegment","segments","segment","getAxisValue","sortSegments","chartSegments","segmentAxis","access","applySegmentAxis","includeSegment","createClipRect","isX","isRequired","startPointLocation","endPointLocation","segmentValue","AreaSeries","currentXValue","BarSeries","pointBar","PolarRadarPanel","drawYAxisLine","vector","vector2","minorGirdLine","xLoc","yLoc","tickXSize","tickYSize","labelText","firstLabelX","lastLabelX","textAnchor","tickOptions","gridOptions","PolarSeries","columnDrawTypeRender","itemCurrentXPos","pointStartAngle","pointEndAngle","dStartX","dStartY","dEndX","dEndY","sumofYValues","rangeInterval","getSeriesPosition","doPolarRadarAnimation","animateElement","chartcenterX","chartcenterY","RadarSeries","StackingBarSeries","stackedValue","pointStack","CandleSeries","centerRegion","tickRegion","getPathString","triggerPointRenderEvent","drawCandle","getCandleColor","enableSolidCandles","bullFillColor","bearFillColor","topRect","midRect","candleElement","StackingColumnSeries","StepLineSeries","pathOptions","lineLength","StepAreaSeries","StackingAreaSeries","polarAreaType","lineDirection","stackedvalue","previousSeries","getPreviousSeries","ScatterSeries","RangeColumnSeries","rangePoint","WaterfallSeries","originValue","prevEndValue","currentEndValue","prevRegion","intermediateOrigin","isSum","isIntermediateSum","totalSum","isSumIndex","currentRegion","prevLeft","currentLeft","prevBottom","currentBottom","connector","intermediateSumIndexes","sumIndexes","summaryFillColor","negativeFillColor","intermediateSum","sumIndex","HiloSeries","HiloOpenCloseSeries","highLowRect","updateTickRegion","open_1","close_1","drawHiloOpenClosePath","RangeAreaSeries","command","closed","highPoint","closeRangeAreaPath","BubbleSeries","segmentRadius","percentChange","maxRadius","minRadius","maximumSize","bubblePoint","SplineBase","splinePoints","filterEmptyPoints","findSplineCoefficients","getPreviousIndex","getControlPoints","getNextIndex","coefficient1","coefficient2","coefficient3","dy1","dy2","interPoint","slopeLength","ySpline","ySplineDuplicate","dx","dy","slope","cardinalSplineTension","splineType","ySpline1","ySpline2","ySplineDuplicate1","ySplineDuplicate2","deltaX2","SplineSeries","pt1","pt2","bpt1","bpt2","SplineAreaSeries","controlPt1","controlPt2","startPoint1","TechnicalAnalysis","signalLine","setSeriesProperties","indicatorElement","getDataPoint","sourcePoint","macdPositiveColor","macdNegativeColor","getRangePoint","setSeriesRange","SmaIndicator","smaPoints","validData","signalSeries","period","EmaIndicator","emaPoints","prevAverage","TmaIndicator","tmaPoints","signalSeries_1","validData_1","smaValues","k_1","AccumulationDistributionIndicator","sourceSeries","adPoints","calculateADPoints","AtrIndicator","calculateATRPoints","highLow","highClose","lowClose","trueRange","MomentumIndicator","upperLine","upperCollection","signalCollection","upperSeries","RsiIndicator","showZones","lowerLine","lowerCollection","overBought","overSold","prevClose","gain","loss","close_2","StochasticIndicator","periodLine","lowerSeries","periodCollection","calculatePeriod","kPeriod","smaCalculation","dPeriod","pointCollection","lowValues","highValues","closeValues","modifiedSource","mins","maxs","MIN_VALUE","BollingerBands","rangeArea","bandColor","enableBand","bandCollection","rangeAreaSeries","deviationSum","multiplier","standardDeviation","deviations","bollingerPoints","sma","lowerBand","upperBand","j_1","mb","lb","ub","MacdIndicator","macdType","macdSeries","macdLine","histogramSeries","macdLineSeries","fastPeriod","slowPeriod","macdCollection","histogramCollection","shortEMA","calculateEMAValues","longEMA","macdValues","getMACDVales","getMACDPoints","signalEMA","getSignalPoints","getHistogramPoints","initialEMA","emaValues","emaPercent","emaAvg","macdPoints","dataMACDIndex","macdIndex","signalEma","dataSignalIndex","signalIndex","shortEma","longEma","dataHistogramIndex","histogramIndex","Trendlines","trendLineSeries","legendShape","createTrendLineElements","trendLineElement","trendPoint","findSlopeIntercept","xAvg","yAvg","xyAvg","xxAvg","yyAvg","intercept","trendlineSeries","setLinearRange","setExponentialRange","setMovingAverageRange","setPolynomialRange","setPowerRange","setLogarithmicRange","splineSeriesModule","slopeIntercept","getExponentialPoints","xLogValue","yLogValue","xPointsLgr","getLogarithmicPoints","xPolyValues","yPolyValues","getPolynomialPoints","powerPoints","getPowerPoints","getLinearPoints","xAvgValues","getMovingAveragePoints","slopeInterceptLog","midPoint","pts","x1Log","backwardForecast","y1Log","x2Log","y2Log","x3Log","forwardForecast","y3Log","slopeInterceptPower","x3","y3","polynomialOrder","polynomialSlopes","subIndex","numArray","newIndex","nIndex","num2","nIndex2","nnIndex","nnIndex2","gaussJordanElimination","getPoints","nullCount","slopeInterceptLinear","x1Linear","y1Linear","x2Linear","y2Linear","slopeInterceptExp","ptsExp","getPolynomialYValue","slopes","numArray1","numArray2","numArray3","num1","index4_1","num3","num4","iindex4","iandex4","iindex1","iindex2","Crosshair","mouseLeaveHandler","removeCrosshair","isIos","isIos7","disableTrackTooltip","horizontalCross","verticalCross","crossGroup","stopAnimation","valueX","valueY","axisTooltipGroup","renderCrosshairLine","renderAxisTooltip","axisGroup","textElem","getAxisText","tooltipLocation","isTop","isBottom","isLeft","isRight","labelValue","tooltipRect","boundsX","boundsY","crosshairInterval","BaseTooltip","markerPoint","getTooltipElement","isTooltip","inverted","updateTemplateFn","formattedText","textElements","groupElement","isFirst","isChart","areaRect","cartesain","removeHighlight","highlightPoints","renderTooltipElement","tipLocation","sharedTooltipLocation","seriesTooltipLocation","headerSize","pathElement_1","pointRect","enableAnimation","updateDiv","animateTooltipDiv","shadowElement","defElement","changeText","Side","isRender","tspanOption","subWidth","tspanStyle","headerSpace","isColumn","width_1","firstElement","symbolLocation","clipX","clipY","tooltipGroup","rectOpacity","isRect","endAnimation","highlightPoint","highlight","currenDiff","firstText","removeText","toolTipInterval","removeTooltip","renderGroupedTooltip","renderSeriesTooltip","findHeader","parseTemplate","markerSide","findData","getTooltipText","getSymbolLocation","getTemplateText","drawMarker","findMouseValue","getBoxLocation","formatPointValue","extraPoints","markerGroup","findColor","dataValue","getPrototypeOf","isXPoint","isYPoint","getIndicatorTooltipFormat","data_2","Toolkit","selectionColor","fillColor","createPanButton","panElements","pan","createZoomButton","zoomElements","zoom","createZoomInButton","polygonDirection","zoomInElements","elementOpacity","zoomIn","createZoomOutButton","zoomOutElements","zoomOut","createResetButton","toolkitElements","touchMoveList","touchStartList","zoomInOutCalculation","applySelection","zoomFactor_1","zoomPosition_1","cumulative_1","browserName","wheelEvent","toolkit","zoomingRect","zoomAxes","zoomkitOpacity","isIOS","renderZooming","calculateZoomAxesRange","doPan","drawZoomingRectangle","currentScale","translateX","translateY","enableDeferredZooming","setTransform","performZoomRedraw","doZoom","previousZF","previousZP","currentZF","currentZP","zoomRect","previousZoomFactor","previousZoomPosition","currentZoomFactor","currentZoomPosition","performMouseWheelZooming","cumulative","performPinchZooming","translateXValue","translateYValue","pinchRect","elementOffset","touchDown","touchMove","touch0StartX","touch0StartY","touch0EndX","touch0EndY","touch1StartX","touch1StartY","touch1EndX","touch1EndY","calculatePinchZoomFactor","selectionMin","selectionMax","rangeMin","rangeMax","axisTrans","actualMin","actualDelta","transX","transY","isPinch","xAxisLoc","yAxisLoc","axisRange","showZoomingToolkit","outerElement","toolboxItems","toolbarItems","xPosition","currentItem","zoomToolkitMove","zoomToolkitLeave","showToolkit","chartMouseWheel","mouseCancelHandler","addTouchPointer","touchList","pointerId","BaseSelection","seriesStyles","seriesclass","styleId","selectionStyle","unselected","concatIndexes","userIndexes","localIndexes","checkVisibility","selectedIndexes","uniqueSeries","selectedIndexes_1","uniqueSeries_1","addSvgClass","elementClassName","removeSvgClass","getChildren","Selection","completeSelection","calculateSelectedElements","mousedown","initPrivateVariables","closeIconId","draggedRectGroup","draggedRect","isSeriesMode","selectDataIndex","generateStyle","indexes","indexes_1","getElementByIndex","getClusterElements","clusters","findElements","getSeriesElements","blurEffect","clusterSelection","selectedElements","removeMultiSelectEelments","getSelectionClass","removeStyles","addOrRemoveIndex","applyStyles","toEquals","chartId","checkSelectionElements","parentClassName","selectElement","checkSeriesOnly","oldMode","removeSelectedElements","legendSelection","seriesStyle","isBlurEffectNeeded","elements_3","seriesElements_1","calculateDragSelectedElements","dragRect","axisOffset","removeOffset","selectedPointValues","selectedSeriesValues","xAxisOffset_1","yAxisOffset_1","isCurrentPoint","createCloseButton","selectedDataValues","drawDraggingRect","cartesianLayout","dragGroup","removeDraggedElements","changeCursorStyle","resizingSelectionRect","tapped","resize","findResizeMode","resizing","chartSvgObject","cursorStyle","resizeMode","resizeEdges","isResize","rectelement","seriesElements_2","draggedRectMoved","grabbedPoint","doDrawing","dragging","rectGrabbing","getDragRect","DataLabel","errorHeight","commonId","calculateErrorHeight","chartBackground","positiveHeight","negativeHeight","rgbValue","contrast","yAxisInversed","labelLength","fontBackground","isDataLabelShape","createDataLabelTemplate","calculateTextPosition","isShape","vAxis","hAxis","labelRegion","getLabelLocation","locationY","alignmentValue","calculateAlignment","calculateRectPosition","locationX","calculatePathPosition","calculatePolarRectPosition","columnRadius","labelLocation","textLength","extraSpace","calculateRectActualPosition","calculateTopAndOuterPosition","calculatePathActualPosition","labelRect","isOverLap","finalPosition","updateLabelLocation","markerSize","positionIndex","intersectY","shapeElements","textNode","ErrorBar","renderErrorBar","capId","errorbar","errorBarCap","errorDirection","point_1","errorX","errorY","verticalError","horizontalError","capOption","capPath","findLocation","horizontalPositiveError","verticalPositiveError","horizontalNegativeError","verticalNegativeError","getErrorDirection","calculateFixedValue","calculatePercentageValue","calculateStandardDeviationValue","getMean","meanCalculation","calculateStandardErrorValue","calculateCustomValue","getHorizontalDirection","mid","errorMode","capLength","capDirection","getVerticalDirection","getBothDirection","pathH","pathV","paths","verStandardMean","horStandardMean","verSquareRoot","horSquareRoot","sumOfX","sumOfY","errorBarClipRect","errorBarElements","Legend","visibleSeriesCollection","visibleSeriesCollection_1","extraHeight","extraWidth","legendEventArgs","columnHeight","prevLegend","previousBound","availwidth","LegendClick","refreshSeries","legendItemsId_1","AnnotationBase","setAnnotationPixelValue","accumulationBound","setAnnotationPointValue","isLog","xAnnotation","setAccumulationPointValue","annotationElement","coordinateUnits","setElementStyle","accPoint","setAlignmentValue","ChartAnnotation","BoxAndWhiskerSeries","centerRegion_1","findBoxPlotValues","boxPlotMode","updateTipRegion","renderBoxAndWhisker","tipRegion","updateTipSize","midWidth","midHeight","topWidth","topHeight","showMean","yCount","quartile","getExclusiveQuartileValue","getInclusiveQuartileValue","getQuartileValues","getMinMaxOutlier","percentile","integerRank","fractionRank","isEvenList","halfLength","lowerQuartileArray","upperQuartileArray","rangeIQR","MultiColoredAreaSeries","startRegion","rendered","generatePathOption","MultiColoredLineSeries","MultiLevelLabel","xAxisPrevHeight","xAxisMultiLabelHeight","yAxisPrevHeight","yAxisMultiLabelHeight","multiLevelLabelsHeight","prevHeight","axisValue","multiLevel","categoryLabel","maximumTextWidth","pathRect","isOutside","triggerMultiLabelRender","renderXAxisLabelBorder","multiElements","createBorderElement","padding1","padding2","value1","groupLabel","renderYAxisLabelBorder","clipId","axisId","borderIndex","AccumulationAnnotationSettings","AccumulationDataLabelSettings","AccPoints","labelVisible","AccumulationSeries","sumOfPoints","accumulation","resultData","seriesCounts","findSumOfPoints","sumOfClub","clubValue","groupTo","setPoints","isClub","pushPoints","lastGroupTo","clubPoint","setAccEmptyPoint","seriesGroup","renderPoints","datalabelGroup","accumulationDataLabelModule","renderDataLabel","findMaxBounds","labelBound","pieSeriesModule","accumulationLegendModule","explodeDistance","pointId","renderPoint","getSeriesElement","findAreaRect","totalbound","bound","AccumulationBase","pieCenter","pieRadius","pieLabelRadius","labelRadius","isCircular","processExplode","explodePoints","deExplodeAll","invokeExplode","explodeAll","explodeIndex","accumulationSelectionModule","deExplodeSlice","explode","midAngle","isExplode","explodeSlice","sliceId","setTranslate","setElementTransform","PieBase","initProperties","initAngles","connectorStyle","explodeOffset","findCenter","defaultLabelBound","accumulationRect","getSeriesBound","accumulationRectCenter","getRectFromAngle","nextQuandrant","lastQuadrant","getDoughnutPath","getPiePath","PieSeries","getPathOption","groupId","clipslice","AccumulationChart","accBaseModule","isIE11Pointer","accumulationMouseMove","accumulationMouseEnd","accumulationMouseStart","accumulationOnMouseClick","accumulationRightClick","accumulationMouseLeave","accumulationResize","previousSize","currentSize","createPieSvg","createSecondaryElement","doGrouppingProcess","processSelection","tooltipParent","getSmartLegendLocation","refreshPoints","findDatalabelVisibility","refreshElements","TriangularBase","actualChartArea","triangleSize","neckSize","neckWidth","neckHeight","initializeSizeRatio","gapRatio","coEff","spacing","yRatio","heightRatio","setLabelLocation","labelOffset","findPath","locations","FunnelSeries","getSegmentData","endTop","endBottom","endMin","bottomY","emptySpaceAtLeft","seriesTop","line3","line6","PyramidSeries","pyramidMode","calculateSurfaceSegments","sumOfValues","gapHeight","preSum","getSurfaceHeight","currY","coef","surface","solveQuadraticEquation","root1","root2","sd","AccumulationLegend","titleRect","totalRowCount","getMaxColumn","maxPageColumn","maxColumnWidth","columns_1","getAvailWidth","legendX","availablewidth","legendBound","getTitleRect","legendByIndex","legendCollections_1","legendItemsId","currentSeries","AccumulationDataLabel","getDataLabelPosition","getLabelDistance","getLabelRegion","marginValue","labelAngle","enableSmartLabels","getSmartLabel","circular","findPreviousPoint","isOverlapping","isConnectorLineOverlapping","setOuterSmartLabel","setPointVisibileFalse","textTrimming","textsize","getOverlappedAngle","setSmartLabelForSegments","textRegion","overlapHeight","getEdgeOfLabel","previousstart","previousend","isLineRectangleIntersect","line1","line2","isLinesIntersect","point11","point12","lies","getConnectorPath","getConnectorStartPoint","getPolyLinePath","controlPoints","getBezierPoint","p0","labelshape","isTemplate","getTemplateSize","correctLabelRegion","setTemplateStyle","getSaturatedColor","clientRect","labelColor","doTemplateAnimation","saturatedColor","getLabelBackground","backgroundColor","AccumulationTooltip","getPieData","AccumulationSelection","indexes_2","checkEquals","pieId","checkPointVisibility","elementClass","parentClass","selectedDataIndexes_1","AccumulationAnnotation","pie","index.Chart","index.LineSeries","index.ScatterSeries","index.ColumnSeries","index.SplineSeries","index.SplineAreaSeries","index.StripLine","index.AreaSeries","index.StepLineSeries","index.StepAreaSeries","index.StackingColumnSeries","index.StackingAreaSeries","index.BarSeries","index.StackingBarSeries","index.RangeColumnSeries","index.BubbleSeries","index.Tooltip","index.Crosshair","index.Category","index.DateTime","index.Logarithmic","index.Legend","index.Zoom","index.DataLabel","index.Selection","index.ChartAnnotation","index.HiloSeries","index.HiloOpenCloseSeries","index.WaterfallSeries","index.RangeAreaSeries","index.CandleSeries","index.PolarSeries","index.RadarSeries","index.SmaIndicator","index.TmaIndicator","index.EmaIndicator","index.AccumulationDistributionIndicator","index.MacdIndicator","index.AtrIndicator","index.RsiIndicator","index.MomentumIndicator","index.StochasticIndicator","index.BollingerBands","index.BoxAndWhiskerSeries","index.ErrorBar","index.Trendlines","index.DateTimeCategory","index.MultiColoredLineSeries","index.MultiColoredAreaSeries","index.MultiLevelLabel","index.AccumulationChart","index.PieSeries","index.FunnelSeries","index.PyramidSeries","index.AccumulationTooltip","index.AccumulationLegend","index.AccumulationSelection","index.AccumulationDataLabel","index.AccumulationAnnotation","isDescending","sortData","axisLineColor","tickLineColor","pointerColor","Line","Range","Tick","Cap","NeedleTail","Annotation","Pointer","Annotations","autoAngle","updateLocation","currentRadius","GaugeTooltip","borderStyle","ejTooltip","beforeRender","onBeforeRender","tooltipCustomization","currentPointer","currentAxis","appendTargetElement","findPosition","tooltipFormat","pointerSize","borderRightColor","borderLeftColor","borderBottomColor","borderRightWidth","borderBottomWidth","borderTopColor","borderTopWidth","transitionProperty","transitionDuration","AxisRenderer","drawAxisOuterLine","setRangeColor","drawAxisLabels","nearSize","farSize","hiddenLabel","findAnchor","useRangeColor","drawMinorTickLines","minorTickElements","minorLineStyle","minorTicks","minorInterval","isRangeColor","majorValues","calculateTicks","drawMajorTickLines","majorTickElements","majorLineStyle","majorTicks","axisLineWidth","drawAxisRange","rangeElement","rangeIndex","calculateRangeRadius","rangeColors","PointerRenderer","drawPointers","pointers","calculatePointerRadius","setPointerValue","doPointerAnimation","drawNeedlePointer","pointerRadius","rectDirection","pointerWidth","needleTail","cap","drawMarkerPointer","drawRangeBarPointer","animatePointer","performRangeBarAnimation","performNeedleAnimation","sweepAngle","pointAngle","minAngle","AxisLayoutPanel","axisRenderer","pointerRenderer","measureAxisSize","calculateAxesRadius","totalRadius","rangeMaximumRadius","calculateNumericInterval","calculateAxisValues","calculateNiceInterval","isMajorTickOutside","isMinorTickOutside","isLabelOutside","majorTickOffset","minorTickOffset","axesElements","annotationsModule","CircularGauge","themeEffect","setThemeColors","labelcolor","others","gaugeOnMouseDown","gaugeRightClick","gaugeResize","setGaugeStyle","getMouseArgs","dragArgs","activePointer","enablePointerDrag","activeAxis","pointerDrag","gaugeAxisLayoutPanel","calculateSvgSize","isElementExist","annotationEnable","index.CircularGauge","index.GaugeTooltip","index.Annotations","dropDownBaseClasses","noData","fixedHead","grouping","DropDownBase","getPropObject","newProperty","oldProperty","getValueByText","listData","typeOfData","dataSource_1","dataSource_2","l10nUpdate","actionFailure","noRecordsTemplate","actionFailureTemplate","getTextByValue","dataSource_3","itemValue","enableRtlElements","jsonElement","renderItemsBySelect","setListData","getJSONfromOption","optionGroup","scrollTimer","isRequested","isActive","renderItems","onActionComplete","onActionFailure","postRender","listElement","focusItem","selectedItem","listEle","getSortedDataSource","listOption","setFloatingHeader","fixedHeaderElement","setFixedHeader","scrollStop","topIndex","itemTemplate","templateListItem","liWidth","firstLi","textField","getIndexByValue","setFields","updateSelection","updateDataSource","setUpdateInitial","isEmptyData","rippleFun","wrapperElement","itemIndex","itemsCount","selectedItemValue","updateActionCompleteData","tempLi","getDataByValue","dropDownListClasses","disable","inputFocus","iconAnimation","device","backIcon","filterBarClearIcon","filterInput","filterParent","mobileFilter","clearIcon","clearIconHide","popupFullScreen","disableIcon","DropDownList","initializeData","isDocumentClick","isFilterFocus","beforePopupOpen","initial","initRemoteRender","isNotSearchList","isTyped","preventFocus","preventAutoFill","isValidKey","typedString","isEscapeKey","isTabKey","actionCompleteData","isUpdated","prevSelectPoints","isSelectCustom","isDropDownClick","preventAltUp","isCustomFilter","floatLabelChange","floatElement","resetFocusElement","resetSelection","onChangeEvent","allowFiltering","hiddenElement","valueTempElement","setHTMLAttributes","htmlAttr","getAriaAttributes","hidePopup","preventTabIndex","getNgDirective","getElementByText","getElementByValue","listItems_1","liItem","updateValues","setHiddenValue","onBlur","isFilterLayout","focusOutAction","onFocusOut","onFocus","wireEvent","dropDownClick","bindCommonEvent","unBindCommonEvent","searchKeyEvent","history","spinnerElement","filterInputObj","preventAction","preventHomeEnd","isEditTextBox","isTabAction","focusEle","isSelectFocusItem","pageUpSelection","getPageCount","pageDownSelection","showPopup","focusDropDown","selectCurrentItem","previousItem","unWireEvent","onDocumentClick","activeStateChange","updateSelectedItem","preventSelect","focusedItem","activeItem","valueTemplate","setValueTemplate","previousSibling","selectedItems","dataText","detachChangeEvent","onFilterUp","searchLists","onFilterDown","getSelectionPoints","removeFillSelection","isFiltering","updateData","filteringAction","baseEventArgs","filterQuery","focusIndexItem","setSearchBox","filterBarPlaceholder","clearIconElement","searchKeyModule","onInput","addNewItem","newElement","highlightedItem","refreshPopup","popupEle","searchBox","headerTemplate","searchBoxHeight","getOffsetValue","getFocusElement","setSearchBoxPosition","backIconElement","clickOnBackIcon","scrollParentElements_1","listScroll","popupStyles","borderTop","borderBottom","destroyPopup","clearElement","popupOffset","lastItem","paddingBottom","scrollBottom","currentOffset","nextBottom","nextOffset","boxRange","isPopupButton","scrollableParentElements_1","setOldText","setOldValue","ddlProps","proxy_1","onpopstate","pushState","ComboBox","preventBlur","targetFocus","customValue","allowCustom","valueMuteChange","aria-hasPopup","setHoverList","inlineSearch","autofill","setAutoFill","isHover","currentFillValue","isAndroidAutoFill","setAutoFillSelection","prevEnd","curEnd","prevStart","curStart","isKeyNavigate","changeData","comboProps","isEscape","searchItem","AutoComplete","isFiltered","mapping","filterType","suggestionCount","isDownUpKey","preventDefaultAction","filterAction","postBackAction","showPopupButton","atcProps","HIDE_LIST","CHIP","CHIP_CLOSE","CHIP_SELECTED","ZERO_SIZE","CLOSEICON_CLASS","CLOSE_ICON_HIDE","MultiSelect","mobFilter","scrollFocusStatus","keyDownStatus","enableRTL","overAllWrapper","allowCustomValue","hideSelectedItem","closePopupOnSelect","updateHTMLAttribute","updateReadonly","updateClearButton","overAllClear","componentWrapper","updateCssClass","onPopupShown","focusAtFirstListItem","isFirstClick","mainList","refreshListItems","addListFocus","focusAtLastListItem","aria-multiselectable","updateListARIA","removelastSelection","chipCollectionWrapper","removeValue","removeChipSelection","updateDelimeter","delimiterChar","makeTextBoxEmpty","mainData","refreshSelection","targetInputElement","showSelectAll","mainListCollection","remoteCustomValue","checkForCustomValue","tempQuery","unwireListEvents","setInitialValue","selectAllAction","setDynValue","initialValueUpdate","initialUpdate","refreshPlaceHolder","updateValueState","ariaValue","checkSelectAll","checkMaxSelection","searchCount","searchActiveCount","openClick","openOnClick","KeyUp","expandTextbox","checkTextLength","dataUpdater","dataChecks","tempData","wrapperClick","updateDelimView","tempValues","removeChipFocus","refreshInputHight","searchWrapper","validateValues","newVal","getPagingCount","showDelimWrapper","viewWrapper","delimiterWrapper","hideDelimWrapper","calcPopupWidth","popupKeyActions","updateAriaAttribute","onKeyDown","moveByList","selectByKey","escapeAction","moveBy","removeSelectedChip","selectListByKey","showOverAllClear","hideOverAllClear","maximumSelectionLength","updateListSelection","selectedElem","addChipSelection","moveByTop","chipClick","onChipRemove","updateMainList","removeChip","updateChipStatus","element2","addListSelection","addChip","dispatchSelect","isNotTrigger","initStatus","getChip","closeElements","onMobileChipInteraction","chipElem","chipClose","chip","data-value","chipContent","setClass","mouseIn","mouseOut","fieldProperty","listCurrentOptions","overAllHeight","onListMouseDown","selectAllHeight","ClearAll","windowResize","delim","selectItems","temp1","mainlist","addListHover","ariaCheck","delimChar","wrapperleng","remainContent","overflowCountTemplate","raminElement","remainSize","overAllContainer","remainValue","newTemp","selectAllItem","onLoadSelect","dropDownIcon","msProps","mainLiLength","liLength","DELIMITER_VIEW","showDropDownIcon","dropIcon","CHECK","CheckBoxSelection","activeLi","activeEle","listSelection","setSelectAll","setDeviceSearchBox","getFocus","setReorder","getActiveList","checboxCreate","checkboxEle","checkAllParent","selectAllSpan","checkWrapper","validateCheckNode","checkWrap","isPrevent","unSelect","selectAllText","unSelectAllText","enableSelectionOrder","activeLiCount","ulEle","index.MultiSelect","index.CheckBoxSelection","CellType","CellStyle","numFmtId","backColor","fontColor","italic","bold","wrapText","hAlign","vAlign","numberFormat","Borders","isGlobalStyle","sz","CellXfs","Alignment","CellStyleXfs","CellStyles","xfId","NumFmt","formatCode","mLine","mColor","Cell","Cells","inserted","Rows","Worksheets","Worksheet","isSummaryRowBelow","HyperLink","Grouping","FreezePane","MergeCell","MergeCells","mergeCell","mCell","isIntersecting","intersectingCell","Width","Height","ref","ValueFormatter","displayText","CsvHelper","csvStr","formatter","globalStyles","Map","worksheets","parseWorksheet","parseRows","rows_1","parseRow","parseCell","csv","parseCellValue","has","dwlLink","BlobHelper","getBlob","Workbook","saveType","sharedStringCount","unitsProportions","hyperlinkStyle","mSaveType","mArchive","sharedString","mFonts","mBorders","mStyles","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","parserCellStyle","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","author","comments","company","manager","subject","createdDate","tags","jsonSheet","sheet","mergeCells","mHyperLinks","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","pageSetup","hyperLinks","mergeOptions","applyProperties","sourceJson","destJson","getCellName","getColumnName","strColumnName","iCurrentDigit","titleRowName","printTitleName","fromRow","toRow","titleColName","fromColumn","toColumn","freezePanes","leftCell","columnsLength","rowsLength","rowId","parserRow","parseGrouping","parseCells","outlineLevel","isCollapsed","cellsLength","spanMin","spanMax","cellId","jsonCell","refName","processMergeCells","hyperlink","hyperLink","getCellValueType","rId","styleIndex","parseCellType","spans","applyGlobalStyle","cellStyleXfs","compareResult","compareStyleXfs","cellXfs","applyAlignment","borderId","fillId","fontId","toCompareStyle","baseStyle","cellType","defStyleIndex","parserBorder","leftBorder","rightBorder","topBorder","bottomBorder","processCellStyle","switchNumberFormat","numFmt","returnFormat","compareStyle","compareFontResult","isNewFont","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","globalStyleIndex","toOADate","blobSaveType","proxyUrl","xlsxMatch","csvMatch","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveFreezePanes","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","_h","_j","hLink","saveSheetRelations","pixels","dDigitWidth","trunc","relStr","paneString","sstStart","si","processString","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","numFmtStyle_1","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","cellXf","appString","coreString","toISOString","wbRelation","contentTypeString","sheetsOverride","xmlString","archiveItem","startCell","endCell","dateToTicks","isLeapYear","timeToTicks","daysTo1899","CLS_DISABLE","CLS_HSCROLLNAV","HScroll","browser","browserCheck","ieCheck","uniqueId","scroll","touchHandler","createNavIcon","scrollEle","buildTag","scrollDiv","innerEle_1","scrollItems","nav","clsRight","navItem","CLS_NAVRIGHTARROW","clsLeft","navEle","navLeftItem","CLS_NAVLEFTARROW","eventBinding","onKeyPress","keyTimer","keyTimeout","eleScrolling","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","timeout","scrollDis","rootEle","scrlLeft","scrollStep","arrowDisabling","addDisable","removeDisable","navLeftEle","navRightEle","disEle","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_POPPRI","Item","Toolbar","popupOpen","popupClose","trgtEle","ctrlTem","clearProperty","popObj","tbarAlign","attrb","scrollModule","tbarItemsCol","popupPriCount","keyModule","docKeyDown","destroyHScroll","docEvent","tbarEle","tbarAlgEle","lefts","centers","rights","popEle","destroyItems","tbarItems","destroyMode","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","keyHandling","clst","navChk","scrollChk","popAnimate","eleFocus","nodes","popupCheck","popFrstEle","activeEleRemove","tbarScrollChk","sib","skipEle","isNOU","clsList","isPopupElement","popupNav","popupClickHandler","CLS_RTL","aria-orientation","renderOverflowMode","itemPositioning","checkPopupRefresh","initHScroll","innerItems","checkOverflow","itemWidthCal","innerItem","itemWidth","eleWidth","popNav","scrollNav","refreshOverflow","priorityCheck","offsetWid","overflowMode","removePositioning","createPopupEle","innerNav","createPopupIcon","checkPriority","removeProperty","pushingPoppedEle","tbarObj","popupPri","eleHeight","nodeIndex","nodePri","tbResize","tbarElement","eleItem","popupInit","toolEle","popupElePos","popIcon","scrollVal","overflowHeight","inEle","pre","popPriority","eleWid","sepCheck","itemCount","itemPopCount","checkClass","rVal","cls","mrgn","fstEleCheck","tbarEleMrgn","eleWid_1","minWidth","sepEle","popedEle","tbarPriRef","sepPri","des","elWid","wid","ig","ignoreCount","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","popupEleWidth","tbarWidth","tbarItemsWid","elWidth","btnText","eleSplice","align","sepBeforePri_1","refreshPositioning","tbarWid","popWid","tbarItemAlign","itemEle","showAlwaysInPopup","alignDiv","alignEle","leftAlign_1","ctrlTemplate","itemEleDom","innerPos","renderSubComponent","setAttr","enableItems","addItems","itemsDiv","itemAgn","items_1","algIndex","removeItems","removeItemByIndex","eleIdx","indexAgn","templateRender","templateProp","isComponent","itemType","tempStr","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","tooltipText","itemClick","showTextOn","sTxt","itemsRerender","tEle","changedProb","CLS_ACRDN_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","minHeight","expandedItemsPop","collapseProgress","collapseAnimation","trgtItEl","trgtHeight","itemHeight","itemAttribUpdate","itemLen","innerItemEle","expandedItemRefresh","eleHeader","isExpand","itemExpand","updateItem","acrdn","changedProp","DOWNARROW","FOCUSED","SEPARATOR","HIDE","MenuItem","ContextMenu","navIdx","isTapHold","ejInst","ngElement","getZIndex","createItems","targetElems","cmenuHandler","moverHandler","delegateClickHandler","keyBoardHandler","closeMenu","upDownKeyHandler","rightEnterKeyHandler","leftEscKeyHandler","cul","defaultIdx","fliIdx","fli","getLIByClass","getIdx","cli","openMenu","sli","canOpen","ulIndex","isMenuVisible","closeArgs","beforeCloseArgs","parentItem","toggleAnimation","ICONS","hdata","hli","getIndex","toggleVisiblity","collide","xCollision","hasField","toRawObject","menuItems","getLI","showItemOnClick","cliWrapper","isInstLI","setLISelected","showSubMenu","cliIdx","culIdx","classname","skipHdr","getChangedItemIndex","insertAfter","uls","isMenuOpen","isCallBack","showItems","showHideItems","hideItems","ishide","iitems","insertItems","isAfter","menuitem","CLS_HIDDEN","CLS_ICON_CLOSE","CLS_WRAP","CLS_TB_ITEMS","CLS_TB_ITEM","CLS_TB_POPUP","CLS_PROGRESS","TabActionSettings","TabAnimationSettings","Header","TabItem","Tab","prevIndex","animObj","tbObj","expTemplateContent","cntEle","isPopup","isSwipeed","css","renderContainer","setOrientation","headerPlacement","renderHeader","tbItems","bdrLine","CLS_INDICATOR","scrCnt","setContentHeight","tabItems","btnCls","CLS_ICONS","hdrItems","aria-controls","cont","parseObject","clicked","setCloseButton","showCloseButton","hdrItem","inHTML","tbCount","tItems","txt","isReplace","tHtml","txtEmpty","wrapAttrs","tCont","tItem","removeActiveClass","hdrActEle","extIndex","findEle","checkPopupOverflow","tbPop","tbrItems","ripEle","tbItem","actEleId","prevEle","trg","refreshActElePosition","prevCtnAnimation","triggerPrevAnimation","oldCnt","animateObj","triggerAnimation","prevActiveEle","newCnt","getTrgContent","idNo","openEff","clsEff","setActiveBorder","keyPressed","trgParent","trgIndex","getEleIndex","templateCompile","tempEle","getContent","place","heightAdjustMode","hsCnt","bar","tbWidth","setActive","trg_1","eleTrg","curActItem","refreshItemVisibility","eventArg","prevItem","previousIndex","isSwiped","setItems","refreshActiveBorder","spaceKeyDown","swipeHandler","tabKeyModule","removeTab","actEle","nxtSib","scrBar","scrStart","scrEnd","eleStart","eleEnd","eleViewRange","closeButtonTitle","enableTab","addTab","addedItems","removingArgs","removedItem","removedIndex","cntTrg","removedArgs","hideTab","cntItem","tempHdrEle","COLLAPSIBLE","EXPANDABLE","LISTITEM","LISTTEXT","PARENTITEM","LOAD","PROCESS","TEXTWRAP","TREEINPUT","SIBLING","DROPNEXT","FULLROW","EXPANDED","NODECOLLAPSED","CHECKBOXWRAP","CHECKBOXFRAME","treeAriaAttr","treeRole","FieldsSettings","ActionSettings","NodeAnimationSettings","TreeView","mouseDownStatus","checkActionNodes","dragStartAction","ctrlDown","ctrlUp","ctrlEnter","ctrlHome","ctrlEnd","ctrlA","shiftDown","shiftUp","shiftEnter","shiftHome","shiftEnd","csDown","csUp","csEnter","csHome","csEnd","beforeNodeCreate","navigateUrl","treeList","isLoaded","setTouchClass","selectedNodes","checkedNodes","setDataBinding","setExpandOnType","setRipple","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","finalizeNode","touchClass","addCheck","frame","frameMouseHandler","createFullRow","allowMultiSelection","addActionClass","nodeData","actionValue","iNodes","sNodes","selectNode","cNodes","eNodes","renderChildNodes","updateList","updateCheckedProp","nodes_1","ensureParentCheckState","checkBoxEle","parentUL","currentParent","ensureChildCheckState","checkBoxes","checkedState","currentLoadData","isNodeChecked","doCheckBoxAction","doCheck","liEle","checkBox","isAdd","currLi","getCheckEvent","removeCheck","getNodeData","firstNode","updateIdAttr","doSelectionAction","sUids","sNode","selectGivenNodes","preventContextMenu","setFocusElement","triggerClickEvent","expandAction","collapseNode","toggleSelect","nodeCheckingEvent","nodeCheckedEvent","expandNode","proxy","setHeight","expandedNode","animateHeight","expandArgs","colArgs","getExpandEvent","currentHeight","parentLi","expandChild","eicon","childItems","mapper_1","getChildFields","getNodeObject","ensureCheckNode","renderSubChild","getFields","nodeLevel","dataLevel","getChildMapper","parentId","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","scrollIntoView","txtWrap","scrollHeight","isTowards","nextNode","getNextNode","getPrevNode","toBeOpened","focusNextNode","setFocus","isBackwards","rootNode","getRootNode","getEndNode","fNode","prevNode","endNode","preNode","hoveredNode","fromDS","pNode","pid","reRenderNodes","newClass","editingHandler","oldInpEle","updateOldText","getEditEvent","innerHtml","wireInputEvents","editData","editFields","inputFocusOut","newText","txtEle","appendNewText","isInput","getChildNodeObject","childData","toBind","initializeDrag","destroyDrag","virtualEle","dragRoot","dragWrap","dragLi","isSameNode","cloneEle","DRAGITEM","nLen","cNode","getDragEvent","targetTouches","dragAction","removeVirtualEle","dropTarget","dropRoot","dropObj","over","dropAction","dropWrap","dropLi","isDescendant","virEle","renderVirtualEle","appendNode","dropAsSiblingNode","dropAsChildNode","dropUl","dragParentUl","dragParentLi","updateElement","updateAriaLevel","updateInstance","dropParentUl","expandParent","dragIcon","updateChildAriaLevel","sibEle","dropData","draggedNode","draggedNodeData","droppedNode","droppedNodeData","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeNode","updateSelectedNodes","doGivenAction","toExpand","addGivenNodes","isRemote","updateMapper","refNode","doDisableAction","doEnableAction","touchEditObj","wireClickEvent","proxy_2","touchClickObj","wireExpandOnEvent","proxy_3","touchExpandObj","matched","setCheckedNodes","uncheckAll","checkAll","addNodes","beginEdit","collapseAll","disableNodes","enableNodes","ensureVisible","expandAll","getNode","moveNodes","sourceNodes","removeNodes","updateNode","CLOSE","OPEN","TRASITION","VISIBILITY","DISABLEANIMATION","CONTEXT","SIDEBARABSOLUTE","Sidebar","setContext","enableDock","setDock","setMediaQuery","setType","setCloseOnDocumentClick","closeOnDocumentClick","documentclickHandler","dockSize","z-index","classELement","destroyBackDrop","sibling","showBackdrop","eventArguments","setAnimation","createBackDrop","isOpen","mediaQuery","enableGestureHandler","setEnableGestures","enableGestures","mainContentEle","sidebarEle","margin-left","margin-right","allowSorting","allowResizing","allowGrouping","showColumnMenu","enableGroupByFormat","showInColumnChooser","edit","sortDirection","valueFormatter","commands","commandsTemplate","fltrTemplateFn","isForeignColumn","editType","sortComparer","a_1","getSortDirection","setSortDirection","getFormatter","formatFn","getParser","parserFn","getColumnTemplate","getFilterItemTemplate","getDomSetter","disableHtmlEncode","queryCellInfo","actionBegin","actionComplete","dataBound","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnDragStart","columnDrag","columnDrop","rowDragStart","rowDrag","rowDrop","printComplete","detailDataBound","toolbarClick","batchAdd","batchCancel","batchDelete","beforeDataBound","beforeOpenColumnChooser","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","initialLoad","initialEnd","dataReady","contentReady","uiUpdate","onEmpty","inBoundModelChanged","modelChanged","colGroupRefresh","headerRefreshed","pageComplete","sortComplete","filterComplete","searchComplete","reorderComplete","rowDragAndDropComplete","groupComplete","ungroupComplete","cellSelectionComplete","beforeCellFocused","cellFocused","columnVisibilityChanged","columnWidthChanged","columnPositionChanged","rowsAdded","rowsRemoved","columnDragStop","headerDrop","dataSourceModified","refreshVirtualBlock","dblclick","toolbarRefresh","autoCol","tooltipDestroy","saveComplete","deleteComplete","preventBatch","dialogDestroy","crudAction","addDeleteAction","destroyForm","doubleTap","excelExportComplete","pdfExportComplete","freezeRender","filterOpen","filterDialogCreated","filterMenuClose","initForeignKeyColumn","getForeignKeyData","showEmptyGrid","dataStateChange","dataSourceChanged","rtlUpdated","RenderType","ToolbarItem","CheckBoxFilter","filterSettings","existingPredicate","filterState","defaultConstants","OK","Cancel","Filter","SelectAll","Blanks","True","False","NoResult","cBoxTrue","cBoxFalse","initLocale","constants","localeObj","closeDialog","searchBoxKeyUp","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","updateModel","actualPredicate","filteredColumns","sortSettings","allowCaseSensitive","localizedStrings","getAndSetChkElem","sBox","hideSearchbox","spinner","cBox","showDialog","events.filterBeforeOpen","filterModel","columnName","columnType","events.actionBegin","btnClick","isExcel","created","dialogCreated","getAllData","events.filterDialogCreated","openDialog","events.filterMenuClose","clearFilter","filterCollection","fltrBtnHandler","optr","caseSen","defaults","isNotEqual","itemsCnt","fObj","searchInput","initiateFilter","fColl","firstVal","parsed","predicte","processDataSource","getPredicateFromCols","getPredicate","predicateList","fPredicate","foreignColumn","getForeignKeyColumns","events.generateQuery","allPromise","runArray","dataSuccess","fullData","cols","getDistinct","filteredData","events.filterAfterOpen","events.actionComplete","events.filterChoiceRequest","updateResult","createFilterItems","updateAllCBoxes","updateIndeterminatenBtn","cBoxes_1","createCheckbox","cBoxes","isColFiltered","getCheckedState","generatePredicate","updateDateFilter","getCaseValue","dataState","isPending","resolver","events.rowsAdded","addRows","events.rowsRemoved","removeRows","events.dataSourceModified","events.destroy","events.updateData","crudActions","events.addDeleteAction","gObj","skipPage","searchQuery","aggregateQuery","sortQuery","pageQuery","groupQuery","isForeign","allowPaging","enableVirtualization","groupSettings","getColumnByField","isGrpFmt","formatGroupColumn","sortGrp","sSettings","searchSettings","getColumns","fGeneratePredicate","skipFoerign","actualFilter","colType","checkBoxCols","defaultFltrCols","excelPredicate","defaultFltrCols_1","column_1","sType","events.showEmptyGrid","getKey","getPrimaryKeyFieldNames","eventPromise","deferred_1","events.crudAction","getStateEventArgument","endEdit","setState","events.dataSourceChanged","toIndex","getState","adaptr","dataArgs","def","editArgs","events.dataStateChange","isSpanned","CellMergeRender","cellArgs","cellRenderer","getCellRenderer","cellSpan","spanText","aria-colSpan","enableColumnVirtualization","backupMergeCells","fName","setMergeCells","generteKey","fname","splitKey","getMergeCells","updateVirtualCells","mCells","getIndexFromAllColumns","vColumnIndices","getColumnIndexesInView","getVisibleColumns","RowRenderer","rowTemplate","refreshRow","isChanged","refreshMergeCells","tr","cells_1","rowArgs","attrCopy","isDataRow","getSelectedRowIndexes","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","cellRendererFact","DetailExpand","CommandColumn","isAltRow","RowModelGenerator","generateRows","generateRow","ensureColumns","detailTemplate","generateCell","indent","enableAltRow","refreshForeignKeyRow","generateCells","dummy","oIndex","opt","isDataCell","rowID","getColumnIndexByField","refreshRows","SummaryModelGenerator","groupFooterTemplate","groupCaptionTemplate","columnSelector","buildSummaryData","getGeneratedRow","summaryRow","raw","indents","getIndentByLevel","indentLength","getGeneratedCell","getCellType","Indent","sColumn","scolumn","single","setTemplate","types","disp","Summary","GroupSummaryModelGenerator","v","GroupSummary","CaptionSummaryModelGenerator","reduce","CaptionSummary","GroupModelGenerator","summaryModelGen","captionModelGen","getGroupedRecords","generateDataRows","generateCaptionRow","getCaptionRowCells","visibles","groupedLen","generateIndentCell","Expand","captionCells","cIndex_1","wFlag","tmpFlag","GroupCaption","GroupCaptionEmpty","cRow","ContentRender","freezeRows","movableRows","events.columnDrop","rafCallback","ariaService","setBusy","getPanel","getFrozenColumns","isFrozen","events.contentReady","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","modelData","fCont","mCont","tbody","getRowTemplate","isTR","colcount","getHeaderTable","appendContent","contentPanel","panel","contentTable","getRows","getMovableRows","getRowElements","getMovableRowElements","setRowElements","colgroup","colGroup","fRows","mRows","rowLen","cellLen","testRow","clen","getNormalizedColumnIndex","canSkip","displayVal","renderEmpty","getRowByIndex","getDataRows","getVirtualRowIndex","getMovableRowByIndex","getMovableDataRows","HeaderRender","frzIdx","parentEle","allowReordering","visualElement","headercelldiv","getColumnByUid","events.columnDragStart","events.columnDrag","events.columnDragStop","events.headerDrop","widthService","events.columnPositionChanged","colPosRefresh","headerDiv","createHeaderTable","initializeHeaderDrag","initializeHeaderDrop","events.headerRefreshed","headerPanel","headerTable","tHead","createTable","findHeaderRow","thead","caption","bodyCell","rowBody","updateColGroup","colHeader","rowRenderer","headerRow","colDepth","getObjDepth","getHeaderCells","HeaderIndent","DetailHeader","appendCells","isFirstObj","isFirstCol","isLastCol","isMovable","lastCol","getCellCnt","frzObj","refreshFrozenHdr","isPartial","isComp","frozenColumns","StackedHeader","getColSpan","getColumnIndexByUid","frozenCnt","frzCol","colIndex","refreshUI","setWidthToColumns","gCells","textWrapSettings","wrapMode","checkDepth","showDropArea","headerRows","CellRenderer","locator","rowChkBox","localizer","getGui","evaluate","fData","dummyData","invokeFormatter","refreshCell","refreshTD","displayAsCheckBox","localeStr","fromFormatter","appendHtml","persistSelection","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","headerTextAlign","matchFilteredColumns","StackedHeaderCellRenderer","toolTip","IndentCellRenderer","GroupCaptionCellRenderer","fKeyValue","captionTemplate","GroupCaptionEmptyCellRenderer","ExpandCellRenderer","HeaderIndentCellRenderer","DetailHeaderIndentCellRenderer","DetailExpandCellRenderer","Render","emptyGrid","headerRenderer","getRenderer","contentRenderer","Content","emptyRow","refreshComplete","isEdit","isFActon","isNeedForeignAction","getFData","events.actionFailure","deffered_1","events.getForeignKeyData","disablePageWiseAggregates","validateGroupRecords","dataManagerFailure","deferred","sendBulkRequest","dmSuccess","dmFailure","renderEmptyRow","isTrigger","colspan","events.onEmpty","updateColumnType","isColTypeDef","events.beforeDataBound","events.tooltipDestroy","totalRecordsCount","updatesOnInitialRender","getCurrentViewRecords","events.dataReady","alert","events.toolbarRefresh","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","headerCol","getContentTable","fWidth","mHdr","contentCol","getSiblingsHeight","getHeightFromDirection","getTableWidth","tWidth","setWidthToFrozenTable","freezeWidth","setWidthToMovableTable","movableWidth","FocusStrategy","currentInfo","oneTime","swap","forget","skipFocus","focusByClick","prevIndexes","focusCheck","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","refreshMatrix","FixedContentFocus","ContentFocus","FixedHeaderFocus","HeaderFocus","cFocus","updateRow","generate","handlerInstance","passiveHandler","event.keyPressed","event.click","event.contentReady","event.headerRefreshed","restoreFocus","event.batchAdd","event.batchCancel","event.batchDelete","event.detailDataBound","event.onEmpty","internalCellFocus","getPrevIndexes","forgetPrevious","actions","getFocusable","allow","inValid","rIndex","cIndex","keyActions","rightArrow","leftArrow","upArrow","downArrow","shiftRight","shiftLeft","indexesByKey","getCurrentFromAction","isPresent","shouldFocusChange","rN","cN","oRowIndex","oCellIndex","isDirty","frozenSwap","enterFrozen","optionals","defaultLen","isData","isSelectable","SearchBox","searchFocus","searchBlur","PageSettings","__assign","assign","selectedRowIndexes","selectedRowCellIndexes","selectedRecords","isMultiShiftRequest","isMultiCtrlRequest","enableSelectMultiTouch","selectedRowState","chkAllCollec","isCheckedOnAdd","persistSelectedData","factory","initializeSelection","onActionBegin","fDataUpdate","rowObj","getRowObj","hidePopUp","clearSelection","isEditing","editModule","formObj","isPersistSelection","getSelectedMovableRow","selectRow","selectedRow","selectedMovableRow","selectData","isRowType","isRowSelected","prevRowIndex","isCtrlPressed","isShiftPressed","previousRow","previousRowIndex","addMovableArgs","events.rowSelecting","clearRow","updateRowSelection","selectedRowIndex","updateRowProps","events.rowSelected","targetObj","mRow","mObj","previousMovRow","selectRowsByRange","selectRows","getCollectionFromIndexes","rowIndexes","isSingleSel","prevRow","rowIndexes_1","rowIdx","addRowsToSelection","rowIndexes_2","isUnSelected","rowDeselect","events.rowDeselecting","addRemoveClassesForRow","events.rowDeselected","clearRowSelection","updatePersistCollection","chkState","primaryKey","updateCheckBoxes","chkBox","checkedTarget","setCheckAllState","clearCellSelection","movableRow","rowDeselectObj","getRowObjectFromUID","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","getMovableRowsObject","cellIndexes_1","selectedCellIdx","cellDeselect","events.cellDeselecting","events.cellDeselected","rowCellIndex","isRowAvail","selectedCells","getSelectedCellsElement","rowCell","cLen","addMovableRows","gBRect","isDragged","isCellDrag","selectLikeExcel","startCellIndex","gridElement","allowRowDragAndDrop","postion","clearSelAfterRefresh","events.initialEnd","events.cellSelectionComplete","events.inBoundModelChanged","events.cellFocused","onCellFocused","actionBeginFunction","actionCompleteFunction","refreshHeader","addEventListener_checkbox","removeEventListener_checkbox","getCheckAllBox","checkBoxSelectionChanged","initPerisistSelection","gobj","checkboxColumn","chkField","ensureCheckboxFieldSelection","getDataModule","refreshPersistSelection","setRowSelection","checkState","editChkBox","onDataBound","checkSelectAllAction","cRenderer","editForm","getCheckAllStatus","triggerChkChangeEvent","checkSelect","rowCellSelectionHandler","moveIntoUncheckCollection","checkedLen","spanEle","popUpClickHandler","chkSelect","checkboxOnly","headerAction","thLen","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","ctrlPlusA","applySpaceSelection","applyUpDown","getSelectedRecords","getRowsObject","onDataBoundFunction","actionCompleteFunc","actionCompleteHandler","events.click","searchString","events.preventBatch","refreshSearch","events.searchComplete","onSearchComplete","ShowHide","showBy","getToggleFields","hideBy","getKeyBy","Scroll","lastScrollTop","previousValues","oneTimeReady","toolbarModule","toolbar","mHdrHeight","ensureOverflow","setPadding","getThreshold","cssProps","getCssProperties","removePadding","onContentScroll","scrollTarget","isFooter","onFreezeContentScroll","onWheelScroll","deltaMode","deltaY","onTouchScroll","pageXY","getPointXY","setPageXY","getFooterContent","Print","isAsyncPrint","printing","renderPrintGrid","printWind","isPrintGrid","printGridModel","printGridProp","printMode","printGrid","Grid","selectedRows","removeColGroup","waitingPop","events.printComplete","groupCaption","colGroups","AggregateColumn","getTemplate","setPropertiesSilent","AggregateRow","Clipboard","copyContent","isSelect","events.keyPressed","clipBoardTextArea","setCopyData","withHeader","getSelection","headerTextArray","getCopyData","checkBoxSelection","colIndexes","getColumnHeaderByIndex","isCell","isElement","queryCommandSupported","execCommand","removeAllRanges","gridObj","rowCellIndxes","getSelectedRowCellIndexes","SortDescriptor","SortSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","GroupSettings","EditSettings","freezeRefresh","mergePersistGridData","keyEntity","currentObject","ignoreInArrays","ignoreOnColumn","ignoreInColumn","allowExcelExport","allowPdfExport","allowSelection","isDetail","toolbarTemplate","isCommandColumn","allowAdding","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","initializeServices","inViewIndexes","mediaCol","isMediaQuery","isInitialLoad","filterOperators","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","defaultLocale","EmptyRecord","InvalidFilterMessage","GroupDropArea","UnGroup","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Update","Delete","Pdfexport","Excelexport","Wordexport","Csvexport","Columnchooser","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","PreviousPage","SortAscending","SortDescending","EditRecord","DeleteRecord","FilterMenu","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","ctrlDownArrow","ctrlUpArrow","ctrlPlusP","ctrlPlusC","ctrlShiftPlusH","renderModule","getMediaColumns","searchModule","processModel","gridRender","addListener","updateDefaultCursor","updateStackedFilter","gcol","getShowHideService","hideAtMedia","media","mediaQueryUpdate","showHider","refreshMediaCol","eventInitializer","removeListener","destroyDependentModules","focusModule","checkCursor","requireRefresh","requireGridRefresh","headerModule","rowTemplateFn","detailTemplateFn","updateColumnObject","extendedPropertyChange","updateRTL","getToolbar","contextMenuModule","getContextMenu","columnMenuModule","getColumnMenu","events.rtlUpdated","updateResizeLines","updateGridLines","columnMenuItems","applyTextWrap","removeTextWrap","isModeChg","pending_1","gResult_1","enableHover","headerRows_1","updateColumnModel","columnModel","updateFrozenColumns","isRefresh","inview","vLen","getLocaleConstants","setColumnIndexesInView","setGridHeaderContent","contentModule","setGridContentTable","setGridContent","setGridHeaderTable","footerElement","getFooterContentTable","getPager","gridPager","setGridPager","getRowInfo","row_1","rowsObject","rowData","mrows","dRows","setCellValue","fieldIdx","pkName","rowObjects","events.queryCellInfo","setRowData","rowObject","getColumnHeaderByField","getColumnHeaderByUid","getUidByColumnField","getColumnFieldNames","columnNames","getDetailTemplate","getSelectedRows","showColumns","hideColumns","getFrozenCount","goToPage","pageNo","pagerModule","updateExternalMessage","sortColumn","isMultiSort","sortModule","clearSorting","removeSortColumn","filterByColumn","filterOperator","filterValue","actualFilterValue","actualOperator","filterModule","clearFiltering","removeFilteredColsByField","isClearFilterBar","printModule","deleteRecord","fieldname","startEdit","closeEdit","addRecord","deleteRow","clipboardModule","recalcIndentWidth","indentWidth","perPixel","events.columnWidthChanged","reorderColumns","fromFName","toFName","reorderModule","autoFitColumns","resizeModule","createColumnchooser","columnChooserModule","renderColumnChooser","valueFormatterService","gCols","sCols","sLen","showGroupedColumn","parentDetails","parentKeyFieldValue","initForeignColumn","events.initForeignKeyColumn","rendererFactory","createGridPopUpElement","gridLines","htable","ctable","allele","myTableDiv","mySubDiv","myTable","myTr","mytd","mouseClickHandler","dblClickHandler","allowKeyboard","dataBoundFunction","checkEdit","events.dblclick","filterClear","dataObj_1","setInjectedModules","refreshColumns","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","groupColumn","groupModule","ungroupColumn","isContextMenuOpen","ensureModuleInjected","Sort","contentRefresh","isModelChanged","aria","sortedColumn","getSortedColsIndexByField","sortedCols","sCol","getSortColumnFromField","lastSortedCol","allowMultiSorting","removeSortIcons","updateSortedCols","addSortIcons","events.sortComplete","refreshSortIcons","colObj","initiateSort","showPopUp","allowUnsort","enableSortMultiTouch","filterElement","updateAriaAttr","NumericContainer","pagerElement","renderNumericContainer","refreshNumericLinks","updateTotalPages","updateLinksHtml","updateStyles","pagerObj","renderFirstNPrev","renderPrevPagerSet","renderNextPagerSet","renderNextNLast","pagerContainer","prevPager","PP","nextPager","NP","previousPageNo","currentPageSet","customText","updateFirstNPrevStyles","updatePrevPagerSetStyles","updateNextPagerSetStyles","updateNextNLastStyles","firstPage","firstPageDisabled","prevPage","prevPageDisabled","lastPage","lastPageDisabled","nextPageDisabled","PagerMessage","pageNoMsgElem","pageCountMsgElem","regx","Pager","currentPageInfo","totalItemsInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","containerModule","pagerMessageModule","enableExternalMessage","checkpagesizes","pagerTemplate","initLocalization","renderFirstPrevDivForDevice","enablePagerMessage","renderNextLastDivForDevice","pagerdropdownModule","addAriaLabel","externalMessageModule","checkGoToPage","currentPageChanged","pageSizes","newPageNo","oldPageNo","enableQueryString","updateQueryString","getPagerTemplate","updatedUrl","getUpdatedURL","PagerDropDown","pagerDropDownDiv","dropDownDiv","defaultTextDiv","pagerCons","pageSizesModule","pageSizesArray","dropDownListObject","onChange","ExternalMessage","externalMessage","Page","pagerDestroy","gridExtend","dropDownChanged","addAriaAttr","numericContainerNew","numericContainer","numericContainerDiv","isForceCancel","previousPage","appendToElement","handlers","complete","updateLayout","inboundChange","keyPress","events.pageComplete","FilterCellRenderer","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","filterOptr","filterObj","actuiObj","NumberFilterUI","numericTxtObj","BooleanFilterUI","dropInstance","ddActionComplete","DateFilterUI","fltrSettings","colFormat","inputElem","datePickerObj","FilterMenuRenderer","fltrObj","isDialogOpen","colTypes","boolean","datetime","flMuiObj","renderDlgContent","mainDiv","dlgDiv","filterBtnClick","clearBtnClick","renderFilterUI","writeMethod","renderFlValueUI","valueDiv","instanceofFilterUI","ui","dlgContentEle","flValue","flOptrValue","targ","flIcon","ExcelFilter","localeConstants","ClearFilter","NumberFilter","TextFilter","DateFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","getCMenuDS","unwireExEvents","cmenu","createMenu","isCheckIcon","menu","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","clickExHandler","menuItem","destroyCMenu","menuObj","focused","isCMenuOpen","selectedMenu","menuOptions","selectHandler","onClose","beforeClose","preventClose","client","contextRect","getContextBounds","getCMenuYPosition","getSelectedText","contextWidth","filterLength","renderDialogue","overlayClick","removeDialog","createdDialog","removeObjects","datePicker","renderCustomFilter","dlgFields","fieldSet","checkBoxValue","fOperator","sValue","sOperator","andRadio","firstOperator","firstValue","secondOperator","secondValue","mPredicate","fpred","fieldElement","xlfloptr","menuText","getSelectedValue","renderRadioButton","radioDiv","frstpredicate","secndpredicate","renderMatchCase","orRadio","valueInput","renderAutoComplete","renderNumericTextBox","renderDate","matchCaseDiv","matchCaseInput","completeAction","nextFlMenuOpen","Menu","Excel","fltrDlgDetails","getLocalizedCustomOperators","fltrElem","updateFilterMsg","currentFilterObject","getFilteredColsIndexByField","currentFilteringColumn","events.filterComplete","events.filterOpen","columnMenuFilter","filterIconClickHandler","filterCell","checkForSkipInput","filterStatusMsg","checkAlreadyColFiltered","getFlvalue","setFormatForFlColumn","fltrElement","filterDialogOpen","customOperators","filterHandler","processFilter","updateCrossIcon","showFilterBarStatus","getFormatFlValue","isSkip","skipInput","startTimer","onTimerTick","immediateModeDelay","templateRead","validateFilterValue","getOperator","singleOp","multipleOp","=","!","numOptr","stringOperator","numberOperator","dateOperator","datetimeOperator","booleanOperator","gClient","fClient","datepickerEle","targetText","filterIconElement","resizeClassList","suppress","Resize","isDblClk","findColumn","resizeColumn","headerTextClone","contentTextClone","indentWidthClone","contentText","wHeader","wContent","columnbyindex","calcTableWidth","tableWidth","offsetWidthValue","setHandlerHeight","getResizeHandlers","resizeStart","callAutoFit","getTargetColumn","refreshColumnWidth","parentElementWidth","appendHelper","getPointX","minMove","removeHelper","cancelResizeAction","resizeEnd","updateCursor","removeEvents","setHelperHeight","mousemove","colData","updateHelper","doubleTapEvent","calcPos","fLeft","parentOffset","getUserAgent","timeoutHandler","Reorder","events.reorderComplete","createReorderElement","chkDropPosition","srcElem","destElem","closestElement","targetParentContainerIndex","chkDropAllCols","isFound","findColParent","getColumnsModel","subCols","sourceUid_1","colMatchIndex_1","destUid_1","moveColumns","oldIdx","destIndex","getColParent","srcIdx","fromIndex","flatColumns","fTh","mTh","fHeaders","setDisplay","updateScrollPostion","updateArrowPosition","draggableType","cliRect","cliRectBaseLeft","cliRectBaseRight","scrollElem","setScrollLeft","cliRectBase","RowDD","events.rowDragStart","dropElem","rowDropSettings","targetID","isDragStop","getElementFromPosition","events.rowDrag","events.rowDrop","events.rowDragAndDropComplete","getTargetIdx","targetRow","srcControl","targetIndex","isAppliedGroup","isAppliedUnGroup","events.groupComplete","events.ungroupComplete","grpRow","expandCollapseRows","applySortFromTarget","unGroupFromTarget","toogleGroupFromHeader","showToggleButton","gHeader","cellIdx","rowNodes","expandElem","renderGroupDropArea","initDragAndDrop","refreshToggleBtn","groupElem","updateGroupDropArea","dragLabel","initializeGHeaderDrop","initializeGHeaderDrag","colName","addColToGroupDrop","groupAddSortingQuery","removeColFromGroupDrop","groupedColumn","childDiv","ej-mappingname","headerCell","showUngroupButton","getGHeaderCell","updateGroupedColumn","updateButtonVisibility","clearGrouping","DetailRow","toogleExpandcollapse","uid_1","isDetailRow","detailRow","detailCell","parentPrimaryKeys","parentKeyField","parentRowData","injectedModues","gridElem","events.detailDataBound","detailElement","getTDfromIndex","predefinedItems","gridID","preItems_1","itemStr","localeName","viewStr","disableItems","hasData","itemObject","gID","tarElement","updateSearchBox","searchElement","Toolbar$$1","FooterRenderer","gridModule","movableContent","fDiv","tFoot","freezeTable","frozenContent","cEnd","summaries","dummies","cStart","fragment","renderSummaryContent","fheaderCol","mheaderCol","onWidthChange","Aggregate","cellFac","SummaryCellRenderer","footerRenderer","InterSectionObserver","containerRect","sentinelInfo","virtualScrollHandler","prevTop","debounced100","debounced50","VirtualRowModelGenerator","cOffsets","notifyArgs","isBlockAvailable","loadedBlocks","blockIndexes","block","columnIndexes","getStartIndex","even","sLeft","calWidth","refreshColOffsets","gLen","currentFirst","oRow","VirtualContentRenderer","preventEvent","offsets","tmpOffsets","vgenerator","debounceEvent","scrollListener","viewInfo","tempBlocks","infoType","getPageFromTop","loadSelf","loadNext","mIdx","old","virtualInfo","cBlock","blocks","refreshOffsets","adjustTable","setVirtualHeight","resetScrollPosition","getTotalBlocks","sTop","getBlockIndexes","getOffset","prevInfo","observe","startIdx","getBlockSize","bSize","gen","VirtualHeaderRenderer","VirtualElementHandler","renderWrapper","renderPlaceHolder","setWrapperWidth","fHdr","tdElement","fCls","td_1","BatchEditRender","createDialog","dialog","dataCell","Inline","fForm","tArgs","BooleanEditCell","selectChkBox","editRow","DropDownEditCell","isInline","dlgElement","NumericEditCell","editComplete","primaryKeys","primaryKeyValues","mFormObj","previousData","mForm","destroyElements","destroyWidgets","applyFormValidation","mElem","events.saveComplete","NormalEdit","BatchEdit","cellDetails","events.doubleTap","events.beforeCellFocused","onBeforeCellFocused","setCellIdx","editCellFromIndex","isAddRow","removeRowObjectFromUID","refreshRowIdx","bulkDelete","validateFormObj","batchSave","mergeBatchChanges","addRowObject","getIndexFromData","nonMovableRows","defaultData","mTr","mTbody","findNextEditableCell","columnObject","getDefaultData","saveCell","validationRules","isColored","setChanges","editedData","DialogEdit","DatePickerEditCell","editCellType","dropdownedit","datepickeredit","booleanedit","updateEditObj","tapEvent","Global","alertDObj","endEditing","alertClick","dlgWidget","events.destroyForm","inputs","mRules","isFHdr","gcontent","inputClient","arrow","ColumnChooser","showColumn","hideColumn","isDlgOpen","dlghide","initialOpenDlg","stateChangeColumns","isInitialOpen","isCustomizeOpenCC","rtlUpdate","destroy$1","removeCancelIcon","args1","refreshCheckboxState","enableAfterRenderEle","customDialogOpen","searchDiv","ccsearchele","ccsearchicon","conDiv","searchBoxObj","clearActions","currentCol","coluid","clearSearch","fltrCol","addcancelIcon","nMatchele","checkstate","checkstatecolumn","cbox","cclist","hideColState","showColState","ExportHelper","getColumnData","fColumns","actualColumns","processColumns","processHeaderCells","generateActualColumns","getConvertedWidth","hideColumnInclude","resultCells","Cell$1","gridColumn","measureColumnDepth","returnFormattedValue","ExcelExport","rowLength","expType","includeHiddenColumn","isExporting","processRecords","bool_1","blankRows","workSheet","getHeaders","groupIndent","processHeaderContent","processAggregates","isCsvExport","book","blobPromise","processGroupedRows","exportValueFormatter","getCaptionThemeStyle","groupCaptionSummaryRows","tCell","lIndex","sCell","rLen","foreignKeyData$$1","excelCellArgs","fillAggregates","cells_2","eCell","JSON1","JSON2","attrname","gridCell","spannedCell","updateThemeStyle","themestyle","noRows","parseStyles","PdfExport","headerThemeStyle","headerBrush","isGrouping","sRows","gridTheme","hexToRgb","dataSourceItems","groupIndex","captionSummaryModel","gridHeader","getHorizontalAlignment","pdfPageSettings","fromBottom","processContentValidation","penColor","documentHeader","compositeField","captionRow","wholeText","getSummaryWithoutTemplate","setRecordThemeStyle","penBrushColor","textBrushColor","textPenColor","verticalAlign","getFontFamily","getPageNumberStyle","getDashStyle","getBrushFromContent","buttonOption","initiateRender","menuClass","batchEdit","editIcon","pager","ungroup","excel","fPage","nPage","ContextMenu$$1","defaultItems","hiddenItems","contextMenu","getMenuItems","totalpage","targetColumn","dItem","ensureTarget","getBatchChanges","buildDefaultItems","AutoFitAll","AutoFit","CsvExport","PrevPage","rowModelGenerator","FreezeRowModelGenerator","FreezeContentRender","setFrozenContent","setMovableContent","mDiv","getFrozenContent","rfshMovable","FreezeRender","getMovableHeader","hdrClassList","setWrapHeight","updateResizeHandler","fRowHgt","isWrap","refreshStackedHdrHgt","fRowSpan","mRowSpan","fTr","maxRowSpan","minRowSpan","updateStackedHdrRowHgt","Freeze","ColumnMenu","GROUP","UNGROUP","ASCENDING","DESCENDING","FILTER","POP","WRAP","unwireFilterEvents","wireFilterEvents","isFilterItemAdded","isChooserItem","colChooser","getKeyFromId","CHOOSER","ensureDisabledStatus","checkbox","getDefaultItem","isFilterPopupOpen","filterPopup","gridPos","liPos","responses","foreignColumns","generateQueryFormData","genarateColumnQuery","queryColumn","isTrue","index.Page","index.Sort","Line$1","GaugeLocation$1","CustomizeOption$2","Align","calculatePointerBounds","prevAxis","major","minor","majorInterval","majorTickBounds","minorTickBounds","startVal","endVal","valueToCoefficient$1","getLabelFormat$1","performMarkerAnimation","markerElement","rectY","PathOption$2","calculateShapes$2","animationDuration","value2","clipHeight","clipVal","rectHeight","clipWidth","clipElement","lineY","currentPath","startPointerVal","Animations","AxisRenderer$1","axisElements","drawRanges","nearAxisWidth","farAxisWidth","axisObject","tickPath","tickID","tickBounds","tick","textElement$2","TextOption$2","pointesGroup","pointerClipRectGroup","rectOptions","pointerID","getElement$2","gaugeResized","secondaryID","annotationGroup","getFontStyle$2","lineX","lineId","LinearGauge","measureText$2","actualRect","containerObject","Rect$2","convertPixelToValue","triggerDragEvent","mouseElement","getPointer$1","elementExist","renderGaugeElements","renderAxisElements","Size$3","MinMax","GeoLocation","LineOption","MapLocation","patternUnits","patternContentUnits","patternTransform","__decorate$1$12","Arrow","Border$4","TooltipSettings$3","CommonTitleSettings","Font$4","LayerSettings","ShapeSettings","DataLabelSettings$1","layerRendering","shapeRendering","markerRendering","markerMouseMove","bubbleRendering","animationComplete","animationComplete$3","legendRendering","annotationRendering","itemHighlight","BingMap","getBingMap","digit","layerType","colorMap","layersCollection","layerGroup","markerModule","featureData","currentLayer","bbox","isCustomPath","bubbleCalculation","bubbleSettings","bubbledata","renderData","currentFactor","shapeSettings","rectBounds","currentShapeData","polyLineOptions","circleOptions","checkShapeDataFields","shapeID","drawingType","groupElements","pathEle","bubble_1","bubbleG","renderBubble","labelTemplateEle","bubbleIndex","dataIndex","bubbleData","shapePropertyPath","multiPolygonDatas","layerData","calculateFactor","horFactor","verFactor","getTranslate","translatePoint","coordinates","baseMapBounds","currentCoords","xcount","ycount","zoomLevel","baseLayer","tileTranslatePoint","tile","subtile","arrangeTiles","tiles_1","availSize","annotationYValue","annotationXValue","Maps","createSVG","wireEVents","setTextStyle","Theme$2","setLabelFont","BootstrapTheme","FabricTheme","findBaseAndSubLayers","renderArea","createTile","createZoomingToolbars","addTabIndex","alignToolBar","secondaryEle","templateGroupEle","layerOffset","currentTemplate","mainLayer","baseIndex","isTileMap","groupEle","trimmedTitle","titleBounds","Rect$3","createSvg$1","removeElement$4","triggerShapeEvent","unWireEVents","isVisible$$1","findVisibleLayers","isLayerVisible","isBubblevisible","istooltipVisible","isHighlight","markers","isSelection","navigation","bubble","Bubble","colorValuePath","bubbleValue","shapeColor","shapePoints","midIndex","bubbleElement","BubbleIndex","DataIndex","transPoint","elementAnimate","animationDelay","markerSettings","markerID","markerTemplateEle","markerIndex","previousExplodeId","trackEle","removeMarkerExplode","markerEle","shapeCustom","RectOption$3","getMarker","rightWidth","dataLabelSettings","labelpath","shapePoint","shapeData","labelId","textLocation","shapes","datasrcObj","eventargs","trimmedLable","textTrim$1","xpositionEnds","xpositionStart","convertElementFromLabel","smartLabelMode","intersect","border_1","NavigationLine","navigationEle","pathOption","showArrow","arrowColor","arrowSize","arrowSettings","arrowPosition","startArrow","endArrow","legendBorderRect","interactiveLocation","legendItemRect","heightIncrement","drawLegend","topPadding","dataPath","propertyPath","legendTitle","titleTextStyle","legendItemStartX_1","legendItemStartY_1","legendMode","shapeX","shapeY","textX","textY","labelAction","arrangement","legendtitleSize","position_1","textX_1","textY_1","itemStartX","itemStartY","maxTextHeight","maxTextWidth","itemTextSize","legendText","legendItem","nextPositionY","nextPositionX","shapeLocation","DisplayText","legendTextSize","legendObj","getLegends","getRangeLegendCollection","shapeBorder","textId","shapeSize","strokeWidth","legendElement","shapeId","renderTextElement","pagingGroup","pagingFont","pagingTextSize","rightPageX","pageTextX","leftPageElement","rightPageElement","leftPageOptions","leftPath","leftRectPageOptions","rightRectPageOptions","pageTextOptions","trimTitle","imageSrc","colorMapping","rangeData_1","equalData_1","getOverallLegendItemsCollection","hoverId","legendRect","renderInteractivePointer","removeClass$1","shapeIn","navigationLineSettings","highlightSettings","selectionType","itemSelection","MapsTooltip","getTargetElement","valuePath","elementString","customTooltip","padding-right","padding-top","padding-bottom","mouseEnter","rectZoomingStart","handled","pinchFactor","startTouches","performZooming","prevScale","maxZoom","minZoom","minBounds","maxBounds","mapTotalWidth","translatePointX","translatePointY","applyTransform","mapLayerPanel","generateTiles","currentLevel","prevSize","prevLevel","zoomCalculationFactor","touchCenter","getTouches","newScale","translatePointX_1","translatePointY_1","rectSVGObject","getElementByID","layerElement","currentEle","markerTranslate","bubbleCollection","markerTemplateElement","labelX","labelY","templateOffset","y_1","panningXDirection","toolBarZooming","tileZoomFactor","xSpacing","toolbarsCollection","toolbars","toolWidth","toolHeight","toolbar_1","performToolBarAction","ySpacing","zoomColor","createTooltip$1","toolBarSize","fingers","firstMove","zoomOnClick","boundwidth","layerScale","topPos","maxOccurrence","svgElement","replaceTheme","ensureTemplate","cellMouseDown","MS_PER_DAY","HeaderRenderer","hideHeaderPopup","toolbarEle","renderToolbar","actionBegin$1","toolbarObj","headerCalendar","headerPopup","headerPopupEle","headerCalendarEle","getPopUpRelativeElement","calendarView","getCalendarView","changeDate","openEditor","Scroll$1","contentReady$1","touchLeftDirection","activeView","getTranslateX","offsetDist","eventHold","currentPanel","nextPanel","previousPanel","events.navigating","navArgs","TRANSLATE_CLASS","cancelSwipe","prevWidth","CURRENT_PANEL_CLASS","ScheduleTouch","shiftDownArrow","shiftUpArrow","shiftRightArrow","shiftLeftArrow","ctrlLeftArrow","ctrlRightArrow","altOne","altTwo","altThree","altFour","altFive","altSix","activeViewOptions","allDayRow","eventBase","WORK_CELLS_CLASS","cls.MORE_EVENT_HEADER_DATE_CLASS","ALLDAY_APPOINTMENT_SECTION_CLASS","changeView","isInverseTable","tableEle","maxRow","maxColumn","inverseCells","focusCell","addSelectedClass","cls.WORK_CELLS_CLASS","focusElements","isMoreEvent","focusFirstElement","focusElement","getNextAppointment","nextElement","appointmentElements","appointments","eventObject","rowCells","selectedEventElements","moreEventWrapper","curRowIndex","isMultiple","selectedAppointments","ALLDAY_CELLS_CLASS","maxColIndex","curColIndex","allDayRow_1","maxIndex","processTab","selectAppointments","cls.APPOINTMENT_CLASS","APPOINTMENT_CLASS","isReverse","moreEventList","activeEventData","KeyboardInteraction","Data$2","fromOffset","toOffset","fromLocalOffset","toLocalOffset","Timezone","localTimezoneName","timezoneData","Value","Text","DAYINDEX","MAXOCCURRENCE","LEAPYEAR","NORMALYEAR","WEEKPOS","TIMES","ON","EVERY","UNTIL","DAYS","WEEKS","MONTHS","YEARS","DAYINDEXOBJECT","SU","MO","TH","eventFields","generateID","eventsProcessed","processed","processedData","oldTimezone","processTimezone","startTimezone","endTimezone","zone","fieldMapping","object1","d3","d4","util.resetTime","eventStartTime","eventEndTime","util.addDays","addDays","eventLength","app","addSelectedAppointments","eventSelect","getEventByGuid","getSelectedAppointments","cls.APPOINTMENT_BORDER","APPOINTMENT_BORDER","eventsData","selectedObject","nearestTime","isAllDay","isAllDayAppointment","isFullDay","POPUP_OPEN$1","quickPopup","currentAction","getEventMaxId","currentViewDate","recurrenceRule","clonedObject","occurrenceCollection","Crud","actionArgs","addEvent","editParms","crudArgs","dataObj","exDate","recurrenceException","parentEvent","processCrudTimezone","delApp","event_3","event_4","recEvent","recEvent_1","FieldValidator","dlgContent","quickPopupElement","QuickPopups","isMultipleEventSelect","fieldValidator","renderQuickDialog","afterOpen","afterQuickPopupOpen","beforeQuickPopupOpen","primaryButton","quickDialog","dialogElement","moreEventArgs","moreEventContent","MORE_EVENT_CLOSE_CLASS","viewHeight","eventWrapper","cls.QUICK_POPUP_LOCATION_DETAILS_CLASS","cls.EVENT_ZONE_DETAILS_CLASS","cls.QUICK_POPUP_ICON_CLASS","QUICK_POPUP_LOCATION_DETAILS_CLASS","EVENT_ZONE_DETAILS_CLASS","DEVICE_DATE_TIME_DETAILS_CLASS","compile$$1","selectedEventPopup","cls.SELECTED_EVENT_DELETE_CLASS","closeClick","SELECTED_EVENT_CLOSE_CLASS","dialogFooter","quickDialogClass","createMoreEventList","eventSettings","moreEventContentEle","selectedEventDialog","MORE_INDICATOR_CLASS","cellTemplate","QUICK_POPUP_CLASS","QUICK_POPUP_DATE_TIME_DETAILS_CLASS","QUICK_POPUP_EVENT_CREATE_CLASS","quickCellPopup","flatButton","morePopup","eventTooltip","eventTemplate","QUICK_POPUP_EDIT_EVENT_CLASS","quickEventPopup","cls.MORE_EVENT_WRAPPER_CLASS","eventSelectSubject","eventTimeDetails","eventSelectDetails","cls.EVENT_NOTE_DETAILS_CLASS","getTimezone","ruleSummary","APPOINTMENT_LOCATION","details","eventSubject","startDateDetails","endDateDetails","startTimeDetail","endTimeDetail","spanLength","moreEventClick","cls.MORE_INDICATOR_CLASS","saveObj","activeCellsData","isAdaptive","eventPopup","zoneDetails","getTimeDetails","cls.QUICK_POPUP_DELETE_EVENT_CLASS","cls.QUICK_POPUP_SUBJECT_CLASS","afterMorePopupOpen","QUICK_DIALOG_EDIT_EVENT_CLASS","QUICK_DIALOG_CANCEL_CLASS","buttonElement","cls.QUICK_DIALOG_DELETE_CLASS","cls.QUICK_DIALOG_CANCEL_CLASS","cls.QUICK_DIALOG_ALERT_BTN_CLASS","cls.QUICK_DIALOG_HIDE_BTN_CLASS","cellClick","eventClick","documentClick","eventStart","eventEnd","tooltipSubject","startMonthDate","startMonthYearDate","endMonthYearDate","EventTooltip","INPUTWARAPPER","INPUTWARAPPERSIDE","REPEATINTERVAL","DAYWRAPPER","WEEKWRAPPER","YEAREXPANDERWRAPPER","YEAREXPANDERELEMENT","MONETHEXPANDERWRAPPER","MONTHEXPANDERELEMENT","MONTHEXPANNDERELEM","ENDONDATE","ENDONCOUNT","HIDEWRAPPER","PRIMARY","daily","weekly","monthly","yearly","valueData","neverClassList","weekClassList","monthClassList","none","never","third","fourth","repeatEvery","onDay","weeks","years","every","summaryTimes","summaryOn","summaryUntil","__extends$1$15","showFormElement","updateForm","selectMonthDay","RecurrenceEditor","applyCustomClass","cssClass$$1","repeatType","updateUntilDate","untilDateObj","monthWeekPos","getDayPosition","yearClassList","noEndClassList","endOnDateClassList","self","updateEndOnForm","monthDayRendering","resetFormValues","recurreneElement","btns","onWeekDay","triggerChangeEvent","radioButtonRender","positionCollection","monthposValue","ruleData","monthDate","onMonthDay","recurrenceCount","getRecurrenceStringFromDate","destroyComponents","monthWeekDays","monthButtons","resetFields","getRuleSummary","cldrObj1","getRecurrenceDates","RULEFREQ","RULEMONTHLY","getSelectedMonthData","getYearMonthRuleData","startState","EVENT_FIELD","EventWindow","renderEventWindow","getEventWindowContent","onBeforeClose","setDialogContent","dialogObject","onBeforeOpen","templeteEle","titleLocationDiv","titleDiv","renderTextBox","locationDiv","startEndDateTimeDiv","startDateTimeDiv","renderDateTimePicker","endDateTimeDiv","timezoneParentDiv","createDivElement","startTimezoneDiv","endTimezoneDiv","allDayTimezoneDiv","allDayDiv","renderCheckBox","timezoneDiv","EVENT_WINDOW_TZ_CLASS","repeatParentDiv","repeatDiv","repeatEditConainer","EVENT_WINDOW_DESCRIPTION_CLASS","parentDiv","loadRecurrenceEditor","createRecurrenceEditor","dateTimeDiv","timezoneInput","onTimezoneChange","endTimezoneObj","checkBoxDiv","checkBoxInput","getFieldName","onAllDayChange","recurrenceEditor","repeatDialogObject","repeatRule","repeatTempRule","EVENT_WINDOW_FORM_CLASS","eventObj","timezoneObj","startObj","updateDateTime","resetTime","startHour","timezoneValue","startTz","repeatStartDate","setRecurrenceRule","renderRecurrenceEditor","repeatStatus","startTimezoneObj","cls.EVENT_WINDOW_FORM_CLASS","eventSave","getValueFromElement","openValidationError","eventId","viewName","updateLabelText","WorkHours","Field","EventSettings","__extends$17$3","editorTemplate","showHeaderBar","initializePopups","setViewOptions","isModuleLoad","isOptions","allowVirtualScrolling","workDays","showWeekend","recurrenceID","crudModule","Schedule","initializeView","initializeTemplates","previousView","updateActiveView","workWeek","agenda","weekAgenda","workWeekAgenda","monthAgenda","noEvents","allDay","noTitle","deleteEvent","deleteSeries","editSeries","editEvent","addTitle","moreDetails","editContent","deleteRecurrenceContent","deleteContent","newEvent","saveButton","deleteButton","recurrence","editRecurrence","startEndError","invalidDateError","ok","keyboardInteractionModule","onScheduleResize","updateDateRange","cellTemplateFn","viewStartHour","dates_1","eventWindow","ViewBase","renderDates","getEndHour","isCurrentMonth","getDateInMs","longDateFormat","dateEle","viewOptions","cls.ALLDAY_CELLS_CLASS","isWorkCell","WorkCellInteraction","AppointmentRendering","renderedEvents","renderedAllDayEvents","overlapEvents","moreEvents","minorSlotCount","majorSlot","allDayLevel","appointmentWrapper_1","cls.ROW_COUNT_WRAPPER_CLASS","allDayElement","dateRender","startDateTime","endDateTime","allDayEvents","data-guid","appointmentDetails","APPOINTMENT_DETAILS","appointmentSubject","appointmentStartTime","appointmentEndTime","timeStr","countWrapper","innerCountWrap","currentDay","data-index","startEndHours","getAllDayCounts","datesRender","daysCount","day1","eEnd","renderAllDayEvents","length_3","filterEvents","allDayRowCell","length1","cellTop","eStart","appWidth","allDayDifference","allDayIndex","getOverlapIndex","appHeight","appointmentElement","isSpannedEvent","isDateRange","getStartEndHours","getTopValue","overlapList","cls.APPOINTMENT_WRAPPER_CLASS","appointmentWrap","appLeft","eventsList","appointment_1","appLevel","appIndex","length2","apps","setAllDayRowHeight","cls.APPOINTMENT_ROW_COLLAPSE_CLASS","uiStateValues","moreEventCount","APPOINTMENT_ROW_COLLAPSE_CLASS","eventElement","getEventHeight","cls.ALLDAY_APPOINTMENT_SECTION_CLASS","VerticalView","currentDateIndex","scrollUiUpdate","headerHeight","scrollerHeight","timecells","scrollToWorkHour","colLevels","showTimeIndicator","currentTimeEle","timelineEle","changeCurrentTimePosition","firstRow","firstCell","prevLineWidth","currentLineWidth","getTimeCellsElement","timeCellsWrap","timelineWrap","previousDateTimelineEle","currentDateTimelineEle","cls.WRAPPER_CLASS","getContentAreaElement","getTopFromDateTime","cls.OUTER_TABLE_CLASS","viewClass","workTd","scrollContainer","renderContentArea","timesTd","tbl","ntr_1","appointmentExpandCollapse","ntr","innerWrap","lastLevel","ntr_2","ntd","cls.ALLDAY_WRAPPER_CLASS","elementType","wireCellEvents","columns_2","workHours","clsName","getCellTemplate","DATE_HEADER_CONTAINER_CLASS","adjustEventWrapper","tblWidth","msMajorInterval","msInterval","msStartHour","majorTickDivider","Day","Week","WorkWeek","par","MonthEvent","eventHeight","slots","noOfDays","firstSlot","slot","dateInRange","availSlot","APPOINTMENT_SUBJECT","eventLocation","ICON$4","cls.EVENT_ICON_LEFT_CLASS","appointmentWrapper","overlapCount","appTop","diffInDays","appWidth_1","cellTd","wireAppointmentEvents","APPOINTMENT_WRAPPER_CLASS","eventRendered","cellTd_1","appArea","monthHeaderHeight","moreIndicatorClick","Month","onScrollUiUpdate","dataReady$1","onDataReady","onCellClick","renderAppointments","getHeaderElement","dayNameFormat","workCellAction","dateTd","renderDatesHeader","DATE_HEADER_WRAP_CLASS","rowsCount","createTableLayout","noOfRows","startCol","renderDateHeaderElement","dateHeader","NAVIGATE_CLASS","getRenderDates","monthStart","aTd","appSubjectWrap","recordSubject","cls.EVENT_RECURRENCE_ICON_CLASS","cls.EVENT_RECURRENCE_EDIT_ICON_CLASS","strDate","allDayStr","splited","eventElement_1","AgendaBase","Agenda","isInverseTableSelect","eTr","renderEmptyContent","agendaBase","agendaDate","cls.CONTENT_WRAP_CLASS","wireEventActions","firstDate","isObject$$1","appointmentFiltering","filterData","nTr","dTd","tBody","eTd","getDaysCount","getMobileDateElement","filterDate","emptyTBody","topElement","getElementFromScrollerPosition","scrollDate","getEndDateFromStartDate","dateStart","hideEmptyAgendaDays","agendaDaysCount","MonthAgenda","contentArea","availableHeight","workCell","appWrap","classNames$2","DropDownButton","appendArrowSpan","getPopUpElement","keyEventHandler","liIdx","activeElem","getULElement","beforeOpenArgs","dropDown","btnModel","createSecondaryButton","createPrimaryButton","btnElem","dropDownBtnModel","secondaryBtnObj"],"mappings":"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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,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,I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C3E,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/E9B,EAA8BuD,iBAC1B,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,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,EAAG,IAAK,EAAG,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,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K,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,GAMxC3D,EAA8B+D,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,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,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK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"}