{"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-dropdowns/dist/src/es5/multi-select/float-label.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-base/dist/src/es5/component.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/draggable.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/input/input.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/utils/export.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}\n/**\n * Function to generate the unique id.\n * @return {string}\n * @private\n */\nexport function uniqueID() {\n // tslint:disable-next-line:no-any\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[i];\n }\n return ret;\n}\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined } from './util';\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 ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(\\/if|\\/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\n/**\n * The function to set regular expression for template expression string.\n * @param {RegExp} value - Value expression.\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper? - Helper functions as an object.\n * @private\n */\nexport function compile(template, helper) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper);\n var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\";\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n// function used to evaluate the function expression\nfunction evalExp(str, nameSpace, helper) {\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORD, function (strs) {\n strs = strs.trim();\n return addNameSpace(strs, !(QUOTES.test(strs)) && (localKeys.indexOf(strs) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n 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 && val !== undefined && (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 if (val !== null) {\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\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 else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // tslint:disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n 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 = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n if (!isNullOrUndefined(value)) {\n li.setAttribute('data-value', value);\n }\n li.setAttribute('role', 'option');\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length) {\n append(innerElements, li);\n }\n if (dataSource && fieldData.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() +\n 'px;background-color: rgb(255, 255, 255) !important; color:black !important; ' +\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 'color:black !important' +\n 'background:#FFFFFF !important' + ';' +\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, chart.themeStyle.crosshairFill, 2, chart.themeStyle.crosshairFill, 1, null, direction)));\n textElement(new TextOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_' + i, x, y, anchor, i ? axis.endLabel : axis.startLabel), { color: chart.themeStyle.crosshairLabel, fontFamily: 'Segoe UI', fontWeight: 'Regular', size: '11px' }, chart.themeStyle.crosshairLabel, 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","/**\n * FloatLable Moduel\n * Specifies whether to display the floating label above the input element.\n */\nimport { removeClass, addClass, detach } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nvar FLOATLINE = 'e-float-line';\nvar FLOATTEXT = 'e-float-text';\nvar LABELTOP = 'e-label-top';\nvar LABELBOTTOM = 'e-label-bottom';\n/**\n * Function to create Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param element - the given html element.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function createFloatLabel(overAllWrapper, searchWrapper, element, inputElement, value, floatLabelType, placeholder) {\n var floatLinelement;\n var floatLabelElement;\n floatLinelement = createElement('span', { className: FLOATLINE });\n floatLabelElement = createElement('label', { className: FLOATTEXT });\n if (!isNullOrUndefined(element.id) && element.id !== '') {\n floatLabelElement.id = 'label_' + element.id.replace(/ /g, '_');\n attributes(element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(inputElement.placeholder) && inputElement.placeholder !== '') {\n floatLabelElement.innerHTML = inputElement.placeholder;\n inputElement.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n floatLabelElement.innerHTML = placeholder;\n }\n searchWrapper.appendChild(floatLinelement);\n searchWrapper.appendChild(floatLabelElement);\n overAllWrapper.classList.add('e-float-input');\n updateFloatLabelState(value, floatLabelElement);\n if (floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(LABELBOTTOM)) {\n removeClass([floatLabelElement], LABELBOTTOM);\n }\n addClass([floatLabelElement], LABELTOP);\n }\n}\n/**\n * Function to update status of the Float Label element.\n * @param value - Value of the MultiSelect.\n * @param label - float label element.\n */\nexport function updateFloatLabelState(value, label) {\n if (value && value.length > 0) {\n addClass([label], LABELTOP);\n removeClass([label], LABELBOTTOM);\n }\n else {\n removeClass([label], LABELTOP);\n addClass([label], LABELBOTTOM);\n }\n}\n/**\n * Function to remove Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param searchWrapper - search wrapper of multiselect.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function removeFloating(overAllWrapper, componentWrapper, searchWrapper, inputElement, value, floatLabelType, placeholder) {\n var placeholderElement = componentWrapper.querySelector('.' + FLOATTEXT);\n var floatLine = componentWrapper.querySelector('.' + FLOATLINE);\n var placeholderText;\n if (!isNullOrUndefined(placeholderElement)) {\n placeholderText = placeholderElement.innerText;\n detach(searchWrapper.querySelector('.' + FLOATTEXT));\n setPlaceHolder(value, inputElement, placeholderText);\n if (!isNullOrUndefined(floatLine)) {\n detach(searchWrapper.querySelector('.' + FLOATLINE));\n }\n }\n else {\n placeholderText = (placeholder !== null) ? placeholder : '';\n setPlaceHolder(value, inputElement, placeholderText);\n }\n overAllWrapper.classList.remove('e-float-input');\n}\n/**\n * Function to set the placeholder to the element.\n * @param value - Value of the MultiSelect.\n * @param inputElement - specify the input wrapper.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function setPlaceHolder(value, inputElement, placeholder) {\n if (value && value.length) {\n inputElement.placeholder = '';\n }\n else {\n inputElement.placeholder = placeholder;\n }\n}\n/**\n * Function for focusing the Float Element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n */\nexport function floatLabelFocus(overAllWrapper, componentWrapper) {\n overAllWrapper.classList.add('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (!isNullOrUndefined(label)) {\n addClass([label], LABELTOP);\n if (label.classList.contains(LABELBOTTOM)) {\n removeClass([label], LABELBOTTOM);\n }\n }\n}\n/**\n * Function to focus the Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function floatLabelBlur(overAllWrapper, componentWrapper, value, floatLabelType, placeholder) {\n overAllWrapper.classList.remove('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (value && value.length <= 0 && floatLabelType === 'Auto' && !isNullOrUndefined(label)) {\n if (label.classList.contains(LABELTOP)) {\n removeClass([label], LABELTOP);\n }\n addClass([label], LABELBOTTOM);\n }\n}\n","import { 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 = (typeof column.valueAccessor === 'string' ? getValue(column.valueAccessor, window)\n : column.valueAccessor) || valueAccessor;\n column.width = autoWidth && isNullOrUndefined(column.width) ? 200 : column.width;\n if (isNullOrUndefined(column.visible)) {\n column.visible = true;\n }\n columns[c] = column;\n }\n return columns;\n}\n/** @hidden */\nexport function setCssInGridPopUp(popUp, e, className) {\n var popUpSpan = popUp.querySelector('span');\n var position = popUp.parentElement.getBoundingClientRect();\n var targetPosition = e.target.getBoundingClientRect();\n var isBottomTail;\n popUpSpan.className = className;\n popUp.style.display = '';\n isBottomTail = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY) > popUp.offsetHeight + 10;\n popUp.style.top = targetPosition.top - position.top +\n (isBottomTail ? -(popUp.offsetHeight + 10) : popUp.offsetHeight + 10) + 'px'; //10px for tail element\n popUp.style.left = getPopupLeftPosition(popUp, e, targetPosition, position.left) + 'px';\n if (isBottomTail) {\n popUp.querySelector('.e-downtail').style.display = '';\n popUp.querySelector('.e-uptail').style.display = 'none';\n }\n else {\n popUp.querySelector('.e-downtail').style.display = 'none';\n popUp.querySelector('.e-uptail').style.display = '';\n }\n}\n/** @hidden */\nfunction getPopupLeftPosition(popup, e, targetPosition, left) {\n var width = popup.offsetWidth / 2;\n var x = getPosition(e).x;\n if (x - targetPosition.left < width) {\n return targetPosition.left - left;\n }\n else if (targetPosition.right - x < width) {\n return targetPosition.right - left - width * 2;\n }\n else {\n return x - left - width;\n }\n}\n/** @hidden */\nexport function getActualProperties(obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n}\n/** @hidden */\nexport function parentsUntil(elem, selector, isID) {\n var parent = elem;\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n break;\n }\n parent = parent.parentElement;\n }\n return parent;\n}\n/** @hidden */\nexport function getElementIndex(element, elements) {\n var index = -1;\n for (var i = 0, len = elements.length; i < len; i++) {\n if (elements[i].isEqualNode(element)) {\n index = i;\n break;\n }\n }\n return index;\n}\n/** @hidden */\nexport function inArray(value, collection) {\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[i] === value) {\n return i;\n }\n }\n return -1;\n}\n/** @hidden */\nexport function getActualPropFromColl(collection) {\n var coll = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[i].hasOwnProperty('properties')) {\n coll.push(collection[i].properties);\n }\n else {\n coll.push(collection[i]);\n }\n }\n return coll;\n}\n/** @hidden */\nexport function removeElement(target, selector) {\n var elements = [].slice.call(target.querySelectorAll(selector));\n for (var i = 0; i < elements.length; i++) {\n remove(elements[i]);\n }\n}\n/** @hidden */\nexport function getPosition(e) {\n var position = {};\n position.x = (isNullOrUndefined(e.clientX) ? e.changedTouches[0].clientX :\n e.clientX);\n position.y = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY);\n return position;\n}\nvar uid = 0;\n/** @hidden */\nexport function getUid(prefix) {\n return prefix + uid++;\n}\n/** @hidden */\nexport function appendChildren(elem, children) {\n for (var i = 0, len = children.length; i < len; i++) {\n if (len === children.length) {\n elem.appendChild(children[i]);\n }\n else {\n elem.appendChild(children[0]);\n }\n }\n return elem;\n}\n/** @hidden */\nexport function parents(elem, selector, isID) {\n var parent = elem;\n var parents = [];\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\n/** @hidden */\nexport function calculateAggregate(type, data, column, context) {\n if (type === 'Custom') {\n var temp = column.customAggregate;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n return temp ? temp.call(context, data, column) : '';\n }\n return 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 if (type === 'add' && col.isIdentity && col.isPrimaryKey) {\n return false;\n }\n else {\n if (isOldRow && !col.allowEditing && !col.isIdentity && !col.isPrimaryKey) {\n return false;\n }\n return true;\n }\n}\n/** @hidden */\nexport function isActionPrevent(inst) {\n var dlg = inst.element.querySelector('#' + inst.element.id + 'EditConfirm');\n return inst.editSettings.mode === 'Batch' &&\n (inst.element.querySelectorAll('.e-updatedtd').length) && inst.editSettings.showConfirmDialog &&\n (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/** @hidden */\nexport function wrap(elem, action) {\n var clName = 'e-wrap';\n elem = elem instanceof Array ? elem : [elem];\n for (var i = 0; i < elem.length; i++) {\n action ? elem[i].classList.add(clName) : elem[i].classList.remove(clName);\n }\n}\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 key = isNullOrUndefined(key) ? '' : key;\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 if (filterObject.setProperties) {\n filterObject.setProperties({ ejpredicate: datePredicate }, true);\n }\n else {\n filterObject.ejpredicate = datePredicate;\n }\n return datePredicate;\n}\n/**\n * @hidden\n */\nexport function renderMovable(ele, frzCols) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < frzCols; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = frzCols, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n}\n","/**\n * 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 = (mapModel.isTileMap) ? Math.pow(2, 1) * 256 : (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) {\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 }\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 htmlObject.style['user-select'] = 'none';\n htmlObject.style['-moz-user-select'] = 'none';\n htmlObject.style['-webkit-touch-callout'] = 'none';\n htmlObject.style['-webkit-user-select'] = 'none';\n htmlObject.style['-khtml-user-select'] = 'none';\n htmlObject.style['-ms-user-select'] = 'none';\n htmlObject.style['-o-user-select'] = 'none';\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 childElement = createElement('div', {\n id: markerId,\n styles: 'position: absolute;pointer-events: auto;'\n });\n while (element.length > 0) {\n childElement.appendChild(element[0]);\n }\n var templateHtml = childElement.innerHTML;\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 childElement.innerHTML = templateHtml;\n return childElement;\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, animate) {\n var zoomFactor = animate ? 1 : 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 = animate ? 1 : mapObject.zoomSettings.zoomFactor;\n var scaleFactor;\n var scaleX;\n var scaleY;\n var center = mapObject.centerPosition;\n if (!isNullOrUndefined(center.longitude) && !isNullOrUndefined(center.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 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 var targetEle = null;\n if (document.getElementById(elementSelector)) {\n targetEle = document.getElementById(elementSelector).querySelector('#' + args);\n }\n return targetEle;\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}\nexport function timeout(id) {\n removeElement(id);\n}\nexport function showTooltip(text, size, x, y, areaWidth, areaHeight, id, element, isTouch) {\n var tooltip = document.getElementById(id);\n var width = measureText(text, {\n fontFamily: 'Segoe UI', size: '8px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n }).width;\n var str = text.split(' ');\n var demo = str[0].length;\n for (var i = 1; i < str.length; i++) {\n if (demo < str[i].length) {\n demo = str[i].length;\n }\n }\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id,\n styles: 'background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(0, 0, 0); padding-left:5px;' +\n 'font-size:12px; font-family: \"Segoe UI\"; text-align:center'\n });\n }\n if (x < (areaWidth - width)) {\n x = x;\n }\n else if (x > (areaWidth - width) && x < areaWidth - (demo * 8)) {\n width = (areaWidth - x);\n }\n else if (x >= areaWidth - demo * 8) {\n if (x > width) {\n x = x - width;\n }\n else {\n width = x;\n x = 0;\n }\n }\n var size1 = size.split('px');\n wordWrap(tooltip, text, x, y, size1, width, areaWidth, element);\n var height = tooltip.clientHeight;\n if ((height + parseInt(size1[0], 10) * 2) > areaHeight) {\n width = x;\n x = 0;\n }\n wordWrap(tooltip, text, x, y, size1, width, areaWidth, element);\n if (isTouch) {\n setTimeout(timeout, 5000, id);\n }\n}\nexport function wordWrap(tooltip, text, x, y, size1, width, areaWidth, element) {\n tooltip.innerHTML = text;\n tooltip.style.top = (y + parseInt(size1[0], 10)).toString() + 'px';\n tooltip.style.left = (x).toString() + 'px';\n tooltip.style.width = width.toString() + 'px';\n tooltip.style.maxWidth = (areaWidth).toString() + 'px';\n tooltip.style.wordWrap = 'break-word';\n element.appendChild(tooltip);\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/** @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 * Animation Effect Calculation End\n * @private\n */\nexport function zoomAnimate(element, delay, duration, point, scale, size, maps) {\n var delta = 0;\n var previousLocation = maps.previousPoint;\n var preScale = maps.previousScale;\n var diffScale = scale - preScale;\n var currentLocation = new MapLocation(0, 0);\n var currentScale = 1;\n if (scale === preScale) {\n element.setAttribute('transform', 'scale( ' + (scale) + ' ) translate( ' + point.x + ' ' + point.y + ' )');\n return;\n }\n var slope = function (previousLocation, point) {\n if (previousLocation.x === point.x) {\n return null;\n }\n return (point.y - previousLocation.y) / (point.x - previousLocation.x);\n };\n var intercept = function (point, slopeValue) {\n if (slopeValue === null) {\n return point.x;\n }\n return point.y - slopeValue * point.x;\n };\n var slopeFactor = slope(previousLocation, point);\n var slopeIntersection = intercept(previousLocation, slopeFactor);\n var horizontalDifference = point.x - previousLocation.x;\n var verticalDifference = point.y - previousLocation.y;\n animate(element, delay, duration, function (args) {\n if (args.timeStamp > args.delay) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n currentScale = preScale + (delta * diffScale);\n currentLocation.x = previousLocation.x + (delta * horizontalDifference) / (currentScale / scale);\n if (slopeFactor == null) {\n currentLocation.y = previousLocation.y + (delta * verticalDifference);\n }\n else {\n currentLocation.y = ((slopeFactor * currentLocation.x) + slopeIntersection);\n }\n args.element.setAttribute('transform', 'scale( ' + currentScale + ' ) ' +\n 'translate( ' + currentLocation.x + ' ' + currentLocation.y + ' )');\n maps.translatePoint = currentLocation;\n maps.scale = currentScale;\n maps.zoomModule.processTemplate(point.x, point.y, currentScale, maps);\n }\n }, function () {\n maps.translatePoint = point;\n maps.scale = scale;\n element.setAttribute('transform', 'scale( ' + (scale) + ' ) translate( ' + point.x + ' ' + point.y + ' )');\n maps.zoomModule.processTemplate(point.x, point.y, scale, maps);\n });\n}\n/**\n * To process custom animation\n */\nexport function animate(element, delay, duration, process, end) {\n var _this = this;\n var start = null;\n var clearAnimation;\n var startAnimation = function (timestamp) {\n if (!start) {\n start = timestamp;\n }\n var progress = timestamp - start;\n if (progress < duration) {\n process.call(_this, { element: element, delay: 0, timeStamp: progress, duration: duration });\n window.requestAnimationFrame(startAnimation);\n }\n else {\n window.cancelAnimationFrame(clearAnimation);\n end.call(_this, { element: element });\n }\n };\n clearAnimation = window.requestAnimationFrame(startAnimation);\n}\nvar MapAjax = /** @class */ (function () {\n function MapAjax(url, sendData) {\n this.url = null;\n this.sendData = null;\n this.url = url;\n this.sendData = sendData;\n }\n return MapAjax;\n}());\nexport { MapAjax };\n/**\n * Animation Translate\n * @private\n */\nexport function smoothTranslate(element, delay, duration, point) {\n var delta = 0;\n var transform = element.getAttribute('transform').split(' ');\n if (transform.length === 2) {\n transform[2] = transform[1].split(')')[0];\n transform[1] = transform[0].split('(')[1];\n }\n var previousLocation = new MapLocation(parseInt(transform[1], 10), parseInt(transform[2], 10));\n var diffx = point.x - previousLocation.x;\n var diffy = point.y - previousLocation.y;\n var currentLocation = new MapLocation(0, 0);\n animate(element, delay, duration, function (args) {\n if (args.timeStamp > args.delay) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n currentLocation.x = previousLocation.x + (delta * diffx);\n currentLocation.y = previousLocation.y + (delta * diffy);\n args.element.setAttribute('transform', 'translate( ' + currentLocation.x + ' ' + currentLocation.y + ' )');\n }\n }, function () {\n element.setAttribute('transform', 'translate( ' + point.x + ' ' + point.y + ' )');\n });\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.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n ;\n /**\n * To attach handler for given property in current context.\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @return {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n this.boundedEvents[property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n * @param {string} eventName - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @return {void}\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n else if (handler === curObject[i].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} args - Additional parameters to pass while calling the handler.\n * @return {void}\n */\n Observer.prototype.notify = function (property, argument) {\n if (this.notExist(property)) {\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var curObject = getValue(property, this.boundedEvents).slice(0);\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n };\n /**\n * To destroy handlers in the event\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n */\n Observer.prototype.notExist = function (prop) {\n return this.boundedEvents.hasOwnProperty(prop) === false;\n };\n /**\n * Returns if the handler is present.\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue } 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 { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\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 = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.currencyFormatRegex = /(^[ca]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n \"1-alt-variant\": \"Common Era\"\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': \"{1} 'at' {0}\",\n 'long': \"{1} 'at' {0}\",\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y',\n },\n }\n }\n },\n 'timeZoneNames': {\n \"hourFormat\": \"+HH:mm;-HH:mm\",\n \"gmtFormat\": \"GMT{0}\",\n \"gmtZeroFormat\": \"GMT\",\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n },\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###',\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n * @private\n * @param {string} skeleton\n * @param {Object} dateObject\n * @param {string} type\n * @returns {string}\n */\n function getResultantPattern(skeleton, dateObject, type) {\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] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n cOptions.useGrouping = integerPart.indexOf(',') !== -1;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n cOptions.groupSeparator = dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/\\'/g, '');\n cOptions.nend = cOptions.nend.replace(/\\'/g, '');\n }\n return cOptions;\n }\n /**\n * Returns formatting options for currency or percent type\n * @private\n * @param {string[]} parts\n * @param {string} actual\n * @param {string} symbol\n * @returns {NegativeData}\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[i];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n * @private\n * @param {Object} dateObj\n * @returns {string}\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[d‏M‏]([^d‏M])[d‏M‏]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n * @private\n * @param {string} culture\n * @param {DateFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture);\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n /**\n * Returns Native Number pattern\n * @private\n * @param {string} culture\n * @param {NumberFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualNumberFormat(culture, options, cldr) {\n var dependable = getDependables(cldr, culture, true);\n var parseOptions = { custom: true };\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n if (curMatch) {\n var dOptions = {};\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = (split.length > 1);\n curObj.nData = getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency') {\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent') {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/\\'/g, '\"');\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n})(IntlBase || (IntlBase = {}));\n","/**\n * To import utils\n */\nimport { isNullOrUndefined } from './util';\n/**\n * @private\n */\nvar CanvasRenderer = /** @class */ (function () {\n /* End-Properties */\n function CanvasRenderer(rootID) {\n this.rootId = rootID;\n }\n // method to get the attributes value\n /* tslint:disable */\n CanvasRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n /* tslint:enable */\n /**\n * To create a Html5 canvas element\n * @param {BaseAttibutes} options - Options to create canvas\n * @return {HTMLCanvasElement}\n */\n CanvasRenderer.prototype.createCanvas = function (options) {\n var canvasObj = document.createElement('canvas');\n canvasObj.setAttribute('id', this.rootId + '_canvas');\n this.ctx = canvasObj.getContext('2d');\n this.canvasObj = canvasObj;\n this.setCanvasSize(options.width, options.height);\n return this.canvasObj;\n };\n /**\n * To set the width and height for the Html5 canvas element\n * @param {number} width - width of the canvas\n * @param {number} height - height of the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.setCanvasSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width)) {\n this.canvasObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.canvasObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height)) {\n this.canvasObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.canvasObj.setAttribute('height', this.height.toString());\n }\n };\n // To set the values to the attributes\n CanvasRenderer.prototype.setAttributes = function (options) {\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n var dashArray = this.getOptionValue(options, 'stroke-dasharray');\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n this.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n this.ctx.strokeStyle = this.getOptionValue(options, 'stroke');\n };\n /**\n * To draw a line\n * @param {LineAttributes} options - required options to draw a line on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawLine = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.moveTo(options.x1, options.y1);\n this.ctx.lineTo(options.x2, options.y2);\n this.ctx.stroke();\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a rectangle\n * @param {RectAttributes} options - required options to draw a rectangle on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawRectangle = function (options) {\n var canvasCtx = this.ctx;\n var cornerRadius = options.rx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.globalAlpha = this.getOptionValue(options, 'opacity');\n this.setAttributes(options);\n this.ctx.rect(options.x, options.y, options.width, options.height);\n if (cornerRadius !== null && cornerRadius >= 0) {\n this.drawCornerRadius(options);\n }\n else {\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n this.ctx.fillRect(options.x, options.y, options.width, options.height);\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n // To draw the corner of a rectangle\n CanvasRenderer.prototype.drawCornerRadius = function (options) {\n var cornerRadius = options.rx;\n var x = options.x;\n var y = options.y;\n var width = options.width;\n var height = options.height;\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n if (width < 2 * cornerRadius) {\n cornerRadius = width / 2;\n }\n if (height < 2 * cornerRadius) {\n cornerRadius = height / 2;\n }\n this.ctx.beginPath();\n this.ctx.moveTo(x + width - cornerRadius, y);\n this.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n this.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n this.ctx.arcTo(x, y + height, x, y, cornerRadius);\n this.ctx.arcTo(x, y, x + width, y, cornerRadius);\n this.ctx.closePath();\n this.ctx.fill();\n this.ctx.stroke();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a path on the canvas\n * @param {PathAttributes} options - options needed to draw path\n * @param {Int32Array} canvasTranslate - Array of numbers to translate the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawPath = function (options, canvasTranslate) {\n var path = options.d;\n var dataSplit = path.split(' ');\n var borderWidth = this.getOptionValue(options, 'stroke-width');\n var canvasCtx = this.ctx;\n var flag = true;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = options.opacity ? options.opacity : this.getOptionValue(options, 'fill-opacity');\n this.setAttributes(options);\n for (var i = 0; i < dataSplit.length; i = i + 3) {\n var x1 = parseFloat(dataSplit[i + 1]);\n var y1 = parseFloat(dataSplit[i + 2]);\n switch (dataSplit[i]) {\n case 'M':\n if (!options.innerR && !options.cx) {\n this.ctx.moveTo(x1, y1);\n }\n break;\n case 'L':\n if (!options.innerR) {\n this.ctx.lineTo(x1, y1);\n }\n break;\n case 'C':\n var c1 = parseFloat(dataSplit[i + 3]);\n var c2 = parseFloat(dataSplit[i + 4]);\n var c3 = parseFloat(dataSplit[i + 5]);\n var c4 = parseFloat(dataSplit[i + 6]);\n this.ctx.bezierCurveTo(x1, y1, c1, c2, c3, c4);\n i = i + 4;\n break;\n case 'A':\n if (!options.innerR) {\n if (options.cx) {\n this.ctx.arc(options.cx, options.cy, options.radius, 0, 2 * Math.PI, options.counterClockWise);\n }\n else {\n this.ctx.moveTo(options.x, options.y);\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.lineTo(options.x, options.y);\n }\n }\n else if (flag) {\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.arc(options.x, options.y, options.innerR, options.end, options.start, !options.counterClockWise);\n flag = false;\n }\n i = i + 5;\n break;\n case 'z':\n this.ctx.closePath();\n break;\n }\n }\n if (options.fill !== 'none' && options.fill !== undefined) {\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n }\n if (borderWidth > 0) {\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a text\n * @param {TextAttributes} options - options required to draw text\n * @param {string} label - Specifies the text which has to be drawn on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawText = function (options, label) {\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontSize = this.getOptionValue(options, 'font-size');\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n var anchor = this.getOptionValue(options, 'text-anchor');\n var opacity = options.opacity !== undefined ? options.opacity : 1;\n if (anchor === 'middle') {\n anchor = 'center';\n }\n this.ctx.save();\n this.ctx.fillStyle = options.fill;\n this.ctx.font = font;\n this.ctx.textAlign = anchor;\n this.ctx.globalAlpha = opacity;\n if (options.baseline) {\n this.ctx.textBaseline = options.baseline;\n }\n var txtlngth = 0;\n this.ctx.translate(options.x + (txtlngth / 2), options.y);\n this.ctx.rotate(options.labelRotation * Math.PI / 180);\n this.ctx.fillText(label, 0, 0);\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw circle on the canvas\n * @param {CircleAttributes} options - required options to draw the circle\n * @return {void}\n */\n CanvasRenderer.prototype.drawCircle = function (options) {\n var canvasCtx = this.ctx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n this.ctx.fillStyle = options.fill;\n this.ctx.globalAlpha = options.opacity;\n this.ctx.fill();\n this.setAttributes(options);\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw polyline\n * @param {PolylineAttributes} options - options needed to draw polyline\n * @return {void}\n */\n CanvasRenderer.prototype.drawPolyline = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n var points = options.points.split(' ');\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i].split(',');\n var x = parseFloat(point[0]);\n var y = parseFloat(point[1]);\n if (i === 0) {\n this.ctx.moveTo(x, y);\n }\n else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an ellipse on the canvas\n * @param {EllipseAttributes} options - options needed to draw ellipse\n * @return {void}\n */\n CanvasRenderer.prototype.drawEllipse = function (options) {\n var canvasCtx = this.ctx;\n var circumference = Math.max(options.rx, options.ry);\n var scaleX = options.rx / circumference;\n var scaleY = options.ry / circumference;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.translate(options.cx, options.cy);\n this.ctx.save();\n this.ctx.scale(scaleX, scaleY);\n this.ctx.arc(0, 0, circumference, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n this.ctx.restore();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an image\n * @param {ImageAttributes} options - options required to draw an image on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawImage = function (options) {\n this.ctx.save();\n var imageObj = new Image();\n if (!isNullOrUndefined(options.href)) {\n imageObj.src = options.href;\n this.ctx.drawImage(imageObj, options.x, options.y, options.width, options.height);\n }\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To create a linear gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\n */\n CanvasRenderer.prototype.createLinearGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createLinearGradient(0, 0, 0, this.canvasObj.height);\n }\n var color = this.setGradientValues(colors, myGradient);\n return color;\n };\n /**\n * To create a radial gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\n */\n CanvasRenderer.prototype.createRadialGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createRadialGradient(0, 0, 0, 0, 0, this.canvasObj.height);\n }\n var colorName = this.setGradientValues(colors, myGradient);\n return colorName;\n };\n // To set the gradient values\n CanvasRenderer.prototype.setGradientValues = function (colors, myGradient) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n for (var i = 0; i <= colors.length - 1; i++) {\n var color = colors[i].color;\n var newColorStop = (colors[i].colorStop).slice(0, -1);\n var stopColor = parseInt(newColorStop, 10) / 100;\n myGradient.addColorStop(stopColor, color);\n }\n colorName = myGradient.toString();\n }\n else {\n colorName = colors[0].color.toString();\n }\n this.dataUrl = this.canvasObj.toDataURL();\n return colorName;\n };\n /**\n * To set the attributes to the element\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {HTMLElement} element - The element to which the attributes need to be set\n * @return {HTMLElement}\n */\n CanvasRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n var values = Object.keys(options).map(function (key) { return options[key]; });\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], values[i]);\n }\n return element;\n };\n /**\n * To update the values of the canvas element attributes\n * @param {SVGCanvasAttributes} options - Specifies the colors required to create gradient\n * @return {void}\n */\n CanvasRenderer.prototype.updateCanvasAttributes = function (options) {\n this.setElementAttributes(options, this.canvasObj);\n var ctx = this.ctx;\n if (!isNullOrUndefined(this.dataUrl)) {\n var img_1 = new Image;\n img_1.onload = function () {\n ctx.drawImage(img_1, 0, 0);\n };\n img_1.src = this.dataUrl;\n }\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n ;\n /**\n * Inject required modules in component library\n * @return {void}\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[i];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n * @return {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n * @param {ModuleDeclaration[]} moduleList\n * @returns {void}\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n * @param {string} name\n * @returns {string}\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n * @param {string} modName\n * @returns {boolean}\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { getValue, setValue, merge } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.setProperties(defaultValue, true);\n this.isParentArray = isArray;\n }\n /**\n * Updates the property changes\n * @param {boolean} val\n * @param {string} propName\n * @returns {void}\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n * @param {Object} prop\n * @param {boolean} muteOnChange\n * {void}\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n * @param {string} key\n * @param {Object} newValue\n * @param {Object} oldValue\n * @returns {void}\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue } from '../util';\nvar latnRegex = /^[0-9]*$/;\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object}\n */\n ParserBase.getMainObject = function (obj, cName) {\n return getValue('main.' + cName, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object}\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object}\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n /* tslint:disable no-any */\n if (!res.hasOwnProperty(prop[key])) {\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp}\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n }).join('|');\n return new RegExp(regexStr, 'g');\n };\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n * @param {string} val\n * @returns {string}\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[i] + '|';\n }\n else {\n ret += val[i];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string}\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n * @param {Object} obj\n * @returns {NumericObject}\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n ret.numberParseRegex = new RegExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n * @param {Object} curObj\n * @param {Object} numberSystem\n * @param {boolean} isNumber\n * @returns {NumberMapper}\n */\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n","import { isUndefined, throwError, isNullOrUndefined, extend } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits',\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} object- Specifies the global cldr data collection.\n * @return Function.\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, true);\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode);\n /* tslint:disable no-any */\n dOptions.percentSymbol = dOptions.numberMapper.numberSymbols[percentSign];\n dOptions.minusSymbol = dOptions.numberMapper.numberSymbols[minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n * @param {string} pattern\n * @returns {GroupDetails}\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n * @param {number} val1\n * @param {number} val2\n * @param {boolean} checkbothExist\n * @param {boolean} isFraction\n * @returns {boolean}\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n * @param {number} val\n * @param {string} text\n * @param {boolean} isFraction\n * @returns {void}\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n * @param {number} value\n * @param {base.GenericFormatOptions} fOptions\n * @param {CommonOptions} dOptions\n * @returns {string}\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n * @param {string} val\n * @param {number} level1\n * @param {string} sep\n * @param {string} decimalSymbol\n * @param {number} level2\n * @returns {string}\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n * @param {string} value\n * @param {number} min\n * @returns {string}\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","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","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, uniqueID } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n _this.needsID = false;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n _this.detectFunction = new Function('args', 'var prop = Object.keys(args); if(prop.length){this[prop[0]] = args[prop[0]];}');\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n ;\n /**\n * Destroys the sub modules while destroying the widget\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n /**\n * Appends the control within the given HTML element\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = document.querySelector(selector);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n this.render();\n this.trigger('created');\n }\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n ;\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @return {void}\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @return {void}\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @return {void}\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n ;\n /**\n * Dynamically injects the required modules to the component.\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {\n this.prototype.injectedModules.push(moduleList[i]);\n }\n }\n };\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.mergePersistData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n };\n Component.prototype.clearTemplate = function (templateName) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // tslint:disable-next-line:no-any\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n return new RegExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection \n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined } from '../util';\nimport { datePartMatcher } from './date-formatter';\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 ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n","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 { 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","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 setClearButton(args.properties.showClearButton, args.element, inputObject, true);\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, inputObject, initial) {\n var button = createElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button);\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 function setClearButton(isClear, element, inputObject, initial) {\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial);\n }\n else {\n inputObject.clearButton.remove();\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n * @param attrs\n * - Array of attributes which are need to removed from the element.\n * @param element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n * @param attrs\n * - Array of attributes which is added to element.\n * @param element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton) {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder) {\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","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 if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content':\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n break;\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n 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 var classArray = [];\n for (var j = 0; j < this.element.classList.length; j++) {\n if (!isNullOrUndefined(this.element.classList[j].match('e-control')) ||\n !isNullOrUndefined(this.element.classList[j].match(ROOT))) {\n classArray.push(this.element.classList[j]);\n }\n }\n removeClass([this.element], classArray);\n this.clonedEle = this.element.cloneNode(true);\n this.closeIconClickEventHandler = function (event) {\n _this.hide();\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.isModal) {\n this.setOverlayZindex();\n }\n if (this.visible) {\n this.show();\n }\n else {\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n }\n }\n };\n Dialog.prototype.setOverlayZindex = function () {\n var zIndex = parseInt(this.element.style.zIndex, 10) ? parseInt(this.element.style.zIndex, 10) : this.zIndex;\n this.dlgOverlay.style.zIndex = (zIndex - 1).toString();\n this.dlgContainer.style.zIndex = zIndex.toString();\n };\n Dialog.prototype.positionChange = function () {\n if (!this.isModal) {\n 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 if (this.isModal) {\n this.setOverlayZindex();\n }\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.X = this.position.X;\n this.popupObj.position.Y = this.position.Y;\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 while (this.element.attributes.length > 0) {\n this.element.removeAttribute(this.element.attributes[0].name);\n }\n for (var k = 0; k < this.clonedEle.attributes.length; k++) {\n this.element.setAttribute(this.clonedEle.attributes[k].name, this.clonedEle.attributes[k].value);\n }\n }\n };\n /**\n * Binding event to the element while widget creation\n * @hidden\n */\n Dialog.prototype.wireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.add(this.closeIcon, 'click', this.closeIconClickEventHandler, this);\n }\n if (this.isModal) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n /**\n * Unbinding event to the element while widget destroy\n * @hidden\n */\n Dialog.prototype.unWireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.remove(this.closeIcon, 'click', this.closeIconClickEventHandler);\n }\n if (this.isModal) {\n EventHandler.remove(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler);\n }\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n for (var i = 0; i < this.buttons.length; i++) {\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.remove(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click);\n }\n }\n }\n };\n /**\n * 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.setProperties({ visible: true }, 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.setProperties({ visible: false }, true);\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 if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\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 showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n });\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (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.container.childNodes[1]);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container);\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.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide'))) {\n this.clear(e);\n }\n };\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, '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.isKeyDown = true;\n this.updateValue(this.instance.getNumberParser({ format: 'n' })(this.element.value));\n this.isKeyDown = false;\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 if (!this.isKeyDown) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = void 0;\n var decimalPart = value.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n ;\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = value;\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n ;\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals;\n var currentValue = this.value;\n var decimalPart = currentValue.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n ;\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n ;\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n ;\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (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 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper);\n break;\n case 'value':\n this.updateValue(newProp.value);\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n break;\n case 'currencyCode':\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (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 if (typeof _this.rules === 'undefined') {\n _this.rules = {};\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, Browser } 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 && !isNullOrUndefined(this.listParent)) {\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 name = this.element.getAttribute('name');\n var formData = new FormData();\n formData.append(name, 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 if (Browser.info.name !== 'msie') {\n this.element.value = '';\n }\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 if (Browser.info.name === 'msie') {\n iconElement.classList.add('e-msie');\n }\n if (listItem.statusCode !== '2') {\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n }\n else {\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\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 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 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 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 jsonData.length && groupedArray || jsonData;\n };\n /**\n * It is used to categorize the multiple items based on a specific field in jsonArray.\n * The hierarchical queries are commonly required when you use foreign key binding.\n * @param {string} fKey\n * @param {string} from\n * @param {Object[]} source\n * @param {Group} lookup?\n * @param {string} pKey?\n * @hidden\n */\n DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n var i;\n var grp = {};\n var temp;\n if (lookup.result) {\n lookup = lookup.result;\n }\n if (lookup.GroupGuid) {\n this.throwError('DataManager: Do not have support Grouping in hierarchy');\n }\n for (i = 0; i < lookup.length; i++) {\n var fKeyData = this.getObject(fKey, lookup[i]);\n temp = grp[fKeyData] || (grp[fKeyData] = []);\n temp.push(lookup[i]);\n }\n for (i = 0; i < source.length; i++) {\n var fKeyData = this.getObject(pKey || fKey, source[i]);\n source[i][from] = grp[fKeyData];\n }\n };\n /**\n * The method used to get the field names which started with specified characters.\n * @param {Object} obj\n * @param {string[]} fields?\n * @param {string} prefix?\n * @hidden\n */\n DataUtil.getFieldList = function (obj, fields, prefix) {\n if (prefix === undefined) {\n prefix = '';\n }\n if (fields === undefined || fields === null) {\n return this.getFieldList(obj, [], prefix);\n }\n var copyObj = obj;\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n }\n else {\n fields.push(prefix + prop);\n }\n }\n return fields;\n };\n /**\n * Gets the value of the property in the given object.\n * The complex object can be accessed by providing the field names concatenated with dot(.).\n * @param {string} nameSpace - The name of the property to be accessed.\n * @param {Object} from - Defines the source object.\n */\n DataUtil.getObject = function (nameSpace, from) {\n if (!nameSpace) {\n return from;\n }\n if (!from) {\n return undefined;\n }\n if (nameSpace.indexOf('.') === -1) {\n return from[nameSpace];\n }\n var value = from;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length; i++) {\n if (value == null) {\n break;\n }\n value = value[splits[i]];\n }\n return value;\n };\n /**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object.\n * @param {Object} value - Value that you need to set.\n * @param {Object} obj - Object to get the inner object value.\n * @return { [key: string]: Object; } | Object\n * @hidden\n */\n DataUtil.setValue = function (nameSpace, value, obj) {\n var keys = nameSpace.toString().split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? undefined : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n };\n /**\n * Sort the given data based on the field and comparer.\n * @param {Object[]} ds - Defines the input data.\n * @param {string} field - Defines the field to be sorted.\n * @param {Function} comparer - Defines the comparer function used to sort the records.\n */\n DataUtil.sort = function (ds, field, comparer) {\n if (ds.length <= 1) {\n return ds;\n }\n var middle = parseInt((ds.length / 2).toString(), 10);\n var left = ds.slice(0, middle);\n var right = ds.slice(middle);\n left = this.sort(left, field, comparer);\n right = this.sort(right, field, comparer);\n return this.merge(left, right, field, comparer);\n };\n DataUtil.ignoreDiacritics = function (value) {\n if (typeof value !== 'string') {\n return value;\n }\n var result = value.split('');\n var newValue = result.map(function (temp) { return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp; });\n return newValue.join('');\n };\n DataUtil.merge = function (left, right, fieldName, comparer) {\n var result = [];\n var current;\n while (left.length > 0 || right.length > 0) {\n if (left.length > 0 && right.length > 0) {\n if (comparer) {\n current = comparer(this.getVal(left, 0, fieldName), this.getVal(right, 0, fieldName)) <= 0 ? left : right;\n }\n else {\n current = left[0][fieldName] < left[0][fieldName] ? left : right;\n }\n }\n else {\n current = left.length > 0 ? left : right;\n }\n result.push(current.shift());\n }\n return result;\n };\n DataUtil.getVal = function (array, index, field) {\n return field ? this.getObject(field, array[index]) : array[index];\n };\n DataUtil.toLowerCase = function (val) {\n return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';\n };\n /**\n * To perform the filter operation with specified adaptor and returns the result.\n * @param {Object} adaptor\n * @param {string} fnName\n * @param {Object} param1?\n * @param {Object} param2?\n * @hidden\n */\n DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n if (fnName in adaptor) {\n var res = adaptor[fnName](param1, param2);\n if (!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 result;\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n result = DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n return isNullOrUndefined(result) ? null : result;\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 result;\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n /* tslint:disable-next-line:no-any */\n result = DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n return isNullOrUndefined(result) ? null : result;\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 return _this;\n }\n RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName) {\n _super.prototype.insert.call(this, dm, data, null, null, 0);\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: data,\n table: tableName,\n action: 'insert'\n })\n };\n };\n RemoteSaveAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n _super.prototype.remove.call(this, dm, keyField, value);\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n })\n };\n };\n RemoteSaveAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n _super.prototype.update.call(this, dm, keyField, value);\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 * 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.adaptor.processResponse(DataUtil.parse.parseJson(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(record);\n };\n ajax.onFailure = function (e) {\n defer.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests.\n return defer.promise;\n };\n return DataManager;\n}());\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (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 listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist'\n};\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n *
\n *
    \n *
  • Favourite
  • \n *
  • Documents
  • \n *
  • Downloads
  • \n *
\n *
\n * ```\n * ```typescript\n * var lvObj = new ListView({});\n * lvObj.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n */\n function ListView(options, element) {\n 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 (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData = void 0;\n checkboxElement = createCheckBox(false, { checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string') {\n fieldData = getFieldValues(args.curData, this.listBaseOption.fields);\n if (!this.resetList && fieldData[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(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.checkInternally(args, checkboxElement);\n }\n }\n else if ((typeof this.dataSource[0] === 'string' && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n args.item.setAttribute('aria-selected', 'true');\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * It is used to check the checkbox of an item.\n * @param {Fields | HTMLElement} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n checked ? liElement.classList.add(classNames.selected) : liElement.classList.remove(classNames.selected);\n liElement.setAttribute('aria-selected', checked ? 'true' : 'false');\n checked ? checkboxIcon.classList.add(classNames.checked) : checkboxIcon.classList.remove(classNames.checked);\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n }\n };\n /**\n * It is used to uncheck the checkbox of an item.\n * @param {Fields | HTMLElement} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.unCheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * It is used to check all the items in ListView.\n */\n ListView.prototype.checkAllItem = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * It is used to un-check all the items in ListView.\n */\n ListView.prototype.unCheckAllItem = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.unCheckItem(this.liCollection[i]);\n }\n }\n }\n }\n };\n ListView.prototype.setCheckbox = function () {\n var _this = this;\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args_1 = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n liCollection.forEach(function (element) {\n args_1.item = element;\n args_1.curData = _this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n _this.renderCheckbox(args_1);\n if (args_1.item.classList.contains(classNames.selected)) {\n _this.checkInternally(args_1, args_1.item.querySelector('.' + classNames.checkboxWrapper));\n }\n });\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n liCollection.forEach(function (element) {\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n });\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n ListView.prototype.clickHandler = function (e) {\n var target = e.target;\n var classList = target.classList;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.unCheckAllItem();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = { curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.unCheckItem(li);\n li.classList.add(classNames.focused);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n ListView.prototype.leaveHandler = function (e) {\n this.removeHover();\n };\n ;\n ListView.prototype.homeKeyHandler = function (e, end) {\n 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 if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\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 if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = { curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.unCheckItem(li);\n }\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n 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 if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.unCheckAllItem();\n }\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 if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.unCheckAllItem();\n }\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.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.setAttribute('aria-selected', 'false');\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.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 li.setAttribute('aria-selected', 'true');\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n 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 this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (isNullOrUndefined(data) && 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.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (isNullOrUndefined(data) && (typeof this.dataSource[0] === 'string')) {\n this.selectedItems = {\n item: li,\n text: li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n text: fieldData[this.listBaseOption.fields.text],\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n li.classList.add(classNames.focused);\n li.setAttribute('aria-selected', 'true');\n this.removeHover();\n this.setSelectedItemData(li);\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.isNestedList = false;\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.selectedItems.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.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.add(classNames.focused);\n if (this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked)) {\n li.setAttribute('aria-selected', 'true');\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false));\n };\n /**\n * It is used to select the list item from the ListView.\n * @param {Fields|HTMLElement} 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 if (obj instanceof Object && obj.constructor === HTMLLIElement) {\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 }\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 ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n /**\n * It is used to get the currently\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.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof this.dataSource[0] === 'string') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[i]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\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 if (this.isNestedList) {\n return { item: liCollection, data: dataParent, text: liTextCollection };\n }\n else {\n return { item: liCollection, data: liDataCollection, text: liTextCollection };\n }\n }\n else {\n var liElement = this.element.getElementsByClassName(classNames.selected)[0];\n var fieldData = getFieldValues(this.getItemData(liElement), this.listBaseOption.fields);\n if (typeof 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 {\n text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement)\n };\n }\n }\n }\n };\n /**\n * It is used to find out an item details from the current list.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (obj) {\n return this.getItemData(obj);\n };\n /**\n * A function that used to enable the disabled list items based on passed element.\n * @param {Fields|HTMLElement} 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, 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 this.angularTag = null;\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = createElement('input');\n this.element.appendChild(this.inputElement);\n }\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.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 (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n });\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n remove(this.inputWrapper.container);\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n _super.prototype.destroy.call(this);\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.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.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n collision: { X: 'flip', Y: 'flip' },\n relateTo: this.inputWrapper.container,\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n offsetX: this.popupCalculation(),\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.setAttribute('aria-activedescendant', 'null');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.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 (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice) {\n var firstItem = this.isEmptyList() ? this.listTag : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).textIndent, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var listHeight = this.getPopupHeight();\n var element;\n element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.format)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n 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 addClass([this.inputWrapper.container], FOCUS);\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: this.getDateObject(this.inputElement.value) }, 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, 'mousedown touchstart', 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 eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.trigger('change', eventArgs);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(date);\n }\n this.prevDate = this.valueWithMinutes = date;\n 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.element.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 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': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.setValue(this.value);\n break;\n case 'value':\n 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(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(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;\nvar minutesMilliSeconds = 60000;\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 if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date('' + this.value));\n }\n else {\n this.navigateTo('Month', new Date('' + this.value));\n }\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.setStartDate(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 detach(this.todayElement);\n detach(this.footer);\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 detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n Calendar.prototype.setvalue = function () {\n detach(this.tableBodyElement);\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 this.element.removeAttribute('data-role');\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.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n 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 Property(false)\n ], Calendar.prototype, \"enablePersistence\", 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, 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.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: null };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n });\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function () {\n 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 else {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.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 }\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 this.previousDate = (!isNullOrUndefined(this.value) && new Date('' + this.value) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n 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('h1', { 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.trigger('change', this.changedArgs);\n this.previousEleValue = this.inputElement.value;\n this.previousDate = new Date('' + this.value);\n }\n }\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.changeEvent = function (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') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (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 var outOfRange;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +this.min && +this.value <= +this.max)) {\n outOfRange = new Date('' + this.value);\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent = 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', 'aria-disabled': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n 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.ensureInputAttribute();\n if (this.ngTag === null) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n removeClass([this.inputElement], [INPUTROOT]);\n removeClass([this.element], [ROOT]);\n detach(this.inputWrapper.container);\n }\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.inputEleCopy.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.inputEleCopy.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputEleCopy = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n 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.value >= +this.min && +this.value <= +this.max))\n || (!this.strictMode && this.inputElement.value !== '' && isNullOrUndefined(this.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 if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n this.bindEvents();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupWrapper) {\n 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(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","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, detach, getUniqueID } 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, 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 INPUTFOCUS = 'e-input-focus';\nvar ENDBUTTON = 'e-end-btn';\nvar RANGEHOVER = 'e-range-hover';\nvar OTHERMONTH = 'e-other-month';\nvar STARTLABEL = 'e-start-label';\nvar ENDLABEL = 'e-end-label';\nvar DISABLED = 'e-disabled';\nvar SELECTED = 'e-selected';\nvar CALENDAR = 'e-calendar';\nvar NEXTICON = 'e-next';\nvar PREVICON = 'e-prev';\nvar HEADER = 'e-header';\nvar TITLE = 'e-title';\nvar ICONCONTAINER = 'e-icon-container';\nvar RANGECONTAINER = 'e-date-range-container';\nvar RANGEHEADER = 'e-range-header';\nvar PRESETS = 'e-presets';\nvar FOOTER = 'e-footer';\nvar RANGEBORDER = 'e-range-border';\nvar TODAY = 'e-today';\nvar FOCUSDATE = 'e-focused-date';\nvar CONTENT = 'e-content';\nvar DAYSPAN = 'e-day-span';\nvar WEEKNUMBER = 'e-week-number';\nvar DATEDISABLED = 'e-date-disabled';\nvar ICONDISABLED = 'e-icon-disabled';\nvar CALENDARCONTAINER = 'e-calendar-container';\nvar SEPARATOR = 'e-separator';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar DEVICE = 'e-device';\nvar OVERLAY = 'e-overlay';\nvar CHANGEICON = 'e-change-icon e-icons';\nvar LISTCLASS = ListBaseClasses.li;\nvar RTL = 'e-rtl';\nvar HOVER = 'e-hover';\nvar 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 this.angularTag = null;\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.cloneElement = this.element.cloneNode(true);\n if (this.element.getAttribute('id')) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n this.initProperty();\n _super.prototype.preRender.call(this);\n this.navNextFunction = this.navNextMonth.bind(this);\n this.navPrevFunction = this.navPrevMonth.bind(this);\n this.deviceNavNextFunction = this.deviceNavNext.bind(this);\n this.deviceNavPrevFunction = this.deviceNavPrevious.bind(this);\n };\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], 'mousedown', this.rangeIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n this.bindClearEvent();\n if (!this.isMobile) {\n this.inputKeyboardModule = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown', keyAction: this.inputHandler.bind(this), keyConfigs: this.keyInputConfigs\n });\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n if (!this.isMobile) {\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, this.floatLabelType);\n this.changeTrigger();\n };\n DateRangePicker.prototype.rangeIconHandler = function (e) {\n e.preventDefault();\n this.targetElement = null;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n }\n else {\n this.isRangeIconClicked = true;\n this.show();\n if (!Browser.isDevice) {\n this.inputWrapper.container.children[0].focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\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.element.id + '_popup', className: ROOT + ' ' + POPUP });\n var isPreset = (!this.isCustomRange || this.isMobile);\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.isCustomWindow = false;\n this.createPresets();\n 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.inputFocusHandler = function () {\n this.trigger('focus');\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 this.trigger('blur');\n return;\n }\n }\n }\n if (!this.strictMode) {\n this.clearRange();\n }\n else {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n }\n this.errorClass();\n this.changeTrigger();\n this.trigger('blur');\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 if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.calendarFocus();\n }\n }\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 event.preventDefault();\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, 'click', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(ele, 'mouseover', this.hoverSelection, this);\n }\n }\n }\n if (this.isMobile) {\n if (this.nextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.previousIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (this.rightCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.rightCalPrevIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.leftCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n };\n DateRangePicker.prototype.updateHeader = function () {\n var format = { type: 'date', skeleton: 'yMMMd' };\n if (!isNullOrUndefined(this.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.navPrevMonth = function (e) {\n e.preventDefault();\n var ele = closest(e.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(e.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigatePrevious(e);\n if (!isNullOrUndefined(this.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 event.preventDefault();\n var ele = closest(event.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(event.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigateNext(event);\n if (!isNullOrUndefined(this.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 eve.preventDefault();\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 Input.setValue(this.rangeArgs().value, this.inputElement, this.floatLabelType, this.showClearButton);\n this.changeTrigger();\n this.hide();\n this.errorClass();\n }\n else {\n this.hide();\n }\n if (!this.isMobile) {\n this.isKeyPopup = false;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.children[1].focus();\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n }\n }\n };\n DateRangePicker.prototype.onMouseClick = function (event, item) {\n 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.element.id + '_options' });\n this.presetElement.appendChild(listTag);\n this.popupWrapper.appendChild(this.presetElement);\n this.liCollections = this.presetElement.querySelectorAll('.' + LISTCLASS);\n this.wireListEvents();\n if (this.isMobile) {\n this.presetElement.style.width = this.inputWrapper.container.getBoundingClientRect().width + 'px';\n }\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex > -1) {\n addClass([this.liCollections[this.activeIndex]], ACTIVE);\n }\n }\n };\n DateRangePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.presetElement, 'click', this.onMouseClick, this);\n if (!this.isMobile) {\n EventHandler.add(this.presetElement, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.presetElement, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateRangePicker.prototype.unWireListEvents = function () {\n if (!isNullOrUndefined(this.presetElement)) {\n EventHandler.remove(this.presetElement, 'click', 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 if (!_this.isRangeIconClicked) {\n _this.calendarFocus();\n }\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.presetKeyActionHandler.bind(_this),\n keyConfigs: _this.presetKeyConfig\n });\n 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.inputWrapper.container.children[1].focus();\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, 'mousedown 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 if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n ele.children[1].firstElementChild.focus();\n }\n addClass([startDate], FOCUSDATE);\n }\n else {\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n };\n DateRangePicker.prototype.presetHeight = function () {\n var presets = this.popupObj && this.popupObj.element.querySelector('.' + PRESETS);\n var rangeContainer = this.popupObj && this.popupObj.element.querySelector('.' + RANGECONTAINER);\n if (!isNullOrUndefined(presets) && !isNullOrUndefined(rangeContainer)) {\n presets.style.height = rangeContainer.getBoundingClientRect().height + 'px';\n }\n };\n DateRangePicker.prototype.presetKeyActionHandler = function (e) {\n switch (e.action) {\n case 'moveDown':\n this.listMoveDown(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'moveUp':\n this.listMoveUp(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'enter':\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(this.leftCalendar) && !isNullOrUndefined(actItem)) {\n if (isNullOrUndefined(hvrItem) || (!isNullOrUndefined(actItem) && actItem === hvrItem)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(actItem);\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.calendarFocus();\n actItem.classList.remove(HOVER);\n e.preventDefault();\n return;\n }\n }\n }\n if (!isNullOrUndefined(hvrItem) || !isNullOrUndefined(actItem)) {\n this.onMouseClick(e, hvrItem || actItem);\n }\n e.preventDefault();\n break;\n case 'tab':\n if (this.leftCalendar) {\n var item = this.getHoverLI();\n if (!isNullOrUndefined(item)) {\n item.classList.remove(HOVER);\n }\n }\n else {\n this.hide();\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 }\n break;\n case 'enter':\n if (!this.isPopupOpen()) {\n this.show();\n }\n else {\n this.inputWrapper.container.children[1].focus();\n }\n break;\n case 'tab':\n this.hide();\n }\n };\n DateRangePicker.prototype.documentHandler = function (e) {\n e.preventDefault();\n if (isNullOrUndefined(this.popupObj)) {\n return;\n }\n var target = e.target;\n if ((isNullOrUndefined(this.targetElement) ||\n (!isNullOrUndefined(this.targetElement) && !(target === this.targetElement))) &&\n !(closest(target, '#' + this.popupObj.element.id))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)) {\n if (this.isPopupOpen()) {\n if (!this.isMobile) {\n this.isRangeIconClicked = false;\n }\n this.applyFunction(e);\n }\n }\n };\n DateRangePicker.prototype.createInput = function () {\n this.inputWrapper = Input.createInput({\n floatLabelType: this.floatLabelType,\n element: this.inputElement,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [DATERANGEICON]\n });\n attributes(this.inputElement, {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '1', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.element.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n });\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n if (!isNullOrUndefined(this.placeholder) && this.placeholder.trim() !== '') {\n Input.addAttributes({ 'aria-placeholder': this.placeholder }, this.inputElement);\n }\n this.setEleWidth(this.width);\n addClass([this.inputWrapper.container], DATERANGEWRAPPER);\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.inputElement.type === 'hidden') {\n this.inputWrapper.container.style.display = 'none';\n }\n this.refreshControl();\n this.previousEleValue = this.inputElement.value;\n };\n DateRangePicker.prototype.setEleWidth = function (width) {\n if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (this.width);\n }\n else if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n DateRangePicker.prototype.refreshControl = function () {\n this.validateMinMax();\n 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 Input.setValue(startDate + ' ' + this.separator + ' ' + endDate, this.inputElement, this.floatLabelType, this.showClearButton);\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 * Sets the focus to widget for interaction.\n * @returns void\n */\n DateRangePicker.prototype.focusIn = function () {\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.focus();\n this.trigger('focus');\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateRangePicker.prototype.focusOut = function () {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.blur();\n this.trigger('blur');\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 var ariaAttrs = {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '1', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.element.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'aria-invalid': 'false', 'spellcheck': 'false'\n };\n Input.removeAttributes(ariaAttrs, this.inputElement);\n this.ensureInputAttribute();\n this.inputElement.classList.remove('e-input');\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'click', this.rangeIconHandler);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n detach(this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputKeyboardModule) && !this.isMobile) {\n this.inputKeyboardModule.destroy();\n }\n if (this.popupObj) {\n if (!this.isMobile) {\n this.clearCalendarEvents();\n }\n }\n _super.prototype.destroy.call(this);\n this.inputWrapper = this.popupWrapper = this.popupObj = this.cloneElement = this.presetElement = null;\n };\n DateRangePicker.prototype.ensureInputAttribute = function () {\n for (var attr = 0; attr < this.inputElement.attributes.length; attr++) {\n var prop = this.inputElement.attributes[attr].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * To get component name\n * @returns string\n * @private\n */\n DateRangePicker.prototype.getModuleName = function () {\n return 'daterangepicker';\n };\n /**\n * Return the properties that are maintained upon browser refresh.\n * @returns string\n */\n DateRangePicker.prototype.getPersistData = function () {\n var keyEntity = ['startDate', 'endDate'];\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 if (!this.readonly) {\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() && !this.readonly) {\n var args = {\n date: this.inputElement.value,\n model: this,\n popup: this.popupObj\n };\n this.trigger('open', args);\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 if (this.popupObj) {\n this.popupObj.hide();\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftKeyboardModule) && !isNullOrUndefined(this.rightKeyboardModule)) {\n this.leftKeyboardModule.destroy();\n this.rightKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.cancelButton)) {\n this.btnKeyboardModule.destroy();\n }\n }\n this.targetElement = null;\n }\n removeClass([document.body], OVERFLOW);\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (this.isMobile && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n this.isKeyPopup = this.dateDisabled = false;\n };\n 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.setEleWidth(this.width);\n break;\n case 'separator':\n this.previousEleValue = this.inputElement.value;\n this.setProperties({ separator: newProp.separator }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.setProperties({ placeholder: newProp.placeholder }, true);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n this.inputElement.setAttribute('aria-readonly', '' + this.readonly);\n break;\n case 'cssClass':\n if (this.popupWrapper) {\n 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 Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\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 Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\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(false)\n ], DateRangePicker.prototype, \"enablePersistence\", 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('Never')\n ], DateRangePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\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 __decorate([\n Event()\n ], DateRangePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"blur\", void 0);\n DateRangePicker = __decorate([\n NotifyPropertyChanges\n ], DateRangePicker);\n return DateRangePicker;\n}(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 };\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 };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n Input.removeAttributes(ariaAttribute, this.inputElement);\n this.inputElement.removeAttribute('aria-placeholder');\n if (this.isCalendar()) {\n detach(this.popupWrapper);\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.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 addClass([this.inputWrapper.container], [INPUTFOCUS]);\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.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type) {\n if (type === 'date') {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_datepopup' });\n this.trigger('open', this.popupWrapper);\n }\n else {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.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]);\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.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n DateTimePicker.prototype.changeEvent = function () {\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 this.changeTrigger();\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, \"enablePersistence\", 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 /**\n * @hidden\n * @private\n */\n _this.isImageStream = false;\n if (typeof dictionary !== 'undefined' || typeof data !== 'undefined') {\n _this.dataStream2 = [];\n _this.dataStream2 = data;\n _this.bCompress2 = false;\n }\n else {\n _this.dataStream2 = [];\n _this.bCompress2 = true;\n //Pending\n }\n return _this;\n }\n Object.defineProperty(PdfStream.prototype, \"internalStream\", {\n /**\n * Gets the `internal` stream.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"isImage\", {\n /**\n * Gets or sets 'is image' flag.\n * @private\n */\n get: function () {\n return this.isImageStream;\n },\n set: function (value) {\n this.isImageStream = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"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 && !this.isImage) {\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 this.imageStream.isImage = true;\n var tempString = '';\n var decodedString = '';\n for (var i = 0; i < this.imageDataAsNumberArray.byteLength; i++) {\n tempString += String.fromCharCode(null, this.mStream.readByte(i));\n }\n for (var i = 0; i < tempString.length; i++) {\n if (i % 2 !== 0) {\n decodedString += tempString[i];\n }\n }\n this.imageStream.data = [decodedString];\n this.imageStream.compress = false;\n this.imageStream.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.xObject));\n this.imageStream.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.image));\n this.imageStream.items.setValue(this.dictionaryProperties.width, new PdfNumber(this.width));\n this.imageStream.items.setValue(this.dictionaryProperties.height, new PdfNumber(this.height));\n this.imageStream.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n this.imageStream.items.setValue(this.dictionaryProperties.filter, new PdfName(this.dictionaryProperties.dctdecode));\n this.imageStream.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(this.getColorSpace()));\n this.imageStream.items.setValue(this.dictionaryProperties.decodeParms, this.getDecodeParams());\n return this.imageStream;\n }\n else {\n return this.imageStream;\n }\n };\n /**\n * Return `colorSpace` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getColorSpace = function () {\n return this.dictionaryProperties.deviceRgb;\n };\n /**\n * Return `decode parameters` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getDecodeParams = function () {\n var decodeParams = new PdfDictionary();\n decodeParams.items.setValue(this.dictionaryProperties.columns, new PdfNumber(this.width));\n decodeParams.items.setValue(this.dictionaryProperties.blackIs1, new PdfBoolean(true));\n decodeParams.items.setValue(this.dictionaryProperties.k, new PdfNumber(-1));\n decodeParams.items.setValue(this.dictionaryProperties.predictor, new PdfNumber(15));\n decodeParams.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n return decodeParams;\n };\n /**\n * Number array for `png header`.\n * @hidden\n * @private\n */\n ImageDecoder.mPngHeader = [137, 80, 78, 71, 13, 10, 26, 10];\n /**\n * Number Array for `jpeg header`.\n * @hidden\n * @private\n */\n ImageDecoder.mJpegHeader = [255, 216];\n /**\n * Number array for `gif header`.\n * @hidden\n * @private\n */\n ImageDecoder.GIF_HEADER = 'G,I,F,8';\n /**\n * Number array for `bmp header.`\n * @hidden\n * @private\n */\n ImageDecoder.BMP_HEADER = 'B,M';\n return ImageDecoder;\n}());\nexport { ImageDecoder };\n","/**\n * PdfPageSettings.ts class for EJ2-PDF\n */\nimport { SizeF, PointF } from './../drawing/pdf-drawing';\nimport { PdfPageSize } from './pdf-page-size';\nimport { PdfPageRotateAngle, PdfPageOrientation } from './enum';\nimport { PdfMargins } from './../graphics/pdf-margins';\n/**\n * The class provides various `setting` related with PDF pages.\n */\nvar PdfPageSettings = /** @class */ (function () {\n function PdfPageSettings(margins) {\n //Fields\n /**\n * The page `margins`.\n * @private\n */\n this.pageMargins = new PdfMargins();\n /**\n * The page `size`.\n * @default a4\n * @private\n */\n this.pageSize = PdfPageSize.a4;\n /**\n * The page `rotation angle`.\n * @default PdfPageRotateAngle.RotateAngle0\n * @private\n */\n this.rotateAngle = PdfPageRotateAngle.RotateAngle0;\n /**\n * The page `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.pageOrientation = PdfPageOrientation.Portrait;\n /**\n * The page `origin`.\n * @default 0,0\n * @private\n */\n this.pageOrigin = new PointF(0, 0);\n /**\n * Checks the Whether the `rotation` is applied or not.\n * @default false\n * @private\n */\n this.isRotation = false;\n if (typeof margins === 'number') {\n this.pageMargins.setMargins(margins);\n }\n }\n Object.defineProperty(PdfPageSettings.prototype, \"size\", {\n //Properties\n /**\n * Gets or sets the `size` of the page.\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.setSize(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"orientation\", {\n /**\n * Gets or sets the page `orientation`.\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (orientation) {\n if (this.pageOrientation !== orientation) {\n this.pageOrientation = orientation;\n this.updateSize(orientation);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"margins\", {\n /**\n * Gets or sets the `margins` of the page.\n * @private\n */\n get: function () {\n return this.pageMargins;\n },\n set: function (value) {\n this.pageMargins = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.width;\n },\n set: function (value) {\n this.pageSize.width = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.height;\n },\n set: function (value) {\n this.pageSize.height = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"origin\", {\n /**\n * Gets or sets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"rotate\", {\n /**\n * Gets or sets the number of degrees by which the page should be `rotated` clockwise when displayed or printed.\n * @private\n */\n get: function () {\n return this.rotateAngle;\n },\n set: function (value) {\n this.rotateAngle = value;\n this.isRotation = true;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Update page size` depending on orientation.\n * @private\n */\n PdfPageSettings.prototype.updateSize = function (orientation) {\n var min = Math.min(this.pageSize.width, this.pageSize.height);\n var max = Math.max(this.pageSize.width, this.pageSize.height);\n switch (orientation) {\n case PdfPageOrientation.Portrait:\n this.pageSize = new SizeF(min, max);\n break;\n case PdfPageOrientation.Landscape:\n this.pageSize = new SizeF(max, min);\n break;\n }\n };\n /**\n * Creates a `clone` of the object.\n * @private\n */\n PdfPageSettings.prototype.clone = function () {\n var settings = this;\n settings.pageMargins = this.pageMargins.clone();\n // if (GetTransition() != null)\n // {\n // settings.Transition = (PdfPageTransition)Transition.clone();\n // }\n return settings;\n };\n /**\n * Returns `size`, shrinked by the margins.\n * @private\n */\n PdfPageSettings.prototype.getActualSize = function () {\n var width = this.width - (this.margins.left + this.margins.right);\n var height = this.height - (this.margins.top + this.margins.bottom);\n var size = new SizeF(width, height);\n return size;\n };\n /**\n * Sets `size` to the page aaccording to the orientation.\n * @private\n */\n PdfPageSettings.prototype.setSize = function (size) {\n var min = Math.min(size.width, size.height);\n var max = Math.max(size.width, size.height);\n if (this.orientation === PdfPageOrientation.Portrait) {\n this.pageSize = new SizeF(min, max);\n }\n else {\n this.pageSize = new SizeF(max, min);\n }\n };\n return PdfPageSettings;\n}());\nexport { PdfPageSettings };\n","import { Operators } from './pdf-operators';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * Helper class to `write PDF graphic streams` easily.\n * @private\n */\nvar PdfStreamWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfStreamWriter` class.\n * @private\n */\n function PdfStreamWriter(stream) {\n if (stream == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.stream = stream;\n }\n //Implementation\n /**\n * `Clear` the stream.\n * @public\n */\n PdfStreamWriter.prototype.clear = function () {\n this.stream.clearStream();\n };\n PdfStreamWriter.prototype.setGraphicsState = function (dictionaryName) {\n if (dictionaryName instanceof PdfName) {\n this.stream.write(dictionaryName.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n else {\n this.stream.write(Operators.slash);\n this.stream.write(dictionaryName);\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n };\n /**\n * `Executes the XObject`.\n * @private\n */\n PdfStreamWriter.prototype.executeObject = function (name) {\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.paintXObject);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes path object`.\n * @private\n */\n PdfStreamWriter.prototype.closePath = function () {\n this.writeOperator(Operators.closePath);\n };\n /**\n * `Clips the path`.\n * @private\n */\n PdfStreamWriter.prototype.clipPath = function (useEvenOddRule) {\n this.stream.write(Operators.clipPath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n }\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.endPath);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes, then fills and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.closeFillStrokePath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills and strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.fillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.fillStroke);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills path`.\n * @private\n */\n PdfStreamWriter.prototype.fillPath = function (useEvenOddRule) {\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Ends the path`.\n * @private\n */\n PdfStreamWriter.prototype.endPath = function () {\n this.writeOperator(Operators.n);\n };\n /**\n * `Closes and fills the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillPath = function (useEvenOddRule) {\n this.writeOperator(Operators.closePath);\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Closes and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeStrokePath = function () {\n this.writeOperator(Operators.closeStrokePath);\n };\n /**\n * `Sets the text scaling`.\n * @private\n */\n PdfStreamWriter.prototype.setTextScaling = function (textScaling) {\n this.stream.write(PdfNumber.floatToString(textScaling));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextScaling);\n };\n /**\n * `Strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.strokePath = function () {\n this.writeOperator(Operators.stroke);\n };\n /**\n * `Restores` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.restoreGraphicsState = function () {\n this.writeOperator(Operators.restoreState);\n };\n /**\n * `Saves` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.saveGraphicsState = function () {\n this.writeOperator(Operators.saveState);\n };\n PdfStreamWriter.prototype.startNextLine = function (arg1, arg2) {\n if (typeof arg1 === 'undefined') {\n this.writeOperator(Operators.goToNextLine);\n }\n else if (arg1 instanceof PointF) {\n this.writePoint(arg1);\n this.writeOperator(Operators.setCoords);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.setCoords);\n }\n };\n /**\n * 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) || isNaN(+point.high)) ? this.getAverage(this.high, i) : point.high;\n point.low = (isNullOrUndefined(point.low) || isNaN(+point.low)) ? this.getAverage(this.low, i) : point.low;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = (isNullOrUndefined(point.open) || isNaN(+point.open)) ? this.getAverage(this.open, i) : point.open;\n point.close = (isNullOrUndefined(point.close) || isNaN(+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) || isNaN(+point.size)) ? this.sizeMax\n : point.size);\n }\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.y) || isNaN(+point.y));\n case 'HighLow':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n (isNullOrUndefined(point.high) || isNaN(+point.high));\n case 'HighLowOpenClose':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n (isNullOrUndefined(point.open) || isNaN(+point.open)) || (isNullOrUndefined(point.close) || isNaN(+point.close))\n || (isNullOrUndefined(point.high) || isNaN(+point.high));\n case 'BoxPlot':\n yValues = (point.y || [null]).filter(function (value) {\n return !isNullOrUndefined(value) && !isNaN(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) || isNaN(yValue)) ? this.yMin : yValue);\n this.yMax = Math.max(this.yMax, (isNullOrUndefined(yValue) || isNaN(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) || isNaN(low)) ? this.yMin : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMin : high));\n this.yMax = Math.max(this.yMax, Math.max((isNullOrUndefined(low) || isNaN(low)) ? this.yMax : low, (isNullOrUndefined(high) || isNaN(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 || !markerElements[j]) {\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.delayRedraw = false;\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, 1);\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]\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.horizontalAlignment);\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.verticalAlignment;\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 = 'Start';\n break;\n case 'End':\n anchor = 'End';\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 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.symbolLocations.push(getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series));\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 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.symbolLocations.push(getPoint(bubblePoint.xValue, bubblePoint.yValue, xAxis, yAxis, isInverted));\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 this.isZoomed = this.performedUI = this.zooming.enablePan && this.zooming.enableSelectionZooming;\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 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.annotations = this.chart.annotations;\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 = (sum) ? ((Math.abs(point.y) / sum) * (this.totalAngle)) : null;\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 if (degree === null || !point.y) {\n return '';\n }\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]\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) {\n var _this = _super.call(this, control) || this;\n _this.pie = control;\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.annotations = this.pie.annotations;\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, animate) {\n var _this = this;\n if (animate === void 0) { animate = true; }\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 if (animate) {\n _this.doPointerAnimation(pointer, axis);\n }\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 (animate) {\n var _this = this;\n if (animate === void 0) { animate = true; }\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, animate);\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 = window.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 = window.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 (animate) {\n if (animate === void 0) { animate = true; }\n this.renderBorder();\n this.renderTitle();\n this.gaugeAxisLayoutPanel.renderAxes(animate);\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 var refreshWithoutAnimation = 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 break;\n case 'axes':\n refreshWithoutAnimation = true;\n break;\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 if (refreshWithoutAnimation && !renderer && !refreshBounds) {\n this.removeSvg();\n this.calculateBounds();\n this.renderElements(false);\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, DataUtil } from '@syncfusion/ej2-data';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"groupBy\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\nexport var dropDownBaseClasses = {\n root: 'e-dropdownbase',\n rtl: 'e-rtl',\n content: 'e-content',\n selected: 'e-active',\n hover: 'e-hover',\n noData: 'e-nodata',\n fixedHead: 'e-fixed-head',\n focus: 'e-item-focus',\n li: ListBaseClasses.li,\n group: ListBaseClasses.group,\n disabled: ListBaseClasses.disabled,\n grouping: 'e-dd-group'\n};\n/**\n * DropDownBase component will generate the list items based on given data and act as base class to drop-down related components\n */\nvar DropDownBase = /** @class */ (function (_super) {\n __extends(DropDownBase, _super);\n /**\n * * Constructor for DropDownBase class\n */\n function DropDownBase(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n DropDownBase.prototype.getPropObject = function (prop, newProp, oldProp) {\n var newProperty = new Object();\n var oldProperty = new Object();\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var propName = new Function('prop', 'return prop');\n newProperty[propName(prop)] = newProp[propName(prop)];\n oldProperty[propName(prop)] = oldProp[propName(prop)];\n var data = new Object();\n data.newProperty = newProperty;\n data.oldProperty = oldProperty;\n return data;\n };\n DropDownBase.prototype.getValueByText = function (text, ignoreCase, ignoreAccent) {\n var value = null;\n if (ignoreCase) {\n value = this.checkValueCase(text, true, ignoreAccent);\n }\n else {\n value = this.checkValueCase(text, false, ignoreAccent);\n }\n return value;\n };\n ;\n DropDownBase.prototype.checkValueCase = function (text, ignoreCase, ignoreAccent, isTextByValue) {\n var _this = this;\n var value = null;\n if (isTextByValue) {\n value = text;\n }\n var dataSource = this.listData;\n var fields = this.fields;\n var type = this.typeOfData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n if (!isNullOrUndefined(item)) {\n if (ignoreAccent) {\n value = this.checkingAccent(String(item), text, ignoreCase);\n }\n else {\n if (ignoreCase) {\n if (this.checkIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase, isTextByValue);\n }\n }\n }\n }\n }\n }\n else {\n if (ignoreCase) {\n dataSource.filter(function (item) {\n if (_this.checkIgnoreCase(getValue(fields.text, item).toString(), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n else {\n if (isTextByValue) {\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && _this.stringTrim(itemValue) === value.toString()) {\n value = getValue(fields.text, item);\n }\n });\n }\n else {\n dataSource.filter(function (item) {\n if (_this.checkNonIgnoreCase(getValue(fields.text, item), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n }\n }\n return value;\n };\n DropDownBase.prototype.checkingAccent = function (item, text, ignoreCase) {\n var dataItem = DataUtil.ignoreDiacritics(String(item));\n var textItem = DataUtil.ignoreDiacritics(text.toString());\n var value = null;\n if (ignoreCase) {\n if (this.checkIgnoreCase(dataItem, textItem)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n return value;\n };\n DropDownBase.prototype.checkIgnoreCase = function (item, text) {\n return String(item).toLowerCase() === text.toString().toLowerCase() ? true : false;\n };\n DropDownBase.prototype.checkNonIgnoreCase = function (item, text) {\n return String(item) === text.toString() ? true : false;\n };\n DropDownBase.prototype.getItemValue = function (dataItem, typedText, ignoreCase, isTextByValue) {\n var value = null;\n var dataSource = this.listData;\n var type = this.typeOfData(dataSource).typeof;\n if (isTextByValue) {\n value = dataItem.toString();\n }\n else {\n if (ignoreCase) {\n value = type === 'string' ? String(dataItem) : this.getFormattedValue(String(dataItem));\n }\n else {\n value = type === 'string' ? typedText : this.getFormattedValue(typedText);\n }\n }\n return value;\n };\n DropDownBase.prototype.l10nUpdate = function (actionFailure) {\n if (this.noRecordsTemplate !== 'No Records Found' || this.actionFailureTemplate !== 'The Request Failed') {\n var template = actionFailure ? this.actionFailureTemplate : this.noRecordsTemplate;\n var compiledString = void 0;\n this.list.innerHTML = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.list.appendChild(item);\n }\n }\n else {\n var l10nLocale = { noRecordsTemplate: 'No Records Found', actionFailureTemplate: 'The Request Failed' };\n this.l10n = new L10n('dropdowns', l10nLocale, this.locale);\n this.list.innerHTML = actionFailure ?\n this.l10n.getConstant('actionFailureTemplate') : this.l10n.getConstant('noRecordsTemplate');\n }\n };\n DropDownBase.prototype.getTextByValue = function (value) {\n var text;\n text = this.checkValueCase(value, false, false, true);\n return text;\n };\n DropDownBase.prototype.stringTrim = function (item) {\n if (!isNullOrUndefined(item)) {\n var itemValue = item.toString();\n return itemValue.trim();\n }\n return item.toString();\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 var val = (this.fields.value ? this.fields.value : 'value');\n if (typeof getValue(val, item.item) === 'boolean'\n || item.typeof === 'boolean') {\n return (value === 'true');\n }\n }\n return value;\n };\n /**\n * Sets RTL to dropdownbase wrapper\n */\n DropDownBase.prototype.setEnableRtl = function () {\n if (this.list) {\n this.enableRtlElements.push(this.list);\n }\n this.enableRtl ? addClass(this.enableRtlElements, dropDownBaseClasses.rtl) :\n removeClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n };\n ;\n /**\n * Initialize the Component.\n */\n DropDownBase.prototype.initialize = function () {\n this.bindEvent = true;\n if (this.element.tagName === 'UL') {\n var jsonElement = ListBase.createJsonFromElement(this.element);\n this.setProperties({ fields: { text: 'text', value: 'text' } }, true);\n this.resetList(jsonElement, this.fields);\n }\n else if (this.element.tagName === 'SELECT') {\n var dataSource = this.dataSource instanceof Array ? (this.dataSource.length > 0 ? true : false)\n : !isNullOrUndefined(this.dataSource) ? true : false;\n if (!dataSource) {\n this.renderItemsBySelect();\n }\n }\n else {\n this.setListData(this.dataSource, this.fields, this.query);\n }\n };\n ;\n /**\n * Get the properties to be maintained in persisted state.\n */\n DropDownBase.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n ;\n /**\n * Sets the enabled state to DropDownBase.\n */\n DropDownBase.prototype.setEnabled = function () {\n 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 if (dataSource instanceof DataManager) {\n var eventArgs = { cancel: false, data: dataSource, query: query };\n this.trigger('actionBegin', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.showSpinner();\n this.isRequested = true;\n eventArgs.data.executeQuery(this.getQuery(eventArgs.query)).then(function (e) {\n _this.trigger('actionComplete', e);\n if (e.cancel) {\n return;\n }\n var listItems = e.result;\n ulElement = _this.renderItems(listItems, fields);\n _this.onActionComplete(ulElement, listItems, e);\n _this.isRequested = false;\n _this.hideSpinner();\n _this.trigger('dataBound', { items: listItems, e: e });\n }).catch(function (e) {\n _this.isRequested = false;\n _this.onActionFailure(e);\n _this.hideSpinner();\n });\n }\n else {\n this.showSpinner();\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 this.trigger('dataBound', { items: listItems });\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 if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n addClass([this.list], dropDownBaseClasses.grouping);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n var options = this.listOption(dataSource, fields);\n 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 __decorate([\n Event()\n ], DropDownBase.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"destroyed\", void 0);\n DropDownBase = __decorate([\n NotifyPropertyChanges\n ], DropDownBase);\n return DropDownBase;\n}(Component));\nexport { DropDownBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (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 hiddenElement: 'e-ddl-hidden'\n};\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The DropDownList component contains a list of predefined values from which you can\n * choose a single value.\n * ```html\n * \n * ```\n * ```typescript\n * let dropDownListObj:DropDownList = new DropDownList();\n * dropDownListObj.appendTo(\"#list\");\n * ```\n */\nvar DropDownList = /** @class */ (function (_super) {\n __extends(DropDownList, _super);\n /**\n * * Constructor for creating the DropDownList component.\n */\n function DropDownList(options, element) {\n 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.isSecondClick = false;\n this.keyConfigure = {\n tab: 'tab',\n enter: '13',\n escape: '27',\n end: '35',\n home: '36',\n down: '40',\n up: '38',\n pageUp: '33',\n pageDown: '34',\n open: 'alt+40',\n close: 'shift+tab',\n hide: 'alt+38',\n space: '32'\n };\n };\n DropDownList.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n DropDownList.prototype.renderList = function (isEmptyData) {\n _super.prototype.render.call(this, isEmptyData);\n this.wireListEvents();\n };\n DropDownList.prototype.floatLabelChange = function () {\n if (this.getModuleName() === 'dropdownlist' && this.floatLabelType === 'Auto') {\n var floatElement = this.inputWrapper.container.querySelector('.e-float-text');\n if (this.inputElement.value !== '' || this.isInteracted) {\n classList(floatElement, ['e-label-top'], ['e-label-bottom']);\n }\n else {\n classList(floatElement, ['e-label-bottom'], ['e-label-top']);\n }\n }\n };\n DropDownList.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n };\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', 'placeholder'];\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (defaultAttr.indexOf(htmlAttr) > -1) {\n htmlAttr === 'placeholder' ? Input.setPlaceholder(this.htmlAttributes[htmlAttr], this.inputElement) :\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.inputWrapper.container.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n };\n DropDownList.prototype.getAriaAttributes = function () {\n return {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false',\n 'aria-activedescendant': 'null',\n 'aria-labelledby': this.hiddenElement.id\n };\n };\n DropDownList.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputElement.parentElement]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n DropDownList.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hidePopup();\n addClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.targetElement().tabIndex = -1;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n DropDownList.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ;\n DropDownList.prototype.preventTabIndex = function (element) {\n if (this.getModuleName() === 'dropdownlist') {\n element.tabIndex = -1;\n }\n };\n DropDownList.prototype.targetElement = function () {\n return this.inputWrapper.container;\n };\n DropDownList.prototype.getNgDirective = function () {\n return 'EJS-DROPDOWNLIST';\n };\n DropDownList.prototype.getElementByText = function (text) {\n return this.getElementByValue(this.getValueByText(text));\n };\n DropDownList.prototype.getElementByValue = function (value) {\n var item;\n var listItems = this.getItems();\n for (var _i = 0, listItems_1 = listItems; _i < listItems_1.length; _i++) {\n var liItem = listItems_1[_i];\n if (this.getFormattedValue(liItem.getAttribute('data-value')) === value) {\n item = liItem;\n break;\n }\n }\n return item;\n };\n ;\n DropDownList.prototype.initValue = function () {\n this.renderList();\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n else {\n this.updateValues();\n }\n };\n DropDownList.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n this.setSelection(this.getElementByValue(this.value), null);\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var element = this.getElementByText(this.text);\n if (isNullOrUndefined(element)) {\n this.setProperties({ text: null });\n return;\n }\n else {\n this.setSelection(element, null);\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DropDownList.prototype.onBlur = function (e) {\n 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 var proxy_1 = this;\n if (!this.isSecondClick) {\n setTimeout(function () { proxy_1.cloneElements(); }, 100);\n }\n }\n };\n DropDownList.prototype.cloneElements = function () {\n if (this.list) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n ulElement = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.actionCompleteData.ulElement = ulElement;\n this.isSecondClick = true;\n }\n }\n };\n DropDownList.prototype.updateSelectedItem = function (li, e, preventSelect) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n 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 var selectedElement = this.hiddenElement.querySelector('option');\n selectedElement.setAttribute('value', this.value.toString());\n }\n else {\n this.hiddenElement.innerHTML = '';\n }\n };\n /**\n * Filter bar implementation\n */\n DropDownList.prototype.onFilterUp = function (e) {\n 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_1 = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isCustomFilter = true;\n _this.filteringAction(dataSource, query, fields);\n },\n baseEventArgs: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isCustomFilter && !eventArgs_1.preventDefaultAction) {\n var filterQuery = this.query ? this.query.clone() : new Query();\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n this.filteringAction(this.dataSource, filterQuery, this.fields);\n }\n }\n };\n DropDownList.prototype.filteringAction = function (dataSource, query, fields) {\n if (!isNullOrUndefined(this.filterInput)) {\n this.beforePopupOpen = true;\n if (this.filterInput.value.trim() === '') {\n this.actionCompleteData.isUpdated = false;\n this.isTyped = false;\n 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 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 addClass([this.inputWrapper.container], [dropDownListClasses.iconAnimation]);\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', 'tabindex': '-1', 'class': dropDownListClasses.hiddenElement }\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 case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n default:\n var ddlProps = void 0;\n ddlProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, ddlProps.newProperty, ddlProps.oldProperty);\n break;\n }\n }\n };\n /**\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_2 = this;\n window.onpopstate = function () {\n proxy_2.hidePopup();\n };\n history.pushState({}, '');\n }\n if (!isNullOrUndefined(this.list.children[0]) || this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderPopup();\n }\n attributes(this.targetElement(), { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n };\n /**\n * Hides the popup if it is in an open state.\n * @returns void.\n */\n DropDownList.prototype.hidePopup = function () {\n if (this.isEscapeKey && this.getModuleName() === 'dropdownlist') {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n if (!isNullOrUndefined(this.index)) {\n this.selectedLI = this.liCollections[this.index];\n this.updateSelectedItem(this.selectedLI, null, true);\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n }\n else {\n this.resetSelection();\n }\n }\n this.closePopup();\n var dataItem = this.getItemData();\n if (this.inputElement.value.trim() === '' && !this.isInteracted && (this.isSelectCustom ||\n !isNullOrUndefined(this.selectedLI) && this.inputElement.value !== dataItem.text)) {\n this.isSelectCustom = false;\n this.clear();\n }\n };\n /**\n * Sets the focus on the component for interaction.\n * @returns void.\n */\n DropDownList.prototype.focusIn = function () {\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, this.ignoreAccent);\n };\n ComboBox.prototype.unWireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur);\n EventHandler.remove(this.inputWrapper.container, 'blur', this.onBlur);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick);\n }\n EventHandler.remove(this.inputElement, 'focus', this.targetFocus);\n if (!this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n this.unBindCommonEvent();\n };\n ComboBox.prototype.setSelection = function (li, e) {\n _super.prototype.setSelection.call(this, li, e);\n if (!isNullOrUndefined(li) && !this.autofill && !this.isDropDownClick) {\n this.removeFocus();\n }\n };\n ComboBox.prototype.selectCurrentItem = function (e) {\n var li;\n if (this.isPopupOpen) {\n li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n }\n if (e.action === 'enter' && this.inputElement.value.trim() === '') {\n this.clear(e);\n }\n else if (this.isTyped && !this.isSelected && isNullOrUndefined(li)) {\n this.customValue();\n }\n this.hidePopup();\n };\n ComboBox.prototype.setHoverList = function (li) {\n this.removeSelection();\n if (this.isValidLI(li) && !li.classList.contains(dropDownListClasses.selected)) {\n this.removeFocus();\n li.classList.add(dropDownListClasses.focus);\n }\n };\n ;\n ComboBox.prototype.targetFocus = function (e) {\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = false;\n }\n this.onFocus();\n };\n ComboBox.prototype.dropDownClick = function (e) {\n e.preventDefault();\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.dropDownClick.call(this, e);\n };\n ComboBox.prototype.customValue = function () {\n var value = this.getValueByText(this.inputElement.value);\n if (!this.allowCustom && this.inputElement.value !== '') {\n this.setProperties({ value: value });\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n else if (this.inputElement.value.trim() !== '') {\n var previousValue = this.value;\n if (isNullOrUndefined(value)) {\n var value_1 = this.inputElement.value === '' ? null : this.inputElement.value;\n var fields = this.fields;\n var eventArgs = void 0;\n eventArgs = { text: value_1, item: {} };\n if (!this.initial) {\n this.trigger('customValueSpecifier', eventArgs);\n }\n var item = eventArgs.item;\n var dataItem = {};\n if (item && getValue(fields.text, item) && getValue(fields.value, item)) {\n dataItem = item;\n }\n else {\n setValue(fields.text, value_1, dataItem);\n setValue(fields.value, value_1, dataItem);\n }\n this.itemData = dataItem;\n var changeData = {\n text: getValue(fields.text, this.itemData),\n value: getValue(fields.value, this.itemData),\n index: null\n };\n this.setProperties(changeData, true);\n this.setSelection(null, null);\n this.isSelectCustom = true;\n }\n else {\n this.isSelectCustom = false;\n this.setProperties({ value: value });\n }\n if (previousValue !== this.value) {\n this.onChangeEvent(null);\n }\n }\n else if (this.allowCustom) {\n this.isSelectCustom = true;\n }\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n ComboBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n 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 var filterType = (this.queryString === '' && !isNullOrUndefined(this.value)) ? 'equal' : this.filterType;\n var queryString = (this.queryString === '' && !isNullOrUndefined(this.value)) ? this.value : this.queryString;\n if (this.isFiltered) {\n return filterQuery;\n }\n if (this.queryString !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n else {\n var mapping = !isNullOrUndefined(this.fields.value) ? this.fields.value : '';\n filterQuery.where(mapping, filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (!isNullOrUndefined(this.suggestionCount)) {\n filterQuery.take(this.suggestionCount);\n }\n return filterQuery;\n };\n AutoComplete.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.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, setValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, extend } from '@syncfusion/ej2-base';\nimport { EventHandler, Property, Event, compile, L10n } from '@syncfusion/ej2-base';\nimport { Animation, Browser, prepend } from '@syncfusion/ej2-base';\nimport { Search } from '../common/incremental-search';\nimport { 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';\nimport { createFloatLabel, removeFloating, floatLabelFocus, floatLabelBlur } from './float-label';\n/* tslint:enable */\nvar FOCUS = 'e-input-focus';\nvar DISABLED = 'e-disabled';\nvar OVER_ALL_WRAPPER = 'e-multiselect e-input-group';\nvar ELEMENT_WRAPPER = 'e-multi-select-wrapper';\nvar ELEMENT_MOBILE_WRAPPER = 'e-mob-wrapper';\nvar HIDE_LIST = 'e-hide-listitem';\nvar DELIMITER_VIEW = 'e-delim-view';\nvar CHIP_WRAPPER = 'e-chips-collection';\nvar CHIP = 'e-chips';\nvar CHIP_CONTENT = 'e-chipcontent';\nvar CHIP_CLOSE = 'e-chips-close';\nvar CHIP_SELECTED = 'e-chip-selected';\nvar SEARCHBOX_WRAPPER = 'e-searcher';\nvar DELIMITER_VIEW_WRAPPER = 'e-delimiter';\nvar ZERO_SIZE = 'e-zero-size';\nvar REMAIN_WRAPPER = 'e-remain';\nvar CLOSEICON_CLASS = 'e-chips-close e-close-hooker';\nvar DELIMITER_WRAPPER = 'e-delim-values';\nvar POPUP_WRAPPER = 'e-ddl e-popup e-multi-select-list-wrapper';\nvar INPUT_ELEMENT = 'e-dropdownbase';\nvar RTL_CLASS = 'e-rtl';\nvar CLOSE_ICON_HIDE = 'e-close-icon-hide';\nvar MOBILE_CHIP = 'e-mob-chip';\nvar FOOTER = 'e-ddl-footer';\nvar HEADER = 'e-ddl-header';\nvar DISABLE_ICON = 'e-ddl-disable-icon';\nvar SPINNER_CLASS = 'e-ms-spinner-icon';\nvar HIDDEN_ELEMENT = 'e-multi-hidden';\nvar destroy = 'destroy';\nvar dropdownIcon = 'e-input-group-icon e-ddl-icon';\nvar iconAnimation = 'e-icon-anim';\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.focused = true;\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 default:\n var defaultAttr = ['title', 'id'];\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else 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 if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n this.removeValue(value, e);\n this.removeChipSelection();\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n if (this.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.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n if (!this.mainList && !this.mainData) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.mainData = list;\n this.mainListCollection = this.liCollections;\n }\n else if (!isNullOrUndefined(this.mainData) && this.mainData.length === 0) {\n this.mainData = list;\n }\n if ((this.remoteCustomValue || list.length <= 0) && this.allowCustomValue && this.inputFocus && this.allowFiltering) {\n this.checkForCustomValue(this.tempQuery, this.fields);\n return;\n }\n if (this.value && this.value.length) {\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.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'check' });\n }\n if ((searchCount !== searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n };\n MultiSelect.prototype.openClick = function (e) {\n if (!this.openOnClick) {\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 if (this.targetElement() !== '') {\n this.removeFocus();\n }\n else {\n this.focusAtFirstListItem();\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.remoteCustomValue = false;\n this.onActionComplete(list, this.mainData);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n if (this.keyCode !== 8) {\n this.focusAtFirstListItem();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n }\n 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 this.setDynValue = false;\n if (this.readonly || !this.enabled) {\n return;\n }\n if (e.target === this.overAllClear) {\n e.preventDefault();\n return;\n }\n if (!this.inputFocus && this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n if (this.mode === 'CheckBox') {\n this.focusIn();\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 if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n }\n e.preventDefault();\n };\n MultiSelect.prototype.enable = function (state) {\n if (state) {\n this.overAllWrapper.classList.remove(DISABLED);\n this.inputElement.removeAttribute('disabled');\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.overAllWrapper.classList.add(DISABLED);\n this.inputElement.setAttribute('disabled', 'true');\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n if (this.enabled !== state) {\n this.enabled = state;\n }\n this.hidePopup();\n };\n MultiSelect.prototype.onBlur = function (eve) {\n var target = !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.mode === 'CheckBox' && Browser.isIE && !isNullOrUndefined(eve)) {\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n return;\n }\n if (this.scrollFocusStatus) {\n eve.preventDefault();\n this.inputElement.focus();\n this.scrollFocusStatus = false;\n return;\n }\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n if (this.mode !== 'Box' && this.mode !== 'CheckBox') {\n this.refreshListItems(null);\n this.updateDelimView();\n }\n this.updateValueState(eve, this.value, this.tempValues);\n this.dispatchEvent(this.hiddenElement, 'change');\n this.overAllClear.style.display = 'none';\n if (this.isPopupOpen()) {\n this.hidePopup();\n }\n this.makeTextBoxEmpty();\n this.trigger('blur');\n this.focused = true;\n if (Browser.isDevice && this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.removeChipFocus();\n }\n this.removeChipSelection();\n this.refreshInputHight();\n floatLabelBlur(this.overAllWrapper, this.componentWrapper, this.value, this.floatLabelType, this.placeholder);\n this.refreshPlaceHolder();\n };\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 if (this.focused) {\n this.trigger('focus');\n this.focused = false;\n }\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\n floatLabelFocus(this.overAllWrapper, this.componentWrapper);\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n return true;\n }\n else {\n return false;\n }\n };\n MultiSelect.prototype.showDelimWrapper = function () {\n if (this.mode === 'CheckBox') {\n this.viewWrapper.style.display = '';\n }\n else {\n this.delimiterWrapper.style.display = '';\n }\n this.componentWrapper.classList.add(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.hideDelimWrapper = function () {\n this.delimiterWrapper.style.display = 'none';\n this.componentWrapper.classList.remove(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.expandTextbox = function () {\n var size = 5;\n if (this.placeholder) {\n size = size > this.inputElement.placeholder.length ? size : this.inputElement.placeholder.length;\n }\n if (this.inputElement.value.length > size) {\n this.inputElement.size = this.inputElement.value.length;\n }\n else {\n this.inputElement.size = size;\n }\n };\n MultiSelect.prototype.isPopupOpen = function () {\n return ((this.popupWrapper !== null) && (this.popupWrapper.parentElement !== null));\n };\n MultiSelect.prototype.refreshPopup = function () {\n if (this.popupObj && this.mobFilter) {\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n this.popupObj.refreshPosition(this.overAllWrapper);\n 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.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.makeTextBoxEmpty();\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(li.textContent);\n }\n this.refreshPopup();\n 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 if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n temp = selectedElem.nextElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp);\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 if (!this.inputFocus) {\n this.inputElement.focus();\n }\n this.removeValue(value, e);\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.makeTextBoxEmpty = function () {\n this.inputElement.value = '';\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshPlaceHolder = function () {\n if (this.placeholder && this.floatLabelType === 'Never') {\n if (this.value && this.value.length) {\n this.inputElement.placeholder = '';\n }\n else {\n this.inputElement.placeholder = this.placeholder;\n }\n }\n else {\n this.setFloatLabelType();\n }\n this.expandTextbox();\n };\n MultiSelect.prototype.removeValue = function (value, eve) {\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.mode === 'CheckBox' && 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 if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n else {\n element2.setAttribute('aria-selected', 'true');\n addClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'true');\n addClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n }\n }\n };\n MultiSelect.prototype.removeChip = function (value) {\n if (this.chipCollectionWrapper) {\n var element = this.chipCollectionWrapper.querySelector('span[data-value=\"' + value + '\"]');\n if (element) {\n remove(element);\n }\n }\n };\n MultiSelect.prototype.updateChipStatus = function () {\n if (this.value.length) {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n (this.chipCollectionWrapper.style.display = '');\n }\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n this.showOverAllClear();\n }\n else {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(this.delimiterWrapper)) {\n (this.delimiterWrapper.style.display = 'none');\n }\n this.hideOverAllClear();\n }\n };\n MultiSelect.prototype.addValue = function (value, text, eve) {\n if (!this.value) {\n this.value = [];\n }\n this.setProperties({ value: [].concat([], this.value, [value]) }, true);\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n this.removeFocus();\n if (element) {\n this.addListFocus(element);\n this.addListSelection(element);\n }\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.addChip(text, value, eve);\n }\n 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 cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return true;\n }\n }\n return false;\n };\n MultiSelect.prototype.addChip = function (text, value, e) {\n if (this.chipCollectionWrapper) {\n var item = this.getChip(text, value, e);\n if (item.cancel) {\n return;\n }\n this.chipCollectionWrapper.appendChild(item.element);\n }\n };\n MultiSelect.prototype.removeChipFocus = function () {\n var elements;\n var closeElements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n closeElements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP_CLOSE.split(' ')[0]);\n removeClass(elements, CHIP_SELECTED);\n if (Browser.isDevice) {\n for (var index = 0; index < closeElements.length; index++) {\n closeElements[index].style.display = 'none';\n }\n }\n };\n MultiSelect.prototype.onMobileChipInteraction = function (e) {\n var chipElem = closest(e.target, '.' + CHIP);\n var chipClose = chipElem.querySelector('span.' + CHIP_CLOSE.split(' ')[0]);\n if (this.enabled && !this.readonly) {\n if (!chipElem.classList.contains(CHIP_SELECTED)) {\n this.removeChipFocus();\n chipClose.style.display = '';\n chipElem.classList.add(CHIP_SELECTED);\n }\n this.refreshPopup();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.getChip = function (data, value, e) {\n var itemData = { text: value, value: value };\n var chip = 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 extend(this.listCurrentOptions, this.listCurrentOptions, fields, true);\n if (this.mode === 'CheckBox') {\n this.notify('listoption', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', dataSource: dataSource, fieldProperty: fieldProperty });\n }\n return this.listCurrentOptions;\n };\n MultiSelect.prototype.renderPopup = function () {\n var _this = this;\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n if (!this.popupObj) {\n 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.hideSelectedItem ? this.ulElement.querySelector('li[data-value=\"' + value + '\"]')\n : this.list.querySelector('li[data-value=\"' + value + '\"]');\n text = this.getTextByValue(value);\n if ((element && (element.getAttribute('aria-selected') !== 'true')) ||\n (element && (element.getAttribute('aria-selected') === 'true' && this.hideSelectedItem) &&\n (this.mode === 'Box' || this.mode === 'Default'))) {\n text = this.getTextByValue(value);\n this.addChip(text, value);\n this.addListSelection(element);\n }\n else if (value && this.allowCustomValue) {\n var indexItem = this.listData.length;\n var newValue = {};\n setValue(this.fields.text, value, newValue);\n setValue(this.fields.value, value, newValue);\n this.addItem(newValue, indexItem);\n 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 this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll && isNullOrUndefined(this.value)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n if (!this.inputFocus) {\n if (this.mode === 'Box') {\n this.chipCollectionWrapper.style.display = '';\n }\n else if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n }\n }\n };\n MultiSelect.prototype.isValidLI = function (li) {\n return (li && !li.classList.contains(dropDownBaseClasses.disabled) && !li.classList.contains(dropDownBaseClasses.group) &&\n li.classList.contains(dropDownBaseClasses.li));\n };\n ;\n MultiSelect.prototype.updateListSelection = function (li, e) {\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 var argsCancel = this.dispatchSelect(value, e, li, (li.getAttribute('aria-selected') === 'true'));\n if (argsCancel) {\n return;\n }\n if ((this.allowCustomValue || this.allowFiltering) && !this.mainList.querySelector('li[data-value=\"' + value + '\"]')) {\n var temp = li.cloneNode(true);\n var data = this.getDataByValue(value);\n append([temp], this.mainList);\n this.mainData.push(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 if (this.mode === 'CheckBox') {\n selectItems[temp1 - 1].firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([selectItems[temp1 - 1].firstElementChild.lastElementChild], 'e-check');\n }\n temp1--;\n }\n }\n }\n };\n ;\n MultiSelect.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.removeFocus = function () {\n 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 if (this.mode !== 'CheckBox') {\n this.focusAtLastListItem(li.getAttribute('data-value'));\n }\n this.refreshSelection();\n }\n else {\n this.makeTextBoxEmpty();\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.checkSelectAll();\n this.refreshPopup();\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n else {\n e.preventDefault();\n }\n this.makeTextBoxEmpty();\n }\n else {\n e.preventDefault();\n }\n 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.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n MultiSelect.prototype.updateDataSource = function (prop) {\n 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 'floatLabelType':\n this.setFloatLabelType();\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.ulElement.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.mode === 'CheckBox' && _this.showSelectAll) {\n var args = {\n module: 'CheckBoxSelection',\n enable: _this.mode === 'CheckBox',\n value: state ? 'check' : 'uncheck'\n };\n _this.notify('checkSelectAll', args);\n }\n _this.selectAllItem(state);\n _this.selectAllAction = null;\n };\n _super.prototype.render.call(this);\n }\n else {\n this.selectAllAction = null;\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n var args = {\n 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 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 if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n else if (this.floatLabelType === 'Never') {\n this.refreshPlaceHolder();\n }\n this.element.style.opacity = '';\n this.hiddenElement = createElement('select', {\n attrs: { 'name': name, 'aria-hidden': 'true', 'class': HIDDEN_ELEMENT, 'tabindex': '-1', 'multiple': 'true' }\n });\n this.element.removeAttribute('name');\n this.componentWrapper.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.setFloatLabelType = function () {\n removeFloating(this.overAllWrapper, this.componentWrapper, this.searchWrapper, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n };\n MultiSelect.prototype.dropDownIcon = function () {\n if (this.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.parentElement.removeChild(this.dropIcon);\n removeClass([this.componentWrapper], ['e-down-icon']);\n }\n }\n };\n MultiSelect.prototype.initialUpdate = function () {\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateCssClass();\n this.updateHTMLAttribute();\n this.updateReadonly(this.readonly);\n this.refreshInputHight();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n MultiSelect.prototype.destroy = function () {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n this.notify(destroy, {});\n this.unwireListEvents();\n this.unWireEvent();\n this.list = null;\n this.popupObj = null;\n this.mainList = null;\n this.mainData = null;\n _super.prototype.destroy.call(this);\n var temp = ['readonly', 'aria-disabled', 'aria-placeholder', 'placeholder'];\n var length = temp.length;\n while (length > 0) {\n this.inputElement.removeAttribute(temp[length - 1]);\n length--;\n }\n this.element.style.display = 'block';\n if (this.overAllWrapper.parentElement) {\n if (this.overAllWrapper.parentElement.tagName === this.getNgDirective()) {\n remove(this.overAllWrapper);\n }\n else {\n this.overAllWrapper.parentElement.insertBefore(this.element, this.overAllWrapper);\n remove(this.overAllWrapper);\n }\n }\n };\n ;\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], MultiSelect.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], MultiSelect.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowCustomValue\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(1000)\n ], MultiSelect.prototype, \"maximumSelectionLength\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"value\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"hideSelectedItem\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"closePopupOnSelect\", void 0);\n __decorate([\n Property('Default')\n ], MultiSelect.prototype, \"mode\", void 0);\n __decorate([\n Property(',')\n ], MultiSelect.prototype, \"delimiterChar\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showDropDownIcon\", void 0);\n __decorate([\n Property('Never')\n ], MultiSelect.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showSelectAll\", void 0);\n __decorate([\n Property('Select All')\n ], MultiSelect.prototype, \"selectAllText\", void 0);\n __decorate([\n Property('Unselect All')\n ], MultiSelect.prototype, \"unSelectAllText\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"enableSelectionOrder\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"openOnClick\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"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 if (isNullOrUndefined(this.parent.listCurrentOptions.itemCreated)) {\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n };\n }\n else {\n var itemCreated_1 = this.parent.listCurrentOptions.itemCreated;\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n itemCreated_1.apply(_this, [e]);\n };\n }\n };\n ;\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.parentElement.removeChild(this.checkAllParent);\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 if (this.parent.scrollFocusStatus) {\n e.preventDefault();\n this.filterInput.focus();\n this.parent.scrollFocusStatus = false;\n return;\n }\n if (document.body.contains(this.parent.popupObj.element) && !this.parent.popupObj.element.classList.contains('e-popup-close')) {\n this.parent.inputFocus = false;\n this.parent.updateValueState(e, this.parent.value, this.parent.tempValues);\n this.parent.dispatchEvent(this.parent.hiddenElement, 'change');\n }\n if (document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close')) {\n this.parent.inputFocus = false;\n this.parent.overAllWrapper.classList.remove(FOCUS);\n this.parent.trigger('blur');\n this.parent.focused = true;\n }\n if (document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close') && !Browser.isDevice) {\n this.parent.hidePopup();\n }\n };\n 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.inputFocus = false;\n this.parent.hidePopup();\n this.parent.onBlur();\n this.parent.focused = true;\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.refreshPosition();\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 = parseFloat(el.style.minWidth);\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, getZindexPartial } 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 = getZindexPartial(this.element).toString();\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].pageY + 1, e.changedTouches[0].pageX + 1, e);\n }\n else {\n this.openMenu(null, null, e.pageY + 1, e.pageX + 1, e);\n }\n }\n };\n /**\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 ? this.getTextContent(li) : 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 - 20;\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.getTextContent = function (li) {\n var node;\n for (var i = 0; i < li.childNodes.length; i++) {\n node = li.childNodes[i];\n if (node.nodeType === 3 || (node.nodeType === 1 && node.classList.contains('e-menu-url'))) {\n return node.textContent;\n }\n }\n return '';\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(this.getTextContent(cli));\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 /**\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 (event) {\n var target = event.originalEvent.target;\n EventHandler.remove(this.element, 'contextmenu', this.preventContextMenu);\n if (!target || this.dragStartAction) {\n return;\n }\n else {\n var classList = target.classList;\n var li = closest(target, '.' + LISTITEM);\n if (!li) {\n return;\n }\n else {\n this.removeHover();\n this.setFocusElement(li);\n if (this.showCheckBox && !li.classList.contains('e-disable')) {\n var checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNOU(checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, checkWrapper);\n this.validateCheckNode(checkWrapper, checkElement.classList.contains(CHECK), li, event.originalEvent);\n this.triggerClickEvent(event.originalEvent, li);\n return;\n }\n }\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(li, target, event);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, target, event);\n }\n else {\n if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n this.triggerClickEvent(event.originalEvent, li);\n }\n }\n };\n TreeView.prototype.nodeCheckingEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n this.checkActionNodes = [];\n var ariaState = !isCheck ? 'true' : 'false';\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n var eventArgs = this.getCheckEvent(currLi, !isCheck ? 'uncheck' : 'check', e);\n this.trigger('nodeChecking', eventArgs);\n return eventArgs;\n };\n TreeView.prototype.nodeCheckedEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n var eventArgs = this.getCheckEvent(wrapper, isCheck ? 'uncheck' : 'check', e);\n eventArgs.data = eventArgs.data.splice(0, eventArgs.data.length - 1);\n this.trigger('nodeChecked', eventArgs);\n };\n TreeView.prototype.triggerClickEvent = function (e, li) {\n var eventArgs = {\n event: e,\n node: li,\n };\n this.trigger('nodeClicked', eventArgs);\n };\n TreeView.prototype.expandNode = function (currLi, icon) {\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.expandArgs = this.getExpandEvent(currLi, null);\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 removeClass([icon], PROCESS);\n return;\n }\n }\n removeClass([icon], COLLAPSIBLE);\n addClass([icon], EXPANDABLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n 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.expandArgs = this.getExpandEvent(curLi, null);\n this.trigger('nodeExpanding', this.expandArgs);\n this.renderChildNodes(curLi, expandChild);\n }\n }\n };\n TreeView.prototype.toggleSelect = function (li, e, multiSelect) {\n if (!li.classList.contains('e-disable')) {\n if (this.allowMultiSelection && ((e && e.ctrlKey) || multiSelect) && this.isActive(li)) {\n this.unselectNode(li, e);\n }\n else {\n this.selectNode(li, e, multiSelect);\n }\n }\n };\n TreeView.prototype.isActive = function (li) {\n return li.classList.contains(ACTIVE) ? true : false;\n };\n TreeView.prototype.selectNode = function (li, e, multiSelect) {\n if (isNOU(li) || (!this.allowMultiSelection && this.isActive(li) && !isNOU(e))) {\n this.setFocusElement(li);\n return;\n }\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n if (!this.allowMultiSelection || (!multiSelect && (!e || (e && !e.ctrlKey)))) {\n this.removeSelectAll();\n }\n if (this.allowMultiSelection && e && e.shiftKey) {\n if (!this.startNode) {\n this.startNode = li;\n }\n var startIndex = this.liList.indexOf(this.startNode);\n var endIndex = this.liList.indexOf(li);\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex; i <= endIndex; i++) {\n var currNode = this.liList[i];\n if (isVisible(currNode)) {\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.originalEvent.target;\n if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n return;\n }\n else {\n this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n }\n };\n TreeView.prototype.expandCollapseAction = function (currLi, e) {\n var icon = select('div.' + ICON, currLi);\n if (!icon || icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n var classList = icon.classList;\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(currLi, icon, e);\n }\n else {\n this.collapseNode(currLi, icon, e);\n }\n }\n };\n TreeView.prototype.expandAction = function (currLi, icon, e, expandChild) {\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n if (this.isLoaded) {\n this.expandArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeExpanding', this.expandArgs);\n if (this.expandArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n var ul = select('.' + PARENTITEM, currLi);\n if (ul && ul.nodeName === 'UL') {\n this.expandNode(currLi, icon);\n }\n else {\n this.renderChildNodes(currLi, expandChild);\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 if (nextNode.classList.contains('e-disable')) {\n this.focusNextNode(nextNode, isTowards);\n }\n };\n TreeView.prototype.getNextNode = function (li) {\n var index = this.liList.indexOf(li);\n var nextNode;\n var i;\n do {\n index++;\n if (index === this.liList.length && li.classList.contains('e-disable')) {\n for (i = index - 1; i > 0; i--) {\n if (!this.liList[i].classList.contains('e-disable')) {\n index = i;\n break;\n }\n }\n }\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 var i;\n do {\n index--;\n if (index < 0 && li.classList.contains('e-disable')) {\n for (i = 1; i < this.liList.length; i++) {\n if (!this.liList[i].classList.contains('e-disable')) {\n index = i;\n break;\n }\n }\n }\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 if (currentLi && !currentLi.classList.contains('e-disable')) {\n this.setHover(currentLi);\n }\n }\n };\n TreeView.prototype.setHover = function (li) {\n if (!li.classList.contains(HOVER)) {\n this.removeHover();\n addClass([li], HOVER);\n }\n };\n ;\n TreeView.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n TreeView.prototype.removeHover = function () {\n var hoveredNode = selectAll('.' + HOVER, this.element);\n if (hoveredNode && hoveredNode.length) {\n removeClass(hoveredNode, HOVER);\n }\n };\n ;\n TreeView.prototype.getNodeData = function (currLi, fromDS) {\n if (!isNOU(currLi) && currLi.classList.contains(LISTITEM)) {\n var id = currLi.getAttribute('data-uid');\n var text = this.getText(currLi, fromDS);\n var pNode = closest(currLi.parentNode, '.' + LISTITEM);\n var pid = pNode ? pNode.getAttribute('data-uid') : null;\n var selected = currLi.classList.contains(ACTIVE);\n var expanded = (currLi.getAttribute('aria-expanded') === 'true') ? true : false;\n var checked = null;\n if (this.showCheckBox) {\n checked = select('.' + CHECKBOXWRAP, currLi).getAttribute('aria-checked');\n }\n return { id: id, text: text, parentID: pid, selected: selected, expanded: expanded, isChecked: checked };\n }\n return { id: '', text: '', parentID: '', selected: '', expanded: '', isChecked: '' };\n };\n TreeView.prototype.getText = function (currLi, fromDS) {\n if (fromDS) {\n var nodeData = this.getNodeObject(currLi.getAttribute('data-uid'));\n var level = parseFloat(currLi.getAttribute('aria-level'));\n var nodeFields = this.getFields(this.fields, level, 1);\n return getValue(nodeFields.text, nodeData);\n }\n return select('.' + LISTTEXT, currLi).textContent;\n };\n TreeView.prototype.getExpandEvent = function (currLi, e) {\n var nodeData = this.getNodeData(currLi);\n return { cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData, event: e };\n };\n TreeView.prototype.reRenderNodes = function () {\n this.element.innerHTML = '';\n this.setTouchClass();\n this.setProperties({ selectedNodes: [], checkedNodes: [] }, 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.cssClass + ' ' + (_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 if (e.helper.parentNode) {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n }\n _this.dragStartAction = false;\n }\n });\n this.dropObj = new Droppable(this.element, {\n out: function (e) {\n if (!isNOU(e) && !e.target.classList.contains(SIBLING)) {\n document.body.style.cursor = 'not-allowed';\n }\n },\n over: function (e) {\n document.body.style.cursor = '';\n },\n drop: function (e) {\n _this.dropAction(e);\n }\n });\n };\n TreeView.prototype.dragAction = function (e, virtualEle) {\n var dropRoot = closest(e.target, '.' + DROPPABLE);\n var dropWrap = closest(e.target, '.' + TEXTWRAP);\n var icon = select('div.' + ICON, virtualEle);\n removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n this.removeVirtualEle();\n document.body.style.cursor = '';\n var classList = e.target.classList;\n if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n dropWrap = e.target.nextElementSibling;\n }\n if (dropRoot) {\n var dropLi = closest(e.target, '.' + LISTITEM);\n if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n if (dropLi && e && (e.event.offsetY < 7)) {\n addClass([icon], DROPNEXT);\n var virEle = createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (1) : (0);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else if (dropLi && e && (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10))) {\n addClass([icon], DROPNEXT);\n var virEle = 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);\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);\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.headerTemplate) {\n this.headerTemplateFn = templateCompiler(this.headerTemplate);\n }\n if (this.filter.itemTemplate) {\n this.fltrTemplateFn = templateCompiler(this.filter.itemTemplate);\n }\n if (this.isForeignColumn() && (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit')) {\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 (typeof a_1 === 'string') {\n a_1 = getValue(a_1, window);\n }\n if (this.sortDirection === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return a_1(x, y);\n };\n }\n if (!this.sortComparer && this.isForeignColumn()) {\n this.sortComparer = function (x, y) {\n x = 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.getHeaderTemplate = function () {\n return this.headerTemplateFn;\n };\n /** @hidden */\n Column.prototype.getFilterItemTemplate = function () {\n return this.fltrTemplateFn;\n };\n /** @hidden */\n Column.prototype.getDomSetter = function () {\n return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n };\n return Column;\n}());\nexport { Column };\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var 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';\nexport var filterSearchBegin = 'filtersearchbegin';\n/**\n * Specifies grid internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var onEmpty = 'on-empty';\n/** @hidden */\nexport var inBoundModelChanged = 'inbound-model-changed';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var colGroupRefresh = 'colgroup-refresh';\n/** @hidden */\nexport var headerRefreshed = 'header-refreshed';\n/** @hidden */\nexport var pageBegin = 'paging-begin';\n/** @hidden */\nexport var pageComplete = 'paging-complete';\n/** @hidden */\nexport var sortBegin = 'sorting-begin';\n/** @hidden */\nexport var sortComplete = 'sorting-complete';\n/** @hidden */\nexport var filterBegin = 'filtering-begin';\n/** @hidden */\nexport var filterComplete = 'filtering-complete';\n/** @hidden */\nexport var searchBegin = 'searching-begin';\n/** @hidden */\nexport var searchComplete = 'searching-complete';\n/** @hidden */\nexport var reorderBegin = 'reorder-begin';\n/** @hidden */\nexport var reorderComplete = 'reorder-complete';\n/** @hidden */\nexport var rowDragAndDropBegin = 'rowdraganddrop-begin';\n/** @hidden */\nexport var rowDragAndDropComplete = 'rowdraganddrop-complete';\n/** @hidden */\nexport var groupBegin = 'grouping-begin';\n/** @hidden */\nexport var groupComplete = 'grouping-complete';\n/** @hidden */\nexport var ungroupBegin = 'ungrouping-begin';\n/** @hidden */\nexport var ungroupComplete = 'ungrouping-complete';\n/** @hidden */\nexport var 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, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, appendChildren, getDatePredicate } from '../base/util';\nimport { remove, createElement, debounce } 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.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.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 /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n CheckBoxFilter.prototype.destroy = function () {\n this.closeDialog();\n };\n CheckBoxFilter.prototype.wireEvents = function () {\n EventHandler.add(this.dlg, 'click', this.clickHandler, this);\n this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n EventHandler.add(this.dlg.querySelector('.e-searchinput'), 'keyup', this.searchHandler, this);\n };\n CheckBoxFilter.prototype.unWireEvents = function () {\n EventHandler.remove(this.dlg, 'click', this.clickHandler);\n var elem = this.dlg.querySelector('.e-searchinput');\n if (elem) {\n EventHandler.remove(elem, 'keyup', this.searchHandler);\n }\n };\n CheckBoxFilter.prototype.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.localeObj = options.localeObj;\n this.isFiltered = options.filteredColumns.length;\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', title: 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 ? 'OKButton' : 'FilterButton'),\n cssClass: 'e-primary', isPrimary: true }\n },\n {\n click: this.btnClick.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.getLocalizedLabel(this.isExcel ? 'CancelButton' : 'ClearButton') }\n }],\n created: this.dialogCreated.bind(this),\n open: this.dialogOpen.bind(this)\n });\n this.dialogObj.appendTo(this.dlg);\n this.dialogObj.element.style.maxHeight = '800px';\n this.dialogObj.show();\n this.wireEvents();\n createSpinner({ target: this.spinner });\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 ? 'OKButton' : 'FilterButton').toLowerCase() === text) {\n this.fltrBtnHandler();\n }\n else if (this.getLocalizedLabel('ClearButton').toLowerCase() === text) {\n this.clearFilter();\n }\n }\n this.closeDialog();\n }\n else if (!(e.target.tagName.toLowerCase() === 'input')) {\n this.clearFilter();\n this.closeDialog();\n }\n };\n CheckBoxFilter.prototype.fltrBtnHandler = function () {\n var checked = [].slice.call(this.cBox.querySelectorAll('.e-check:not(.e-selectall)'));\n var optr = 'equal';\n var caseSen = this.options.type === 'string' ?\n this.options.allowCaseSensitive : true;\n var defaults = {\n field: this.options.field, predicate: 'or',\n operator: optr, 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 = this.options.type ? 'startswith' : '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('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'true';\n }\n else if (parsed !== undefined &&\n this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'false';\n }\n }\n var args = {\n requestType: events.filterSearchBegin,\n filterModel: this, columnName: this.options.field, column: this.options.column,\n operator: operator, matchCase: matchCase, ignoreAccent: ignoreAccent, filterChoiceCount: null,\n query: query\n };\n this.parent.trigger(events.actionBegin, args);\n predicte = new Predicate(this.options.field, args.operator, parsed, args.matchCase, args.ignoreAccent);\n if (this.options.type === 'date' || this.options.type === 'datetime') {\n parsed = this.valueFormatter.fromView(val, this.options.parserFn, this.options.type);\n operator = 'equal';\n if (isNullOrUndefined(parsed) && val.length) {\n return;\n }\n 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 args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n query.take(args.filterChoiceCount);\n this.processSearch(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 query = new Query();\n query = this.parent.query.clone();\n query.requiresCount(); //consider take query\n var args = {\n requestType: events.filterChoiceRequest, filterModel: this, query: query, filterChoiceCount: null\n };\n this.parent.trigger(events.actionBegin, args);\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n query.take(args.filterChoiceCount);\n this.processDataOperation(query);\n };\n CheckBoxFilter.prototype.processDataOperation = function (query) {\n var _this = this;\n this.options.dataSource = this.options.dataSource instanceof DataManager ?\n this.options.dataSource : new DataManager(this.options.dataSource);\n var allPromise = [];\n var runArray = [];\n if (this.options.column.isForeignColumn()) {\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, this.filteredData);\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, dataSource) {\n showSpinner(this.spinner);\n this.updateResult();\n this.createFilterItems(dataSource, isInitial);\n };\n CheckBoxFilter.prototype.processSearch = function (query) {\n this.processDataOperation(query);\n };\n CheckBoxFilter.prototype.updateResult = function () {\n this.result = {};\n var predicate = this.getPredicateFromCols(this.options.filteredColumns);\n var query = new Query();\n if (predicate) {\n query.where(predicate);\n }\n var result = new DataManager(this.fullData).executeLocal(query);\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n this.result[getValue(this.options.field, res)] = true;\n }\n };\n CheckBoxFilter.prototype.clickHandler = function (e) {\n var target = e.target;\n var elem = parentsUntil(target, 'e-checkbox-wrapper');\n if (parentsUntil(target, 'e-searchbox')) {\n this.searchBoxClick(e);\n }\n if (elem) {\n var selectAll = elem.querySelector('.e-selectall');\n if (selectAll) {\n this.updateAllCBoxes(!selectAll.classList.contains('e-check'));\n }\n else {\n toogleCheckbox(elem.parentElement);\n }\n this.updateIndeterminatenBtn();\n elem.querySelector('.e-chk-hidden').focus();\n }\n };\n CheckBoxFilter.prototype.updateAllCBoxes = function (checked) {\n var cBoxes = [].slice.call(this.cBox.querySelectorAll('.e-frame'));\n for (var _i = 0, cBoxes_1 = cBoxes; _i < cBoxes_1.length; _i++) {\n var cBox = cBoxes_1[_i];\n removeAddCboxClasses(cBox, checked);\n }\n };\n CheckBoxFilter.prototype.dialogOpen = function () {\n if (this.parent.element.classList.contains('e-device')) {\n this.dialogObj.element.querySelector('.e-input-group').classList.remove('e-input-focus');\n this.dialogObj.element.querySelector('.e-btn').focus();\n }\n };\n CheckBoxFilter.prototype.createCheckbox = function (value, checked) {\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, isNullOrUndefined(value) ? null : value, 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 if (col) {\n col.setSortDirection(columns[i].direction);\n }\n var fn = col.sortComparer && !this.isRemote() ? col.sortComparer.bind(col) :\n columns[i].direction;\n if (gObj.groupSettings.columns.indexOf(columns[i].field) === -1) {\n query.sortBy(col.field, fn);\n }\n else {\n sortGrp.push({ direction: fn, field: col.field });\n }\n }\n for (var i = 0, len = sortGrp.length; i < len; i++) {\n query.sortBy(sortGrp[i].field, sortGrp[i].direction);\n }\n }\n return query;\n };\n Data.prototype.searchQuery = function (query) {\n var _this = this;\n var sSettings = this.parent.searchSettings;\n var fields = sSettings.fields.length ? sSettings.fields : this.parent.getColumns().map(function (f) { return f.field; });\n var predicateList = [];\n 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 var crud = void 0;\n switch (args.requestType) {\n case 'delete':\n query = query ? query : this.generateQuery();\n crud = 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 crud = this.dataManager.insert(args.data, null, query, args.index);\n break;\n }\n if (crud && !Array.isArray(crud)) {\n return crud.then(function (result) {\n return _this.executeQuery(query);\n });\n }\n else {\n return this.executeQuery(query);\n }\n }\n };\n Data.prototype.executeQuery = function (query) {\n var _this = this;\n if (this.dataManager.ready) {\n var deferred_1 = new Deferred();\n var ready = this.dataManager.ready;\n ready.then(function (e) {\n _this.dataManager.executeQuery(query).then(function (result) {\n deferred_1.resolve(result);\n });\n }).catch(function (e) {\n deferred_1.reject(e);\n });\n return deferred_1.promise;\n }\n else {\n return this.dataManager.executeQuery(query);\n }\n };\n Data.prototype.formatGroupColumn = function (value, field) {\n var gObj = this.parent;\n var serviceLocator = this.serviceLocator;\n var column = this.getColumnByField(field);\n var date = value;\n if (!column.type) {\n column.type = date.getDay ? (date.getHours() > 0 || date.getMinutes() > 0 ||\n date.getSeconds() > 0 || date.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n if (isNullOrUndefined(column.getFormatter())) {\n setFormatter(serviceLocator, column);\n }\n var formatVal = ValueFormatter.prototype.toView(value, column.getFormatter());\n return formatVal;\n };\n Data.prototype.crudActions = function (args) {\n var query = this.generateQuery();\n var promise = null;\n var pr = 'promise';\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ? args.foreignKeyData :\n this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.eventPromise(args, query, key);\n }\n switch (args.requestType) {\n case 'save':\n promise = this.dataManager.update(key, args.data, 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 && args.requestType !== 'refresh') {\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, getValue } 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 var chekBoxEnable = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox' && col.field; })[0];\n var value = false;\n if (chekBoxEnable) {\n value = getValue(chekBoxEnable.field, rowArgs.data);\n }\n if (row.isDataRow) {\n row.isSelected = this.parent.getSelectedRowIndexes().indexOf(row.index) > -1 || value;\n }\n if (row.isDataRow && this.parent.isCheckBoxSelection\n && this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n row.isSelected = true;\n if (this.parent.getSelectedRowIndexes().indexOf(row.index) === -1) {\n this.parent.getSelectedRowIndexes().push(row.index);\n }\n }\n this.buildAttributeFromRow(tr, row);\n addAttributes(tr, attrCopy);\n setStyleAndAttributes(tr, row.attributes);\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n 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 = type !== 'Custom' && group.aggregates && key in group.aggregates ? group.aggregates[key] :\n calculateAggregate(type, group.aggregates ? group : data, column, _this.parent);\n single[disp] = single[disp] || {};\n single[disp][key] = val;\n single[disp][type] = !isNullOrUndefined(val) ? formatFn(val) : ' ';\n if (group.field) {\n single[disp].field = group.field;\n single[disp].key = group.key;\n }\n });\n helper.format = column.getFormatter();\n column.setTemplate(helper);\n return single;\n };\n SummaryModelGenerator.prototype.getCellType = function () {\n return CellType.Summary;\n };\n return SummaryModelGenerator;\n}());\nexport { SummaryModelGenerator };\nvar GroupSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(GroupSummaryModelGenerator, _super);\n function GroupSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GroupSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupFooterTemplate !== undefined;\n };\n GroupSummaryModelGenerator.prototype.getIndentByLevel = function (level) {\n if (level === void 0) { level = this.parent.groupSettings.columns.length; }\n return this.parent.groupSettings.columns.map(function (v, indx) { return indx <= level - 1 ? '' : 'e-indentcelltop'; });\n };\n GroupSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.GroupSummary;\n };\n return GroupSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { GroupSummaryModelGenerator };\nvar CaptionSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(CaptionSummaryModelGenerator, _super);\n function CaptionSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CaptionSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupCaptionTemplate !== undefined;\n };\n CaptionSummaryModelGenerator.prototype.getData = function () {\n var initVal = { columns: [] };\n return [_super.prototype.getData.call(this).reduce(function (prev, cur) {\n prev.columns = prev.columns.concat(cur.columns);\n return prev;\n }, initVal)];\n };\n CaptionSummaryModelGenerator.prototype.isEmpty = function () {\n return (this.getData()[0].columns || []).length === 0;\n };\n CaptionSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.CaptionSummary;\n };\n return CaptionSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { CaptionSummaryModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (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 this.parent.updateDefaultCursor();\n if (!frzCols) {\n this.initializeHeaderDrag();\n }\n var rows = [].slice.call(headerDiv.querySelectorAll('tr.e-columnheader'));\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n var gCells = [].slice.call(row.querySelectorAll('.e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n }\n if (!frzCols) {\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n }\n if (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {\n wrap(rows, true);\n }\n };\n 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] || (_a = {}, _a[column.foreignKeyValue] = column.format ? null : '', _a);\n }\n //Prepare innerHtml\n var innerHtml = this.getGui();\n var value = cell.isForeignKey ? this.getValue(column.foreignKeyValue, fData, column) :\n this.getValue(column.field, data, column);\n if (column.type === 'date' && !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 var _a;\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, extend } from '@syncfusion/ej2-base';\nimport { createElement, attributes } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes, appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { AriaService } from '../services/aria-service';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\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 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 var result;\n var gridObj = this.parent;\n var colIndex = gridObj.getColumnIndexByField(column.field);\n if (!isNullOrUndefined(column.headerTemplate)) {\n result = column.getHeaderTemplate()(extend({ 'index': colIndex }, column), gridObj, 'headerTemplate');\n node.firstElementChild.innerHTML = '';\n appendChildren(node.firstElementChild, result);\n }\n this.ariaService.setOptions(node, ariaAttr);\n if (!isNullOrUndefined(column.headerTextAlign) || !isNullOrUndefined(column.textAlign)) {\n var alignment = column.headerTextAlign || column.textAlign;\n innerDIV.style.textAlign = alignment;\n if (alignment === 'Right' || alignment === 'Left') {\n node.classList.add(alignment === 'Right' ? 'e-rightalign' : 'e-leftalign');\n }\n else if (alignment === 'Center') {\n node.classList.add('e-centeralign');\n }\n }\n if (column.clipMode === 'Clip') {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip') {\n node.classList.add('e-ellipsistooltip');\n }\n node.setAttribute('aria-rowspan', (!isNullOrUndefined(cell.rowSpan) ? cell.rowSpan : 1).toString());\n node.setAttribute('aria-colspan', '1');\n 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 var query = this.data.generateQuery().requiresCount();\n if (this.data.dataManager.dataSource.offline) {\n this.refreshDataManager({ requestType: 'batchsave' });\n return;\n }\n else {\n promise.then(function (e) {\n _this.data.getData(args, query)\n .then(function (e) { return _this.dmSuccess(e, args); })\n .catch(function (e) { return _this.dmFailure(e); });\n })\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.dynamicColumnChange = function () {\n if (this.parent.getCurrentViewRecords().length) {\n this.updateColumnType(this.parent.getCurrentViewRecords()[0]);\n }\n };\n Render.prototype.updateColumnType = function (record) {\n var columns = this.parent.getColumns();\n var value;\n var 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 = getValue(columns[i].field || '', data);\n if (columns[i].isForeignColumn() && columns[i].columnData) {\n value = getValue(columns[i].foreignKeyValue || '', columns[i].columnData[0]);\n }\n if (!isNullOrUndefined(value)) {\n this.isColTypeDef = true;\n if (!columns[i].type) {\n columns[i].type = value.getDay ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n }\n else {\n columns[i].type = columns[i].type || null;\n }\n var valueFormatter = new ValueFormatter();\n if (columns[i].format && (columns[i].format.skeleton || columns[i].format.format)) {\n columns[i].setFormatter(valueFormatter.getFormatFunction(columns[i].format));\n columns[i].setParser(valueFormatter.getParserFunction(columns[i].format));\n }\n if (typeof (columns[i].format) === 'string') {\n setFormatter(this.locator, columns[i]);\n }\n else if (!columns[i].format && columns[i].type === 'number') {\n columns[i].setParser(fmtr.getParserFunction({ format: 'n2' }));\n }\n }\n };\n 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 this.parent.on(events.autoCol, this.dynamicColumnChange, this);\n };\n /** @hidden */\n Render.prototype.validateGroupRecords = function (e) {\n var _this = this;\n var index = e.result.length - 1;\n if (index < 0) {\n return Promise.resolve(e);\n }\n var group0 = e.result[0];\n var groupN = e.result[index];\n var predicate = [];\n var addWhere = function (input) {\n [group0, groupN].forEach(function (group) {\n return predicate.push(new Predicate('field', '==', group.field).and(_this.getPredicate('key', 'equal', group.key)));\n });\n input.where(Predicate.or(predicate));\n };\n var query = new Query();\n addWhere(query);\n var curDm = new DataManager(e.result);\n var curFilter = curDm.executeLocal(query);\n var newQuery = this.data.generateQuery(true);\n var rPredicate = [];\n if (this.data.isRemote()) {\n [group0, groupN].forEach(function (group) {\n return rPredicate.push(_this.getPredicate(group.field, 'equal', group.key));\n });\n newQuery.where(Predicate.or(rPredicate));\n }\n else {\n addWhere(newQuery);\n }\n var deferred = new Deferred();\n this.data.getData({}, newQuery).then(function (r) {\n _this.updateGroupInfo(curFilter, r.result);\n deferred.resolve(e);\n }).catch(function (e) { return deferred.reject(e); });\n return deferred.promise;\n };\n Render.prototype.getPredicate = function (key, operator, value) {\n if (value instanceof Date) {\n return getDatePredicate({ field: key, operator: operator, value: value });\n }\n return new Predicate(key, operator, value);\n };\n Render.prototype.updateGroupInfo = function (current, untouched) {\n var _this = this;\n var dm = new DataManager(untouched);\n current.forEach(function (element, index, array) {\n var uGroup = dm.executeLocal(new Query()\n .where(new Predicate('field', '==', element.field).and(_this.getPredicate('key', 'equal', element.key))))[0];\n element.count = uGroup.count;\n var itemGroup = element.items;\n var uGroupItem = uGroup.items;\n if (itemGroup.GroupGuid) {\n element.items = _this.updateGroupInfo(element.items, uGroup.items);\n }\n _this.parent.aggregates.forEach(function (row) {\n return row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) {\n var key = column.field + ' - ' + type;\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.isCancelDeSelect = false;\n this.isPreventCellSelect = false;\n this.parent = parent;\n this.selectionSettings = selectionSettings;\n this.factory = locator.getService('rendererFactory');\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n Selection.prototype.initializeSelection = function () {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n };\n /**\n * The function used to trigger onActionBegin\n * @return {void}\n * @hidden\n */\n Selection.prototype.onActionBegin = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n Selection.prototype.fDataUpdate = function (args) {\n if (args.cellIndex || args.rowIndex) {\n var rowObj = this.getRowObj(isNullOrUndefined(args.rowIndex) ? isNullOrUndefined(args.cellIndex) ?\n this.currentIndex : args.cellIndex.rowIndex : args.rowIndex);\n args.foreignKeyData = rowObj.foreignKeyData;\n }\n return args;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Selection.prototype.onActionComplete = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n /**\n * To destroy the selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n 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 var can = 'cancel';\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, row: selectedRow,\n previousRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex, target: this.target,\n cancel: false\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n }\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n 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 var can = 'cancel';\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, cancel: false\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n this.clearRow();\n 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 can = 'cancel';\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, cancel: false\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n if (this.isSingleSel()) {\n this.clearRow();\n }\n this.updateRowSelection(selectedRow, rowIndex);\n if (frzCols) {\n this.updateRowSelection(selectedMovableRow, rowIndex);\n }\n }\n 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 if (this.isCancelDeSelect === true) {\n return;\n }\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 var cancl = 'cancel';\n this.updatePersistCollection(row[0], false);\n var rowDeselectObj = { rowIndex: rowIndex, data: data, row: row, foreignKeyData: foreignKeyData, cancel: false };\n this.parent.trigger(type, this.parent.getFrozenColumns() ? __assign({}, rowDeselectObj, { mRow: mRow }) : rowDeselectObj);\n this.isCancelDeSelect = rowDeselectObj[cancl];\n this.updateCheckBoxes(row[0]);\n };\n Selection.prototype.getRowObj = function (row) {\n if (row === void 0) { row = this.currentIndex; }\n if (isNullOrUndefined(row)) {\n return {};\n }\n if (typeof row === 'number') {\n row = this.parent.getRowByIndex(row);\n }\n if (row) {\n return this.parent.getRowObjectFromUID(row.getAttribute('data-uid')) || {};\n }\n return {};\n };\n Selection.prototype.getSelectedMovableCell = function (cellIndex) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n if (frzCols) {\n if (cellIndex.cellIndex >= frzCols) {\n return gObj.getMovableCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n return null;\n }\n return null;\n };\n /**\n * Selects a cell by the given index.\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Selection.prototype.selectCell = function (cellIndex, isToggle) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(cellIndex);\n 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 args;\n var cncl = 'cancel';\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 args = {\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n cancel: false\n };\n this.onActionBegin(args, events.cellSelecting);\n }\n if (!isNullOrUndefined(args) && args[cncl] === true) {\n return;\n }\n this.clearCell();\n if (!isToggle) {\n this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n this.updateCellProps(cellIndex, cellIndex);\n if (!isToggle) {\n this.onActionComplete({\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n }\n };\n Selection.prototype.getCellIndex = function (rIdx, cIdx) {\n return (this.parent.getFrozenColumns() ? (cIdx >= this.parent.getFrozenColumns() ? this.parent.getMovableCellFromIndex(rIdx, cIdx)\n : this.parent.getCellFromIndex(rIdx, cIdx)) : this.parent.getCellFromIndex(rIdx, cIdx));\n };\n /**\n * Selects a range of cells from start and end indexes.\n * @param {IIndex} startIndex - Specifies the row and column's start index.\n * @param {IIndex} endIndex - Specifies the row and column's end index.\n * @return {void}\n */\n Selection.prototype.selectCellsByRange = function (startIndex, endIndex) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(startIndex);\n var frzCols = gObj.getFrozenColumns();\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(startIndex.rowIndex, startIndex.cellIndex);\n }\n var min;\n var max;\n var stIndex = startIndex;\n var edIndex = endIndex = endIndex ? endIndex : startIndex;\n var cellIndexes;\n var cancl = 'cancel';\n this.currentIndex = startIndex.rowIndex;\n var selectedData = gObj.getCurrentViewRecords()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var args = {\n data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n this.onActionBegin(args, events.cellSelecting);\n if (!isNullOrUndefined(args) && args[cancl] === true) {\n return;\n }\n this.clearCell();\n if (startIndex.rowIndex > endIndex.rowIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex.rowIndex; i <= endIndex.rowIndex; i++) {\n if (this.selectionSettings.cellSelectionMode !== '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 var cancl = 'cancel';\n if (cells[0] && cells[0].classList.contains('e-gridchkbox')) {\n this.updateCheckBoxes(closest(cells[0], 'tr'));\n }\n var args = {\n cells: cells, data: data, cellIndexes: cellIndexes, foreignKeyData: foreignKeyData, cancel: false\n };\n this.parent.trigger(type, args);\n this.isPreventCellSelect = args[cancl];\n };\n Selection.prototype.updateCellSelection = function (selectedCell, rowIndex, cellIndex) {\n if (!isNullOrUndefined(rowIndex)) {\n this.addRowCellIndex({ rowIndex: rowIndex, cellIndex: cellIndex });\n }\n selectedCell.classList.add('e-cellselectionbackground');\n if (selectedCell.classList.contains('e-gridchkbox')) {\n this.updateCheckBoxes(closest(selectedCell, 'tr'), true);\n }\n this.addAttribute(selectedCell);\n };\n Selection.prototype.addAttribute = function (cell) {\n this.target = cell;\n if (!isNullOrUndefined(cell)) {\n cell.setAttribute('aria-selected', 'true');\n if (!this.preventFocus) {\n this.focus.onClick({ target: cell }, true);\n }\n }\n };\n Selection.prototype.updateCellProps = function (startIndex, endIndex) {\n this.prevCIdxs = startIndex;\n this.prevECIdxs = endIndex;\n this.isCellSelected = this.selectedRowCellIndexes.length && true;\n };\n Selection.prototype.addRowCellIndex = function (rowCellIndex) {\n var isRowAvail;\n var index;\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[i].rowIndex === rowCellIndex.rowIndex) {\n isRowAvail = true;\n index = i;\n break;\n }\n }\n if (isRowAvail) {\n if (this.selectedRowCellIndexes[index].cellIndexes.indexOf(rowCellIndex.cellIndex) < 0) {\n this.selectedRowCellIndexes[index].cellIndexes.push(rowCellIndex.cellIndex);\n }\n }\n else {\n this.selectedRowCellIndexes.push({ rowIndex: rowCellIndex.rowIndex, cellIndexes: [rowCellIndex.cellIndex] });\n }\n };\n /**\n * Deselects the currently selected cells.\n * @return {void}\n */\n Selection.prototype.clearCellSelection = function () {\n if (this.isCellSelected) {\n var gObj = this.parent;\n var selectedCells = this.getSelectedCellsElement();\n var rowCell = this.selectedRowCellIndexes;\n var data = [];\n var cells = [];\n var foreignKeyData = [];\n var currentViewData = 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 if (this.isPreventCellSelect === true) {\n return;\n }\n for (var i = 0, len = selectedCells.length; i < len; i++) {\n selectedCells[i].classList.remove('e-cellselectionbackground');\n selectedCells[i].removeAttribute('aria-selected');\n }\n this.selectedRowCellIndexes = [];\n this.isCellSelected = false;\n this.cellDeselect(events.cellDeselected, rowCell, data, cells, foreignKeyData);\n }\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.allowSelection && 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 printGrid.trigger = gObj.trigger;\n };\n Print.prototype.contentReady = function () {\n if (this.isPrintGrid()) {\n var gObj = this.parent;\n if (this.isAsyncPrint) {\n this.printGrid();\n return;\n }\n var args = {\n requestType: 'print',\n element: gObj.element,\n selectedRows: gObj.getContentTable().querySelectorAll('tr[aria-selected=\"true\"]'),\n cancel: false\n };\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.inViewIndexes = [];\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', 'dataSource'];\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.isInitialLoad = false;\n this.mergeCells = {};\n this.isEdit = false;\n this.checkAllRows = 'None';\n this.isCheckBoxSelection = false;\n this.isPersistSelection = false;\n this.freezeRefresh = Component.prototype.refresh;\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith'\n };\n this.defaultLocale = {\n EmptyRecord: 'No records to display',\n True: 'true',\n False: 'false',\n InvalidFilterMessage: 'Invalid Filter Data',\n GroupDropArea: 'Drag a column header here to group its column',\n UnGroup: 'Click here to ungroup',\n GroupDisable: 'Grouping is disabled for this column',\n FilterbarTitle: '\\'s filter bar cell',\n EmptyDataSourceError: 'DataSource must not be empty at initial load since columns are generated from dataSource in AutoGenerate Column Grid',\n // Toolbar Items\n Add: 'Add',\n Edit: 'Edit',\n Cancel: 'Cancel',\n Update: 'Update',\n Delete: 'Delete',\n Print: 'Print',\n Pdfexport: 'PDF Export',\n Excelexport: 'Excel Export',\n Wordexport: 'Word Export',\n Csvexport: 'CSV Export',\n Search: 'Search',\n Columnchooser: 'Columns',\n Save: 'Save',\n Item: 'item',\n Items: 'items',\n EditOperationAlert: 'No records selected for edit operation',\n DeleteOperationAlert: 'No records selected for delete operation',\n SaveButton: 'Save',\n OKButton: 'OK',\n CancelButton: 'Cancel',\n EditFormTitle: 'Details of ',\n AddFormTitle: 'Add New Record',\n BatchSaveConfirm: 'Are you sure you want to save changes?',\n BatchSaveLostChanges: 'Unsaved changes will be lost. Are you sure you want to continue?',\n ConfirmDelete: 'Are you sure you want to Delete Record?',\n CancelEdit: 'Are you sure you want to Cancel the changes?',\n ChooseColumns: 'Choose Column',\n SearchColumns: 'search columns',\n Matchs: 'No Matches Found',\n FilterButton: 'Filter',\n ClearButton: 'Clear',\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n ChooseDate: 'Choose a Date',\n EnterValue: 'Enter the value',\n Copy: 'Copy',\n Group: 'Group by this column',\n Ungroup: 'Ungroup by this column',\n autoFitAll: 'Auto Fit all columns',\n autoFit: 'Auto Fit this column',\n Export: 'Export',\n FirstPage: 'First Page',\n LastPage: 'Last Page',\n PreviousPage: 'Previous Page',\n NextPage: 'Next Page',\n SortAscending: 'Sort Ascending',\n SortDescending: 'Sort Descending',\n EditRecord: 'Edit Record',\n DeleteRecord: 'Delete Record',\n FilterMenu: 'Filter',\n SelectAll: 'Select All',\n Blanks: 'Blanks',\n FilterTrue: 'True',\n FilterFalse: 'False',\n NoResult: 'No Matches Found',\n ClearFilter: 'Clear Filter',\n NumberFilter: 'Number Filters',\n TextFilter: 'Text Filters',\n DateFilter: 'Date Filters',\n MatchCase: 'Match Case',\n Between: 'Between',\n CustomFilter: 'Custom Filter',\n CustomFilterPlaceHolder: 'Enter the value',\n CustomFilterDatePlaceHolder: 'Choose a date',\n AND: 'AND',\n OR: 'OR',\n ShowRowsWhere: 'Show rows where:'\n };\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftRight: 'shift+rightarrow',\n shiftLeft: 'shift+leftarrow',\n home: 'home',\n end: 'end',\n escape: 'escape',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n ctrlAltPageUp: 'ctrl+alt+pageup',\n ctrlAltPageDown: 'ctrl+alt+pagedown',\n altPageUp: 'alt+pageup',\n altPageDown: 'alt+pagedown',\n altDownArrow: 'alt+downarrow',\n altUpArrow: 'alt+uparrow',\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlPlusA: 'ctrl+A',\n ctrlPlusP: 'ctrl+P',\n insert: 'insert',\n delete: 'delete',\n f2: 'f2',\n enter: 'enter',\n ctrlEnter: 'ctrl+enter',\n shiftEnter: 'shift+enter',\n tab: 'tab',\n shiftTab: 'shift+tab',\n space: 'space',\n ctrlPlusC: 'ctrl+C',\n ctrlShiftPlusH: 'ctrl+shift+H'\n };\n /* tslint:enable */\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n */\n Grid.prototype.render = function () {\n this.ariaService.setOptions(this.element, { role: 'grid' });\n createSpinner({ target: this.element });\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 var col = this.getColumns()[columnIndex];\n col.visible = e.matches;\n if (this.isInitialLoad) {\n if (col.visible) {\n this.showHider.show(col.headerText, 'headerText');\n }\n else {\n this.showHider.hide(col.headerText, 'headerText');\n }\n }\n };\n Grid.prototype.refreshMediaCol = function () {\n this.isInitialLoad = true;\n };\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 || ((newProp.pageSettings.currentPage !== oldProp.pageSettings.currentPage)\n && !this.enableColumnVirtualization && !this.enableVirtualization\n && this.pageSettings.totalRecordsCount <= this.pageSettings.pageSize)) {\n requireRefresh = true;\n }\n break;\n case '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 oldProperties: oldProp.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 if (pending_1.isPending) {\n var gResult_1 = !isNullOrUndefined(this.dataSource) ? this.dataSource.result : [];\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 /**\n * @private\n */\n Grid.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n if (this.filterModule && muteOnChange) {\n this.filterModule.refreshFilter();\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.updateDefaultCursor = function () {\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n for (var _i = 0, headerRows_1 = headerRows; _i < headerRows_1.length; _i++) {\n var row = headerRows_1[_i];\n if (this.allowSorting || this.allowGrouping || this.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.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 this.createTooltip(); //for clip mode ellipsis\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.createTooltip = function () {\n this.toolTipObj = new Tooltip({ opensOn: 'custom', content: '' }, this.element);\n };\n Grid.prototype.getTooltipStatus = function (element) {\n var width;\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var htable = this.createTable(headerTable, headerDivTag, 'header');\n var ctable = this.createTable(headerTable, headerDivTag, 'content');\n var td = element;\n var table = headerTable.contains(element) ? htable : ctable;\n var ele = headerTable.contains(element) ? 'th' : 'tr';\n table.querySelector(ele).className = element.className;\n table.querySelector(ele).innerHTML = element.innerHTML;\n width = table.querySelector(ele).getBoundingClientRect().width;\n if (width > element.getBoundingClientRect().width) {\n return true;\n }\n return false;\n };\n Grid.prototype.mouseMoveHandler = function (e) {\n if (this.isEllipsisTooltip()) {\n var element = parentsUntil(e.target, 'e-ellipsistooltip');\n if (element) {\n if (element.getAttribute('aria-describedby')) {\n return;\n }\n if (this.getTooltipStatus(element)) {\n if (element.getElementsByClassName('e-headertext').length) {\n this.toolTipObj.content = element.getElementsByClassName('e-headertext')[0].innerHTML;\n }\n else {\n this.toolTipObj.content = element.innerHTML;\n }\n this.toolTipObj.open(element);\n }\n else {\n this.toolTipObj.close();\n }\n }\n else {\n this.toolTipObj.close();\n }\n }\n };\n Grid.prototype.isEllipsisTooltip = function () {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].clipMode === 'EllipsisWithTooltip') {\n return true;\n }\n }\n return false;\n };\n Grid.prototype.scrollHandler = function () {\n if (this.isEllipsisTooltip()) {\n this.toolTipObj.close();\n }\n };\n /**\n * To create table for ellipsiswithtooltip\n * @hidden\n */\n Grid.prototype.createTable = function (table, tag, type) {\n var myTableDiv = 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 EventHandler.add(this.getContent().firstElementChild, 'scroll', this.scrollHandler, this);\n EventHandler.add(this.element, 'mousemove', this.mouseMoveHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy.\n * @hidden\n */\n Grid.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.mouseClickHandler);\n EventHandler.remove(this.element, 'touchend', this.mouseClickHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.getContent().firstElementChild, 'scroll', this.scrollHandler);\n EventHandler.remove(this.element, 'mousemove', this.mouseMoveHandler);\n };\n /**\n * @hidden\n */\n Grid.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.on(events.dataReady, this.dataReady, this);\n this.on(events.contentReady, this.recalcIndentWidth, this);\n this.on(events.headerRefreshed, this.recalcIndentWidth, this);\n this.dataBoundFunction = this.refreshMediaCol.bind(this);\n this.addEventListener(events.dataBound, this.dataBoundFunction);\n };\n /**\n * @hidden\n */\n Grid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.dataReady, this.dataReady);\n this.off(events.contentReady, this.recalcIndentWidth);\n this.off(events.headerRefreshed, this.recalcIndentWidth);\n this.removeEventListener(events.dataBound, this.dataBoundFunction);\n };\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 if ((!e.relatedTarget || !parentsUntil(e.relatedTarget, 'e-grid'))\n && !this.keyPress && this.editSettings.mode === 'Batch' && this.isEdit) {\n this.editModule.saveCell();\n }\n this.keyPress = false;\n };\n Grid.prototype.isChildGrid = function (e) {\n var gridElement = parentsUntil(e.target, 'e-grid');\n if (gridElement && gridElement.id !== this.element.id) {\n return true;\n }\n return false;\n };\n Grid.prototype.mergePersistGridData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n var dataObj = JSON.parse(data);\n var keys = Object.keys(dataObj);\n this.isProtectedOnChange = true;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if ((typeof this[key] === 'object') && !isNullOrUndefined(this[key])) {\n if (Array.isArray(this[key]) && key === 'columns') {\n this.mergeColumns(dataObj[key], this[key]);\n this[key] = dataObj[key];\n }\n else {\n extend(this[key], dataObj[key]);\n }\n }\n else {\n this[key] = dataObj[key];\n }\n }\n this.isProtectedOnChange = false;\n }\n };\n Grid.prototype.mergeColumns = function (storedColumn, columns) {\n var _this = this;\n storedColumn.forEach(function (col, index, arr) {\n var ind;\n var localCol = _this.getColumnByField(col.field) ||\n columns.some(function (element, i) {\n ind = i;\n return element.headerText === col.headerText;\n }) && columns[ind];\n if (!isNullOrUndefined(localCol)) {\n if (localCol.columns && localCol.columns.length) {\n _this.mergeColumns(col.columns, localCol.columns);\n }\n else {\n arr[index] = extend({}, localCol, col, true);\n }\n }\n });\n };\n Grid.prototype.isDetail = function () {\n return !isNullOrUndefined(this.detailTemplate) || !isNullOrUndefined(this.childGrid);\n };\n Grid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n Grid.prototype.isForeignKeyEnabled = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isForeignKeyEnabled(col.columns);\n }\n return !!(col.dataSource && col.foreignKeyValue);\n });\n };\n Grid.prototype.keyActionHandler = function (e) {\n this.keyPress = true;\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 /**\n * Destroys the given template reference.\n * @param {string[]} propertyNames - Defines the collection of template name.\n */\n Grid.prototype.destroyTemplate = function (propertyNames) {\n this.clearTemplate(propertyNames);\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 if (this.contentRefresh) {\n this.updateModel();\n }\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 this.addSortIcons();\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 if (cols.length > 1) {\n this.isMultiSort = true;\n }\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 this.isMultiSort = false;\n };\n Sort.prototype.removeSortIcons = function (position) {\n var gObj = this.parent;\n var header;\n var cols = this.sortSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = position ? position : 0, len = !isNullOrUndefined(position) ? position + 1 : cols.length; i < len; i++) {\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1 &&\n (isNullOrUndefined(header) || !header.querySelector('.e-sortfilterdiv'))) {\n continue;\n }\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n this.aria.setSort(header, 'none');\n classList(header.querySelector('.e-sortfilterdiv'), [], ['e-descending', 'e-icon-descending', 'e-ascending', 'e-icon-ascending']);\n if (header.querySelector('.e-sortnumber')) {\n header.querySelector('.e-headercelldiv').removeChild(header.querySelector('.e-sortnumber'));\n }\n }\n };\n Sort.prototype.getSortColumnFromField = function (field) {\n for (var i = 0, len = this.sortSettings.columns.length; i < len; i++) {\n if (this.sortSettings.columns[i].field === field) {\n return this.sortSettings.columns[i];\n }\n }\n return false;\n };\n Sort.prototype.updateAriaAttr = function () {\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var _i = 0, _a = this.sortedColumns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (fieldNames.indexOf(col) === -1) {\n continue;\n }\n var header = this.parent.getColumnHeaderByField(col);\n this.aria.setSort(header, this.getSortColumnFromField(col).direction);\n }\n };\n Sort.prototype.refreshSortIcons = function () {\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 if (this.checkpagesizes()) {\n this.pagerdropdownModule.setDropDownValue('value', this.pageSize);\n }\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 PagerDropDown.prototype.setDropDownValue = function (prop, value) {\n if (prop === 'value') {\n this.dropDownListObject.value = value;\n }\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 }\n else {\n links[i].setAttribute('aria-owns', this.parent.element.getAttribute('id') + '_content_table');\n }\n var numericContainerDiv = createElement('div');\n numericContainerDiv.appendChild(links[i]);\n frag.appendChild(numericContainerDiv);\n }\n numericContainerNew.appendChild(frag);\n pagerContainer.replaceChild(numericContainerNew, numericContainer);\n var classList = ['.e-mfirst', '.e-mprev', '.e-first', '.e-prev', '.e-next', '.e-last', '.e-mnext', '.e-mlast'];\n classList.forEach(function (value) {\n var element = _this.element.querySelector(value);\n if (_this.parent.getContentTable()) {\n element.setAttribute('aria-owns', _this.parent.getContentTable().id);\n }\n });\n }\n };\n Page.prototype.dataReady = function (e) {\n this.updateModel(e);\n };\n /**\n * Refreshes the page count, pager information, and external message.\n * @return {void}\n */\n Page.prototype.refresh = function () {\n this.pagerObj.refresh();\n };\n /**\n * Navigates to the target page according to the given number.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.pagerObj.goToPage(pageNo);\n };\n /**\n * The function used to update pageSettings model\n * @return {void}\n * @hidden\n */\n Page.prototype.updateModel = function (e) {\n this.parent.pageSettings.totalRecordsCount = e.count;\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Page.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n currentPage: this.parent.pageSettings.currentPage, requestType: 'paging',\n type: events.actionComplete\n }));\n };\n /**\n * @hidden\n */\n Page.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.pagerObj[prop] = newProp[prop];\n }\n this.pagerObj.dataBind();\n };\n Page.prototype.clickHandler = function (e) {\n var gObj = this.parent;\n if (this.isForceCancel || isActionPrevent(gObj)) {\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 !== '' && !isNullOrUndefined(args.filteredValue)) {\n var struiObj = document.querySelector('#strui-' + args.column.uid).ej2_instances[0];\n struiObj.value = args.filteredValue;\n }\n };\n StringFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var actuiObj = document.querySelector('#strui-' + column.uid).ej2_instances[0];\n if (Browser.isDevice) {\n actuiObj.hidePopup();\n actuiObj.focusOut();\n }\n var filterValue = actuiObj.value;\n if (isNullOrUndefined(filterValue) || filterValue === '') {\n filterValue = null;\n }\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n StringFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return StringFilterUI;\n}());\nexport { StringFilterUI };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\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 { getZIndexCalcualtion } from '../base/util';\nimport { Query, DataManager, DataUtil } 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 isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = isForeignColumn ? args.column.foreignKeyValue : args.column.field;\n this.elem = createElement('input', { className: 'e-flmenu-input', id: 'bool-ui-' + args.column.uid });\n args.target.appendChild(this.elem);\n this.dialogObj = args.dialogObj;\n this.dropInstance = new DropDownList({\n dataSource: dataSource instanceof DataManager ?\n dataSource : new DataManager(dataSource),\n query: new Query().select(fields),\n fields: { text: fields, value: fields },\n placeholder: args.localizeText.getConstant('SelectValue'),\n cssClass: 'e-popup-flmenu',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n actionComplete: function (e) {\n e.result = DataUtil.distinct(e.result, fields, true);\n }\n });\n this.dropInstance.appendTo(this.elem);\n };\n BooleanFilterUI.prototype.write = function (args) {\n var drpuiObj = document.querySelector('#bool-ui-' + args.column.uid).ej2_instances[0];\n if (!isNullOrUndefined(args.filteredValue)) {\n drpuiObj.text = args.filteredValue;\n }\n };\n BooleanFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var drpuiObj = document.querySelector('#bool-ui-' + column.uid).ej2_instances[0];\n var filterValue = drpuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n BooleanFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return BooleanFilterUI;\n}());\nexport { BooleanFilterUI };\n","import { DatePicker } 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 temp({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj\n });\n }\n else {\n column.filter.ui.create({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj\n });\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 temp({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n else {\n col.filter.ui.write({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\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 flValue = temp({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n }\n else {\n flValue = col.filter.ui.read({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n }\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 { 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.customFilterOperators = customFltrOperators;\n _this.isExcel = true;\n return _this;\n }\n ExcelFilter.prototype.getCMenuDS = function (type, operator) {\n var options = {\n number: ['Equal', 'NotEqual', '', 'LessThan', 'LessThanOrEqual', 'GreaterThan',\n 'GreaterThanOrEqual', 'Between', '', 'CustomFilter'],\n string: ['Equal', 'NotEqual', '', 'StartsWith', 'EndsWith', '', 'Contains', '', 'CustomFilter'],\n };\n options.date = options.number;\n options.datetime = options.number;\n var model = [];\n for (var i = 0; i < options[type].length; i++) {\n if (options[type][i].length) {\n if (operator) {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...',\n iconCss: 'e-icons e-icon-check ' + (operator === options[type][i] ? '' : '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 if (!isNullOrUndefined(submenu)) {\n submenu.classList.remove('e-selected');\n }\n this.isCMenuOpen = false;\n this.destroyCMenu();\n }\n var selectedMenu = this.ensureTextFilter();\n if (!this.isCMenuOpen && isSubMenu) {\n li.classList.add('e-selected');\n this.isCMenuOpen = true;\n var menuOptions = {\n items: this.getCMenuDS(this.options.type, selectedMenu ? selectedMenu.replace(/\\s/g, '') : undefined),\n select: this.selectHandler.bind(this),\n onClose: this.destroyCMenu.bind(this),\n enableRtl: this.parent.enableRtl,\n beforeClose: this.preventClose\n };\n this.parent.element.appendChild(this.cmenu);\n this.menuObj = new ContextMenu(menuOptions, this.cmenu);\n var client = this.menu.querySelector('.e-submenu').getBoundingClientRect();\n var pos = { top: 0, left: 0 };\n if (Browser.isDevice) {\n var contextRect = this.getContextBounds(this.menuObj);\n pos.top = (window.innerHeight - contextRect.height) / 2;\n pos.left = (window.innerWidth - contextRect.width) / 2;\n this.closeDialog();\n }\n else {\n pos.top = 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 _this = this;\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: this.getLocalizedLabel('CustomFilter'),\n isModal: true,\n overlayClick: this.removeDialog.bind(this),\n showCloseIcon: true,\n closeOnEscape: false,\n target: document.body,\n // target: this.parent.element,\n visible: false,\n enableRtl: this.parent.enableRtl,\n open: function () {\n var row = _this.dlgObj.element.querySelector('table.e-xlfl-table>tr');\n row.cells[1].querySelector('input:not([type=hidden])').focus();\n },\n close: this.removeDialog.bind(this),\n created: this.createdDialog.bind(this, target, column),\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.getLocalizedLabel('OKButton'), isPrimary: true, cssClass: 'e-xlfl-okbtn'\n }\n },\n {\n click: this.removeDialog.bind(this),\n buttonModel: { content: this.getLocalizedLabel('CancelButton'), cssClass: 'e-xlfl-cancelbtn' }\n }],\n content: mainDiv,\n width: 430,\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n ExcelFilter.prototype.removeDialog = function () {\n this.removeObjects([this.dropOptr, this.datePicker, this.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: this.getLocalizedLabel('MatchCase'),\n 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 query: this.parent.query.clone(),\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 var filterBarElement = this.parent.getHeaderContent().querySelector('.e-filterbar');\n if (this.parent.getFrozenColumns() && filterBarElement) {\n remove(filterBarElement);\n }\n }\n };\n Filter.prototype.generateRow = function (index) {\n var options = {};\n var row = new Row(options);\n row.cells = this.generateCells();\n return row;\n };\n Filter.prototype.generateCells = function () {\n //TODO: generate dummy column for group, detail, stacked row here for filtering;\n var cells = [];\n if (this.parent.allowGrouping) {\n for (var c = 0, len = this.parent.groupSettings.columns.length; c < len; c++) {\n cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n 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 (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n this.values[this.column.field] = filterValue; //this line should be above updateModel\n }\n if (this.checkAlreadyColFiltered(this.column.field)) {\n return;\n }\n this.actualPredicate[this.fieldName] = [{\n field: this.fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: this.operator,\n value: this.value,\n type: this.column.type\n }];\n this.addFilteredClass();\n this.updateModel();\n };\n Filter.prototype.applyColumnFormat = function (filterValue) {\n var getFlvalue = (this.column.type === 'date' || this.column.type === 'datetime') ?\n new Date(filterValue) : parseFloat(filterValue);\n this.values[this.column.field] = this.setFormatForFlColumn(getFlvalue, this.column);\n };\n Filter.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'columns':\n if (this.contentRefresh) {\n this.parent.notify(events.modelChanged, {\n currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column ?\n this.column.field : undefined,\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionBegin\n });\n this.refreshFilterSettings();\n this.updateFilterMsg();\n }\n break;\n case 'showFilterBarStatus':\n if (e.properties[prop]) {\n this.updateFilterMsg();\n }\n else if (this.parent.allowPaging) {\n this.parent.updateExternalMessage('');\n }\n break;\n case 'type':\n this.parent.refreshHeader();\n this.refreshFilterSettings();\n break;\n }\n }\n };\n Filter.prototype.refreshFilterSettings = function () {\n if (this.filterSettings.type === 'FilterBar') {\n for (var i = 0; i < this.filterSettings.columns.length; i++) {\n this.column = this.parent.getColumnByField(this.filterSettings.columns[i].field) ||\n getColumnByForeignKeyValue(this.filterSettings.columns[i].field, this.parent.getForeignKeyColumns());\n var filterValue = this.filterSettings.columns[i].value;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n var key = this.filterSettings.columns[i].field;\n this.values[key] = this.filterSettings.columns[i].value;\n }\n var filterElement = this.getFilterBarElement(this.filterSettings.columns[i].field);\n if (filterElement) {\n filterElement.value = this.filterSettings.columns[i].value;\n }\n }\n if (this.filterSettings.columns.length === 0) {\n var col = this.parent.getColumns();\n for (var i = 0; i < col.length; i++) {\n var filterElement = this.getFilterBarElement(col[i].field);\n if (filterElement && filterElement.value !== '') {\n filterElement.value = '';\n delete this.values[col[i].field];\n }\n }\n }\n }\n };\n Filter.prototype.getFilterBarElement = function (col) {\n var selector = '[id=\\'' + col + '_filterBarcell\\']';\n var filterElement;\n if (selector && !isNullOrUndefined(this.element)) {\n filterElement = this.element.querySelector(selector);\n }\n return filterElement;\n };\n /**\n * @private\n */\n Filter.prototype.refreshFilter = function () {\n this.refreshFilterSettings();\n this.updateFilterMsg();\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n Filter.prototype.clearFiltering = function () {\n var cols = getActualPropFromColl(this.filterSettings.columns);\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFiltering });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeFilteredColsByField(cols[i].field, false);\n }\n if (this.parent.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n var fltrElement = [].slice.call(this.parent.element.querySelectorAll('.e-filtered'));\n for (var i = 0, len = fltrElement.length; i < len; i++) {\n fltrElement[0].removeAttribute('aria-filtered');\n fltrElement[0].classList.remove('e-filtered');\n }\n }\n this.isRemove = true;\n this.filterStatusMsg = '';\n this.updateFilterMsg();\n };\n Filter.prototype.checkAlreadyColFiltered = function (field) {\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n if (col.field === field && col.value === this.value &&\n col.operator === this.operator && col.predicate === this.predicate) {\n return true;\n }\n }\n return false;\n };\n Filter.prototype.columnMenuFilter = function (args) {\n this.column = args.col;\n var ele = closest(args.target, '#' + args.id);\n if (args.isClose && !ele) {\n this.filterModule.closeDialog();\n }\n else if (ele) {\n this.filterDialogOpen(this.column, args.target);\n }\n };\n Filter.prototype.filterDialogOpen = function (col, target, left, top) {\n var gObj = this.parent;\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.filterModule = new this.type[col.filter.type || this.parent.filterSettings.type](this.parent, gObj.filterSettings, this.serviceLocator, this.customOperators, this);\n var dataSource = col.filter.dataSource || gObj.getDataModule().dataManager;\n this.filterModule.openDialog({\n type: col.type, field: col.field, displayName: col.headerText,\n dataSource: dataSource, format: col.format,\n filteredColumns: gObj.filterSettings.columns, target: target,\n sortedColumns: gObj.sortSettings.columns, formatFn: col.getFormatter(),\n parserFn: col.getParser(), query: gObj.query, template: col.getFilterItemTemplate(),\n hideSearchbox: isNullOrUndefined(col.filter.hideSearchbox) ? false : col.filter.hideSearchbox,\n handler: this.filterHandler.bind(this), localizedStrings: gObj.getLocaleConstants(),\n position: { X: left, Y: top }, column: col, foreignKeyValue: col.foreignKeyValue,\n actualPredicate: this.actualPredicate, localeObj: this.parent.localeObj\n });\n };\n /**\n * Removes filtered column by field name.\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @return {void}\n * @hidden\n */\n Filter.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n var fCell;\n var cols = this.filterSettings.columns;\n if (isActionPrevent(this.parent)) {\n var args = { instance: this, handler: this.removeFilteredColsByField, arg1: field, arg2: isClearFilterBar };\n this.parent.notify(events.preventBatch, args);\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n var column = this.parent.getColumnByField(field) ||\n getColumnByForeignKeyValue(field, this.parent.getForeignKeyColumns());\n if (cols[i].field === field || cols[i].field === column.foreignKeyValue) {\n if (this.filterSettings.type === 'FilterBar' && !isClearFilterBar) {\n var selector = '[id=\\'' + cols[i].field + '_filterBarcell\\']';\n fCell = this.parent.getHeaderContent().querySelector(selector);\n fCell.value = '';\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 if (this.actualPredicate[field]) {\n delete this.actualPredicate[field];\n }\n if (this.values[field]) {\n delete this.values[field];\n }\n this.parent.notify(events.modelChanged, {\n requestType: 'filtering', type: events.actionBegin\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('_filterBarcell')[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;\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 else {\n filterValue = JSON.parse(JSON.stringify(filterElement.value));\n }\n if (isNullOrUndefined(this.value) || this.value === '') {\n this.removeFilteredColsByField(this.column.field);\n return;\n }\n this.validateFilterValue(this.value);\n this.filterByColumn(this.column.field, this.operator, this.value, this.predicate, this.matchCase, this.ignoreAccent);\n filterElement.value = filterValue;\n this.updateFilterMsg();\n };\n Filter.prototype.validateFilterValue = function (value) {\n var gObj = this.parent;\n var skipInput;\n var index;\n this.matchCase = true;\n switch (this.column.type) {\n case 'number':\n this.operator = this.filterOperators.equal;\n skipInput = ['>', '<', '=', '!'];\n for (var i = 0; i < value.length; i++) {\n if (skipInput.indexOf(value[i]) > -1) {\n index = i;\n break;\n }\n }\n this.getOperator(value.substring(index));\n if (index !== 0) {\n this.value = value.substring(0, index);\n }\n if (this.value !== '' && value.length >= 1) {\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n }\n if (isNaN(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n break;\n case 'date':\n case 'datetime':\n this.operator = this.filterOperators.equal;\n if (this.value !== '' && !(this.value instanceof Date)) {\n this.getOperator(value);\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n if (isNullOrUndefined(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n }\n break;\n case 'string':\n this.matchCase = false;\n if (value.charAt(0) === '*') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(value.length - 1) === '%') {\n this.value = this.value.slice(0, -1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(0) === '%') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.endsWith;\n }\n else {\n this.operator = this.filterOperators.startsWith;\n }\n break;\n case 'boolean':\n if (value.toLowerCase() === 'true' || value === '1') {\n this.value = true;\n }\n else if (value.toLowerCase() === 'false' || value === '0') {\n this.value = false;\n }\n else if (value.length) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n this.operator = this.filterOperators.equal;\n break;\n default:\n this.operator = this.filterOperators.equal;\n }\n };\n Filter.prototype.getOperator = function (value) {\n var singleOp = value.charAt(0);\n var multipleOp = value.slice(0, 2);\n var operators = extend({ '=': this.filterOperators.equal, '!': this.filterOperators.notEqual }, DataUtil.operatorSymbols);\n if (operators.hasOwnProperty(singleOp) || operators.hasOwnProperty(multipleOp)) {\n this.operator = operators[singleOp];\n this.value = value.substring(1);\n if (!this.operator) {\n this.operator = operators[multipleOp];\n this.value = value.substring(2);\n }\n }\n if (this.operator === this.filterOperators.lessThan || this.operator === this.filterOperators.greaterThan) {\n if (this.value.charAt(0) === '=') {\n this.operator = this.operator + 'orequal';\n this.value = this.value.substring(1);\n }\n }\n };\n Filter.prototype.columnPositionChanged = function (e) {\n if (this.parent.filterSettings.type !== 'FilterBar') {\n return;\n }\n };\n Filter.prototype.getLocalizedCustomOperators = function () {\n var numOptr = [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', text: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', text: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', text: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', text: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', text: this.l10n.getConstant('StartsWith') },\n { value: 'endswith', text: this.l10n.getConstant('EndsWith') },\n { value: 'contains', text: this.l10n.getConstant('Contains') },\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: numOptr,\n dateOperator: numOptr,\n datetimeOperator: numOptr,\n booleanOperator: [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ]\n };\n };\n ;\n Filter.prototype.filterIconClickHandler = function (e) {\n var target = e.target;\n if (target.classList.contains('e-filtermenudiv') && (this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel')) {\n var gObj = this.parent;\n var col = gObj.getColumnByUid(parentsUntil(target, 'e-headercell').firstElementChild.getAttribute('e-mappinguid'));\n var gClient = gObj.element.getBoundingClientRect();\n var fClient = target.getBoundingClientRect();\n this.column = col;\n if (this.fltrDlgDetails.field === col.field && this.fltrDlgDetails.isOpen) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.fltrDlgDetails = { field: col.field, isOpen: true };\n this.filterDialogOpen(this.column, target, fClient.right - gClient.left, fClient.bottom - gClient.top);\n }\n };\n Filter.prototype.clickHandler = function (e) {\n if (this.filterSettings.mode === 'Immediate' || this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel') {\n var gObj = this.parent;\n var target = e.target;\n var datepickerEle = target.classList.contains('e-day'); // due to datepicker popup cause\n if (parentsUntil(target, 'e-filter-popup') || target.classList.contains('e-filtermenudiv')) {\n return;\n }\n else if (this.filterModule &&\n (!parentsUntil(target, 'e-popup-wrapper')\n && (!closest(target, '.e-filter-item.e-menu-item'))\n && (!parentsUntil(target, 'e-popup'))) && !datepickerEle) {\n this.filterModule.closeDialog(target);\n }\n if (this.filterSettings.mode === 'Immediate' && target.classList.contains('e-clear-icon')) {\n var targetText = target.previousElementSibling;\n this.removeFilteredColsByField(targetText.id.slice(0, -14)); //Length of _filterBarcell = 14\n }\n }\n };\n Filter.prototype.filterHandler = function (args) {\n var filterIconElement;\n this.actualPredicate[args.field] = args.actualPredicate;\n var dataManager = new DataManager(this.filterSettings.columns);\n var query = new Query().where('field', this.filterOperators.equal, args.field);\n var result = dataManager.executeLocal(query);\n for (var i = 0; i < result.length; i++) {\n var index = -1;\n for (var j = 0; j < this.filterSettings.columns.length; j++) {\n if (result[i].field === this.filterSettings.columns[j].field) {\n index = j;\n break;\n }\n }\n if (index !== -1) {\n this.filterSettings.columns.splice(index, 1);\n }\n }\n if (this.values[args.field]) {\n delete this.values[args.field];\n }\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n filterIconElement = this.parent.getColumnHeaderByField(args.field).querySelector(iconClass);\n if (args.action === 'filtering') {\n this.filterSettings.columns = this.filterSettings.columns.concat(args.filterCollection);\n if (this.filterSettings.columns.length && filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n }\n else {\n if (filterIconElement) {\n filterIconElement.classList.remove('e-filtered');\n }\n this.parent.refresh(); //hot-fix onpropertychanged not working for object { array } \n }\n this.parent.dataBind();\n };\n Filter.prototype.addFilteredClass = function () {\n var filterIconElement;\n filterIconElement = this.parent.getColumnHeaderByField(this.fieldName).querySelector('.e-icon-filter');\n if (filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\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 var header = closest(e.target, resizeClassList.header);\n header.classList.add('e-resized');\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 (clear) {\n if (this.groupSettings.showDropArea && !this.groupSettings.columns.length) {\n var dragLabel = this.l10n.getConstant('GroupDropArea');\n this.element.innerHTML = dragLabel;\n this.element.classList.remove('e-grouped');\n }\n else {\n if ((this.element.innerHTML === this.l10n.getConstant('GroupDropArea') && (this.groupSettings.columns.length === 1\n || !this.isAppliedGroup && !this.isAppliedUnGroup)) || clear) {\n this.element.innerHTML = '';\n }\n this.element.classList.add('e-grouped');\n }\n };\n Group.prototype.initDragAndDrop = function () {\n this.initializeGHeaderDrop();\n this.initializeGHeaderDrag();\n };\n Group.prototype.initializeGHeaderDrag = function () {\n var drag = new Draggable(this.element, {\n dragTarget: '.e-groupheadercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n Group.prototype.initializeGHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(this.element, {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n Group.prototype.groupColumn = function (columnName) {\n var gObj = this.parent;\n var column = gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n (this.contentRefresh && this.groupSettings.columns.indexOf(columnName) > -1)) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.groupColumn, arg1: columnName });\n return;\n }\n column.visible = gObj.groupSettings.showGroupedColumn;\n this.colName = columnName;\n this.isAppliedGroup = true;\n if (this.contentRefresh) {\n this.updateModel();\n }\n else {\n this.addColToGroupDrop(columnName);\n }\n this.updateGroupDropArea();\n this.isAppliedGroup = false;\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n Group.prototype.ungroupColumn = function (columnName) {\n var gObj = this.parent;\n var column = this.parent.enableColumnVirtualization ?\n this.parent.columns.filter(function (c) { return c.field === columnName; })[0] : gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false || this.groupSettings.columns.indexOf(columnName) < 0) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.ungroupColumn, arg1: columnName });\n return;\n }\n column.visible = true;\n this.colName = column.field;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.splice(columns.indexOf(this.colName), 1);\n if (this.sortedColumns.indexOf(columnName) < 0) {\n for (var i = 0, len = gObj.sortSettings.columns.length; i < len; i++) {\n if (columnName === gObj.sortSettings.columns[i].field) {\n gObj.sortSettings.columns.splice(i, 1);\n break;\n }\n }\n }\n this.groupSettings.columns = columns;\n if (gObj.allowGrouping) {\n this.isAppliedUnGroup = true;\n this.parent.dataBind();\n }\n };\n /**\n * The function used to update groupSettings\n * @return {void}\n * @hidden\n */\n Group.prototype.updateModel = function () {\n var gObj = this.parent;\n var i = 0;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.push(this.colName);\n this.groupSettings.columns = columns;\n this.groupAddSortingQuery(this.colName);\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Group.prototype.onActionComplete = function (e) {\n var gObj = this.parent;\n if (e.requestType === 'grouping') {\n this.addColToGroupDrop(this.colName);\n }\n else {\n this.removeColFromGroupDrop(this.colName);\n }\n var args = this.groupSettings.columns.indexOf(this.colName) > -1 ? {\n columnName: this.colName, requestType: 'grouping', type: events.actionComplete\n } : { requestType: 'ungrouping', type: events.actionComplete };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.colName = null;\n };\n Group.prototype.groupAddSortingQuery = function (colName) {\n var i = 0;\n while (i < this.parent.sortSettings.columns.length) {\n if (this.parent.sortSettings.columns[i].field === colName) {\n break;\n }\n i++;\n }\n if (this.parent.sortSettings.columns.length === i) {\n this.parent.sortSettings.columns.push({ field: colName, direction: 'Ascending' });\n }\n else if (!this.parent.allowSorting) {\n this.parent.sortSettings.columns[i].direction = 'Ascending';\n }\n };\n Group.prototype.addColToGroupDrop = function (field) {\n var gObj = this.parent;\n var direction = 'Ascending';\n var groupedColumn = 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 }\n this.isAppliedUnGroup = false;\n };\n Group.prototype.onPropertyChanged = function (e) {\n var _this = this;\n if (e.module !== this.getModuleName()) {\n return;\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'columns':\n var args = void 0;\n if (this_1.contentRefresh) {\n if (!this_1.isAppliedUnGroup) {\n if (!this_1.isAppliedGroup) {\n this_1.updateGroupDropArea(true);\n for (var i = 0; i < this_1.groupSettings.columns.length; i++) {\n this_1.colName = this_1.groupSettings.columns[i];\n var col = this_1.parent.getColumnByField(this_1.colName);\n col.visible = this_1.parent.groupSettings.showGroupedColumn;\n this_1.groupAddSortingQuery(this_1.colName);\n if (i < this_1.groupSettings.columns.length - 1) {\n this_1.addColToGroupDrop(this_1.groupSettings.columns[i]);\n }\n }\n }\n args = { columnName: this_1.colName, requestType: e.properties[prop].length ? 'grouping' : 'ungrouping',\n type: events.actionBegin };\n }\n else {\n args = { requestType: 'ungrouping', type: events.actionBegin };\n }\n if (!this_1.groupSettings.showGroupedColumn) {\n e.oldProperties[prop].forEach(function (column) {\n if (e.properties[prop].indexOf(column) === -1) {\n _this.parent.getColumnByField(column).visible = true;\n }\n });\n }\n this_1.parent.notify(events.modelChanged, args);\n }\n break;\n case 'showDropArea':\n this_1.updateGroupDropArea();\n this_1.groupSettings.showDropArea ? this_1.element.style.display = '' : this_1.element.style.display = 'none';\n break;\n case 'showGroupedColumn':\n this_1.updateGroupedColumn(this_1.groupSettings.showGroupedColumn);\n this_1.parent.notify(events.modelChanged, { requestType: 'refresh' });\n break;\n case 'showUngroupButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showUngroupButton, 'e-ungroupbutton');\n break;\n case 'showToggleButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showToggleButton, 'e-togglegroupbutton ');\n this_1.parent.refreshHeader();\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n Group.prototype.updateGroupedColumn = function (isVisible) {\n for (var i = 0; i < this.groupSettings.columns.length; i++) {\n this.parent.getColumnByField(this.groupSettings.columns[i]).visible = isVisible;\n }\n };\n Group.prototype.updateButtonVisibility = function (isVisible, className) {\n var gHeader = [].slice.call(this.element.querySelectorAll('.' + className));\n for (var i = 0; i < gHeader.length; i++) {\n gHeader[i].style.display = isVisible ? '' : 'none';\n }\n };\n Group.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Group.prototype.destroy = function () {\n 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, isNullOrUndefined } 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: this.l10n.getConstant('Columnchooser'), tooltipText: this.l10n.getConstant('Columnchooser'), align: 'Right',\n };\n this.createToolbar();\n };\n /**\n * Gets the toolbar of the Grid.\n * @return {Element}\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.toolbar.element;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Toolbar.prototype.destroy = function () {\n if (!this.toolbar.isDestroyed) {\n if (!this.toolbar.element) {\n this.parent.destroyTemplate(['toolbarTemplate']);\n }\n else {\n this.toolbar.destroy();\n }\n this.unWireEvent();\n this.removeEventListener();\n remove(this.element);\n }\n };\n Toolbar.prototype.createToolbar = function () {\n var items = this.getItems();\n this.toolbar = new tool({\n items: items,\n clicked: this.toolbarClickHandler.bind(this),\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n });\n var viewStr = 'viewContainerRef';\n var registerTemp = 'registeredTemplate';\n if (this.parent[viewStr]) {\n this.toolbar[registerTemp] = {};\n this.toolbar[viewStr] = this.parent[viewStr];\n }\n this.element = createElement('div', { id: this.gridID + '_toolbarItems' });\n if (this.parent.toolbarTemplate) {\n if (typeof (this.parent.toolbarTemplate) === 'string') {\n this.toolbar.appendTo(this.parent.toolbarTemplate);\n this.element = this.toolbar.element;\n }\n else {\n appendChildren(this.element, templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate'));\n }\n }\n else {\n this.toolbar.appendTo(this.element);\n }\n this.parent.element.insertBefore(this.element, this.parent.getHeaderContent());\n this.searchElement = this.element.querySelector('#' + this.gridID + '_searchbar');\n this.wireEvent();\n this.refreshToolbarItems();\n if (this.parent.searchSettings) {\n this.updateSearchBox();\n }\n };\n Toolbar.prototype.refreshToolbarItems = function (args) {\n var gObj = this.parent;\n var enableItems = [];\n var disableItems = [];\n var edit = gObj.editSettings;\n var hasData = gObj.currentViewData && gObj.currentViewData.length;\n edit.allowAdding ? enableItems.push(this.gridID + '_add') : disableItems.push(this.gridID + '_add');\n edit.allowEditing && hasData ? enableItems.push(this.gridID + '_edit') : disableItems.push(this.gridID + '_edit');\n edit.allowDeleting && hasData ? enableItems.push(this.gridID + '_delete') : disableItems.push(this.gridID + '_delete');\n if (gObj.editSettings.mode === 'Batch') {\n if (gObj.element.querySelectorAll('.e-updatedtd').length && (edit.allowAdding || edit.allowEditing)) {\n enableItems.push(this.gridID + '_update');\n enableItems.push(this.gridID + '_cancel');\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n else {\n if (gObj.isEdit && (edit.allowAdding || edit.allowEditing)) {\n enableItems = [this.gridID + '_update', this.gridID + '_cancel'];\n disableItems = [this.gridID + '_add', this.gridID + '_edit', this.gridID + '_delete'];\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n this.enableItems(enableItems, true);\n this.enableItems(disableItems, false);\n };\n Toolbar.prototype.getItems = function () {\n var items = [];\n var toolbarItems = this.parent.toolbar || [];\n if (typeof (this.parent.toolbar) === 'string') {\n return [];\n }\n for (var _i = 0, toolbarItems_1 = toolbarItems; _i < toolbarItems_1.length; _i++) {\n var item = toolbarItems_1[_i];\n switch (typeof item) {\n case 'number':\n items.push(this.getItemObject(this.items[item]));\n break;\n case 'string':\n items.push(this.getItemObject(item));\n break;\n default:\n items.push(this.getItem(item));\n }\n }\n return items;\n };\n Toolbar.prototype.getItem = function (itemObject) {\n var item = this.predefinedItems[itemObject.text];\n return item ? extend(item, item, itemObject) : itemObject;\n };\n Toolbar.prototype.getItemObject = function (itemName) {\n return this.predefinedItems[itemName] || { text: itemName, id: this.gridID + '_' + itemName };\n };\n /**\n * Enables or disables ToolBar items.\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @return {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n var element = this.element.querySelector('#' + item);\n if (element) {\n this.toolbar.enableItems(element.parentElement, isEnable);\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var gObj = this.parent;\n var gID = this.gridID;\n extend(args, { cancel: false });\n gObj.trigger(events.toolbarClick, args);\n if (args.cancel) {\n return;\n }\n switch (!isNullOrUndefined(args.item) && args.item.id) {\n case gID + '_print':\n gObj.print();\n break;\n case gID + '_edit':\n gObj.startEdit();\n break;\n case gID + '_update':\n gObj.endEdit();\n break;\n case gID + '_cancel':\n gObj.closeEdit();\n break;\n case gID + '_add':\n gObj.addRecord();\n break;\n case gID + '_delete':\n gObj.deleteRecord();\n break;\n case gID + '_search':\n if (args.originalEvent.target.id === gID + '_searchbutton') {\n this.search();\n }\n break;\n case gID + '_columnchooser':\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n var y = tarElement.getBoundingClientRect().top;\n var x = tarElement.getBoundingClientRect().left;\n var targetEle = args.originalEvent.target;\n y = tarElement.getBoundingClientRect().top + tarElement.offsetTop;\n gObj.createColumnchooser(x, y, targetEle);\n break;\n }\n };\n Toolbar.prototype.modelChanged = function (e) {\n if (e.module === 'edit') {\n this.refreshToolbarItems();\n }\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() || !this.parent.toolbar) {\n return;\n }\n if (this.element) {\n remove(this.element);\n }\n this.render();\n };\n Toolbar.prototype.keyUpHandler = function (e) {\n if (e.keyCode === 13) {\n this.search();\n }\n };\n Toolbar.prototype.search = function () {\n this.parent.search(this.searchElement.value);\n };\n Toolbar.prototype.updateSearchBox = function () {\n if (this.searchElement) {\n this.searchElement.value = this.parent.searchSettings.key;\n }\n };\n Toolbar.prototype.wireEvent = function () {\n if (this.searchElement) {\n this.searchBoxObj = new SearchBox(this.searchElement);\n EventHandler.add(this.searchElement, 'keyup', this.keyUpHandler, this);\n this.searchBoxObj.wireEvent();\n }\n };\n Toolbar.prototype.unWireEvent = function () {\n if (this.searchElement) {\n EventHandler.remove(this.searchElement, 'keyup', this.keyUpHandler);\n this.searchBoxObj.unWireEvent();\n }\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.uiUpdate, this.onPropertyChanged, this);\n this.parent.on(events.inBoundModelChanged, this.updateSearchBox.bind(this));\n this.parent.on(events.modelChanged, this.refreshToolbarItems, this);\n this.parent.on(events.toolbarRefresh, this.refreshToolbarItems, this);\n this.parent.on(events.inBoundModelChanged, this.modelChanged, this);\n this.parent.on(events.dataBound, this.refreshToolbarItems, this);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.onPropertyChanged);\n this.parent.off(events.inBoundModelChanged, this.updateSearchBox);\n this.parent.off(events.modelChanged, this.refreshToolbarItems);\n this.parent.off(events.toolbarRefresh, this.refreshToolbarItems);\n this.parent.off(events.inBoundModelChanged, this.modelChanged);\n this.parent.off(events.dataBound, this.refreshToolbarItems);\n };\n /**\n * For internal use only - Get the module name.\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (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, formatUnit } 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(this.parent.height);\n this.virtualEle.renderPlaceHolder();\n this.virtualEle.wrapper.style.position = 'absolute';\n var debounceEvent = (this.parent.dataSource instanceof DataManager && !this.parent.dataSource.dataSource.offline);\n var opt = {\n container: this.content, pageHeight: this.getBlockHeight() * 2, debounceEvent: debounceEvent,\n axes: this.parent.enableColumnVirtualization ? ['X', 'Y'] : ['Y']\n };\n this.observer = new InterSectionObserver(this.virtualEle.wrapper, opt);\n };\n VirtualContentRenderer.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n this.virtualEle.adjustTable(0, 0);\n };\n VirtualContentRenderer.prototype.scrollListener = function (scrollArgs) {\n if (this.preventEvent || this.parent.isDestroyed) {\n this.preventEvent = false;\n return;\n }\n this.isFocused = this.content === closest(document.activeElement, '.e-content') || this.content === document.activeElement;\n var info = scrollArgs.sentinel;\n var viewInfo = this.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, isOnenter) {\n if (info === undefined) {\n info = { page: this.getPageFromTop(sTop, {}) };\n info.blockIndexes = this.vgenerator.getBlockIndexes(info.page);\n }\n var block = (info.blockIndexes[0] || 1) - 1;\n var translate = this.getOffset(block);\n var endTranslate = this.getOffset(info.blockIndexes[info.blockIndexes.length - 1]);\n if (isOnenter) {\n info = this.prevInfo;\n }\n var result = translate > sTop ?\n this.getOffset(block - 1) : endTranslate < (sTop + cHeight) ? this.getOffset(block + 1) : translate;\n var blockHeight = this.offsets[info.blockIndexes[info.blockIndexes.length - 1]] -\n this.tmpOffsets[info.blockIndexes[0]];\n if (result + blockHeight > this.offsets[this.getTotalBlocks()]) {\n result -= (result + blockHeight) - this.offsets[this.getTotalBlocks()];\n }\n return result;\n };\n VirtualContentRenderer.prototype.getOffset = function (block) {\n return Math.min(this.offsets[block] | 0, this.offsets[this.maxBlock]);\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, true);\n _this.virtualEle.adjustTable(x, Math.min(y, _this.offsets[_this.maxBlock]));\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n };\n };\n VirtualContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n this.parent[action](dataReady, this.onDataReady, this);\n this.parent[action](refreshVirtualBlock, this.refreshContentRows, this);\n this.actions.forEach(function (event) { return _this.parent[action](event + \"-begin\", _this.onActionBegin, _this); });\n var fn = function () {\n _this.observer.observe(function (scrollArgs) { return _this.scrollListener(scrollArgs); }, _this.onEntered());\n _this.parent.off(contentReady, fn);\n };\n this.parent.on(contentReady, fn, this);\n };\n VirtualContentRenderer.prototype.getBlockSize = function () {\n return this.parent.pageSettings.pageSize >> 1;\n };\n VirtualContentRenderer.prototype.getBlockHeight = function () {\n return this.getBlockSize() * this.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 (height) {\n this.wrapper = createElement('div', { className: 'e-virtualtable', styles: \"min-height:\" + formatUnit(height) });\n this.wrapper.appendChild(this.table);\n this.content.appendChild(this.wrapper);\n };\n VirtualElementHandler.prototype.renderPlaceHolder = function (position) {\n if (position === void 0) { position = 'relative'; }\n this.placeholder = createElement('div', { className: 'e-virtualtrack', styles: \"position:\" + position });\n this.content.appendChild(this.placeholder);\n };\n VirtualElementHandler.prototype.adjustTable = function (xValue, yValue) {\n this.wrapper.style.transform = \"translate(\" + xValue + \"px, \" + yValue + \"px)\";\n };\n VirtualElementHandler.prototype.setWrapperWidth = function (width, full) {\n this.wrapper.style.width = width ? width + \"px\" : full ? '100%' : '';\n };\n VirtualElementHandler.prototype.setVirtualHeight = function (height, width) {\n this.placeholder.style.height = height + \"px\";\n this.placeholder.style.width = width;\n };\n return VirtualElementHandler;\n}());\nexport { VirtualElementHandler };\n","import { 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 changeButtonType(this.dialogObj.element);\n };\n DialogEditRender.prototype.btnClick = function (e) {\n if (this.l10n.getConstant('CancelButton').toLowerCase() === e.target.innerText.trim().toLowerCase()) {\n this.dialogClose();\n }\n else {\n this.parent.endEdit();\n }\n };\n DialogEditRender.prototype.dialogClose = function () {\n this.parent.closeEdit();\n this.destroy();\n };\n DialogEditRender.prototype.destroy = function (args) {\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.parent.notify(events.toolbarRefresh, {});\n if (this.dialog && !this.dialogObj.isDestroyed) {\n this.dialogObj.destroy();\n remove(this.dialog);\n }\n };\n DialogEditRender.prototype.getEditElement = function (elements) {\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 if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({\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 }\n else {\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 }\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 if (typeof temp === 'string') {\n temp = getValue(temp, window);\n input = temp(tArgs);\n }\n else {\n input = col.edit.create(tArgs);\n }\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 var isComplexField = col.field.split('.').length > 1;\n var splits = col.field.split('.');\n attributes(isInput ? input.querySelector('input') : input, {\n name: isComplexField ? splits[0] + splits[1] : col.field, 'e-mappinguid': col.uid,\n id: isComplexField ? gObj.element.id + splits[0] + splits[1] : 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 (col.isIdentity && args.requestType === 'add')) {\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 var isComplexField = args.column.field.split('.').length > 1;\n var splits = args.column.field.split('.');\n return createElement('input', {\n className: classNames, attrs: {\n type: 'checkbox', value: args.value, 'e-mappinguid': col.uid,\n id: isComplexField ? this.parent.element.id + splits[0] + splits[1] : this.parent.element.id + col.field,\n name: isComplexField ? splits[0] + splits[1] : 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 var isComplexField = args.column.field.split('.').length > 1;\n var splits = args.column.field.split('.');\n if (!isNullOrUndefined(args.row)) {\n selectChkBox = args.row.querySelector('.e-edit-checkselect');\n }\n if (!isComplexField && args.rowData[args.column.field]) {\n chkState = JSON.parse(args.rowData[args.column.field].toString().toLowerCase());\n }\n if (isComplexField && args.rowData[splits[0]][splits[1]]) {\n chkState = JSON.parse(args.rowData[splits[0]][splits[1]].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 /* tslint:disable-next-line:no-any */\n var isComplexField = args.column.field.split('.').length > 1;\n /* tslint:disable-next-line:no-any */\n var splits = args.column.field.split('.');\n return createElement('input', {\n className: 'e-field', attrs: {\n /* tslint:disable-next-line:no-any */\n id: isComplexField ? this.parent.element.id + splits[0] + splits[1] : this.parent.element.id + args.column.field,\n /* tslint:disable-next-line:no-any */\n name: isComplexField ? splits[0] + splits[1] : 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 /* tslint:disable-next-line:no-any */\n var isComplexField = args.column.field.split('.').length > 1;\n var splits = args.column.field.split('.');\n this.obj = new DropDownList(extend({\n dataSource: this.parent.dataSource instanceof DataManager ?\n this.parent.dataSource : new DataManager(this.parent.dataSource),\n query: new Query().select(args.column.field), enabled: isEditable(args.column, args.requestType, args.element),\n fields: { value: args.column.field },\n value: isComplexField ? args.rowData[splits[0]][splits[1]] : 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 /* tslint:disable-next-line:no-any */\n args.element.setAttribute('name', isComplexField ? splits[0] + splits[1] : 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 /* tslint:disable-next-line:no-any */\n var isComplexField = args.column.field.split('.').length > 1;\n var splits = args.column.field.split('.');\n return createElement('input', {\n className: 'e-field', attrs: {\n /* tslint:disable-next-line:no-any */\n id: isComplexField ? this.parent.element.id + splits[0] + splits[1] : this.parent.element.id + args.column.field,\n name: isComplexField ? splits[0] + splits[1] : 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 var isComplexField = args.column.field.split('.').length > 1;\n var splits = args.column.field.split('.');\n this.obj = new NumericTextBox(extend({\n value: isComplexField ? parseFloat(args.rowData[splits[0]][splits[1]]) : parseFloat(args.rowData[col.field]),\n enableRtl: this.parent.enableRtl,\n placeholder: isInline ? '' : args.column.headerText,\n enabled: isEditable(args.column, args.requestType, args.element),\n floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n }, col.edit.params));\n this.obj.appendTo(args.element);\n args.element.setAttribute('name', isComplexField ? splits[0] + splits[1] : args.column.field);\n };\n NumericEditCell.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n this.obj.destroy();\n }\n };\n return NumericEditCell;\n}());\nexport { NumericEditCell };\n","import { 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.updateRow = function (index, data) {\n var gObj = this.parent;\n var args = {\n requestType: 'save', type: events.actionBegin, data: data, cancel: false,\n previousData: gObj.getCurrentViewRecords()[index]\n };\n gObj.showSpinner();\n gObj.notify(events.updateData, args);\n gObj.refresh();\n };\n NormalEdit.prototype.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.data, args);\n }\n };\n NormalEdit.prototype.edSucc = function (e, args) {\n this.editSuccess(e, args);\n };\n NormalEdit.prototype.edFail = function (e) {\n this.editFailure(e);\n };\n NormalEdit.prototype.updateCurrentViewData = function (data) {\n this.parent.getCurrentViewRecords()[this.editRowIndex] = data;\n };\n NormalEdit.prototype.editSuccess = function (e, args) {\n if (!isNullOrUndefined(e)) {\n args.data = e;\n }\n this.parent.trigger(events.beforeDataBound, args);\n args.type = events.actionComplete;\n this.parent.isEdit = false;\n this.refreshRow(args.data);\n this.updateCurrentViewData(args.data);\n this.parent.trigger(events.actionComplete, args);\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n 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.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n InlineEdit.prototype.deleteRecord = function (fieldname, data) {\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n InlineEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return InlineEdit;\n}(NormalEdit));\nexport { InlineEdit };\n","import { extend, addClass, removeClass } 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 this.parent.on(events.keyPressed, this.keyDownHandler, this);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.beforeCellFocused, this.onBeforeCellFocused);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.keyPressed, this.keyDownHandler);\n };\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 !(cols[i].isIdentity && cols[i].isPrimaryKey)) {\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 (col.isPrimaryKey && col.isIdentity)) {\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 isComplexField = col.field.split('.').length > 1;\n var splits = col.field.split('.');\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: isComplexField ? rowData[splits[0]][splits[1]] : rowData[col.field],\n type: !isAdd ? 'edit' : 'add', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n if (!args.cell) {\n return;\n }\n gObj.trigger(events.cellEdit, args);\n if (args.cancel) {\n return;\n }\n this.cellDetails = {\n rowData: rowData, column: col, value: args.value, isForeignKey: args.isForeignKey, rowIndex: index,\n cellIndex: parseInt(args.cell.getAttribute('aria-colindex'), 10),\n foreignKeyData: args.foreignKeyData\n };\n if (args.cell.classList.contains('e-updatedtd')) {\n this.isColored = true;\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n if (!gObj.isCheckBoxSelection || !gObj.isPersistSelection) {\n gObj.selectRow(this.cellDetails.rowIndex, true);\n }\n this.renderer.update(args);\n this.form = gObj.element.querySelector('#' + gObj.element.id + 'EditForm');\n gObj.editModule.applyFormValidation([col]);\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n BatchEdit.prototype.updateCell = function (rowIndex, field, value) {\n var col = this.parent.getColumnByField(field);\n 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 var isComplexField = field.split('.').length > 1;\n var splits = field.split('.');\n if (!rowObj.changes) {\n rowObj.changes = extend({}, rowObj.data);\n }\n isComplexField ? rowObj.changes[splits[0]][splits[1]] = value : rowObj.changes[field] = value;\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 var isComplexField = column.field.split('.').length > 1;\n var splits = column.field.split('.');\n editedData = extend(this.cellDetails.rowData, editedData);\n var args = {\n columnName: column.field,\n value: isComplexField ? editedData[splits[0]][splits[1]] : 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.isEdit = false;\n gObj.editModule.destroyWidgets([column]);\n this.parent.notify(events.tooltipDestroy, {});\n this.refreshTD(args.cell, column, gObj.getRowObjectFromUID(tr.getAttribute('data-uid')), args.value);\n removeClass([tr], ['e-editedrow', 'e-batchrow']);\n removeClass([args.cell], ['e-editedbatchcell', 'e-boolcell']);\n if (!isNullOrUndefined(args.value) && args.value.toString() ===\n (!isNullOrUndefined(this.cellDetails.value) ? this.cellDetails.value : '').toString() && !this.isColored) {\n 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 BatchEdit.prototype.keyDownHandler = function (e) {\n if (e.action === 'tab' && this.parent.isEdit) {\n var rowcell = parentsUntil(e.target, 'e-rowcell');\n if (rowcell) {\n var cell = rowcell.querySelector('.e-field');\n if (cell) {\n var visibleColumns = this.parent.getVisibleColumns();\n if (visibleColumns[visibleColumns.length - 1].field === cell.getAttribute('name')) {\n this.saveCell();\n }\n }\n }\n }\n };\n 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.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n DialogEdit.prototype.deleteRecord = function (fieldname, data) {\n //deleteRecord\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n DialogEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return DialogEdit;\n}(NormalEdit));\nexport { DialogEdit };\n","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 /* tslint:disable-next-line:no-any */\n var isComplexField = args.column.field.split('.').length > 1;\n var splits = args.column.field.split('.');\n return createElement('input', {\n className: 'e-field', attrs: {\n id: isComplexField ? this.parent.element.id + splits[0] + splits[1] : this.parent.element.id + args.column.field,\n name: isComplexField ? splits[0] + splits[1] : 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 /* tslint:disable-next-line:no-any */\n var isComplexField = args.column.field.split('.').length > 1;\n var splits = args.column.field.split('.');\n this.obj = new DatePicker(extend({\n floatLabelType: isInline ? 'Never' : 'Always',\n value: isComplexField ? new Date(args.rowData[splits[0]][splits[1]]) : new Date(args.rowData[args.column.field]),\n 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 (col.type !== 'checkbox') {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n value = gObj.editModule.getValueFromType(col, (temp)(inputs[i]));\n }\n else {\n value = gObj.editModule.getValueFromType(col, col.edit.read(inputs[i]));\n }\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 var temp = col.edit.destroy;\n if (col.edit.destroy) {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp();\n }\n else {\n col.edit.destroy();\n }\n }\n }\n };\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 attrs: { title: this.l10n.getConstant('Search') } });\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.commands) {\n return;\n }\n if (!column.columns) {\n if (column.visible || this.hideColumnInclude) {\n actualColumns.push(column);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n var colSpan = this.getCellCount(column, 0);\n if (colSpan !== 0) {\n 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 if (!columns[i].commands) {\n rows = this.appendGridCells(columns[i], rows, 0, i === 0, false, i === (columns.length - 1));\n }\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 return 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 allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(gObj, this.data)));\n allPromise.push(this.helper.getColumnData(gObj));\n return Promise.all(allPromise).then(function (e) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, e[0]);\n return _this.book;\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', gObj.locale);\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', gObj.locale);\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 = this.parent.getColumnByField(item.field).headerText +\n ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ';\n if (item.count > 1) {\n cell.value += item.count + ' items';\n }\n else {\n cell.value += item.count + ' item';\n }\n cell.style = this.getCaptionThemeStyle(this.theme);\n var captionModelGen = new CaptionSummaryModelGenerator(gObj);\n var groupCaptionSummaryRows = captionModelGen.generateRows(item);\n this.fillAggregates(gObj, groupCaptionSummaryRows, dataSource.level + dataSource.childLevels, 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 return 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 allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(parent, this.data)));\n allPromise.push(this.helper.getColumnData(parent));\n return Promise.all(allPromise).then(function (e) {\n _this.init(parent);\n if (!isNullOrUndefined(pdfDoc)) {\n _this.pdfDocument = pdfDoc;\n }\n else {\n _this.pdfDocument = new PdfDocument();\n }\n _this.processExport(parent, e[0], pdfExportProperties, isMultipleExport);\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n return _this.pdfDocument;\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.toLocaleLowerCase() === item.toLocaleLowerCase().replace('sort', '')) {\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 var field = fromData ? column.foreignKeyField : column.field;\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(field));\n var filteredValue = DataUtil.distinct(e, field, false);\n field = fromData ? column.field : column.foreignKeyField;\n filteredValue.forEach(function (obj) {\n if (obj && obj.getDay) {\n predicates.push(getDatePredicate({ field: field, operator: 'equal', value: obj, matchCase: false }));\n }\n else {\n predicates.push(new Predicate(field, 'equal', obj, false));\n }\n });\n }\n if (needQuery) {\n return predicates.length ? query.where(Predicate.or(predicates)) : query;\n }\n predicate = (predicates.length ? Predicate.or(predicates) : { predicates: [] });\n return predicate;\n };\n ForeignKey.prototype.genarateColumnQuery = function (column) {\n var gObj = this.parent;\n var query = 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 __decorate([\n Property(0)\n ], Arrow.prototype, \"offSet\", 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(0)\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('#737373')\n ], ZoomSettings.prototype, \"color\", void 0);\n __decorate([\n Property('#e61576')\n ], ZoomSettings.prototype, \"highlightColor\", void 0);\n __decorate([\n Property('#e61576')\n ], ZoomSettings.prototype, \"selectionColor\", 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 Property()\n ], LayerSettings.prototype, \"query\", 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 Property(0)\n ], LayerSettings.prototype, \"animationDuration\", 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 * Specifies maps beforePrint event name\n */\nexport var beforePrint = 'beforePrint';\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.tileZoomLevel; 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, Ajax } from '@syncfusion/ej2-base';\nimport { getShapeColor } from '../model/theme';\nimport { GeoLocation, isCustomPath, convertGeoToPoint, Point, PathOption, Size, PolylineOption, getElementByID } 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.ajaxProcessCount = 0;\n this.mapObject = map;\n this.ajaxModule = new Ajax();\n this.ajaxResponse = [];\n }\n /* tslint:disable:no-string-literal */\n LayerPanel.prototype.measureLayerPanel = function () {\n var _this = this;\n var imageSize = 30;\n var layerCollection = this.mapObject.layersCollection;\n var areaRect = this.mapObject.mapAreaRect;\n var padding = 10;\n var secondaryEle = getElementByID(this.mapObject.element.id + '_Secondary_Element');\n if (this.mapObject.isTileMap && secondaryEle) {\n this.tileSvgObject = this.mapObject.renderer.createSvg({\n id: this.mapObject.element.id + '_Tile_SVG', width: areaRect.width,\n height: areaRect.height,\n style: 'pointer-events:none'\n });\n secondaryEle.appendChild(this.tileSvgObject);\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: this.mapObject.isTileMap ? 0 : areaRect.x, y: this.mapObject.isTileMap ? 0 : areaRect.y,\n 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 var layerCount = layerCollection.length - 1;\n layerCollection.forEach(function (layer, index) {\n _this.currentLayer = layer;\n _this.processLayers(layer, index);\n });\n };\n LayerPanel.prototype.processLayers = function (layer, layerIndex) {\n this.layerObject = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_LayerIndex_' + layerIndex\n }));\n var eventArgs = {\n cancel: false, name: layerRendering, index: layerIndex,\n layer: layer, maps: this.mapObject\n };\n this.mapObject.trigger(layerRendering, eventArgs);\n if (!eventArgs.cancel) {\n if (layer.layerType !== 'Geometry') {\n var center = new Point(this.mapObject.centerPosition.longitude, this.mapObject.centerPosition.latitude);\n this.currentFactor = this.calculateFactor(layer);\n if (isNullOrUndefined(this.mapObject.tileZoomLevel)) {\n this.mapObject.tileZoomLevel = this.mapObject.zoomSettings.zoomFactor;\n }\n this.mapObject.tileTranslatePoint = this.panTileMap(this.mapObject.availableSize.width, this.mapObject.availableSize.height, center);\n this.generateTiles(this.mapObject.tileZoomLevel, this.mapObject.tileTranslatePoint);\n if (this.mapObject.markerModule) {\n this.mapObject.markerModule.markerRender(this.layerObject, layerIndex, this.mapObject.tileZoomLevel);\n }\n if (this.mapObject.navigationLineModule) {\n this.layerObject.appendChild(this.mapObject.navigationLineModule.renderNavigation(this.currentLayer, this.mapObject.tileZoomLevel, layerIndex));\n }\n this.translateLayerElements(this.layerObject, layerIndex);\n this.layerGroup.appendChild(this.layerObject);\n }\n else {\n if (!isNullOrUndefined(layer.shapeData) && (!isNullOrUndefined(layer.shapeData['geometries']) ||\n !isNullOrUndefined(layer.shapeData['features']))) {\n var featureData = (!isNullOrUndefined(layer.shapeData['geometries']) &&\n layer.shapeData['geometries'].length > 0 ? layer.shapeData['geometries'] :\n layer.shapeData['features']);\n layer.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 // let minSize: Point = convertGeoToPoint(\n // this.mapObject.baseMapBounds.latitude.min,\n // this.mapObject.baseMapBounds.longitude.min, this.calculateFactor(layer), layer, this.mapObject\n // );\n // let maxSize: Point = convertGeoToPoint(\n // this.mapObject.baseMapBounds.latitude.max,\n // this.mapObject.baseMapBounds.longitude.max, this.calculateFactor(layer), layer, this.mapObject\n // );\n // this.mapObject.baseSize = new Size(Math.abs(minSize.x - maxSize.x), Math.abs(minSize.y - maxSize.y));\n // }\n }\n this.calculatePathCollection(layerIndex, featureData);\n }\n }\n }\n if (!this.mapObject.isTileMap) {\n this.mapObject.svgObject.appendChild(this.layerGroup);\n }\n else if (this.tileSvgObject) {\n this.tileSvgObject.appendChild(this.layerGroup);\n }\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 className: 'template',\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 var childNode;\n if (!isNullOrUndefined(this.mapObject.baseMapRectBounds)) {\n var duration = this.currentLayer.animationDuration;\n var animate = duration !== 0 || isNullOrUndefined(this.mapObject.zoomModule);\n var translate = getTranslate(this.mapObject, this.currentLayer, animate);\n var scale = this.mapObject.previousScale = translate['scale'];\n var location_1 = this.mapObject.previousPoint = translate['location'];\n this.mapObject.baseTranslatePoint = this.mapObject.translatePoint = location_1;\n this.mapObject.baseScale = this.mapObject.scale = scale;\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 if (duration > 0 && !isNullOrUndefined(this.mapObject.zoomModule)) {\n translate = getTranslate(this.mapObject, this.currentLayer);\n this.mapObject.scale = translate['scale'];\n this.mapObject.translatePoint = translate['location'];\n }\n }\n }\n }\n else if (this.mapObject.isTileMap) {\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 (!(childNode.id.indexOf('_line_Group') > -1))) {\n var transform = 'scale( ' + this.mapObject.scale + ' ) ' + 'translate( ' + this.mapObject.translatePoint.x\n + ' ' + this.mapObject.translatePoint.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 if (getElementByID(this.mapObject.element.id + '_tile_parent')) {\n document.getElementById(this.mapObject.element.id + '_tile_parent').innerHTML = htmlString;\n }\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 level = this.mapObject.tileZoomLevel;\n var padding = 20;\n var x;\n var y;\n var totalSize = Math.pow(2, level) * 256;\n x = (factorX / 2) - (totalSize / 2);\n y = (factorY / 2) - (totalSize / 2);\n var position = convertTileLatLongToPoint(centerPosition, level, { x: x, y: y }, this.isMapCoordinates);\n x -= position.x - (factorX / 2);\n y = (y - (position.y - (factorY / 2))) + padding;\n this.mapObject.scale = Math.pow(2, level - 1);\n this.mapObject.translatePoint = new Point(((x - (0.5 * this.mapObject.scale)) / this.mapObject.scale), ((y - (0.5 * this.mapObject.scale)) / this.mapObject.scale));\n return new Point(x, y);\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","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 Maps\n */\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for Maps\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the Maps\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 Maps\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 - 60), _this.control.availableSize.height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\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};\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, showTooltip, getElement } 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, MapAjax } 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';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { ExportUtils } from '../maps/utils/export';\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 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.findBaseAndSubLayers();\n this.createSecondaryElement();\n this.addTabIndex();\n this.renderBorder();\n this.renderTitle(this.titleSettings, 'title', null, null);\n this.renderArea();\n this.processRequestJsonData();\n };\n /* tslint:disable:no-string-literal */\n Maps.prototype.processRequestJsonData = function () {\n var _this = this;\n var length = this.layersCollection.length - 1;\n this.serverProcess = { request: 0, response: 0 };\n this.layersCollection.forEach(function (layer, layerIndex) {\n if (layer.shapeData instanceof DataManager) {\n _this.serverProcess['request']++;\n var dataModule = layer.shapeData;\n var queryModule = layer.query instanceof Query ? layer.query : new Query();\n var dataManager = dataModule.executeQuery(queryModule);\n dataManager.then(function (e) {\n _this.processResponseJsonData('DataManager', e, layer);\n });\n }\n else if (layer.shapeData instanceof MapAjax) {\n _this.serverProcess['request']++;\n var mapAjax = layer.shapeData;\n var processLayer = layer;\n var xhr_1 = new XMLHttpRequest();\n xhr_1.open('GET', mapAjax.url, true);\n xhr_1.addEventListener('load', function () {\n _this.processResponseJsonData('Ajax', xhr_1.responseText, layer);\n });\n xhr_1.send(mapAjax.sendData);\n }\n if (_this.serverProcess['request'] === _this.serverProcess['response'] && length === layerIndex) {\n _this.processResponseJsonData(null);\n }\n });\n };\n Maps.prototype.processResponseJsonData = function (type, data, layer) {\n if (type) {\n this.serverProcess['response']++;\n layer.shapeData = (type === 'DataManager') ? !isNullOrUndefined(data['result']) ? data['result'] : data['actual'] :\n JSON.parse(data);\n }\n if (!isNullOrUndefined(type) && this.serverProcess['request'] === this.serverProcess['response']) {\n var collection = this.layersCollection;\n this.layersCollection = [];\n for (var i = 0; i < collection.length; i++) {\n if (collection[i].isBaseLayer) {\n this.layersCollection.push(collection[i]);\n }\n }\n for (var j = 0; j < collection.length; j++) {\n if (!collection[j].isBaseLayer) {\n this.layersCollection.push(collection[j]);\n }\n }\n this.renderMap();\n }\n else if (isNullOrUndefined(type)) {\n this.renderMap();\n }\n };\n Maps.prototype.renderMap = function () {\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.renderLegend();\n }\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.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 // private setSecondaryElementPosition(): void {\n // if (!this.isTileMap) {\n // let element: HTMLDivElement = getElementByID(this.element.id + '_Secondary_Element') as HTMLDivElement;\n // let rect: ClientRect = this.element.getBoundingClientRect();\n // let svgRect: ClientRect = 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 // }\n Maps.prototype.zoomingChange = function () {\n var left;\n var top;\n if (getElementByID(this.element.id + '_Layer_Collections') && this.zoomModule) {\n this.zoomModule.layerCollectionEle = getElementByID(this.element.id + '_Layer_Collections');\n }\n if (this.isTileMap && getElementByID(this.element.id + '_Tile_SVG') && getElementByID(this.element.id + '_tile_parent')) {\n var tileRect = getElementByID(this.element.id + '_tile_parent').getBoundingClientRect();\n var tileSvgRect = getElementByID(this.element.id + '_Tile_SVG').getBoundingClientRect();\n left = (tileRect.left - tileSvgRect.left);\n top = (tileRect.top - tileSvgRect.top);\n getElementByID(this.element.id + '_Tile_SVG').setAttribute('transform', 'translate(' + left + ' ' + top + ')');\n var markerTemplateElements = document.getElementsByClassName('template');\n if (!isNullOrUndefined(markerTemplateElements) && markerTemplateElements.length > 0) {\n for (var i = 0; i < markerTemplateElements.length; i++) {\n var templateGroupEle = markerTemplateElements[i];\n templateGroupEle.style.left = left + 'px';\n templateGroupEle.style.top = top + 'px';\n }\n }\n }\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 if (!isNullOrUndefined(elements) && elements.childElementCount > 0) {\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 if (this.zoomModule && (this.previousScale !== this.scale)) {\n this.zoomModule.applyTransform(true);\n }\n }\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 (document.getElementById(this.element.id + '_Legend_Border')) {\n document.getElementById(this.element.id + '_Legend_Border').style.pointerEvents = 'none';\n }\n var templateElements = document.getElementsByClassName('template');\n if (!isNullOrUndefined(templateElements) && templateElements.length > 0 && getElementByID(this.element.id + '_Layer_Collections')) {\n for (var i = 0; i < templateElements.length; i++) {\n var templateGroupEle = templateElements[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 var padding = 20;\n if (mainLayer.isBaseLayer && (mainLayer.layerType === 'OSM' || mainLayer.layerType === 'Bing')) {\n removeElement(this.element.id + '_tile_parent');\n var elementRect = this.element.getBoundingClientRect();\n var parentRect = this.element.parentElement.getBoundingClientRect();\n var left = Math.abs(elementRect.left - parentRect.left);\n var top_1 = Math.abs(elementRect.top - parentRect.top);\n var ele = createElement('div', {\n id: this.element.id + '_tile_parent', styles: 'position: absolute; left: ' +\n (this.mapAreaRect.x + left) + 'px; top: ' + (this.mapAreaRect.y + top_1 + padding) + 'px; height: ' +\n (this.mapAreaRect.height) + 'px; width: '\n + (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 *\n */\n Maps.prototype.mouseEndOnMap = 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.indexOf('touch') !== -1) {\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 if (this.isTouch) {\n this.titleTooltip(e, pageX, pageY, true);\n }\n this.notify(Browser.touchEndEvent, e);\n e.preventDefault();\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 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.onMouseMove(e);\n this.notify(Browser.touchMoveEvent, e);\n };\n Maps.prototype.onMouseMove = function (e) {\n var element = e.target;\n var pageX;\n var pageY;\n var target;\n var touchArg;\n if (!this.isTouch) {\n this.titleTooltip(e, e.pageX, e.pageY);\n }\n return false;\n };\n Maps.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId === (this.element.id + '_Map_title')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.titleSettings.text, this.titleSettings.textStyle.size, x, y, this.element.offsetWidth, this.element.offsetHeight, 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\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 || this.zoomSettings.zoomFactor > this.zoomSettings.minZoom) {\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 * Handles the print method for chart control.\n */\n Maps.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 Maps.prototype.export = function (type, fileName, orientation) {\n var exportMap = new ExportUtils(this);\n exportMap.export(type, fileName, orientation);\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, \"beforePrint\", 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 animate = layer.animationDuration !== 0 || isNullOrUndefined(this.maps.zoomModule);\n var translate = getTranslate(this.maps, layer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n var position = new MapLocation((this.maps.isTileMap ? (eventArgs.cx) : ((eventArgs.cx + transPoint.x) * scale)), (this.maps.isTileMap ? (eventArgs.cy) : ((eventArgs.cy + transPoint.y) * scale)));\n bubbleElement.setAttribute('transform', 'translate( ' + (position.x) + ' ' + (position.y) + ' )');\n var bubble = (bubbleSettings.dataSource.length - 1) === dataIndex ? 'bubble' : null;\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 if (bubbleSettings.animationDuration > 0) {\n elementAnimate(bubbleElement, bubbleSettings.animationDelay, bubbleSettings.animationDuration, position, this.maps, bubble, radius);\n }\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, getElementByID, 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 templateFn;\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 className: 'template',\n styles: 'overflow: hidden; position: absolute;pointer-events: none;' +\n 'top:' + (this.maps.isTileMap ? 0 : this.maps.mapAreaRect.y) + 'px;' +\n 'left:' + (this.maps.isTileMap ? 0 : this.maps.mapAreaRect.x) + 'px;' +\n 'height:' + this.maps.mapAreaRect.height + 'px;' +\n 'width:' + this.maps.mapAreaRect.width + 'px;'\n });\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 animate = currentLayer.animationDuration !== 0 || isNullOrUndefined(_this.maps.zoomModule);\n var translate = (_this.maps.isTileMap) ? new Object() : getTranslate(_this.maps, currentLayer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n if (eventArgs.template) {\n templateFn = getTemplateFunction(eventArgs.template);\n if (templateFn && templateFn(_this.maps).length) {\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 }\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 if (markerSettings.animationDuration > 0) {\n elementAnimate(ele, markerSettings.animationDelay, markerSettings.animationDuration, markerPoint, _this.maps, element);\n }\n }\n }\n });\n });\n if (this.markerSVGObject.childElementCount > 0) {\n layerElement.appendChild(this.markerSVGObject);\n }\n if (markerTemplateEle.childElementCount > 0 && getElementByID(this.maps.element.id + '_Secondary_Element')) {\n 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 animate = layer.animationDuration !== 0 || isNullOrUndefined(this.maps.zoomModule);\n var translate = getTranslate(this.maps, layer, animate);\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 */\nvar NavigationLine = /** @class */ (function () {\n function NavigationLine(maps) {\n this.maps = maps;\n }\n /* tslint:disable:no-string-literal */\n //tslint:disable:max-func-body-length\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 offSet;\n var offSetValue;\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'] || 1;\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 offSetValue = (arrowSettings['properties']['offSet'] === undefined) ? 0 : arrowSettings['properties']['offSet'];\n var divide = (Math.round(arrowSize / 2));\n arrowPosition = arrowSettings['properties']['position'];\n startArrow = (arrowPosition === 'Start') ? 'url(#triangle' + i + ')' : null;\n endArrow = (arrowPosition === 'End') ? 'url(#triangle' + i + ')' : null;\n if (offSet !== 0 && angle === 0) {\n offSet = (arrowPosition === 'Start') ? offSetValue : -(offSetValue);\n }\n offSet = (isNullOrUndefined(offSet)) ? 0 : offSet;\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 - offSet).toString());\n markerEle.setAttribute('refY', divide.toString());\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', 2, color, 1, dashArray, d);\n navigationEle = this.maps.renderer.drawPath(pathOption);\n if (!isNullOrUndefined(arrowPosition)) {\n (arrowPosition === 'Start') ? navigationEle.setAttribute('marker-start', startArrow)\n : navigationEle.setAttribute('marker-end', endArrow);\n }\n navigationGroup.appendChild(navigationEle);\n group.appendChild(navigationGroup);\n }\n }\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 this.calculateLegendBounds();\n this.drawLegend();\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 if (!isNullOrUndefined(layer.shapeData)) {\n var layerData = layer.shapeData['features'];\n var dataPath = layer.shapeDataPath;\n var propertyPath = layer.shapePropertyPath;\n var dataSource = layer.dataSource;\n var colorValuePath = void 0;\n var colorMapping = void 0;\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 });\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, convertTileLatLongToPoint } from '../utils/helper';\nimport { RectOption, createTooltip, calculateScale, getTouchCenter, getTouches, targetTouches } from '../utils/helper';\nimport { MapLocation, zoomAnimate, smoothTranslate } 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 = this.maps.zoomSettings.selectionColor;\n this.fillColor = this.maps.zoomSettings.color;\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 prevLevel = map.tileZoomLevel;\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 map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = newZoomFactor;\n }\n else if ((map.isTileMap) && (newZoomFactor >= minZoom && newZoomFactor <= maxZoom)) {\n this.getTileTranslatePosition(prevLevel, newZoomFactor, position);\n map.tileZoomLevel = newZoomFactor;\n map.scale = Math.pow(2, newZoomFactor - 1);\n map.mapLayerPanel.generateTiles(newZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * map.scale)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * map.scale)) / map.scale;\n }\n this.applyTransform();\n map.trigger(doubleClick, this);\n };\n Zoom.prototype.getTileTranslatePosition = function (prevLevel, currentLevel, position) {\n var map = this.maps;\n var tileDefaultSize = 256;\n var bounds = getElementByID(this.maps.element.id).getBoundingClientRect();\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 = (currentLevel === 1) ? (bounds.width / 2) - ((tileDefaultSize * 2) / 2) :\n position.x - ((x * totalSize) / 100);\n map.tileTranslatePoint.y = (currentLevel === 1) ? (bounds.height / 2) - ((tileDefaultSize * 2) / 2) :\n position.y - ((y * totalSize) / 100);\n };\n Zoom.prototype.performRectZooming = function () {\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var zoomRect = this.zoomingRect;\n if (zoomRect.height > 0 && zoomRect.width > 0) {\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.previousScale = map.scale;\n zoomCalculationFactor = scale + Math.round((((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2));\n var translatePoint = map.previousPoint = 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 map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = zoomCalculationFactor;\n }\n else {\n zoomCalculationFactor = prevLevel + (Math.round(prevLevel + (((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2)));\n this.getTileTranslatePosition(prevLevel, zoomCalculationFactor, { x: x, y: y });\n map.tileZoomLevel = 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.applyTransform(true);\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 prevLevel = map.tileZoomLevel;\n var availSize = map.mapAreaRect;\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 map.translatePoint = new Point(translatePointX_1, translatePointY_1);\n map.scale = zoomCalculationFactor;\n }\n else {\n var newTileFactor = zoomCalculationFactor;\n this.getTileTranslatePosition(prevLevel, newTileFactor, { x: touchCenter.x, y: touchCenter.y });\n map.tileZoomLevel = 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 this.applyTransform();\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 /**\n * To animate the zooming process\n */\n Zoom.prototype.animateTransform = function (element, animate, x, y, scale) {\n var duration = this.currentLayer.animationDuration;\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'scale(' + (scale) + ') translate( ' + x + ' ' + y + ' )');\n return;\n }\n zoomAnimate(element, 0, duration, new MapLocation(x, y), scale, this.maps.mapAreaRect, this.maps);\n };\n Zoom.prototype.applyTransform = function (animate) {\n var layerIndex;\n this.templateCount = 0;\n var scale = this.maps.scale;\n var x = this.maps.translatePoint.x;\n var y = this.maps.translatePoint.y;\n var collection = [];\n if (this.layerCollectionEle) {\n for (var i = 0; i < this.layerCollectionEle.childElementCount; i++) {\n var layerElement = this.layerCollectionEle.childNodes[i];\n if (layerElement.tagName === 'g') {\n this.templateCount++;\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 if (this.maps.isTileMap && (currentEle.id.indexOf('_line_Group') > -1)) {\n currentEle.remove();\n layerElement.appendChild(this.maps.navigationLineModule.renderNavigation(this.currentLayer, this.maps.tileZoomLevel, index));\n }\n else {\n changeBorderWidth(currentEle, index, scale, this.maps);\n this.animateTransform(currentEle, animate, x, y, scale);\n }\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', animate);\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 var duration = this.currentLayer.animationDuration;\n if (!animate || duration === 0) {\n childElement.setAttribute('transform', 'translate( ' + currentX + ' ' + currentY + ' )');\n }\n else {\n smoothTranslate(childElement, 0, duration, new MapLocation(currentX, currentY));\n }\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', animate);\n }\n }\n }\n }\n }\n if (!animate || this.currentLayer.animationDuration === 0) {\n this.processTemplate(x, y, scale, this.maps);\n }\n }\n };\n /**\n * To translate the layer template elements\n * @private\n */\n Zoom.prototype.processTemplate = function (x, y, scale, maps) {\n for (var i = 0; i < this.templateCount; i++) {\n this.currentLayer = maps.layersCollection[i];\n var factor = maps.mapLayerPanel.calculateFactor(this.currentLayer);\n var markerTemplateElement = getElementByID(maps.element.id + '_LayerIndex_' +\n i + '_Markers_Template_Group');\n var datalabelTemplateElemement = getElementByID(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, animate) {\n if (animate === void 0) { animate = false; }\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 var duration = this.currentLayer.animationDuration;\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 var layerEle = getElementByID(this.maps.element.id + '_Layer_Collections');\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 = layerEle.getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n var x_1 = ((labelX) + (layerOffset.left - elementOffset.left) - (templateOffset.width / 2));\n var y_1 = ((labelY) + (layerOffset.top - elementOffset.top) - (templateOffset.height / 2));\n element.style.left = x_1 + 'px';\n element.style.top = y_1 + 'px';\n }\n else {\n labelX = ((labelX + x) * scale);\n labelY = ((labelY + y) * scale);\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'translate( ' + labelX + ' ' + labelY + ' )');\n }\n else {\n smoothTranslate(element, 0, duration, new MapLocation(labelX, labelY));\n }\n }\n }\n }\n };\n Zoom.prototype.markerTranslate = function (element, factor, x, y, scale, type, animate) {\n if (animate === void 0) { animate = false; }\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 if (!isNullOrUndefined(marker) && !isNullOrUndefined(marker.dataSource) && !isNullOrUndefined(marker.dataSource[dataIndex])) {\n var lng = marker.dataSource[dataIndex]['longitude'];\n var lat = marker.dataSource[dataIndex]['latitude'];\n var duration = this.currentLayer.animationDuration;\n var location_1 = (this.maps.isTileMap) ? convertTileLatLongToPoint(new Point(lng, lat), this.maps.tileZoomLevel, this.maps.tileTranslatePoint, true) : convertGeoToPoint(lat, lng, factor, layer, this.maps);\n if (this.maps.isTileMap) {\n if (type === 'Template') {\n var templateOffset = element.getBoundingClientRect();\n element.style.left = (location_1.x - (templateOffset.width / 2)) + 'px';\n element.style.top = (location_1.y - (templateOffset.height / 2)) + 'px';\n }\n else {\n element.setAttribute('transform', 'translate( ' + location_1.x + ' ' + location_1.y + ' )');\n }\n }\n else {\n if (type === 'Template') {\n location_1.x = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location_1.x)) * scale);\n location_1.y = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location_1.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_1.x) + (layerOffset.left - elementOffset.left) -\n (templateOffset.width / 2)) + marker.offset.x) + 'px';\n element.style.top = (((location_1.y) + (layerOffset.top - elementOffset.top)\n - (templateOffset.height / 2)) + marker.offset.y) + 'px';\n }\n else {\n location_1.x = (((location_1.x + x) * scale) + marker.offset.x);\n location_1.y = (((location_1.y + y) * scale) + marker.offset.y);\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'translate( ' + location_1.x + ' ' + location_1.y + ' )');\n }\n else {\n smoothTranslate(element, 0, duration, location_1);\n }\n }\n }\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_2 = translatePoint.x - (down.x - move.x) / scale;\n var y_2 = 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 map.translatePoint = new Point(x_2, y_2);\n this.applyTransform();\n }\n }\n else if (this.maps.tileZoomLevel > 1) {\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.tileZoomLevel, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (down.x - move.x)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (down.y - move.y)) / map.scale;\n this.applyTransform();\n }\n this.mouseDownPoints = this.mouseMovePoints;\n };\n Zoom.prototype.toolBarZooming = function (zoomFactor, type) {\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var scale = map.previousScale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n var size = map.mapAreaRect;\n zoomFactor = (type === 'ZoomOut') ? (Math.round(zoomFactor) === 1 ? 1 : zoomFactor) : zoomFactor;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? zoomFactor >= minZoom && zoomFactor <= maxZoom : zoomFactor >= minZoom)) {\n var translatePoint = map.previousPoint = 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 map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = zoomFactor;\n }\n else if ((map.isTileMap) && (zoomFactor >= minZoom && zoomFactor <= maxZoom)) {\n var tileZoomFactor = zoomFactor;\n map.scale = Math.pow(2, tileZoomFactor - 1);\n map.tileZoomLevel = tileZoomFactor;\n var position = { x: map.availableSize.width / 2, y: map.availableSize.height / 2 };\n this.getTileTranslatePosition(prevLevel, tileZoomFactor, position);\n map.mapLayerPanel.generateTiles(tileZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * map.scale)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * map.scale)) / map.scale;\n }\n this.applyTransform(true);\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, this.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 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: this.fillColor, 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.tileZoomLevel : map.scale) + 1, 'ZoomIn');\n break;\n case 'zoomout':\n this.toolBarZooming((map.isTileMap ? map.tileZoomLevel : 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: 10, height: 10,\n });\n rectSVGObject.appendChild(this.toolBarGroup);\n element.appendChild(rectSVGObject);\n if (getElementByID(map.element.id + '_Secondary_Element')) {\n getElementByID(map.element.id + '_Secondary_Element').appendChild(element);\n }\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.mapAreaRect;\n var x = 0;\n var y = 0;\n switch (map.zoomSettings.verticalAlignment) {\n case 'Near':\n y = size.y;\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 = size.x;\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 var color = this.maps.zoomSettings.highlightColor;\n var css = ' .e-maps-toolbar:hover > circle { stroke:' + color + '; } .e-maps-toolbar:hover > path { fill: ' + color + ' ; stroke: ' + color + '; }';\n var style = document.createElement('style');\n style.appendChild(document.createTextNode(css));\n element.appendChild(style);\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 prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var delta = 1;\n var value = (map.isTileMap) ? prevLevel : 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 prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var value = (map.isTileMap) ? prevLevel : 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.zoomColor === this.selectionColor && this.zoomElements)) {\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 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 map.previousScale = map.scale;\n map.previousPoint = map.translatePoint;\n map.scale = layerScale;\n map.translatePoint = { x: translatePointX, y: translatePointY };\n this.applyTransform(true);\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.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) || target.classList.contains(cls.MORE_INDICATOR_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.selectAppointment = function (isReverse, target, isMoreEvent) {\n if (isMoreEvent === void 0) { isMoreEvent = false; }\n var appointments;\n if (isMoreEvent) {\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS);\n appointments = [].slice.call(moreEventWrapper.children);\n }\n else {\n appointments = this.getAppointmentElements();\n }\n if (appointments.length < 0) {\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n var nextAppEle;\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n var targetIndex = appointments.indexOf(target);\n nextAppEle = appointments[(isReverse ? targetIndex - 1 : targetIndex + 1)];\n }\n else {\n nextAppEle = isReverse ? appointments[appointments.length - 1] : appointments[0];\n }\n if (nextAppEle) {\n this.parent.eventBase.addSelectedAppointments([nextAppEle], nextAppEle);\n nextAppEle.focus();\n }\n };\n KeyboardInteraction.prototype.selectAppointmentElementFromWorkCell = function (isReverse, target) {\n var _this = this;\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.parent.removeSelectedClass();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var appointmentElements_1 = this.getUniqueAppointmentElements();\n var filteredElements_1 = [];\n var selectedDate_1 = parseInt(target.getAttribute('data-date'), 10);\n var selectedSeriesEvents = this.parent.eventsProcessed.filter(function (eventObject) {\n return (!isReverse ? (eventObject[_this.parent.eventFields.startTime].getTime() >= selectedDate_1) :\n (eventObject[_this.parent.eventFields.startTime].getTime() <= selectedDate_1));\n });\n selectedSeriesEvents.filter(function (event) {\n appointmentElements_1.filter(function (element) {\n if (JSON.stringify(event.Guid) === JSON.stringify(element.getAttribute('data-guid'))) {\n filteredElements_1.push(element);\n }\n });\n });\n if (filteredElements_1.length > 0) {\n var selectedElement = isReverse ? filteredElements_1[filteredElements_1.length - 1] : filteredElements_1[0];\n var focusElements = this.getAppointmentElementsByGuid(selectedElement.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.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.getAppointmentElements = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n };\n KeyboardInteraction.prototype.getAppointmentElementsByGuid = function (guid) {\n return [].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]'));\n };\n KeyboardInteraction.prototype.getUniqueAppointmentElements = function () {\n var appointments = this.getAppointmentElements();\n var appointmentElements = [];\n appointments.map(function (value) {\n return value.getAttribute('data-guid');\n }).filter(function (value, index, self) {\n if (self.indexOf(value) === index) {\n appointmentElements.push(appointments[index]);\n }\n });\n return appointmentElements;\n };\n KeyboardInteraction.prototype.getWorkCellFromAppointmentElement = function (target) {\n var selectedObject = this.parent.eventBase.getEventByGuid(target.getAttribute('data-guid'));\n return this.parent.eventBase.selectWorkCellByTime([selectedObject]);\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.getWorkCellFromAppointmentElement(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.selectAppointment(true, target);\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.getWorkCellFromAppointmentElement(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.selectAppointment(false, target);\n }\n };\n KeyboardInteraction.prototype.processLeftRight = function (target, isMultiple) {\n var tableEle = this.parent.getContentTable();\n var curRowIndex = target.parentNode.rowIndex;\n var key = {\n element: tableEle,\n rowIndex: curRowIndex,\n columnIndex: target.cellIndex,\n maxIndex: tableEle.rows[curRowIndex].cells.length\n };\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.getWorkCellFromAppointmentElement(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.getWorkCellFromAppointmentElement(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 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.selectAppointment(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.selectAppointment(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 this.parent.eventBase.removeSelectedAppointmentClass();\n if (!isReverse && target.getAttribute('data-guid') === appointments[appointments.length - 1].getAttribute('data-guid') ||\n isReverse && target.getAttribute('data-guid') === appointments[0].getAttribute('data-guid')) {\n return;\n }\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(isReverse, target);\n e.preventDefault();\n }\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.selectAppointmentElementFromWorkCell(isReverse, target);\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.slots = [];\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.splitEvent = function (event, dateRender) {\n var fields = this.parent.eventFields;\n var start = util.resetTime(new Date(event[fields.startTime] + '')).getTime();\n var end = util.resetTime(new Date(event[fields.endTime] + '')).getTime();\n if (util.getDateInMs(event[fields.endTime]) <= 0) {\n var temp = util.addDays(util.resetTime(new Date(event[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 < dateRender[0].getTime()) {\n start = dateRender[0].getTime();\n }\n if (end > dateRender[dateRender.length - 1].getTime()) {\n end = dateRender[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 && this.parent.currentView !== 'WorkWeek') {\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 EventBase.prototype.cloneEventObject = function (event, start, end, count, isLeft, isRight) {\n var fields = this.parent.eventFields;\n var e = extend({}, event, null, true);\n var data = { count: count, isLeft: isLeft, isRight: isRight };\n data[fields.startTime] = event[fields.startTime];\n data[fields.endTime] = event[fields.endTime];\n e.data = data;\n e[fields.startTime] = new Date(start);\n e[fields.endTime] = new Date(end);\n return e;\n };\n EventBase.prototype.dateInRange = function (date, start, end) {\n return start <= date && date <= end;\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 + ',.' + cls.APPOINTMENT_CLASS + ':focus'));\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 var target;\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n return target;\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 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 return target;\n }\n }\n return target;\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 this.addSelectedAppointments([].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]')));\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 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 (eventData[fields.isAllDay] ? 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, this.onTimeChange.bind(this));\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, changeEvent) {\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: changeEvent, 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]) {\n var temp = util.addDays(new Date(+eventObj[this.fields.endTime]), -1).getTime();\n eventObj[this.fields.endTime] = (+eventObj[this.fields.startTime] > temp) ? eventObj[this.fields.endTime] : new Date(temp);\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]) {\n eventObj[this.fields.startTime] = util.resetTime(eventObj[this.fields.startTime]);\n eventObj[this.fields.endTime] = util.addDays(util.resetTime(eventObj[this.fields.endTime]), 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 = '';\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.fields = _this.parent.eventFields;\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 this.cellHeight = this.element.querySelector('.' + cls.WORK_CELLS_CLASS).offsetHeight;\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 this.renderedEvents = [];\n var startDateTime = new Date(this.dateRender[day].getTime());\n var endDateTime = util.addDays(this.dateRender[day], 1);\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 moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n attrs: { 'tabindex': '0', 'data-index': (currentDay + count).toString(), 'data-count': '1' },\n innerHTML: '+1 ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))\n });\n innerCountWrap.appendChild(moreIndicatorElement);\n countWrapper.appendChild(innerCountWrap);\n EventHandler.add(moreIndicatorElement, '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) {\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 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 return event;\n };\n AppointmentRendering.prototype.renderAllDayEvents = function (event) {\n this.moreEvents = [];\n this.overlapList = [];\n this.allDayLevel = 0;\n this.slots = [];\n this.slots.push(this.dateRender.map(function (date) { return +date; }));\n for (var day = 0, length_2 = this.dateRender.length; day < length_2; 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.splitEvent(eventObj, this_1.dateRender)[0];\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 = record.data.count;\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.data.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.data);\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_3 = allDayDifference; count_1 < length_3; 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);\n var eStart = record[this.fields.startTime];\n var eEnd = record[this.fields.endTime];\n var appWidth = '0%';\n var appLeft = '0%';\n var topValue = 0;\n var appLevel = 0;\n var isDateRange = this.dateRender[0].getTime() <= eStart.getTime() &&\n util.addDays(this.dateRender[this.dateRender.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(this.cellHeight, startEndHours.startHour, startEndHours.endHour);\n }\n else if (startEndHours.endHour.getTime() <= eEnd.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, eStart, startEndHours.endHour);\n }\n else if (startEndHours.startHour.getTime() >= eStart.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, startEndHours.startHour, eEnd);\n }\n else {\n appHeight = (eEnd.getTime() - eStart.getTime()) / (60 * 1000) * (this.cellHeight * this.minorSlotCount) / this.majorSlot;\n }\n appHeight = (appHeight < this.cellHeight) ? this.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 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 * this.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 date_1 = new Date(this.dateRender[day].getTime());\n eventsList = this.renderedAllDayEvents.filter(function (app) {\n return ((util.resetTime(app[fieldMapping.startTime]).getTime() <= util.resetTime(date_1).getTime()) &&\n (util.resetTime(app[fieldMapping.endTime]).getTime() >= util.resetTime(date_1).getTime()));\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 if (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) {\n addClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '-1');\n }\n else {\n removeClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '0');\n }\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.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 var rowHeight;\n if (this.parent.uiStateValues.expand) {\n target.setAttribute('title', 'Collapse-all-day-section');\n target.setAttribute('aria-label', 'Collapse section');\n rowHeight = ((this.allDayLevel + 1) * this.getEventHeight()) + 4;\n }\n else {\n target.setAttribute('title', 'Expand-all-day-section');\n target.setAttribute('aria-label', 'Expand section');\n rowHeight = (3 * this.getEventHeight()) + 4;\n }\n this.setAllDayRowHeight(rowHeight);\n this.addOrRemoveClass();\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.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, this.dateRender);\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.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 attrs: {\n 'tabindex': '0',\n 'data-start-date': startDateTime.getTime().toString(),\n 'data-end-date': endDateTime.getTime().toString()\n }\n });\n moreIndicatorElement.style.top = appArea + 'px';\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, 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 isAllDay = event[fieldMapping.isAllDay];\n var allDayStr = this.l10n.getConstant('allDay');\n var timeStr = this.parent.globalize.formatDate(strDate, { skeleton: 'hm' }) + ' - ' +\n this.parent.globalize.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.scrollTop = 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.scrollTop = 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, getZindexPartial } 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 zIndex: getZindexPartial(div)\n });\n this.dropDown.hide();\n attributes(this.element, (_a = {},\n _a['role'] = 'menu',\n _a['aria-haspopup'] = this.items.length || this.target ? 'true' : 'false',\n _a['aria-expanded'] = 'false',\n _a['aria-owns'] = this.getPopUpElement().id,\n _a));\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], 'e-top-icon-btn');\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.indexOf(classNames.VERTICAL) > -1\n ? '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.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.element.setAttribute('aria-expanded', 'true');\n ul.focus();\n var openArgs = { element: ul, items: this.items };\n this.trigger('open', openArgs);\n }\n };\n DropDownButton.prototype.closePopup = function (e) {\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.element.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.indexOf(classNames.VERTICAL) > -1) {\n var arrowSpan = this.element.querySelector('span.e-caret');\n classList(arrowSpan, ['e-icon-bottom'], ['e-icon-right']);\n }\n if (oldProp.cssClass) {\n removeClass([popupElement], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([popupElement], newProp.cssClass.split(' '));\n }\n break;\n case '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","uniqueID","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","ELSEIF_STMT","WORD","trim","addNameSpace","QUOTES","IF_STMT","strs","FOR_STMT","rlStr_1","mtc","fnStr","fNameSpace","ELSE_STMT","IF_OR_FOR","evalExp","addNS","ignoreList","NOT_NUMBER","templateString","compiler","engineObj","propName","HAS_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","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","themeStyle","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","createFloatLabel","overAllWrapper","searchWrapper","inputElement","floatLinelement","floatLabelElement","FLOATLINE","FLOATTEXT","aria-labelledby","LABELTOP","LABELBOTTOM","updateFloatLabelState","setPlaceHolder","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","mapModel","latitude","latRadian","lngRadian","longitude","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","getTemplateFunction$3","layerIndex","shapeIndex","cancel","eventName","selection","maps","demo","size1","getElement$3","l","currentStroke","touches","getDistance","a","previousLocation","preScale","diffScale","currentScale","scale","slopeFactor","currentLocation","processTemplate","clearAnimation","startAnimation","process","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","ranArray","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","curObject","indexLocation","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","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","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","changeTime_1","curIndex","defaultNumberingSystem","latn","_digits","_type","defaultNumberSymbols","decimal","group","percentSign","plusSign","minusSign","infinity","nan","exponential","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","propKeys_1","getSymbolRegex","regexStr","getSymbolMatch","matchKeys_1","constructRegex","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","errorText","ms","ls","mf","lf","NumberFormat","numberFormatter","option","cldr","symbolPattern","fOptions","cOptions","dOptions","dependable","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","toExponential","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","currencyCode","isCurrencyPercent","parts","actual","symbol","part","loc","typeMapper","patternRegex","patternMatch","G","M","L","H","'"," a","yy","EEEE","E","currencyFormatRegex","curWithoutNumberRegex","$","%","-","0","1","dateParseRegex","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","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","scientificFormats-numberSystem-latn","monthIndex","C","P","N","A","formatSplit","integerPart","fractionPart","customNumberFormat","dateObj","getActualDateTimeFormat","isExcelFormat","actualPattern","tLength","timeZonePattern","options_1","timeZone","numMapper","timezone","DateFormat","getTimeZoneValue","getActualNumberFormat","minFrac","parseOptions","custom","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","fractionDigitsPattern","integer","minimumIntegerPattern","no","groupingPattern","cPattern","lastPageID","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","ival","parseRegex","groupRegex","NumberParser","numberParser","symbolRegex","symbolpattern","getParsedNumber","isNegative","NaN","exponent","rightToLeft","Internationalization","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","getNumberPattern","componentCount","lastHistoryLen","Component","randomId","needsID","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","mergePersistData","event_2","getInjectedModules","injectedModules","Inject","localStorage","getItem","setItem","getPersistData","clearTemplate","templateName","isHistoryChanged","pageID","history","hash","charCodeAt","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","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","ROOT","DLG_HEADER_CONTENT","DLG_HEADER","DLG_FOOTER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","SCROLL_DISABLED","FULLSCREEN","DLG_CLOSE_ICON_BTN","Dialog","initRender","headerContent","classArray","clonedEle","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","setOverlayZindex","dlgOverlay","dragObj","buttonContent","btn","ftrTemplateContent","aria-describedby","maxHeight","isContent","contentDiv","headerEle","createHeaderContent","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","u","tabIndex","disableElement","getAutoFocusNode","validNode","t","elementMatch","Element","bindEvent","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","CLEARICON","CLEARICONHIDE","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","_focusFn","getParentNode","_blurFn","createFloatingInput","inputObject","wireFloatingEvents","createInputContainer","customTag","updateLabelState","updateIconState","button","createClearButton","initial","insertAdjacentElement","readOnly","wireClearBtnEvents","validateLabel","tagClass","setCssClass","oldClass","setPlaceholder","aria-placeholder","setReadonly","isReadonly","readonly","isRtl","setEnabled","isEnable","disabledAttrs","aria-disabled","removeAttributes","addAttributes","setClearButton","isClear","clearButton","appendSpan","iconClass","createInput","showClearButton","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","inputWrapper","aria-readonly","hiddenInput","spinDown","aria-label","spinUp","wireSpinBtnEvents","formattedValue","aria-valuemin","aria-valuemax","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","bindClearEvent","resetHandler","focusIn","focusOut","pasteHandler","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","updateValue","previousValue","beforeUpdate","isKeyDown","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","selectQuery","defaultMessages","email","dateIso","creditcard","number","maxLength","minLength","rangeLength","tel","equalTo","rules","inputElements","createHTML5Rules","FormValidator_1","addRules","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","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","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","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","checkboxElement","frameElement_1","checkInternally","checkBoxPosition","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","checkboxIcon","setSelectedItemData","unCheckItem","checkAllItem","toggleAllCheckBase","unCheckAllItem","checkIcon","args_1","getItemData","selectedItems","removeHover","removeSelect","setSelectLI","setCheckboxLI","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","arrowKeyHandler","prev","enterKeyHandler","spaceKeyHandler","tabFocus","swipeActionHandler","focusout","swipe","focusedLI_1","hoverLI","selectedLI_1","selectEventData","renderSubList","isInteracted","selectedLI","lastLi","hoverSiblingLI","curLIs","levelKeys","localData","levelKeys_1","curDSJSON","findItemFromDS","getElementUID","curDS","resultJSON","getQuery","setViewDataSource","isInAnimation","setLocalData","renderList","contentContainer","renderIntoDom","rippleFn","classAr","pID","pop","toUL","fromUL","selectItem","selectMultipleItems","getParentId","parentId","getSelectedItems","liTextCollection","liDataCollection","dataParent","tempData","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","getViewNumber","depth","navigateTo","view","currentView","focusedDate","tableBodyElement","selectedDate","depthValue","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","setStartDate","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","tzOffset","setTime","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","INPUTWRAPPER","isCalendar","disabledDates","dateOptions","dateTimeFormat","dateValue","tempFormat","dateIconHandler","inputFocusHandler","inputBlurHandler","keyboardModules","inputKeyActionHandle","CalendarKeyActionHandle","strictModeUpdate","changeTrigger","calendarKeyboardModules","documentHandler","createCalendar","popupWrapper","modelHeader","modal","yearHeading","h2","daySpan","monthSpan","selectCalendar","outOfRange","prevent","preventArgs","triggerEvent","ensureInputAttribute","ngTag","inputEleCopy","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","navPrevMonth","deviceNavNextFunction","deviceNavNext","deviceNavPrevFunction","deviceNavPrevious","shiftTab","processPresets","presets","validateDates","activeIndex","rangeIconHandler","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","calendarFocus","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","popupKeyboardModule","popupKeyActionHandle","onMouseClick","setListSelection","onMouseOver","onMouseLeave","renderCustomPopup","removeListSelection","applyPresetRange","listTag","wireListEvents","unWireListEvents","popupWidth","btnKeyboardModule","presetKeyboardModule","presetKeyActionHandler","popupKeyBoardHandler","rangeContainer","listMoveDown","setScrollPosition","listMoveUp","hvrItem","getHoverLI","actItem","getActiveLI","previousElementSibling","listHeight","active","nextEle","liHeight","setEleWidth","virtualRenderCellArgs","virtualRenderCellEvent","isStartDisabled","isEndDisabled","getSelectedRange","DAY","MONTH","YEAR","NAVIGATION","FOCUS","createListItems","timeFormat","timeCollections","TimePicker","disableItemCollection","keyConfigure","down","up","createInputElement","validateInterval","validateDisable","getFormattedValue","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","aria-autocomplete","isNullOrEmpty","unBindEvents","ariaAttribute","generateList","listWrapper","addSelection","getPopupHeight","popupHeight","popupCalculation","firstItem","isEmptyList","textIndent","paddingRight","paddingLeft","containerStyle","setPopupPosition","setPopupWidth","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","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","TimeKeyActionHandle","unWireTimeListEvents","setDimension","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","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","isImageStream","dataStream2","bCompress2","clearStream","internalStream","compressContent","sw","getCompressedString","addFilter","filterName","PdfReferenceHolder","isImage","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","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","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","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","refreshWithoutAnimation","index.CircularGauge","index.GaugeTooltip","index.Annotations","dropDownBaseClasses","noData","fixedHead","grouping","DropDownBase","getPropObject","newProperty","oldProperty","getValueByText","checkValueCase","isTextByValue","listData","typeOfData","dataSource_1","checkingAccent","checkIgnoreCase","getItemValue","checkNonIgnoreCase","itemValue","stringTrim","textItem","typedText","l10nUpdate","actionFailure","noRecordsTemplate","actionFailureTemplate","getTextByValue","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","hiddenElement","DropDownList","initializeData","isDocumentClick","isFilterFocus","beforePopupOpen","initRemoteRender","isNotSearchList","isTyped","preventFocus","preventAutoFill","isValidKey","typedString","isEscapeKey","isTabKey","actionCompleteData","isUpdated","prevSelectPoints","isSelectCustom","isDropDownClick","preventAltUp","isCustomFilter","isSecondClick","floatLabelChange","floatElement","resetFocusElement","resetSelection","onChangeEvent","allowFiltering","valueTempElement","setHTMLAttributes","htmlAttr","getAriaAttributes","hidePopup","preventTabIndex","getNgDirective","getElementByText","getElementByValue","listItems_1","liItem","updateValues","setHiddenValue","onBlur","isFilterLayout","focusOutAction","onFocusOut","onFocus","wireEvent","dropDownClick","bindCommonEvent","unBindCommonEvent","searchKeyEvent","spinnerElement","filterInputObj","preventAction","preventHomeEnd","isEditTextBox","isTabAction","focusEle","isSelectFocusItem","pageUpSelection","getPageCount","pageDownSelection","showPopup","focusDropDown","selectCurrentItem","previousItem","unWireEvent","onDocumentClick","activeStateChange","proxy_1","cloneElements","updateSelectedItem","preventSelect","focusedItem","activeItem","valueTemplate","setValueTemplate","previousSibling","dataText","detachChangeEvent","onFilterUp","searchLists","onFilterDown","getSelectionPoints","removeFillSelection","isFiltering","preventDefaultAction","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_2","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","filterType","mapping","suggestionCount","isDownUpKey","filterAction","postBackAction","showPopupButton","atcProps","HIDE_LIST","CHIP","CHIP_CLOSE","CHIP_SELECTED","ZERO_SIZE","CLOSEICON_CLASS","CLOSE_ICON_HIDE","MultiSelect","mobFilter","focused","scrollFocusStatus","keyDownStatus","enableRTL","allowCustomValue","hideSelectedItem","closePopupOnSelect","updateHTMLAttribute","updateReadonly","updateClearButton","overAllClear","componentWrapper","updateCssClass","onPopupShown","focusAtFirstListItem","isFirstClick","mainList","refreshListItems","addListFocus","focusAtLastListItem","aria-multiselectable","updateListARIA","removelastSelection","chipCollectionWrapper","tempValues","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","wrapperClick","updateDelimView","removeChipFocus","refreshInputHight","floatLabelBlur","validateValues","newVal","getPagingCount","showDelimWrapper","viewWrapper","floatLabelFocus","delimiterWrapper","hideDelimWrapper","calcPopupWidth","popupKeyActions","updateAriaAttribute","onKeyDown","moveByList","selectByKey","escapeAction","moveBy","removeSelectedChip","selectListByKey","showOverAllClear","hideOverAllClear","maximumSelectionLength","updateListSelection","selectedElem","addChipSelection","moveByTop","chipClick","onChipRemove","setFloatLabelType","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","indexItem","selectItems","temp1","mainlist","addListHover","ariaCheck","delimChar","wrapperleng","remainContent","overflowCountTemplate","raminElement","remainSize","overAllContainer","remainValue","newTemp","selectAllItem","onLoadSelect","dropDownIcon","msProps","mainLiLength","liLength","DELIMITER_VIEW","placeholderText","placeholderElement","showDropDownIcon","dropIcon","CHECK","CheckBoxSelection","activeLi","activeEle","listSelection","setSelectAll","setDeviceSearchBox","getFocus","setReorder","getActiveList","checboxCreate","itemCreated_1","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","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","getTextContent","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","getExpandEvent","colArgs","currentHeight","parentLi","expandChild","eicon","childItems","mapper_1","getChildFields","getNodeObject","ensureCheckNode","renderSubChild","getFields","nodeLevel","dataLevel","getChildMapper","isRoot","getChildGroup","objlen","dataId","cIcons","multiSelect","unselectNode","getSelectEvent","removeSelectAll","startNode","liList","currNode","addSelect","focusedNode","getFocusedNode","expandOnType","expandOn","expandHandler","expandCollapseAction","inpEle","oldText","checkNode","openNode","shiftKeySelect","navigateNode","navigateRootNode","createTextbox","navigateToFocus","isUp","focusNode","getScrollParent","parentPos","isVisibleInViewport","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","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","headerTemplateFn","fltrTemplateFn","isForeignColumn","editType","sortComparer","a_1","getSortDirection","setSortDirection","getFormatter","formatFn","getParser","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","disableHtmlEncode","queryCellInfo","actionBegin","actionComplete","dataBound","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnDragStart","columnDrag","columnDrop","rowDragStart","rowDrag","rowDrop","printComplete","detailDataBound","batchAdd","batchCancel","batchDelete","beforeDataBound","beforeOpenColumnChooser","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","initialLoad","initialEnd","dataReady","contentReady","uiUpdate","onEmpty","inBoundModelChanged","modelChanged","colGroupRefresh","headerRefreshed","pageComplete","sortComplete","filterComplete","searchComplete","reorderComplete","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","cBoxTrue","cBoxFalse","closeDialog","searchHandler","searchBoxKeyUp","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","localeObj","updateModel","actualPredicate","filteredColumns","sortSettings","allowCaseSensitive","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","filterChoiceCount","processSearch","getPredicateFromCols","getPredicate","predicateList","fPredicate","foreignColumn","getForeignKeyColumns","events.generateQuery","events.filterChoiceRequest","processDataOperation","allPromise","runArray","dataSuccess","fullData","cols","getDistinct","filteredData","processDataSource","events.filterAfterOpen","events.actionComplete","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","crud","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","chekBoxEnable","isDataRow","getSelectedRowIndexes","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","cellRendererFact","DetailExpand","Filter","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","updateDefaultCursor","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","gridObj","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","dynamicColumnChange","getCurrentViewRecords","updateColumnType","isColTypeDef","events.beforeDataBound","events.tooltipDestroy","totalRecordsCount","updatesOnInitialRender","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","isCancelDeSelect","isPreventCellSelect","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","allowSelection","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","rowCellIndxes","getSelectedRowCellIndexes","SortDescriptor","SortSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","GroupSettings","EditSettings","inViewIndexes","freezeRefresh","mergePersistGridData","keyEntity","currentObject","ignoreInArrays","ignoreOnColumn","ignoreInColumn","allowExcelExport","allowPdfExport","isDetail","toolbarTemplate","isCommandColumn","allowAdding","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","initializeServices","mediaCol","isInitialLoad","filterOperators","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","defaultLocale","EmptyRecord","True","False","InvalidFilterMessage","GroupDropArea","UnGroup","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Cancel","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","SelectAll","Blanks","FilterTrue","FilterFalse","NoResult","ClearFilter","NumberFilter","TextFilter","DateFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","ctrlDownArrow","ctrlUpArrow","ctrlPlusP","ctrlPlusC","ctrlShiftPlusH","renderModule","getMediaColumns","searchModule","processModel","gridRender","addListener","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","filterModule","refreshFilter","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","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","toolTipObj","getTooltipStatus","htable","ctable","isEllipsisTooltip","myTableDiv","mySubDiv","myTable","myTr","mytd","mouseClickHandler","dblClickHandler","allowKeyboard","dataBoundFunction","checkEdit","events.dblclick","filterClear","keyPress","saveCell","dataObj","mergeColumns","storedColumn","ind","localCol","setInjectedModules","refreshColumns","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","groupColumn","groupModule","ungroupColumn","isContextMenuOpen","ensureModuleInjected","destroyTemplate","propertyNames","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","defaultConstants","currentPageInfo","totalItemsInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","containerModule","pagerMessageModule","enableExternalMessage","checkpagesizes","pagerTemplate","initLocalization","renderFirstPrevDivForDevice","enablePagerMessage","renderNextLastDivForDevice","pagerdropdownModule","addAriaLabel","externalMessageModule","checkGoToPage","currentPageChanged","setDropDownValue","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","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","drpuiObj","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","getCMenuDS","unwireExEvents","cmenu","createMenu","isCheckIcon","menu","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","clickExHandler","menuItem","destroyCMenu","menuObj","submenu","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","filterBarElement","currentFilterObject","getFilteredColsIndexByField","currentFilteringColumn","events.filterComplete","events.filterOpen","columnMenuFilter","filterIconClickHandler","filterCell","checkForSkipInput","filterStatusMsg","applyColumnFormat","checkAlreadyColFiltered","addFilteredClass","getFlvalue","setFormatForFlColumn","refreshFilterSettings","getFilterBarElement","fltrElement","filterDialogOpen","customOperators","filterHandler","localizedStrings","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","toolbarClickHandler","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","endTranslate","getOffset","isOnenter","prevInfo","observe","startIdx","getBlockSize","bSize","gen","VirtualHeaderRenderer","VirtualElementHandler","renderWrapper","renderPlaceHolder","setWrapperWidth","fHdr","tdElement","fCls","td_1","BatchEditRender","createDialog","dialog","dataCell","Inline","fForm","cols_1","tArgs","isComplexField","BooleanEditCell","selectChkBox","editRow","DropDownEditCell","isInline","dlgElement","NumericEditCell","editComplete","primaryKeys","primaryKeyValues","mFormObj","previousData","mForm","destroyElements","destroyWidgets","updateCurrentViewData","applyFormValidation","mElem","events.saveComplete","NormalEdit","BatchEdit","cellDetails","events.doubleTap","events.beforeCellFocused","setCellIdx","editCellFromIndex","isAddRow","removeRowObjectFromUID","refreshRowIdx","bulkDelete","validateFormObj","batchSave","mergeBatchChanges","addRowObject","getIndexFromData","nonMovableRows","defaultData","mTr","mTbody","findNextEditableCell","columnObject","getDefaultData","validationRules","isColored","setChanges","editedData","DialogEdit","DatePickerEditCell","editCellType","dropdownedit","datepickeredit","booleanedit","updateEditObj","tapEvent","Global","alertDObj","endEditing","alertClick","dlgWidget","events.destroyForm","mRules","isFHdr","gcontent","inputClient","arrow","ColumnChooser","showColumn","hideColumn","isDlgOpen","dlghide","initialOpenDlg","stateChangeColumns","isInitialOpen","isCustomizeOpenCC","rtlUpdate","destroy$1","removeCancelIcon","args1","refreshCheckboxState","enableAfterRenderEle","customDialogOpen","searchDiv","ccsearchele","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","blankRows","workSheet","getHeaders","groupIndent","processHeaderContent","processAggregates","isCsvExport","book","blobPromise","processGroupedRows","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","fromData","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","BingMap","getBingMap","digit","layerType","colorMap","LayerPanel","tileTranslatePoint","layersCollection","secondaryEle","layerGroup","processLayers","currentFactor","tileZoomLevel","panTileMap","translateLayerElements","featureData","shapeData","bbox","bubbleCalculation","bubbleSettings","bubbledata","renderData","currentLayer","shapeSettings","rectBounds","currentShapeData","polyLineOptions","circleOptions","checkShapeDataFields","shapeID","drawingType","groupElements","pathEle","bubble_1","bubbleG","renderBubble","labelTemplateEle","bubbleIndex","dataIndex","bubbleData","shapePropertyPath","multiPolygonDatas","layerData","calculateFactor","horFactor","verFactor","childNode","isTileMap","layerElement","animate$$1","getTranslate","translatePoint","coordinates","baseMapBounds","currentCoords","xcount","ycount","zoomLevel","baseLayer","tile","subtile","getElementByID","tiles_1","factorX","factorY","availSize","annotationYValue","annotationXValue","ExportUtils$1","Maps","createSVG","wireEVents","setTextStyle","Theme$2","setLabelFont","BootstrapTheme","FabricTheme","findBaseAndSubLayers","xhr_1","renderMap","isBaseLayer","createTile","createZoomingToolbars","arrangeTemplate","layerCollectionEle","tileRect","tileSvgRect","templateGroupEle","previousScale","layerOffset","currentTemplate","mainLayer","removeElement$4","baseIndex","groupEle","trimmedTitle","titleBounds","Rect$3","createSvg$1","triggerShapeEvent","mouseEndOnMap","markerModule","bubbleMove","unWireEVents","isVisible$$1","findVisibleLayers","isLayerVisible","isBubblevisible","istooltipVisible","isHighlight","markers","isSelection","navigation","bubble","Bubble","colorValuePath","bubbleValue","shapeColor","shapePoints","midIndex","bubbleElement","DataIndex","transPoint","markerSettings","markerID","markerTemplateEle","markerIndex","previousExplodeId","trackEle","removeMarkerExplode","markerEle","shapeCustom","RectOption$3","getMarker","rightWidth","dataLabelSettings","labelpath","shapePoint","labelId","textLocation","shapes","datasrcObj","eventargs","trimmedLable","textTrim$1","xpositionStart","convertElementFromLabel","smartLabelMode","intersect","border_1","navigationEle","pathOption","showArrow","arrowColor","arrowSize","arrowSettings","arrowPosition","startArrow","endArrow","offSet","offSetValue","NavigationLine","legendBorderRect","interactiveLocation","legendItemRect","heightIncrement","dataPath","propertyPath","getMarkersLegendCollections","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","prevLevel","prevScale","maxZoom","minZoom","minBounds","maxBounds","mapTotalWidth","translatePointX","translatePointY","newZoomFactor","prevSize","currentLevel","zoomCalculationFactor","mapLayerPanel","generateTiles","touchCenter","getTouches","newScale","newTileFactor","translatePointX_1","rectSVGObject","zoomAnimate","currentEle","markerTranslate","bubbleCollection","animateTransform","markerTemplateElement","labelX","labelY","layerEle","x_1","convertTileLatLongToPoint","y_2","panningXDirection","layerRect","toolBarZooming","tileZoomFactor","applyTransform","xSpacing","toolbarsCollection","toolbars","toolWidth","toolHeight","toolbar_1","performToolBarAction","ySpacing","zoomColor","createTooltip$1","alignToolBar","toolBarSize","fingers","firstMove","zoomOnClick","getBBox","boundHeight","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","isMoreEvent","appointments","nextAppEle","removeSelectedAppointmentClass","ALLDAY_CELLS_CLASS","getUniqueAppointmentElements","eventObject","getAppointmentElementsByGuid","getWorkCellFromAppointmentElement","selectedObject","selectedEventElements","moreEventWrapper","curRowIndex","isMultiple","maxIndex","selectedAppointments","maxColIndex","curColIndex","allDayRow_1","processTab","moreEventList","focusElement","selectAppointment","cls.APPOINTMENT_CLASS","APPOINTMENT_CLASS","isReverse","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","EventBase","eventFields","generateID","eventsProcessed","processed","processedData","oldTimezone","processTimezone","startTimezone","endTimezone","zone","fieldMapping","object1","d3","d4","util.resetTime","eventStartTime","eventEndTime","util.addDays","addDays","eventLength","app","getDateInMs","firstSlot","slot","dateInRange","availSlot","addSelectedAppointments","eventSelect","getEventByGuid","getSelectedAppointments","cls.APPOINTMENT_BORDER","APPOINTMENT_BORDER","eventsData","nearestTime","isAllDay","targetArea","isAllDayAppointment","isFullDay","POPUP_OPEN$1","quickPopup","currentAction","getEventMaxId","currentViewDate","recurrenceRule","clonedObject","occurrenceCollection","Crud","actionArgs","addEvent","editParms","crudArgs","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","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","setAllDayRowHeight","allDayEvents","dateRender","startDateTime","data-guid","appointmentDetails","APPOINTMENT_DETAILS","appointmentSubject","appointmentStartTime","appointmentEndTime","timeStr","countWrapper","innerCountWrap","currentDay","data-count","startEndHours","getStartEndHours","filterEvents","allDayRowCell","length1","cellTop","eStart","appWidth","allDayDifference","allDayIndex","getOverlapIndex","appHeight","appointmentElement","isDateRange","getTopValue","overlapList","cls.APPOINTMENT_WRAPPER_CLASS","appointmentWrap","appLeft","appointment_1","eventsList","appLevel","appIndex","length2","apps","uiStateValues","moreEventCount","APPOINTMENT_ROW_COLLAPSE_CLASS","eventElement","APPOINTMENT_ROW_EXPAND_CLASS","getEventHeight","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","daysCount","Week","WorkWeek","par","MonthEvent","eventHeight","slots","noOfDays","renderAppointmentMonth","APPOINTMENT_SUBJECT","eventLocation","ICON$4","cls.EVENT_ICON_LEFT_CLASS","appointmentWrapper","overlapCount","appTop","diffInDays","appWidth_1","cellTd","wireAppointmentEvents","APPOINTMENT_WRAPPER_CLASS","eventRendered","cellTd_1","endDateTime","appArea","monthHeaderHeight","renderedAppCount","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","getPopUpElement","keyEventHandler","liIdx","activeElem","getULElement","beforeOpenArgs","dropDown","btnModel","createSecondaryButton","createPrimaryButton","btnElem","dropDownBtnModel","secondaryBtnObj"],"mappings":"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CdtzG,SAAY,YAEhB+hC,EAAS4uE,YACL6C,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,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,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,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IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAM/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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AK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,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,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,KAEtB/D,KCllBPpoK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAuCxC2mK,GAA2C,YAE3C,SAASA,EAAgBoF,EAAqB19L,EAAMznB,GAChD,IAAIzE,EAAQq+C,EAAO98C,KAAKtB,KAAMisB,EAAMznB,IAAUxE,KA4B9C,OAvBAD,EAAMkmL,qBAAuB,IAAIxC,GAMjC1jL,EAAM6pN,WAAa,UAAW,mBAAoB,mBAAoB,oBAClE,kBAAmB,iBAAkB,aACL,iBAAxBD,QAAuD,IAAVnlN,EACrDzE,EAAMhC,YAAY4rN,EAAqB19L,EAAMmiK,GAAaoJ,SAErB,iBAAxBmyB,QAAuD,IAAVnlN,IAC1DzE,EAAQq+C,EAAO98C,KAAKtB,KAAMisB,EAAMznB,IAAUxE,MACpC6pN,cAAgBF,EACtB5pN,EAAM+pN,aACN/pN,EAAMgqN,uBAEAJ,aAA+BpF,QAAsC,IAAV//M,EACjEzE,EAAMhC,YAAY4rN,EAAoBv9L,WAAYH,EAAM09L,EAAoBnlN,OAEtEmlN,aAA+BpF,QAAsC,IAAV//M,GACjEzE,EAAMhC,YAAY4rN,EAAoBv9L,WAAYH,EAAMznB,GAErDzE,EA6HX,OA3JAw9C,GAAUgnK,EAAiBnmK,GAgC3B3/C,OAAOkJ,eAAe48M,EAAgB/oN,UAAW,cAM7CgM,IAAK,WACD,OAAOxH,KAAK6pN,eAEhBpiN,YAAY,EACZC,cAAc,IAOlB68M,EAAgB/oN,UAAUsuN,WAAa,WACnC,GAAI9pN,KAAKosB,aAAeslK,GAAcw0B,QAAUlmN,KAAKosB,aAAeslK,GAAc00B,aAAc,CAC5F,IAAI5hN,EAAQxE,KAAKwE,MACjBA,KAAW4pL,GAAawJ,KAAOxJ,GAAayJ,QAC5C73L,KAAKy3L,SAASjzL,KAOtB+/M,EAAgB/oN,UAAUm6L,aAAe,SAAU/nH,EAAMr1C,GACrD,GAAY,MAARq1C,EACA,MAAM,IAAIhtE,MAAM,8BAKpB,IAAK,IAHDkU,EAAQ,EAGHxY,GAFE0D,KAAK0zB,KAEH,GAAG7xB,GADhB+rE,EAAO22I,EAAgByF,QAAQp8I,IACJhxE,OAAQN,EAAIuF,EAAKvF,IAAK,CAC7C,IAAIwjL,EAAKlyG,EAAKtxE,GAEdwY,GADgB9U,KAAKiqN,qBAAqBnqC,EAAIvnJ,GAGlD,IAAItM,EAAOjsB,KAAK03L,QAAQp4K,QAAQiZ,GAGhC,OAFAzjB,GAAUyiL,GAAQwB,mBAAqB9sK,EACvCnX,EAAQ9U,KAAK24L,oBAAoB/qH,EAAMr1C,EAAQzjB,IAOnDyvM,EAAgB/oN,UAAU+8L,aAAe,SAAU1sK,GAC/C,IAAIsrF,GAAQ,EACR+yG,EAASr+L,EACb,GAAc,MAAVq+L,EAAgB,CAChB,IAAIC,EAAmBnqN,KAAKosB,aAAe89L,EAAO99L,WAC9Cg+L,IAAiBh8B,GAAa2J,UAAY3J,GAAa0J,WACvDuyB,GAAcrqN,KAAKwE,MAAQ4lN,KAAkBF,EAAO1lN,MAAQ4lN,GAChEjzG,EAASgzG,GAAmBE,EAEhC,OAAOlzG,GAMXotG,EAAgB/oN,UAAUuuN,oBAAsB,WAGhCxvB,GAAY5kD,MAAMvlC,OAAOpwG,MAErC,IAAI04L,EAAY,KAGZhB,EAAUiuB,GAA8BC,WAAW5lN,KAAK6pN,cAAe7pN,KAAKwE,MAAOxE,KAAKisB,MAC5FjsB,KAAK03L,QAAUA,EACfgB,EAAY14L,KAAKsqN,kBACjBtqN,KAAKy4L,aAAaC,IAMtB6rB,EAAgB/oN,UAAU8uN,gBAAkB,WACxC,IAAI5kC,EAAa,IAAID,GAIrB,GAHAC,EAAWxlJ,MAAM3iC,SAASyC,KAAKimL,qBAAqBz/K,KAAM,IAAIy4K,GAAQj/K,KAAKimL,qBAAqBp6J,OAChG65J,EAAWxlJ,MAAM3iC,SAASyC,KAAKimL,qBAAqB/B,QAAS,IAAIjF,GAAQj/K,KAAKimL,qBAAqBjC,QACnG0B,EAAWxlJ,MAAM3iC,SAASyC,KAAKimL,qBAAqBhC,SAAU,IAAIhF,GAAQj/K,KAAK03L,QAAQ+uB,iBACnFzmN,KAAKosB,aAAeslK,GAAcw0B,QAAUlmN,KAAKosB,aAAeslK,GAAc00B,aAAc,CAC5F,IAAIr2C,EAAW/vK,KAAK4pN,UAAU93B,GAAay4B,iBAC3C7kC,EAAWxlJ,MAAM3iC,SAASyC,KAAKimL,qBAAqBlW,SAAU,IAAIkP,GAAQlP,IAE9E,OAAO2V,GAMX6+B,EAAgB/oN,UAAUyuN,qBAAuB,SAAU18C,EAAUh1I,GACjE,IACIzR,EAAO,EACXA,EAAOymJ,EAAS1rG,WAAW,GACT,MAAd7hE,KAAK0zB,MAA8B,MAAd1zB,KAAK0zB,MAA8B,MAAd1zB,KAAK0zB,MACjC,MAAd1zB,KAAK0zB,MAA8B,MAAd1zB,KAAK0zB,OAC1B5M,GAAcy9L,EAAgBiG,YAElC1jM,EAAQA,GAAQ,GAAc,MAATA,EAAgBA,EAAO,EAI5C,OAHc9mB,KAAK03L,QACM4tB,WACNplL,MAAMpZ,IAO7By9L,EAAgByF,QAAU,SAAUp+L,GAChC,OAAOA,GAOX24L,EAAgBiG,WAAa,GACtBjG,GACThtB,IClLEkzB,cACA,SAASA,EAAc/5B,GAMnB1wL,KAAKimL,qBAAuB,IAAIxC,GAKhCzjL,KAAKkxL,SAAW,IAAI7C,GAAS,IAAK,IAAK,KAKvCruL,KAAK6tE,UAAY,IAAI4iH,GAAW,EAAG,EAAG,EAAG,GAKzCzwL,KAAK+zM,QAAU,KAMf/zM,KAAK0qN,UAAY,IAAIz5B,GAAc,IAAI5C,GAAS,EAAG,EAAG,IAMtDruL,KAAK2qN,SAAW,IAAIpG,GAAgB7yB,GAAcs0B,WAAY,IAM9DhmN,KAAKu4B,OAAS,IAAIy5J,GAAgBtE,GAAiB2jB,MAKnDrxM,KAAKy2B,QAAU,GAKfz2B,KAAKstL,cAAgB,IAAI7H,GAKzBzlL,KAAK4qN,cAAgB,IAAIv8B,GAMzBruL,KAAK6qN,SAAW,OACI,IAATn6B,EACP1wL,KAAKsjE,cAGLtjE,KAAKsjE,aACLtjE,KAAK2yB,OAAS+9J,GAsLtB,OAnLAjyL,OAAOkJ,eAAe8iN,EAAcjvN,UAAW,SAM3CgM,IAAK,WACD,OAAOxH,KAAKkxL,UAEhB/pL,IAAK,SAAUhK,GACX6C,KAAKkxL,SAAW/zL,GAEpBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8iN,EAAcjvN,UAAW,cAK3CgM,IAAK,WACD,OAAOxH,KAAK4qN,eAEhBzjN,IAAK,SAAUhK,GACX6C,KAAK4qN,cAAgBztN,GAEzBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8iN,EAAcjvN,UAAW,UAK3CgM,IAAK,WACD,OAAOxH,KAAK6tE,WAEhB1mE,IAAK,SAAUhK,GACX6C,KAAK6tE,UAAY1wE,GAErBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8iN,EAAcjvN,UAAW,QAK3CgM,IAAK,WACD,OAAOxH,KAAK+zM,SAEhBtsM,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8iN,EAAcjvN,UAAW,QAK3CgM,IAAK,WACD,OAAOxH,KAAK2qN,UAEhBxjN,IAAK,SAAUhK,GACX6C,KAAK2qN,SAAWxtN,GAEpBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8iN,EAAcjvN,UAAW,gBAK3CgM,IAAK,WACD,OAAOxH,KAAKu4B,QAEhBpxB,IAAK,SAAUhK,GACX6C,KAAKu4B,OAASp7B,GAElBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8iN,EAAcjvN,UAAW,SAK3CgM,IAAK,WACD,OAAOxH,KAAK0qN,WAEhBvjN,IAAK,SAAUhK,GACX6C,KAAK0qN,UAAYvtN,GAErBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8iN,EAAcjvN,UAAW,QAK3CgM,IAAK,WACD,OAAOxH,KAAKy2B,SAEhBtvB,IAAK,SAAUhK,GACX6C,KAAKy2B,QAAUt5B,EACf6C,KAAK0lL,WAAWxlJ,MAAM3iC,SAASyC,KAAKimL,qBAAqB9B,SAAU,IAAI8G,GAAUjrL,KAAKy2B,WAE1FhvB,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8iN,EAAcjvN,UAAW,cAK3CgM,IAAK,WACD,OAAOxH,KAAKstL,eAEhBnmL,IAAK,SAAUhK,GACX6C,KAAKstL,cAAgBnwL,GAEzBsK,YAAY,EACZC,cAAc,IAOlB+iN,EAAcjvN,UAAU8nE,WAAa,WACjCtjE,KAAKstL,cAAcnG,oBAAsB,IAAIO,GAA2B1nL,MACxEA,KAAKstL,cAAcptJ,MAAM3iC,SAASyC,KAAKimL,qBAAqBz/K,KAAM,IAAIy4K,GAAQj/K,KAAKimL,qBAAqBnB,SAM5G2lC,EAAcjvN,UAAUyhN,QAAU,SAAUhsG,GACxCjxG,KAAK+zM,QAAU9iG,EACfjxG,KAAKstL,cAAcptJ,MAAM3iC,SAASyC,KAAKimL,qBAAqBtoI,EAAG,IAAI8sI,GAAmBzqL,KAAK+zM,WAM/F0W,EAAcjvN,UAAUsrL,UAAY,WAChC9mL,KAAK+gD,QAOT0pK,EAAcjvN,UAAUulD,KAAO,WAC3B,IAAI+pK,EAAkB,IAAIr6B,GAAWzwL,KAAK6tE,UAAUthE,EAAGvM,KAAK6tE,UAAUrhE,EAAGxM,KAAK6tE,UAAU/4D,MAAO9U,KAAK6tE,UAAUh5D,QAC1Go6L,EAAUjvM,KAAK+zM,QAAQ9E,QACvB8b,EAAgBD,EAAgBj2M,OAChCm2M,EAAgB/b,EAAQ6R,iBAAiB9gN,KAAKixG,KAAM,IAAIs/E,GAAOu6B,EAAgBv+M,EAAGu+M,EAAgBt+M,IACtGs+M,EAAgBv+M,EAAIy+M,EAAcz+M,EAClCu+M,EAAgBh2M,MAAQk2M,EAAcz+M,EAAIu+M,EAAgBh2M,MAC1Dg2M,EAAgBt+M,EAAKw+M,EAAcx+M,EAAIxM,KAAKixG,KAAKzwG,SAASo0M,aAAatT,QAAQp1L,IAC/E4+M,EAAgBj2M,OAASi2M,EAAgBt+M,EAAIu+M,EAC7C/qN,KAAKstL,cAAcptJ,MAAM3iC,SAASyC,KAAKimL,qBAAqB12J,KAAM84J,GAASiB,cAAcwhC,IACzF9qN,KAAK0lL,WAAWxlJ,MAAM3iC,SAASyC,KAAKimL,qBAAqBhB,GAAI,IAAI4C,GAAU7nL,KAAK6qN,YAEpFpsN,OAAOkJ,eAAe8iN,EAAcjvN,UAAW,WAO3CgM,IAAK,WACD,OAAOxH,KAAKstL,eAEhB7lL,YAAY,EACZC,cAAc,IAEX+iN,KC3QPltK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAgBxCqtK,GAA6C,YAE7C,SAASA,EAAkBp9I,GAQvB,YANyB,IAAdA,EACCzvB,EAAO98C,KAAKtB,OAASA,KAGrBo+C,EAAO98C,KAAKtB,KAAM6tE,IAAc7tE,KAahD,OApBAu9C,GAAU0tK,EAAmB7sK,GAgB7B6sK,EAAkBzvN,UAAU8nE,WAAa,WACrCllB,EAAO5iD,UAAU8nE,WAAWhiE,KAAKtB,MACjCA,KAAK0lL,WAAWxlJ,MAAM3iC,SAASyC,KAAKimL,qBAAqB/B,QAAS,IAAIjF,GAAQj/K,KAAKimL,qBAAqBpB,QAErGomC,GACTR,ICtCEltK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAexCstK,GAAmD,YAOnD,SAASA,EAAwBr9I,GAC7B,IAAI9tE,EAAQq+C,EAAO98C,KAAKtB,KAAM6tE,IAAc7tE,KAQ5C,OADAD,EAAMorN,UAAY,KACXprN,EAeX,OA9BAw9C,GAAU2tK,EAAyB9sK,GAsBnC8sK,EAAwB1vN,UAAU4vN,aAAe,SAAUjuN,GACvD,QAAqB,IAAVA,EACP,OAAO6C,KAAKmrN,UAGZnrN,KAAKmrN,UAAYhuN,GAGlB+tN,GACTD,IC/CE1tK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAuCxCytK,GAAqD,YAErD,SAASA,EAA0Bx9I,EAAWzvE,GAC1C,IAAI2B,EAAQq+C,EAAO98C,KAAKtB,KAAM6tE,IAAc7tE,KAW5C,OAJAD,EAAMurN,eAAiB,UACI,IAAhBltN,IACP2B,EAAM3B,YAAcA,GAEjB2B,EAmEX,OAhFAw9C,GAAU8tK,EAA2BjtK,GAerC3/C,OAAOkJ,eAAe0jN,EAA0B7vN,UAAW,eA+BvDgM,IAAK,WACD,OAAOxH,KAAKsrN,gBAEhBnkN,IAAK,SAAUhK,GAEX6C,KAAKsrN,eAAiBnuN,GAG1BsK,YAAY,EACZC,cAAc,IAOlB2jN,EAA0B7vN,UAAUulD,KAAO,WACvC3C,EAAO5iD,UAAUulD,KAAKz/C,KAAKtB,MACA,MAAvBA,KAAKsrN,gBACLtrN,KAAK0lL,WAAWxlJ,MAAM3iC,SAASyC,KAAKimL,qBAAqBb,KAAMplL,KAAKsrN,eAAetqN,UAO3FqqN,EAA0B7vN,UAAU6D,MAAQ,WACxC,IAAIylL,EAAQ,IAAIumC,EAA0BrrN,KAAK2yB,OAAQ3yB,KAAK5B,aAK5D,OAJA0mL,EAAMryJ,MAAQzyB,KAAKyyB,MACnBqyJ,EAAMsM,MAAQpxL,KAAKoxL,MACnBtM,EAAM1mL,YAAc4B,KAAK5B,YACzB0mL,EAAMj5J,KAAO7rB,KAAK6rB,KACXi5J,GAEJumC,GACTJ,KvBpHF,SAAW1T,GAKPA,EAAcA,EAAwB,SAAI,GAAK,WAK/CA,EAAcA,EAAuB,QAAI,GAAK,UAVlD,CAWGA,KAAkBA,QAKrB,IAAWgU,IACX,SAAWA,GAKPA,EAAmBA,EAA4B,QAAI,GAAK,UAKxDA,EAAmBA,EAA+B,WAAI,GAAK,aAK3DA,EAAmBA,EAAqC,iBAAI,GAAK,mBAfrE,CAgBGA,KAAuBA,QwB7B1B,ICLWC,GDKPC,cAMA,SAASA,EAAgBzqN,GACrBhB,KAAK0rN,cAAgB1qN,EAsCzB,OApCAvC,OAAOkJ,eAAe8jN,EAAgBjwN,UAAW,YAM7CgM,IAAK,WACD,OAAOxH,KAAK0rN,eAEhBjkN,YAAY,EACZC,cAAc,IAMlB+jN,EAAgBjwN,UAAUgyB,WAAa,WACnC,OAAOxtB,KAAK0rN,eAEhBD,EAAgBjwN,UAAU24L,OAAS,SAAUl7G,EAAO0yI,GAChD,MAA+B,kBAApBA,IAAqD,IAApBA,EACjC3rN,KAAK4rN,eAAe3yI,GAAO,GAG3Bj5E,KAAK4rN,eAAe3yI,IAOnCwyI,EAAgBjwN,UAAUwzM,YAAc,SAAU3F,GAG9C,OAFcA,EAAY4F,QACH/qM,OAGpBunN,KAGPI,cACA,SAASA,EAAgBC,QACK,IAAfA,IAIP9rN,KAAK+rN,MAAQD,EAAWC,MACxB/rN,KAAKm0L,OAAS23B,EAAW33B,OACzBn0L,KAAKgsN,eAAiBF,EAAWE,eACjChsN,KAAKisN,UAAYH,EAAWI,mBAsEpC,OAnEAztN,OAAOkJ,eAAekkN,EAAgBrwN,UAAW,UAM7CgM,IAAK,WAID,YAH+B,IAApBxH,KAAKmsN,YAAiD,MAAnBnsN,KAAKmsN,aAC/CnsN,KAAKmsN,WAAa5U,GAAc6U,UAE7BpsN,KAAKmsN,YAEhBhlN,IAAK,SAAUhK,GACX6C,KAAKmsN,WAAahvN,GAEtBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAekkN,EAAgBrwN,UAAW,SAK7CgM,IAAK,WAID,YAH8B,IAAnBxH,KAAK42L,WAA+C,MAAlB52L,KAAKisN,YAC9CjsN,KAAK42L,UAAY20B,GAAmBc,SAEjCrsN,KAAK42L,WAEhBzvL,IAAK,SAAUhK,GACX6C,KAAK42L,UAAYz5L,GAErBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAekkN,EAAgBrwN,UAAW,kBAK7CgM,IAAK,WAID,YAHyC,IAA9BxH,KAAKssN,sBAAqE,MAA7BtsN,KAAKssN,uBACzDtsN,KAAKssN,qBAAuB,IAAI77B,GAAW,EAAG,EAAG,EAAG,IAEjDzwL,KAAKssN,sBAEhBnlN,IAAK,SAAUhK,GACX6C,KAAKssN,qBAAuBnvN,EAC5B6C,KAAKisN,WAAY,GAErBxkN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAekkN,EAAgBrwN,UAAW,qBAK7CgM,IAAK,WAID,YAH8B,IAAnBxH,KAAKisN,WAA+C,MAAlBjsN,KAAKisN,YAC9CjsN,KAAKisN,WAAY,GAEdjsN,KAAKisN,WAEhBxkN,YAAY,EACZC,cAAc,IAEXmkN,KAGPU,cACA,SAASA,KA6CT,OA3CA9tN,OAAOkJ,eAAe4kN,EAAgB/wN,UAAW,QAM7CgM,IAAK,WACD,OAAOxH,KAAK+zM,SAEhB5sM,IAAK,SAAUhK,GACX6C,KAAK+zM,QAAU52M,GAEnBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe4kN,EAAgB/wN,UAAW,UAK7CgM,IAAK,WACD,OAAO,IAAIipL,GAAWzwL,KAAKmxM,aAAa5kM,EAAGvM,KAAKmxM,aAAa3kM,EAAGxM,KAAKmxM,aAAar8L,MAAO9U,KAAKmxM,aAAat8L,SAE/G1N,IAAK,SAAUhK,GACX6C,KAAKmxM,aAAeh0M,GAExBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe4kN,EAAgB/wN,UAAW,UAK7CgM,IAAK,WACD,OAAOxH,KAAKwsN,cAEhBrlN,IAAK,SAAUhK,GACX6C,KAAKwsN,aAAervN,GAExBsK,YAAY,EACZC,cAAc,IAEX6kN,KAGPE,cAMA,SAASA,EAAgBx7G,EAAMt+E,GAC3B3yB,KAAK+zM,QAAU9iG,EACfjxG,KAAKmxM,aAAex+K,EAyBxB,OAvBAl0B,OAAOkJ,eAAe8kN,EAAgBjxN,UAAW,QAM7CgM,IAAK,WACD,OAAOxH,KAAK+zM,SAEhBtsM,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8kN,EAAgBjxN,UAAW,UAK7CgM,IAAK,WACD,OAAOxH,KAAKmxM,cAEhB1pM,YAAY,EACZC,cAAc,IAEX+kN,KEvNPC,cACA,SAASA,KAmCT,OAjCAA,EAAiBlxN,UAAUqsM,WAAa,SAAUlX,EAAMC,EAAMC,EAAMuD,GAChE,GAAIxD,aAAgBL,SAAgC,IAAfK,EAAK97K,YAAyC,IAAT87K,EACtE,OAAO5wL,KAAK6nM,WAAWlX,EAAMC,EAAKrkL,EAAGqkL,EAAKpkL,GAEzC,GAAoB,iBAATokL,GAAqC,iBAATC,QAAqC,IAATuD,EACpE,OAAOp0L,KAAK6nM,WAAWlX,EAAMC,EAAMC,EAAM,MAExC,GAAID,aAAgBH,SAAoC,IAAfG,EAAK97K,YAAyC,IAAT+7K,EAC/E,OAAO7wL,KAAK6nM,WAAWlX,EAAMC,EAAM,MAElC,GAAIA,aAAgBL,SAAgC,IAAfK,EAAK97K,OAAyB+7K,aAAgBg7B,GACpF,OAAO7rN,KAAK6nM,WAAWlX,EAAMC,EAAKrkL,EAAGqkL,EAAKpkL,EAAGqkL,GAE5C,GAAoB,iBAATD,GAAqC,iBAATC,IAAsBuD,aAAgBy3B,IAA2B,MAARz3B,GAAe,CAChH,IAAIt/K,EAAS67K,EAAKmX,SAASvT,WAAWz/K,MAAQ87K,EAC1C2c,EAAkB,IAAI9c,GAAWG,EAAMC,EAAM/7K,EAAO,GACxD,OAAO9U,KAAK6nM,WAAWlX,EAAM4c,EAAiBnZ,GAE7C,GAAIxD,aAAgBH,SAAoC,IAAfG,EAAK97K,OAAyC,kBAAT+7K,EAE/E,OADA7wL,KAAK2sN,YAAc97B,EACZ7wL,KAAK6nM,WAAWlX,EAAMC,EAAM,MAGnC,IAAI33G,EAAQ,IAAIszI,GACZl0B,EAAWzH,EACXwb,EAAWvb,EACf53G,EAAMg4B,KAAO0/E,EACb13G,EAAMtmD,OAAS0lK,EACfp/G,EAAM1gD,OAAsB,MAAZ6zK,EAAoBA,EAAW,IAAIyf,GAEnD,OADa7rN,KAAKm0L,OAAOl7G,IAI1ByzI,KC1CPnvK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAuBxCgvK,GAAwC,YAOxC,SAASA,EAAa5rN,GAClB,OAAOo9C,EAAO98C,KAAKtB,KAAMgB,IAAYhB,KAuGzC,OA9GAu9C,GAAUqvK,EAAcxuK,GASxB3/C,OAAOkJ,eAAeilN,EAAapxN,UAAW,WAK1CgM,IAAK,WACD,OAAO42C,EAAO5iD,UAAUgyB,WAAWlsB,KAAKtB,OAE5CyH,YAAY,EACZC,cAAc,IAOlBklN,EAAapxN,UAAUowN,eAAiB,SAAU3yI,GAE9Cj5E,KAAKu4B,OAAuC,MAA7Bv4B,KAAKgB,QAAQ8nM,mBAA6D,IAA9B9oM,KAAKgB,QAAQ8nM,aAAgC9oM,KAAKgB,QAAQ8nM,aAAe,KACpI,IAAIO,EAAcpwH,EAAMg4B,KACpB47G,EAAgB5zI,EAAMtmD,OACtB/G,EAAO5rB,KAAKgB,QAAQ7D,MACpB4B,EAAS,KACT+tN,EAAa,IAAIC,GAGrB,IAFAD,EAAW77G,KAAOo4F,EAClByjB,EAAWE,UAAYphM,IACd,CACLkhM,EAAa9sN,KAAKitN,aAAarhM,EAAMy9K,EAAawjB,EAAe5zI,GACjEl6E,EAASiB,KAAKktN,gBAAgBJ,GAC9B,MAGJ,OAAO/tN,GAMX6tN,EAAapxN,UAAU0xN,gBAAkB,SAAUJ,GAE/C,OADa,IAAIK,GAAoBL,EAAW77G,KAAM67G,EAAWn6L,OAAQm6L,EAAWE,UAAWF,EAAWM,iBAQ9GR,EAAapxN,UAAUyxN,aAAe,SAAUrhM,EAAMy9K,EAAawjB,EAAe5zI,GAC9E,IAAIl6E,EAAS,IAAIguN,GACjBhuN,EAAOiuN,UAAYphM,EACnB7sB,EAAOkyG,KAAOo4F,EACdwjB,EAAgB7sN,KAAKqtN,mBAAmBhkB,EAAawjB,GACrD,IACIS,GADW,IAAIr5B,IACSE,OAAOvoK,EAAM5rB,KAAKgB,QAAQ6qB,KAAM7rB,KAAKu4B,OAAQs0L,EAAexjB,EAAYwU,gBAAgBhpM,QAAQ,EAAO,IAAI27K,GAAM,EAAG,IAC5I+8B,EAA0C,MAA1BD,EAAaN,UAI7BllB,GAHa7uH,EAAM1gD,OAAOwzL,QAAUR,GAAmBiC,YAC9BF,EAAaj2B,MAE3BgS,EAAYvB,UACvB1W,EAAQpxL,KAAKgB,QAAQkoM,WACrBlpM,KAAKgB,mBAAmBysN,KACxBr8B,EAAM3+J,MAAQ,IAAI47J,GAAS,EAAG,EAAG,MAErCyZ,EAAS6E,uBAAuB2gB,EAActtN,KAAKgB,QAAQ6qB,KAAM7rB,KAAKgB,QAAQ+kM,IAAK3U,EAAOy7B,EAAe7sN,KAAKu4B,QAC/F+0L,EAAax4B,MAAMw4B,EAAa9f,UAAY,GAK3D,OAJAzuM,EAAOquN,eAAiBtlB,EAASuF,cAAcigB,EAAa9f,UAAY,EAAG8f,EAActtN,KAAKgB,QAAQ6qB,KAAMghM,EAAe7sN,KAAKu4B,QAChIx5B,EAAO4zB,OAAS3yB,KAAK0tN,kBAAkBrkB,EAAawjB,EAAeS,GACnEvuN,EAAOiuN,UAAYM,EAAaN,UAChCjuN,EAAO6e,MACA7e,GAOX6tN,EAAapxN,UAAU6xN,mBAAqB,SAAUhkB,EAAawjB,GAC/D,IAAI17G,EAAWk4F,EAAYvB,SAASvT,WAEpC,OADAs4B,EAAch4M,OAAUg4M,EAAch4M,OAAS,EAAKg4M,EAAch4M,OAASs8F,EAASt8F,OAASg4M,EAAcrgN,EACpGqgN,GAOXD,EAAapxN,UAAUkyN,kBAAoB,SAAUrkB,EAAawjB,EAAeS,GAC7E,IAAIv0L,EAAWu0L,EAAax2B,WACxBvqL,EAAIsgN,EAActgN,EAClBC,EAAIqgN,EAAcrgN,EAClBsI,EAAS+3M,EAAc/3M,MAAQ,EAAK+3M,EAAc/3M,MAAQikB,EAASjkB,MACnED,EAASkkB,EAASlkB,OAGtBtI,EAFkB88L,EAAYvB,SAAS4E,4BAA4B3zK,EAAU8zL,EAActgN,EAAGsgN,EAAcrgN,EAAGxM,KAAKu4B,QAEpGhsB,EAEhB,IAAIohN,EAAgBtkB,EAAYvB,SAAS2F,0BAA0B10K,EAASlkB,OAAQg4M,EAAch4M,OAAQ7U,KAAKu4B,QAG/G,OADa,IAAIk4J,GAAWlkL,EAD5BC,GAAKmhN,EAC6B74M,EAAOD,IAGtC+3M,GACTnB,IAEEsB,cAGA,OAFA,gBAKAI,GAA+C,YAO/C,SAASA,EAAoBl8G,EAAMt+E,EAAQq6L,EAAWI,GAClD,IAAIrtN,EAAQq+C,EAAO98C,KAAKtB,KAAMixG,EAAMt+E,IAAW3yB,KAG/C,OAFAD,EAAM6tN,cAAgBZ,EACtBjtN,EAAM8tN,mBAAqBT,EACpBrtN,EAyBX,OAnCAw9C,GAAU4vK,EAAqB/uK,GAY/B3/C,OAAOkJ,eAAewlN,EAAoB3xN,UAAW,aAMjDgM,IAAK,WACD,OAAOxH,KAAK4tN,eAEhBnmN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewlN,EAAoB3xN,UAAW,kBAKjDgM,IAAK,WACD,OAAOxH,KAAK6tN,oBAEhBpmN,YAAY,EACZC,cAAc,IAEXylN,GACTV,ICpLElvK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GA+BxCkwK,GAA0C,YAE1C,SAASA,EAAep9B,EAAMC,EAAMC,EAAMC,EAAMuD,GAC5C,IAAIr0L,EAAQq+C,EAAO98C,KAAKtB,OAASA,KA6DjC,OAvDAD,EAAM02B,QAAU,GAKhB12B,EAAM6mB,aAAe,GAMrB7mB,EAAMguN,kBAAmB,EAMzBhuN,EAAMiuN,kBAAmB,OACL,IAATt9B,IAGc,iBAATA,QAAqC,IAATC,IACxC5wL,EAAQq+C,EAAO98C,KAAKtB,OAASA,MACvBy2B,QAAUi6J,EAChB3wL,EAAM6mB,aAAe8pK,GAEA,iBAATA,GAAqBC,aAAgB4G,SAA2B,IAAT3G,IACnE7wL,EAAQq+C,EAAO98C,KAAKtB,OAASA,MACvBy2B,QAAUi6J,EAChB3wL,EAAM6mB,aAAe8pK,EACrB3wL,EAAMwzM,QAAU5iB,GAEK,iBAATD,GAAqBC,aAAgB4G,IAAW3G,aAAgB8T,SAA0B,IAAT7T,IAC7F9wL,EAAQq+C,EAAO98C,KAAKtB,OAASA,MACvBy2B,QAAUi6J,EAChB3wL,EAAM6mB,aAAe8pK,EACrB3wL,EAAMwzM,QAAU5iB,EAChB5wL,EAAMuzM,OAAS1iB,GAEM,iBAATF,GAAqBC,aAAgB4G,IAAW3G,aAAgBI,SAA4B,IAATH,IAC/F9wL,EAAQq+C,EAAO98C,KAAKtB,OAASA,MACvBy2B,QAAUi6J,EAChB3wL,EAAM6mB,aAAe8pK,EACrB3wL,EAAMwzM,QAAU5iB,EAChB5wL,EAAM2lM,SAAW9U,KAGjB7wL,EAAQq+C,EAAO98C,KAAKtB,OAASA,MACvBy2B,QAAUi6J,EAChB3wL,EAAM6mB,aAAe8pK,EACrB3wL,EAAMwzM,QAAU5iB,EAChB5wL,EAAMuzM,OAAS1iB,EACf7wL,EAAM2lM,SAAW7U,EACjB9wL,EAAMw4B,OAAS67J,IAEZr0L,EAiUX,OAhYAw9C,GAAUuwK,EAAgB1vK,GAiE1B3/C,OAAOkJ,eAAemmN,EAAetyN,UAAW,QA6B5CgM,IAAK,WACD,OAAOxH,KAAKy2B,SAEhBtvB,IAAK,SAAUhK,GACX6C,KAAK4mB,aAAezpB,EACpB6C,KAAKy2B,QAAUt5B,GAEnBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAemmN,EAAetyN,UAAW,SAM5CgM,IAAK,WACD,OAAOxH,KAAK4mB,cAEhBnf,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAemmN,EAAetyN,UAAW,OAM5CgM,IAAK,WACD,OAAOxH,KAAKszM,QAGhBnsM,IAAK,SAAUhK,GACX6C,KAAKszM,OAASn2M,GAElBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAemmN,EAAetyN,UAAW,SAM5CgM,IAAK,WACD,OAAOxH,KAAK0lM,UAGhBv+L,IAAK,SAAUhK,GACX6C,KAAK0lM,SAAWvoM,GAEpBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAemmN,EAAetyN,UAAW,QA6B5CgM,IAAK,WACD,OAAOxH,KAAKuzM,SAEhBpsM,IAAK,SAAUhK,GACX6C,KAAKuzM,QAAUp2M,EACX6C,KAAKuzM,mBAAmBgR,IAAmC,MAAhBvkN,KAAKy2B,QAChDz2B,KAAK4mB,aAAe29L,GAAgByF,QAAQhqN,KAAKy2B,SAGjDz2B,KAAK4mB,aAAe5mB,KAAKy2B,SAGjChvB,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAemmN,EAAetyN,UAAW,gBAK5CgM,IAAK,WACD,OAAOxH,KAAKu4B,QAEhBpxB,IAAK,SAAUhK,GACX6C,KAAKu4B,OAASp7B,GAElBsK,YAAY,EACZC,cAAc,IAOlBomN,EAAetyN,UAAU0tM,SAAW,WAChC,OAAyB,MAAjBlpM,KAAK0lM,eAA6C,IAAlB1lM,KAAK0lM,SAA4B,IAAIzU,GAAc,IAAI5C,GAAS,EAAG,EAAG,IAAMruL,KAAK0lM,UAa7HooB,EAAetyN,UAAU24L,OAAS,SAAUl7G,GAGxC,OAFe,IAAI2zI,GAAa5sN,MACVm0L,OAAOl7G,IAGjC60I,EAAetyN,UAAUonD,SAAW,SAAU+tI,EAAMC,EAAMC,EAAMuD,GAC5D,GAAIxD,aAAgBL,SAAgC,IAAfK,EAAK97K,YAAyC,IAAT+7K,EAEtE,OADA7wL,KAAK+tN,kBAAmB,EACjB/tN,KAAK4iD,SAAS+tI,EAAMC,EAAKrkL,EAAGqkL,EAAKpkL,GAEvC,GAAoB,iBAATokL,GAAqC,iBAATC,QAAqC,IAATuD,EAEpE,OADAp0L,KAAK+tN,kBAAmB,EACjB/tN,KAAK4iD,SAAS+tI,EAAMC,EAAMC,EAAM,MAEtC,GAAID,aAAgBH,SAAoC,IAAfG,EAAK97K,YAAyC,IAAT+7K,EAC/E,OAAO7wL,KAAK4iD,SAAS+tI,EAAMC,EAAM,MAEhC,GAAIA,aAAgBL,SAAgC,IAAfK,EAAK97K,OAAyB+7K,aAAgBg7B,GAEpF,OADA7rN,KAAK+tN,kBAAmB,EACjB/tN,KAAK4iD,SAAS+tI,EAAMC,EAAKrkL,EAAGqkL,EAAKpkL,EAAGqkL,GAE1C,GAAoB,iBAATD,GAAqC,iBAATC,IAAsBuD,aAAgBy3B,IAA2B,MAARz3B,GAAe,CAChHp0L,KAAK+tN,kBAAmB,EACxB,IAAIj5M,EAAS67K,EAAKmX,SAASvT,WAAWz/K,MAAQ87K,EAC1C2c,EAAkB,IAAI9c,GAAWG,EAAMC,EAAM/7K,EAAO,GACxD,OAAO9U,KAAK4iD,SAAS+tI,EAAM4c,EAAiBnZ,GAE3C,GAAIxD,aAAgBH,SAAoC,IAAfG,EAAK97K,OAAyC,kBAAT+7K,EAC/E,OAAO7wL,KAAK4iD,SAAS+tI,EAAMC,EAAM,MAGjC,IAAIuD,EAAS,IAAIF,GACjB,GAAIj0L,KAAK+tN,iBAAkB,CACvB,IAAIE,EAAqB95B,EAAOA,OAAOn0L,KAAK7C,MAAO6C,KAAK6rB,KAAM7rB,KAAK8oM,aAAc,IAAItY,GAAOG,EAAKmX,SAASvT,WAAWz/K,MAAQ87K,EAAKrkL,EAAI,IAAI,EAAMokL,EAAKmX,SAASvT,YAC1J2oB,OAAe,EAEf7kB,EAAWzH,EACXwb,EAAWvb,EAKf,IAPI53G,EAAQ,IAAIszI,IAGVt7G,KAAO0/E,EACb13G,EACMtmD,OAAS0lK,EACfp/G,EAAM1gD,OAAsB,MAAZ6zK,EAAoBA,EAAW,IAAIyf,GAC/CoC,EAAmBn5B,MAAMl4L,OAAS,EAAG,CAErC,GADAoD,KAAK4rB,KAAOqiM,EAAmBt3B,YAAY,GAAG/qK,KAC1CqtD,EAAMtmD,OAAOnmB,GAAKysE,EAAMg4B,KAAK62F,SAASvT,WAAW1/K,OAAQ,CACzD,IAAIq5M,EAAmB,IAAI39B,GAAOt3G,EAAMtmD,OAAOpmB,EAAG0sE,EAAMtmD,OAAOnmB,GAC/D0wM,EAAel9M,KAAKm0L,OAAOl7G,GAE3B,IACK,IAFDtmD,EAAS,IAAI89J,GAAW,EAAGysB,EAAavqL,OAAOnmB,EAAIyhN,EAAmB3hM,WAAYqkK,EAAKmX,SAASvT,WAAWz/K,MAAOm5M,EAAmB3hM,YAEhIhwB,EAAI,EAAGA,EAAI2xN,EAAmBn5B,MAAMl4L,OAAQN,IAgBjD,GAfA28E,EAAMg4B,KAAOisG,EAAajsG,KAC1Bh4B,EAAMtmD,OAAS,IAAI89J,GAAW,IAAIF,GAAO59J,EAAOpmB,EAAGomB,EAAOnmB,GAAI,IAAIgkL,GAAM79J,EAAO7d,MAAO6d,EAAO9d,SAC7F7U,KAAK4rB,KAAOqiM,EAAmBt3B,YAAYr6L,GAAGsvB,KAC1C+G,EAAOnmB,EAAIyhN,EAAmB3hM,WAAa4wL,EAAajsG,KAAK62F,SAASvT,WAAW1/K,SACjFokE,EACMg4B,KAAOh4B,EAAMg4B,KAAK62F,SAASkH,cAE7Br8K,EADAu7L,EAAiB1hN,EAAK0wM,EAAajsG,KAAK62F,SAASvT,WAAW1/K,OAASqoM,EAAavqL,OAAO9d,OAChF,IAAI47K,GAAW,EAAGysB,EAAavqL,OAAO9d,OAAQqoM,EAAajsG,KAAK62F,SAASvT,WAAWz/K,MAAOm5M,EAAmB3hM,YAG9G,IAAImkK,GAAW,EAAG,EAAGysB,EAAajsG,KAAK62F,SAASvT,WAAWz/K,MAAOm5M,EAAmB3hM,YAElG2sD,EAAMtmD,OAASA,GAEnBuqL,EAAel9M,KAAKm0L,OAAOl7G,GACvB38E,IAAO2xN,EAAmBn5B,MAAMl4L,OAAS,EACzC+1B,EAAS,IAAI89J,GAAW,EAAGysB,EAAavqL,OAAOnmB,EAAIyhN,EAAmB3hM,WAAY4wL,EAAajsG,KAAK62F,SAASvT,WAAWz/K,MAAOm5M,EAAmB3hM,gBAEjJ,CACD,IAAIm0B,EAAYzgD,KAAK6rB,KAAKqsK,cAAcl4L,KAAK4rB,KAAM5rB,KAAKu4B,QAAQzjB,MAChEooM,EAAel9M,KAAKmuN,sBAAsBjR,EAAcz8J,EAAWy8J,EAAajsG,KAAK62F,SAASvT,WAAWz/K,MAAO,IAI5H,OAAOooM,EAGP,IAAIkR,EAAWpuN,KAAK6rB,KAAKqsK,cAAcl4L,KAAK4rB,KAAM5rB,KAAKu4B,QAKvD,OAJI0gD,EAAMtmD,OAAOnmB,GAAKysE,EAAMg4B,KAAK62F,SAASvT,WAAW1/K,SACjDqoM,EAAel9M,KAAKm0L,OAAOl7G,GAC3BikI,EAAel9M,KAAKmuN,sBAAsBjR,EAAckR,EAASt5M,MAAOooM,EAAajsG,KAAK62F,SAASvT,WAAWz/K,MAAO,IAElHooM,EAIPA,EAAe/oB,EAAOA,OAAOn0L,KAAK7C,MAAO6C,KAAK6rB,KAAM7rB,KAAK8oM,aAAc,IAAItY,GAAMI,EAAK97K,MAAO,IAAI,EAAO67K,EAAKmX,SAASvT,YAA1H,IAEIt7G,EADAl6E,OAAS,EAETs5L,EAAWzH,EACXwb,EAAWvb,EAIf,IANI53G,EAAQ,IAAIszI,IAGVt7G,KAAO0/E,EACb13G,EAAMtmD,OAAS0lK,EACfp/G,EAAM1gD,OAAsB,MAAZ6zK,EAAoBA,EAAW,IAAIyf,GAC/C3O,EAAapoB,MAAMl4L,OAAS,EAAG,CAE/B,GADAoD,KAAK4rB,KAAOsxL,EAAavmB,YAAY,GAAG/qK,KACpCqtD,EAAMtmD,OAAOnmB,GAAKysE,EAAMg4B,KAAK62F,SAASvT,WAAW1/K,OAAQ,CACrDq5M,EAAmB,IAAI39B,GAAOt3G,EAAMtmD,OAAOpmB,EAAG0sE,EAAMtmD,OAAOnmB,GAC/DzN,EAASiB,KAAKm0L,OAAOl7G,GAErB,IADItmD,EAAS,IAAI89J,GAAW4H,EAAS9rL,EAAGxN,EAAO4zB,OAAOnmB,EAAI0wM,EAAa5wL,WAAY+rK,EAASvjL,MAAOooM,EAAa5wL,YAEvGhwB,EAAI,EAAGA,EAAI4gN,EAAapoB,MAAMl4L,OAAQN,IAgB3C,GAfA28E,EAAMg4B,KAAOlyG,EAAOkyG,KACpBh4B,EAAMtmD,OAAS,IAAI89J,GAAW99J,EAAOpmB,EAAGomB,EAAOnmB,EAAGmmB,EAAO7d,MAAO6d,EAAO9d,QACvE7U,KAAK4rB,KAAOsxL,EAAavmB,YAAYr6L,GAAGsvB,KACpC+G,EAAOnmB,EAAI0wM,EAAa5wL,WAAavtB,EAAOkyG,KAAK62F,SAASvT,WAAW1/K,SACrEokE,EACMg4B,KAAOh4B,EAAMg4B,KAAK62F,SAASkH,cAE7Br8K,EADAu7L,EAAiB1hN,EAAKzN,EAAOkyG,KAAK62F,SAASvT,WAAW1/K,OAAS9V,EAAO4zB,OAAO9d,OACpE,IAAI47K,GAAW4H,EAAS9rL,EAAG2wM,EAAa5wL,WAAY+rK,EAASvjL,MAAOooM,EAAa5wL,YAGjF,IAAImkK,GAAW4H,EAAS9rL,EAAG,EAAG8rL,EAASvjL,MAAOooM,EAAa5wL,YAExE2sD,EAAMtmD,OAASA,GAEnB5zB,EAASiB,KAAKm0L,OAAOl7G,GACjB38E,IAAO4gN,EAAapoB,MAAMl4L,OAAS,EACnC+1B,EAAS,IAAI89J,GAAW4H,EAAS9rL,EAAGxN,EAAO4zB,OAAOnmB,EAAI0wM,EAAa5wL,WAAY+rK,EAASvjL,MAAOooM,EAAa5wL,gBAE3G,CACGm0B,EAAYzgD,KAAK6rB,KAAKqsK,cAAcl4L,KAAK4rB,KAAM5rB,KAAKu4B,QAAQzjB,MAChE/V,EAASiB,KAAKmuN,sBAAsBpvN,EAAQ0hD,EAAW43I,EAASvjL,MAAOujL,EAAS9rL,IAI5F,OAAOxN,EAGHqvN,EAAWpuN,KAAK6rB,KAAKqsK,cAAcl4L,KAAK4rB,KAAM5rB,KAAKu4B,QAKvD,OAJI0gD,EAAMtmD,OAAOnmB,GAAKysE,EAAMg4B,KAAK62F,SAASvT,WAAW1/K,SACjD9V,EAASiB,KAAKm0L,OAAOl7G,GACrBl6E,EAASiB,KAAKmuN,sBAAsBpvN,EAAQqvN,EAASt5M,MAAOujL,EAASvjL,MAAOujL,EAAS9rL,IAElFxN,GAKvB+uN,EAAetyN,UAAU2yN,sBAAwB,SAAUpvN,EAAQ0hD,EAAW/jB,EAAc2xL,GAkBxF,OAhByB,MAArBruN,KAAK8oM,mBAAqD,IAAtB9oM,KAAK8oM,cAAgC9oM,KAAK8oM,aAAaj6J,YAAc6+I,GAAiBogB,QAC1H/uM,EAAO4zB,OAAOpmB,EAAI8hN,GAAiB3xL,EAAe+jB,GAAa,EAC/D1hD,EAAO4zB,OAAO7d,MAAQ2rC,GAEI,MAArBzgD,KAAK8oM,mBAAqD,IAAtB9oM,KAAK8oM,cAAgC9oM,KAAK8oM,aAAaj6J,YAAc6+I,GAAiBqgB,OAC/HhvM,EAAO4zB,OAAOpmB,EAAI8hN,GAAiB3xL,EAAe+jB,GAClD1hD,EAAO4zB,OAAO7d,MAAQ2rC,GAEI,MAArBzgD,KAAK8oM,mBAAqD,IAAtB9oM,KAAK8oM,cAAgC9oM,KAAK8oM,aAAaj6J,YAAc6+I,GAAiB2iB,SAC/HtxM,EAAO4zB,OAAOpmB,EAAI8hN,EAClBtvN,EAAO4zB,OAAO7d,MAAQ4nB,IAGtB39B,EAAO4zB,OAAO7d,MAAQu5M,EACtBtvN,EAAO4zB,OAAO7d,MAAQ2rC,GAEnB1hD,GAEJ+uN,GACTpB,ICjaEnvK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAiBxC0wK,GAA4C,YAE5C,SAASA,EAAiBzgJ,EAAWk3G,GACjC,IAAIhlL,EAAQq+C,EAAO98C,KAAKtB,KAAM6tE,IAAc7tE,KAI5C,YAHmB,IAAR+kL,IACPhlL,EAAMglL,IAAMA,GAEThlL,EA2DX,OAjEAw9C,GAAU+wK,EAAkBlwK,GAQ5B3/C,OAAOkJ,eAAe2mN,EAAiB9yN,UAAW,aAK9CgM,IAAK,WAID,YAHiC,IAAtBxH,KAAKuuN,eACZvuN,KAAKuuN,aAAe,IAAIhhC,IAErBvtL,KAAKuuN,cAEhB9mN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe2mN,EAAiB9yN,UAAW,OAM9CgM,IAAK,WACD,OAAOxH,KAAKwuN,UAAUzpC,KAE1B59K,IAAK,SAAUhK,GACP6C,KAAKwuN,UAAUzpC,MAAQ5nL,IACvB6C,KAAKwuN,UAAUzpC,IAAM5nL,IAG7BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe2mN,EAAiB9yN,UAAW,UAK9CgM,IAAK,WACD,OAAOxH,KAAKorN,gBAEhBjkN,IAAK,SAAUhK,GACX6C,KAAKorN,aAAajuN,GAClB6C,KAAKwuN,UAAUzoH,KAAO5oG,GAE1BsK,YAAY,EACZC,cAAc,IAOlB4mN,EAAiB9yN,UAAU8nE,WAAa,WACpCllB,EAAO5iD,UAAU8nE,WAAWhiE,KAAKtB,MACjCA,KAAK0lL,WAAWxlJ,MAAM3iC,SAASyC,KAAKimL,qBAAqB/B,QAAS,IAAIjF,GAAQj/K,KAAKimL,qBAAqBpB,OACpF7kL,KAAKwuN,UAAUxtN,QACnChB,KAAK0lL,WAAWxlJ,MAAM3iC,SAASyC,KAAKimL,qBAAqB/1I,EAAGlwC,KAAKwuN,UAAUxtN,UAExEstN,GACTpD,ICpFE3tK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GA8CxC6vK,GAA0C,YAO1C,SAASA,IACL,IAAI1tN,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAOjCD,EAAM0uN,uBAAyB,GAM/B1uN,EAAM2uN,cAAgB,KAOtB3uN,EAAM4uN,mBAAoB,EAC1B5uN,EAAM6uN,cAAgB,IAAIvmC,GAC1B,IAAK,IAAI/rL,EAAI,EAAGA,EAAI,EAAGA,IACnByD,EAAM6uN,cAAc1qN,IAAI,IAAI2jL,GAAU,IAE1C,OAAO9nL,EAwLX,OAxNAw9C,GAAUkwK,EAAgBrvK,GAkC1B3/C,OAAOkJ,eAAe8lN,EAAejyN,UAAW,OA6B5CgM,IAAK,WACD,OAAOxH,KAAKyuN,wBAEhBtnN,IAAK,SAAUhK,GACX,GAAqB,IAAjBA,EAAMP,OACN,MAAM,IAAIgE,MAAM,qDAEpBZ,KAAKyuN,uBAAyBtxN,GAElCsK,YAAY,EACZC,cAAc,IAElB+lN,EAAejyN,UAAUutM,KAAO,SAAUrY,EAAMC,GAC5C,GAAID,aAAgB4sB,GAAS,CACzB,IAAInpB,EAAS,IAAIF,GACb46B,EAAoB7uN,KAAK6rB,KAAKrnB,MAClC,GAAImsL,aAAgBJ,GAAQ,CACxBvwL,KAAK2uN,mBAAoB,EACzB3uN,KAAK6rB,KAAKrnB,MAAQ4pL,GAAa2J,UAE/B,GAAkC,KAD9BmlB,EAAe/oB,EAAOA,OAAOn0L,KAAK7C,MAAO6C,KAAK6rB,KAAM7rB,KAAK8oM,aAAc,IAAItY,GAAOE,EAAKoX,SAASvT,WAAWz/K,MAAQ67K,EAAKpkL,EAAI,IAAI,EAAMmkL,EAAKoX,SAASvT,aACvIO,MAAMl4L,OAAc,CACjC,IAAIm8B,EAAW/4B,KAAK6rB,KAAKqsK,cAAcl4L,KAAK7C,OACxCoyB,EAAO,IAAIkhK,GAAWE,EAAM53J,GAChCxJ,EAAOvvB,KAAK8uN,gBAAgBv/L,EAAMwJ,EAASjkB,MAAO47K,EAAKoX,SAASvT,WAAWz/K,MAAO67K,EAAKpkL,GACvFvM,KAAK0uN,cAAgB,IAAIJ,GAAiB/+L,EAAMvvB,KAAKi1B,KACrDj1B,KAAK0uN,cAAchpC,WAAWxlJ,MAAM3iC,SAAS,SAAUyC,KAAK4uN,eAC5Dl+B,EAAK+sB,YAAYv5M,IAAIlE,KAAK0uN,eAC1B,IAAI3vN,EAASiB,KAAK4iD,SAAS8tI,EAAMC,GAEjC,OADA3wL,KAAK6rB,KAAKrnB,MAAQqqN,EACX9vN,EAGHA,EAASiB,KAAK+uN,0BAA0B7R,EAAcxsB,EAAMC,GAEhE,OADA3wL,KAAK6rB,KAAKrnB,MAAQqqN,EACX9vN,EAIX,IAAIm+M,EAAe/oB,EAAOA,OAAOn0L,KAAK7C,MAAO6C,KAAK6rB,KAAM7rB,KAAK8oM,aAAc,IAAItY,GAAMG,EAAK77K,MAAO,IAAI,EAAO,IAAI07K,GAAM,EAAG,IAEzH,GADAxwL,KAAK6rB,KAAKrnB,MAAQ4pL,GAAa2J,UACG,IAA9BmlB,EAAapoB,MAAMl4L,OAAc,CAC7Bm8B,EAAW/4B,KAAK6rB,KAAKqsK,cAAcl4L,KAAK7C,OACxCoyB,EAAO,IAAIkhK,GAAW,IAAIF,GAAOI,EAAKpkL,EAAGokL,EAAKnkL,GAAIusB,GACtDxJ,EAAOvvB,KAAK8uN,gBAAgBv/L,EAAMwJ,EAASjkB,MAAO67K,EAAK77K,MAAO67K,EAAKpkL,GACnEvM,KAAK0uN,cAAgB,IAAIJ,GAAiB/+L,EAAMvvB,KAAKi1B,KACrDj1B,KAAK0uN,cAAchpC,WAAWxlJ,MAAM3iC,SAAS,SAAUyC,KAAK4uN,eAC5Dl+B,EAAK+sB,YAAYv5M,IAAIlE,KAAK0uN,eAC1B,IAAIn9E,EAAcvxI,KAAK4iD,SAAS8tI,EAAMC,GAEtC,OADA3wL,KAAK6rB,KAAKrnB,MAAQqqN,EACXt9E,EAGHA,EAAcvxI,KAAKgvN,2BAA2B9R,EAAcxsB,EAAMC,GAEtE,OADA3wL,KAAK6rB,KAAKrnB,MAAQqqN,EACXt9E,EAKf,IAAItgC,EAAO,IAAIqsG,GAEf,OADArsG,EAAOy/E,EAAKz/E,KACLjxG,KAAK+oM,KAAK93F,EAAM0/E,IAS/B88B,EAAejyN,UAAUuzN,0BAA4B,SAAUhwN,EAAQkyG,EAAMl8E,GAEzE,IAAK,IADDmoL,EACK5gN,EAAI,EAAGA,EAAIyC,EAAO43L,YAAY/5L,OAAQN,IAAK,CAChD,IAAI2vB,EAAOjsB,KAAK6rB,KAAKqsK,cAAcn5L,EAAO+1L,MAAMx4L,GAAGsvB,MAC/C+G,EAAS,IAAI89J,GAAW17J,EAAU9I,GAKtC,GAJU,IAAN3vB,IACAq2B,EAAOpmB,EAAI,GAEfvM,KAAK4rB,KAAO7sB,EAAO+1L,MAAMx4L,GAAGsvB,KACxB+G,EAAOnmB,EAAIyf,EAAKpX,OAASo8F,EAAK62F,SAASvT,WAAW1/K,OAAQ,CAC1D,GAAU,IAANvY,EAMA,MALA20G,EAAOA,EAAK62F,SAASkH,cACrBr8K,EAAS,IAAI89J,GAAW,EAAG,EAAGx/E,EAAK62F,SAASvT,WAAWz/K,MAAOmX,EAAKpX,QACnEkgB,EAASvoB,EAAI,EAMrBmmB,EAAS3yB,KAAK8uN,gBAAgBn8L,EAAQ1G,EAAKnX,MAAOm8F,EAAK62F,SAASvT,WAAWz/K,MAAO6d,EAAOpmB,GACzFvM,KAAK0uN,cAAgB,IAAIJ,GAAiB37L,EAAQ3yB,KAAKi1B,KACvDj1B,KAAK0uN,cAAchpC,WAAWxlJ,MAAM3iC,SAAS,SAAUyC,KAAK4uN,eAC5D39G,EAAKwsG,YAAYv5M,IAAIlE,KAAK0uN,eAEtBxR,EADM,IAAN5gN,EACe0D,KAAK4iD,SAASquD,EAAM,IAAIs/E,GAAO,EAAG59J,EAAOnmB,IAGzCxM,KAAK4iD,SAASquD,EAAMt+E,EAAOpmB,EAAGomB,EAAOnmB,GAExDuoB,EAASvoB,GAAKyf,EAAKpX,OAEvB,OAAOqoM,GAMXuQ,EAAejyN,UAAUwzN,2BAA6B,SAAUjwN,EAAQkyG,EAAMt+E,GAE1E,IAAK,IADDuqL,EACK5gN,EAAI,EAAGA,EAAIyC,EAAO43L,YAAY/5L,OAAQN,IAAK,CAChD,IAAI2vB,EAAOjsB,KAAK6rB,KAAKqsK,cAAcn5L,EAAO+1L,MAAMx4L,GAAGsvB,MAC/Cw8K,EAAiB,IAAI3X,GAAW,IAAIF,GAAO59J,EAAOpmB,EAAGomB,EAAOnmB,GAAIyf,GAGpE,GAFAm8K,EAAiBpoM,KAAK8uN,gBAAgB1mB,EAAgBn8K,EAAKnX,MAAO6d,EAAO7d,MAAO6d,EAAOpmB,GACvFvM,KAAK4rB,KAAO7sB,EAAO+1L,MAAMx4L,GAAGsvB,KACxB+G,EAAOnmB,EAAIyf,EAAKpX,OAASo8F,EAAK62F,SAASvT,WAAW1/K,OAAQ,CAC1D,GAAU,IAANvY,EAMA,MALA20G,EAAOA,EAAK62F,SAASkH,cACrBr8K,EAAS,IAAI89J,GAAW99J,EAAOpmB,EAAG,EAAGomB,EAAO7d,MAAOmX,EAAKpX,QACxDuzL,EAAe57L,EAAI,EAM3BxM,KAAK0uN,cAAgB,IAAIJ,GAAiBlmB,EAAgBpoM,KAAKi1B,KAC/Dj1B,KAAK0uN,cAAchpC,WAAWxlJ,MAAM3iC,SAAS,SAAUyC,KAAK4uN,eAC5D39G,EAAKwsG,YAAYv5M,IAAIlE,KAAK0uN,eAC1BxR,EAAel9M,KAAK4iD,SAASquD,EAAMt+E,GACnCA,EAAOnmB,GAAKyf,EAAKpX,OAErB,OAAOqoM,GAGXuQ,EAAejyN,UAAUszN,gBAAkB,SAAUjC,EAAepsK,EAAW/jB,EAAc2xL,GAkBzF,OAhByB,MAArBruN,KAAK8oM,mBAAqD,IAAtB9oM,KAAK8oM,cAAgC9oM,KAAK8oM,aAAaj6J,YAAc6+I,GAAiBogB,QAC1H+e,EAActgN,EAAI8hN,GAAiB3xL,EAAe+jB,GAAa,EAC/DosK,EAAc/3M,MAAQ2rC,GAEI,MAArBzgD,KAAK8oM,mBAAqD,IAAtB9oM,KAAK8oM,cAAgC9oM,KAAK8oM,aAAaj6J,YAAc6+I,GAAiBqgB,OAC/H8e,EAActgN,EAAI8hN,GAAiB3xL,EAAe+jB,GAClDosK,EAAc/3M,MAAQ2rC,GAEI,MAArBzgD,KAAK8oM,mBAAqD,IAAtB9oM,KAAK8oM,cAAgC9oM,KAAK8oM,aAAaj6J,YAAc6+I,GAAiB2iB,SAC/Hwc,EAActgN,EAAI8hN,EAClBxB,EAAc/3M,MAAQ4nB,IAGtBmwL,EAAc/3M,MAAQu5M,EACtBxB,EAAc/3M,MAAQ2rC,GAEnBosK,GAEJY,GACTK,IC/PEmB,cACA,SAASA,KA0HT,OAnHAA,EAAoBjF,QAAU,SAAUkF,EAAWC,GAC/C,IAAIpwN,EAAS,GACb,OAAQowN,GACJ,KAAK9uB,GAAe3jD,KAChB39I,EAAS,GACT,MACJ,KAAKshM,GAAe+uB,QAChBrwN,EAASmwN,EAAUxiN,WACnB,MACJ,KAAK2zL,GAAegvB,WAChBtwN,EAASiB,KAAKsvN,eAAeJ,GAAWz6M,cACxC,MACJ,KAAK4rL,GAAekvB,WAChBxwN,EAASiB,KAAKwvN,cAAcN,GAAWz6M,cACvC,MACJ,KAAK4rL,GAAeovB,WAChB1wN,EAASiB,KAAKsvN,eAAeJ,GAC7B,MACJ,KAAK7uB,GAAeqvB,WAChB3wN,EAASiB,KAAKwvN,cAAcN,GAGpC,OAAOnwN,GAMXkwN,EAAoBO,cAAgB,SAAUN,GAC1C,IAAIS,EAAS,GAcb,OAbAA,GAAU3vN,KAAK4vN,eAAeV,EAAW,IAAM,KAC/CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,IAAK,MAC9CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,IAAK,KAC9CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,IAAK,MAC9CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,IAAK,KAC9CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,GAAI,MAC7CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,GAAI,KAC7CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,GAAI,MAC7CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,GAAI,KAC7CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,EAAG,MAC5CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,EAAG,KAC5CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,EAAG,OAC5CS,GAAU3vN,KAAK4vN,eAAeV,EAAW,EAAG,MAC9BxiN,YAMlBuiN,EAAoBK,eAAiB,SAAUO,GAG3C,IAFA,IAAI/uN,EAAQd,KAAK8vN,gBAAgBD,GAC7B9wN,EAAS,GACN+B,EAAMlE,OAAS,GAAG,CACrB,IAAId,EAAMgF,EAAMyiJ,MAChBxkJ,EAASiB,KAAK+vN,WAAWhxN,EAAQjD,GAErC,OAAOiD,EAAO2N,YAMlBuiN,EAAoBW,eAAiB,SAAUzyN,EAAO6yN,EAAWzxB,GAE7D,IADA,IAAI0xB,EAAe,GACZ9yN,GAAS6yN,GACZ7yN,GAAS6yN,EACTC,GAAgB1xB,EAEpB,OAAO0xB,EAAavjN,YAMxBuiN,EAAoBa,gBAAkB,SAAUD,GAC5C,GAAIA,GAAU,EACV,MAAMjvN,MAAM,+DAGhB,IADA,IAAIE,KACG+uN,EAAS7vN,KAAKkwN,aAAa,CAC9B,IAAIlD,EAAY6C,EAAS7vN,KAAKkwN,YACZ,IAAdlD,GACA6C,EAASA,EAAS7vN,KAAKkwN,YAAc,EACrClD,EAAYhtN,KAAKkwN,aAGjBL,GAAU7vN,KAAKkwN,YAEnBpvN,EAAMwD,KAAK0oN,GAGf,OADAlsN,EAAMwD,KAAKurN,GACJ/uN,GAMXmuN,EAAoBc,WAAa,SAAU95B,EAAS94L,GAGhD,OADA84L,GADalvK,OAAOC,aAAaioM,EAAoBkB,gBAAkBhzN,IAU3E8xN,EAAoBiB,YAAc,GAMlCjB,EAAoBkB,mBACblB,KChIPmB,cACA,SAASA,EAAqB3hN,EAAUtR,GAOpC6C,KAAKqwN,YAAc,KAKnBrwN,KAAKy2B,QAAU,QACS,IAAbhoB,IAIPzO,KAAKyO,SAAWA,EAChBzO,KAAK7C,MAAQA,GAgCrB,OA7BAsB,OAAOkJ,eAAeyoN,EAAqB50N,UAAW,YAMlDgM,IAAK,WACD,OAAOxH,KAAKqwN,aAEhBlpN,IAAK,SAAUhK,GACX6C,KAAKqwN,YAAclzN,GAEvBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeyoN,EAAqB50N,UAAW,SAKlDgM,IAAK,WACD,OAAOxH,KAAKy2B,SAEhBtvB,IAAK,SAAUhK,GACX6C,KAAKy2B,QAAUt5B,GAEnBsK,YAAY,EACZC,cAAc,IAEX0oN,KCvDP7yK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAqBxC0yK,GAAiD,YAEjD,SAASA,IACL,IAAIvwN,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAOjC,OADAD,EAAMm3D,KAAO,IAAIiwI,GACVpnM,EAeX,OAxBAw9C,GAAU+yK,EAAuBlyK,GAajCkyK,EAAsB90N,UAAU6yM,YAAc,SAAUvG,EAAU/yK,EAAU4zK,EAAUC,GAClFxqJ,EAAO5iD,UAAUktM,kBAAkBpnM,KAAKtB,KAAM8nM,EAAU/yK,EAAU4zK,EAAUC,GAC5E,IAAIzrM,EAAQ6C,KAAKhD,SAAS8qM,GACtBr5L,EAAW,IAAIknM,GAAY31M,KAAKsf,WACpCtf,KAAKk3D,KAAK35D,SAASuqM,EAAU,IAAIsoB,GAAqB3hN,EAAUtR,IAChE,IACI8uB,EAAOjsB,KAAKsf,UAChB7Q,EAASq5L,SAASmE,WAAW9uM,EAAO6C,KAAK6oM,UAAW7oM,KAAK+lM,IAAK/lM,KAAKkpM,WAAY,EAAG,EAAGj9K,EAAKnX,MAAOmX,EAAKpX,OAAQ7U,KAAK8oM,cACnH,IAAIynB,EAAe,IAAIhgC,GAAOx7J,EAASxoB,EAAIvM,KAAK+0B,SAASxoB,EAAGwoB,EAASvoB,EAAIxM,KAAK+0B,SAASvoB,GACvFs7L,EAAS6D,gBAAgBl9L,EAAU8hN,EAAc,IAAI//B,GAAM/hL,EAASqG,MAAQ6zL,EAAUl6L,EAASoG,OAAS+zL,KAErG0nB,GACTnoB,IC/CE5qJ,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAkBxC4yK,GAA8C,YAE9C,SAASA,EAAmB3kM,EAAM8kK,GAC9B,IAAI5wL,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAkBjC,OAZAD,EAAM0wN,oBAAsBpwB,GAAe+uB,aACvB,IAATz+B,EACP5wL,EAAM8rB,KAAOA,EAER8kK,aAAgBK,IACrBjxL,EAAM8rB,KAAOA,EACb9rB,EAAMqxL,MAAQT,IAGd5wL,EAAM8rB,KAAOA,EACb9rB,EAAM4yB,OAASg+J,GAEZ5wL,EAoCX,OAxDAw9C,GAAUizK,EAAoBpyK,GAsB9B3/C,OAAOkJ,eAAe6oN,EAAmBh1N,UAAW,eAMhDgM,IAAK,WACD,OAAOxH,KAAKywN,qBAEhBtpN,IAAK,SAAUhK,GACX6C,KAAKywN,oBAAsBtzN,GAE/BsK,YAAY,EACZC,cAAc,IAMlB8oN,EAAmBh1N,UAAUwB,SAAW,SAAU8qM,GAC9C,IACI72F,EAAOjxG,KAAKopM,oBAAoBtB,GAEpC,OADS9nM,KAAK0wN,iBAAiBz/G,IAOnCu/G,EAAmBh1N,UAAUk1N,iBAAmB,SAAUz/G,GACtD,IACIC,EADWD,EAAKzwG,SACKkjL,MAAMlhL,QAAQyuG,GAAQ,EAC/C,OAAOg+G,GAAoBjF,QAAQ94G,EAAWlxG,KAAKmvN,cAEhDqB,GACTF,IC5EE/yK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAiBxC+yK,GAA6C,YAU7C,SAASA,EAAkB9kM,EAAMulK,EAAOxlK,GAEpC,IAAK,IADDsrC,KACK34D,EAAK,EAAGA,EAAKS,UAAUpC,OAAQ2B,IACpC24D,EAAK34D,EAAK,GAAKS,UAAUT,GAE7B,IAAIwB,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAgBjC,OAVAD,EAAM8qM,wBAA0B,KAKhC9qM,EAAM6wN,aAAe,GACrB7wN,EAAM8rB,KAAOA,EACb9rB,EAAMqxL,MAAQA,EACdrxL,EAAM6rB,KAAOA,EACb7rB,EAAM4nM,gBAAkBzwI,EACjBn3D,EA+CX,OA7EAw9C,GAAUozK,EAAmBvyK,GAgC7B3/C,OAAOkJ,eAAegpN,EAAkBn1N,UAAW,QAM/CgM,IAAK,WACD,OAAOxH,KAAK4wN,cAEhBzpN,IAAK,SAAUhK,GACX6C,KAAK4wN,aAAezzN,GAExBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAegpN,EAAkBn1N,UAAW,mBAK/CgM,IAAK,WACD,OAAOxH,KAAK6qM,yBAEhB1jM,IAAK,SAAUhK,GACX6C,KAAK6qM,wBAA0B1tM,GAEnCsK,YAAY,EACZC,cAAc,IAOlBipN,EAAkBn1N,UAAUwB,SAAW,SAAU8qM,GAC7C,IACIl8K,EAAO5rB,KAAK4rB,KAAKlf,WACrB,QAAoC,IAAzB1M,KAAK2nM,iBAA2D,MAAxB3nM,KAAK2nM,iBAA2B3nM,KAAK2nM,gBAAgB/qM,OAAS,EAC7G,IAAK,IAAIN,EAAI,EAAGA,EAAI0D,KAAK2nM,gBAAgB/qM,OAAQN,IAAK,CAClD,IAAIu0N,EAAiB7wN,KAAK2nM,gBAAgBrrM,GAC1CsvB,EAAOA,EAAK9c,QAAQ,IAAMxS,EAAI,IAAKu0N,EAAe7zN,SAAS8qM,IAGnE,OAAOl8K,GAEJ+kM,GACTL,IChGE/yK,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAqBxCkzK,GAA+C,YAG/C,SAASA,IACL,IAAI/wN,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAMjC,OAHAD,EAAMm3D,KAAO,IAAIiwI,GAEjBpnM,EAAMgxN,mBACChxN,EAyBX,OAlCAw9C,GAAUuzK,EAAqB1yK,GAW/B0yK,EAAoBt1N,UAAU6yM,YAAc,SAAUvG,EAAU/yK,EAAU4zK,EAAUC,GAChFxqJ,EAAO5iD,UAAUktM,kBAAkBpnM,KAAKtB,KAAM8nM,EAAU/yK,EAAU4zK,EAAUC,GAC5E,IACIpoM,EADOR,KAAKopM,oBAAoBtB,GAChBtnM,SAChB2yL,EAAYnzL,KAAKhD,SAAS8qM,GAE9B,GAAI9nM,KAAKk3D,KAAK8nH,YAAYx+K,GAAW,CACjC,IAAI89K,EAAOt+K,KAAKk3D,KAAKl6D,SAASwD,GAC1B+vN,EAAe,IAAIhgC,GAAOx7J,EAASxoB,EAAIvM,KAAK+0B,SAASxoB,EAAGwoB,EAASvoB,EAAIxM,KAAK+0B,SAASvoB,GACvFs7L,EAAS6D,gBAAgBrtB,EAAK7vK,SAAU8hN,EAAc,IAAI//B,GAAMlS,EAAK7vK,SAASqG,MAAQ6zL,EAAUrqB,EAAK7vK,SAASoG,OAAS+zL,IACvH5oM,KAAK+wN,gBAAgBzsN,KAAKwjM,OAEzB,CACD,IAAI77K,EAAOjsB,KAAKsf,UACZ7Q,EAAW,IAAIknM,GAAY1pL,GAC/BjsB,KAAKk3D,KAAK35D,SAASiD,EAAU,IAAI4vN,GAAqB3hN,EAAU0kL,IAChE1kL,EAASq5L,SAASmE,WAAW9Y,EAAWnzL,KAAK6oM,UAAW7oM,KAAK+lM,IAAK/lM,KAAKkpM,WAAY,EAAG,EAAGj9K,EAAKnX,MAAOmX,EAAKpX,OAAQ7U,KAAK8oM,cACnHynB,EAAe,IAAIhgC,GAAOx7J,EAASxoB,EAAIvM,KAAK+0B,SAASxoB,EAAGwoB,EAASvoB,EAAIxM,KAAK+0B,SAASvoB,GACvFs7L,EAAS6D,gBAAgBl9L,EAAU8hN,EAAc,IAAI//B,GAAM/hL,EAASqG,MAAQ6zL,EAAUl6L,EAASoG,OAAS+zL,IACxG5oM,KAAK+wN,gBAAgBzsN,KAAKwjM,KAI3BgpB,GACT3oB,ICzDE5qJ,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAoBxCozK,GAA6C,YAE7C,SAASA,EAAkBnlM,EAAM8kK,GAC7B,IAAI5wL,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAkBjC,OAZAD,EAAM0wN,oBAAsBpwB,GAAe+uB,aACvB,IAATz+B,EACP5wL,EAAM8rB,KAAOA,EAER8kK,aAAgBK,IACrBjxL,EAAM8rB,KAAOA,EACb9rB,EAAMqxL,MAAQT,IAGd5wL,EAAM8rB,KAAOA,EACb9rB,EAAM4yB,OAASg+J,GAEZ5wL,EA8BX,OAlDAw9C,GAAUyzK,EAAmB5yK,GAsB7B3/C,OAAOkJ,eAAeqpN,EAAkBx1N,UAAW,eAM/CgM,IAAK,WACD,OAAOxH,KAAKywN,qBAEhBtpN,IAAK,SAAUhK,GACX6C,KAAKywN,oBAAsBtzN,GAE/BsK,YAAY,EACZC,cAAc,IAOlBspN,EAAkBx1N,UAAUwB,SAAW,SAAU8qM,GAC7C,IAGIjqL,EAFO7d,KAAKopM,oBAAoBtB,GAChBmH,QAAQ3uM,OAAOE,SACdkjL,MAAM7lK,MAE3B,OADSoxM,GAAoBjF,QAAQnsM,EAAO7d,KAAKmvN,cAG9C6B,GACTF,KZnEF,SAAWtF,GAKPA,EAAmBA,EAA6B,SAAI,GAAK,WAKzDA,EAAmBA,EAA8B,UAAI,GAAK,YAK1DA,EAAmBA,EAAyB,KAAI,GAAK,OAfzD,CAgBGA,KAAuBA,QaT1B,ICRWyF,GDQPC,cACA,SAASA,EAAexgC,EAAMC,GAmC1B,GA7BA3wL,KAAKimL,qBAAuB,IAAIxC,GAKhCzjL,KAAKmxN,gBAAkB3F,GAAmB4F,SAM1CpxN,KAAK+uC,WAAa,EAMlB/uC,KAAKqxN,oBAAsB,IAAI9gC,GAAO,EAAG,GAMzCvwL,KAAK2yB,OAAS,IAAI89J,GAKlBzwL,KAAKuzE,MAAQ,IAAI80G,QACG,IAATsI,EAAsB,CACjByP,GAAmBqB,aAC/BzhM,KAAKqxN,oBAAsB,IAAI9gC,GAAO,EAAGvwL,KAAKqxN,oBAAoB7kN,GAClExM,KAAK+zM,QAAUrjB,OAEVC,aAAgBJ,IACrBvwL,KAAKjC,YAAY2yL,GACjB1wL,KAAKqxN,oBAAsB1gC,IAG3B3wL,KAAKjC,YAAY2yL,GACjB1wL,KAAK2yB,OAASg+J,GA0GtB,OAvGAlyL,OAAOkJ,eAAeupN,EAAe11N,UAAW,QAM5CgM,IAAK,WACD,OAAOxH,KAAK+uC,YAEhB5nC,IAAK,SAAUhK,GACX6C,KAAK+uC,WAAa5xC,EAClB6C,KAAKsxN,uBAET7pN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeupN,EAAe11N,UAAW,QAK5CgM,IAAK,WACD,OAAOxH,KAAK+zM,SAEhB5sM,IAAK,SAAUhK,GACX6C,KAAK+zM,QAAU52M,EACf6C,KAAKsxN,uBAET7pN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeupN,EAAe11N,UAAW,QAK5CgM,IAAK,WACD,OAAOxH,KAAKmxN,iBAEhBhqN,IAAK,SAAUhK,GACX6C,KAAKmxN,gBAAkBh0N,EACvB6C,KAAKsxN,uBAET7pN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeupN,EAAe11N,UAAW,YAK5CgM,IAAK,WACD,OAAOxH,KAAKqxN,qBAEhBlqN,IAAK,SAAUhK,GACX6C,KAAKqxN,oBAAsBl0N,EAC3B6C,KAAKsxN,uBAET7pN,YAAY,EACZC,cAAc,IAMlBwpN,EAAe11N,UAAUslN,iBAAmB,SAAU7vG,EAAMjhF,GAExD,OADcihF,EAAKg+F,QACJ6R,iBAAiB7vG,EAAMjhF,IAM1CkhM,EAAe11N,UAAU81N,oBAAsB,WAG3C,OAFAtxN,KAAKuzE,MAAMsN,QACX7gF,KAAKuzE,MAAMrvE,IAAI,IAAIumL,GAAmBzqL,KAAK+zM,UACnC/zM,KAAKmxN,iBACT,KAAK3F,GAAmB4F,SACpB,IAAIG,EAAavxN,KAAK+zM,QAClB/jL,EAAQ,IAAIugK,GAChBvgK,EAAQhwB,KAAK8gN,iBAAiByQ,EAAYvxN,KAAKqxN,qBAC/CrxN,KAAKuzE,MAAMrvE,IAAI,IAAI+6K,GAAQj/K,KAAKimL,qBAAqBd,MACrDnlL,KAAKuzE,MAAMrvE,IAAI,IAAI2jL,GAAU73J,EAAMzjB,IACnCvM,KAAKuzE,MAAMrvE,IAAI,IAAI2jL,GAAU73J,EAAMxjB,IACnCxM,KAAKuzE,MAAMrvE,IAAI,IAAI2jL,GAAU7nL,KAAK+uC,aAClC,MACJ,KAAKy8K,GAAmBgG,UACpBxxN,KAAKuzE,MAAMrvE,IAAI,IAAI+6K,GAAQj/K,KAAKimL,qBAAqBlxK,QAIjEtW,OAAOkJ,eAAeupN,EAAe11N,UAAW,WAK5CgM,IAAK,WAED,OADAxH,KAAKsxN,sBACEtxN,KAAKuzE,OAEhB9rE,YAAY,EACZC,cAAc,IAEXwpN,KE1JPO,cAEA,SAASA,EAAuB/gC,EAAMC,EAAMC,EAAMC,EAAMuD,GAChD1D,aAAgBD,SAA8B,IAATE,EACrC3wL,KAAKjC,YAAY2yL,EAAKnkL,EAAGmkL,EAAKlkL,EAAGkkL,EAAK57K,MAAO47K,EAAK77K,QAE7C67K,aAAgBD,IAAcE,aAAgB2sB,SAA2B,IAAT1sB,EACrE5wL,KAAKjC,YAAY2yL,EAAKnkL,EAAGmkL,EAAKlkL,EAAGkkL,EAAK57K,MAAO47K,EAAK77K,OAAQ87K,GAErDD,aAAgBH,IAAUI,aAAgBH,SAAyB,IAATI,EAC/D5wL,KAAKjC,YAAY2yL,EAAKnkL,EAAGmkL,EAAKlkL,EAAGmkL,EAAK77K,MAAO67K,EAAK97K,QAE7C67K,aAAgBH,IAAUI,aAAgBH,IAASI,aAAgB0sB,SAA2B,IAATzsB,EAC1F7wL,KAAKjC,YAAY2yL,EAAKnkL,EAAGmkL,EAAKlkL,EAAGmkL,EAAK77K,MAAO67K,EAAK97K,OAAQ+7K,GAErDF,aAAgBF,SAAyB,IAATG,EACrC3wL,KAAKjC,YAAY2yL,EAAK57K,MAAO47K,EAAK77K,QAEb,iBAAT67K,GAAqC,iBAATC,QAAqC,IAATC,EACpE5wL,KAAKjC,YAAY,EAAG,EAAG2yL,EAAMC,GAER,iBAATD,GAAqC,iBAATC,GAAqBC,aAAgB0sB,SAA2B,IAATzsB,EAC/F7wL,KAAKjC,YAAY,EAAG,EAAG2yL,EAAMC,EAAMC,IAGnC5wL,KAAKuM,EAAImkL,EACT1wL,KAAKwM,EAAImkL,EACT3wL,KAAKqwN,YAAc,IAAI1a,GAAY/kB,EAAMC,IAilBjD,OAvkBApyL,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,QAMpDgM,IAAK,WACD,OAAOxH,KAAK0xN,WAEhBvqN,IAAK,SAAUhK,GAEX6C,KAAK0xN,UAAYv0N,EAEjB6C,KAAK2xN,kBAGTlqN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,aAKpDgM,IAAK,WACD,OAAOxH,KAAK4xN,gBAEhBzqN,IAAK,SAAUhK,GAEX6C,KAAK6xN,aAAa10N,IAGtBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,cAKpDgM,IAAK,WACD,OAAOxH,KAAK8xN,cAEhB3qN,IAAK,SAAUhK,GAEX6C,KAAK8xN,aAAe30N,GAGxBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,cAKpDgM,IAAK,WACD,OAAQxH,KAAK8xN,cAEjB3qN,IAAK,SAAUhK,GACX6C,KAAK8xN,cAAgB30N,GAEzBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,YAKpDgM,IAAK,WACD,OAAOxH,KAAKywC,iBAEhBtpC,IAAK,SAAUhK,GACP6C,KAAKwG,OAASg6L,GAAa9jD,OAC3B18I,KAAKywC,gBAAkBtzC,IAM/BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,KAKpDgM,IAAK,WAED,YAD6C,IAAzBxH,KAAKywC,gBAAmCzwC,KAAKywC,gBAAgBlkC,EAAI,GAGzFpF,IAAK,SAAUhK,GACP6C,KAAKwG,OAASg6L,GAAa9jD,OAC3B18I,KAAKywC,gBAAgBlkC,EAAIpP,IAMjCsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,KAKpDgM,IAAK,WAED,YAD6C,IAAzBxH,KAAKywC,gBAAmCzwC,KAAKywC,gBAAgBjkC,EAAI,GAGzFrF,IAAK,SAAUhK,GACP6C,KAAKwG,OAASg6L,GAAa9jD,OAC3B18I,KAAKywC,gBAAgBjkC,EAAIrP,IAMjCsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,QAKpDgM,IAAK,WACD,OAAOxH,KAAKyO,SAASwd,MAEzB9kB,IAAK,SAAUhK,GACP6C,KAAKwG,OAASg6L,GAAa9jD,MAC3B18I,KAAKyO,SAAS05D,MAAMhrE,IAG5BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,SAKpDgM,IAAK,WACD,OAAOxH,KAAKyO,SAASqG,OAEzB3N,IAAK,SAAUhK,GACX,GAAI6C,KAAKyO,SAASqG,QAAU3X,GAAS6C,KAAKwG,OAASg6L,GAAa9jD,KAAM,CAClE,IAAIzwH,EAAOjsB,KAAKyO,SAASwd,KACzBA,EAAKnX,MAAQ3X,EACb6C,KAAKyO,SAAS05D,MAAMl8C,KAG5BxkB,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,UAKpDgM,IAAK,WACD,OAAOxH,KAAKyO,SAASoG,QAEzB1N,IAAK,SAAUhK,GACX,GAAI6C,KAAKyO,SAASoG,SAAW1X,GAAS6C,KAAKwG,OAASg6L,GAAa9jD,KAAM,CACnE,IAAIzwH,EAAOjsB,KAAKyO,SAASwd,KACzBA,EAAKpX,OAAS1X,EACd6C,KAAKyO,SAAS05D,MAAMl8C,KAG5BxkB,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,YAKpDgM,IAAK,WACD,OAAOxH,KAAKyO,SAASq5L,UAEzBrgM,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,YAKpDgM,IAAK,WAID,OAAOxH,KAAKqwN,aAEhB5oN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,QAKpDgM,IAAK,WACD,OAAOxH,KAAK+xN,cAEhB5qN,IAAK,SAAUhK,GACX6C,KAAKgyN,cAAc70N,GACnB6C,KAAK+xN,aAAe50N,GAExBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe8pN,EAAuBj2N,UAAW,UAKpDgM,IAAK,WACD,OAAO,IAAIipL,GAAW,IAAIF,GAAOvwL,KAAKuM,EAAGvM,KAAKwM,GAAIxM,KAAKisB,OAE3D9kB,IAAK,SAAUhK,GACP6C,KAAKwG,OAASg6L,GAAa9jD,OAC3B18I,KAAK+0B,SAAW,IAAIw7J,GAAOpzL,EAAMoP,EAAGpP,EAAMqP,GAC1CxM,KAAKisB,KAAO,IAAIukK,GAAMrzL,EAAM2X,MAAO3X,EAAM0X,UAGjDpN,YAAY,EACZC,cAAc,IAMlB+pN,EAAuBj2N,UAAUw2N,cAAgB,SAAUxrN,GACvD,GAAIA,IAASg6L,GAAa9jD,KAAM,CAC5B,OAAQl2I,GACJ,KAAKg6L,GAAalO,IACdtyL,KAAKiyN,KAAO3xB,GAAahO,IACzB,MACJ,KAAKkO,GAAa0N,OACdluM,KAAKiyN,KAAO3xB,GAAa4N,OACzB,MACJ,KAAK1N,GAAa6Q,KACdrxM,KAAKiyN,KAAO3xB,GAAa+Q,KACzB,MACJ,KAAK7Q,GAAauN,MACd/tM,KAAKiyN,KAAO3xB,GAAayN,MAGjC/tM,KAAK2xN,mBAObF,EAAuBj2N,UAAUm2N,eAAiB,WAC9C3xN,KAAK6uC,UAAY0xJ,GAAkB7jD,MAMvC+0E,EAAuBj2N,UAAUq2N,aAAe,SAAUhjL,GACtD,GAAI7uC,KAAKiyN,OAAS3xB,GAAa5jD,KAC3B18I,KAAK4xN,eAAiB/iL,MAErB,CAED,IAAIqjL,GAAW,EACf,OAAQlyN,KAAKiyN,MACT,KAAK3xB,GAAa+Q,KACd6gB,EAAYrjL,IAAc0xJ,GAAkB4xB,SAAWtjL,IAAc0xJ,GAAkB6xB,YACnFvjL,IAAc0xJ,GAAkB8xB,YAAcxjL,IAAc0xJ,GAAkB7jD,KAClF,MACJ,KAAK4jD,GAAahO,IACd4/B,EAAYrjL,IAAc0xJ,GAAkB4xB,SAAWtjL,IAAc0xJ,GAAkB+xB,WACnFzjL,IAAc0xJ,GAAkBgyB,UAAY1jL,IAAc0xJ,GAAkB7jD,KAChF,MACJ,KAAK4jD,GAAayN,MACdmkB,EAAYrjL,IAAc0xJ,GAAkBgyB,UAAY1jL,IAAc0xJ,GAAkBiyB,aACpF3jL,IAAc0xJ,GAAkBkyB,aAAe5jL,IAAc0xJ,GAAkB7jD,KACnF,MACJ,KAAK4jD,GAAa4N,OACdgkB,EAAYrjL,IAAc0xJ,GAAkB8xB,YAAcxjL,IAAc0xJ,GAAkBmyB,cACnF7jL,IAAc0xJ,GAAkBkyB,aAAe5jL,IAAc0xJ,GAAkB7jD,KACtF,MACJ,KAAK4jD,GAAaoJ,KACdwoB,EAAYrjL,IAAc0xJ,GAAkBoyB,cAAgB9jL,IAAc0xJ,GAAkB7jD,KAGhGw1E,IACAlyN,KAAK4xN,eAAiB/iL,KAQlC4iL,EAAuBj2N,UAAUutM,KAAO,SAAUv7J,EAAOhtC,GACrD,IAAIywG,EAAOzjE,EAAMyjE,KACbt+E,EAAS3yB,KAAK8uN,gBAAgB79G,EAAMzwG,IACtB,IAAdmyB,EAAOpmB,IACPomB,EAAOpmB,EAAI,GAEfihC,EAAMs6J,SAAS6D,gBAAgB3rM,KAAKyO,SAAU,IAAI8hL,GAAO59J,EAAOpmB,EAAGomB,EAAOnmB,GAAI,IAAIgkL,GAAM79J,EAAO7d,MAAO6d,EAAO9d,UAMjH48M,EAAuBj2N,UAAUszN,gBAAkB,SAAU79G,EAAMzwG,GAC/D,IAAIzB,EAASiB,KAAK2yB,OAOlB,OANI3yB,KAAK4xN,iBAAmBrxB,GAAkB7jD,KAC1C39I,EAASiB,KAAK4yN,mBAAmB3hH,EAAMzwG,GAElCR,KAAK0xN,YAAcpxB,GAAa5jD,OACrC39I,EAASiB,KAAK6yN,cAAc5hH,EAAMzwG,IAE/BzB,GAMX0yN,EAAuBj2N,UAAUo3N,mBAAqB,SAAU3hH,EAAMzwG,GACrDR,KAAK2yB,OAOlB,OANI3yB,KAAKwG,OAASg6L,GAAa9jD,KAClB18I,KAAK8yN,yBAAyB7hH,EAAMzwG,GAGpCR,KAAK+yN,2BAA2B9hH,EAAMzwG,IAQvDixN,EAAuBj2N,UAAUs3N,yBAA2B,SAAU7hH,EAAMzwG,GACxE,IAAImyB,EAAS3yB,KAAK2yB,OAEdqgM,EADa/hH,EAAKg+F,QACQ0F,gBAAgBn0M,EAAUywG,GAAM,GAC1D1kG,EAAIvM,KAAKuM,EACTC,EAAIxM,KAAKwM,EACb,OAAQxM,KAAK4xN,gBACT,KAAKrxB,GAAkB4xB,QACnB5lN,EAAI,EACJC,EAAI,EACJ,MACJ,KAAK+zL,GAAkB+xB,UACnB/lN,GAAKymN,EAAal+M,MAAQ9U,KAAK8U,OAAS,EACxCtI,EAAI,EACJ,MACJ,KAAK+zL,GAAkBgyB,SACnBhmN,EAAIymN,EAAal+M,MAAQ9U,KAAK8U,MAC9BtI,EAAI,EACJ,MACJ,KAAK+zL,GAAkB6xB,WACnB7lN,EAAI,EACJC,GAAKwmN,EAAan+M,OAAS7U,KAAK6U,QAAU,EAC1C,MACJ,KAAK0rL,GAAkBoyB,aACnBpmN,GAAKymN,EAAal+M,MAAQ9U,KAAK8U,OAAS,EACxCtI,GAAKwmN,EAAan+M,OAAS7U,KAAK6U,QAAU,EAC1C,MACJ,KAAK0rL,GAAkBiyB,YACnBjmN,EAAIymN,EAAal+M,MAAQ9U,KAAK8U,MAC9BtI,GAAKwmN,EAAan+M,OAAS7U,KAAK6U,QAAU,EAC1C,MACJ,KAAK0rL,GAAkB8xB,WACnB9lN,EAAI,EACJC,EAAIwmN,EAAan+M,OAAS7U,KAAK6U,OAC/B,MACJ,KAAK0rL,GAAkBmyB,aACnBnmN,GAAKymN,EAAal+M,MAAQ9U,KAAK8U,OAAS,EACxCtI,EAAIwmN,EAAan+M,OAAS7U,KAAK6U,OAC/B,MACJ,KAAK0rL,GAAkBkyB,YACnBlmN,EAAIymN,EAAal+M,MAAQ9U,KAAK8U,MAC9BtI,EAAIwmN,EAAan+M,OAAS7U,KAAK6U,OAKvC,OAFA8d,EAAOpmB,EAAIA,EACXomB,EAAOnmB,EAAIA,EACJmmB,GAMX8+L,EAAuBj2N,UAAUu3N,2BAA6B,SAAU9hH,EAAMzwG,GAC1E,IAAIzB,EAASiB,KAAK2yB,OACds8K,EAAUh+F,EAAKg+F,QACf+jB,EAAe/jB,EAAQ0F,gBAAgBn0M,EAAUywG,GAAM,GACvD1kG,EAAIvM,KAAKuM,EACTC,EAAIxM,KAAKwM,EACb,OAAQxM,KAAK4xN,gBACT,KAAKrxB,GAAkB4xB,QACfnyN,KAAKwG,OAASg6L,GAAa6Q,MAC3B9kM,GAAKymN,EAAazmN,EAClBC,EAAI,GAECxM,KAAKwG,OAASg6L,GAAalO,MAChC/lL,GAAKymN,EAAazmN,EAClBC,GAAKwmN,EAAaxmN,GAEtB,MACJ,KAAK+zL,GAAkB+xB,UACnB/lN,GAAKymN,EAAal+M,MAAQ9U,KAAK8U,OAAS,EACxCtI,GAAKwmN,EAAaxmN,EAClB,MACJ,KAAK+zL,GAAkBgyB,SACfvyN,KAAKwG,OAASg6L,GAAauN,OAC3BxhM,EAAIymN,EAAal+M,MAAQm6L,EAAQkT,oBAAoB3hN,EAAUywG,GAAM,GAASjxG,KAAK8U,MACnFtI,EAAI,GAECxM,KAAKwG,OAASg6L,GAAalO,MAChC/lL,EAAIymN,EAAal+M,MAAQm6L,EAAQkT,oBAAoB3hN,EAAUywG,GAAM,GAASjxG,KAAK8U,MACnFtI,GAAKwmN,EAAaxmN,GAEtB,MACJ,KAAK+zL,GAAkB6xB,WACnB7lN,GAAKymN,EAAazmN,EAClBC,GAAKwmN,EAAan+M,OAAS7U,KAAK6U,QAAU,EAC1C,MACJ,KAAK0rL,GAAkBoyB,aACnBpmN,GAAKymN,EAAal+M,MAAQ9U,KAAK8U,OAAS,EACxCtI,GAAKwmN,EAAan+M,OAAS7U,KAAK6U,QAAU,EAC1C,MACJ,KAAK0rL,GAAkBiyB,YACnBjmN,EAAIymN,EAAal+M,MAAQm6L,EAAQkT,oBAAoB3hN,EAAUywG,GAAM,GAASjxG,KAAK8U,MACnFtI,GAAKwmN,EAAan+M,OAAS7U,KAAK6U,QAAU,EAC1C,MACJ,KAAK0rL,GAAkB8xB,WACfryN,KAAKwG,OAASg6L,GAAa6Q,MAC3B9kM,GAAKymN,EAAazmN,EAClBC,EAAIwmN,EAAan+M,OAAS7U,KAAK6U,QAE1B7U,KAAKwG,OAASg6L,GAAa0N,SAChC3hM,GAAKymN,EAAazmN,EAClBC,EAAIwmN,EAAan+M,OAASo6L,EAAQmT,sBAAsB5hN,EAAUywG,GAAM,GAASjxG,KAAK6U,QAE1F,MACJ,KAAK0rL,GAAkBmyB,aACnBnmN,GAAKymN,EAAal+M,MAAQ9U,KAAK8U,OAAS,EACxCtI,EAAIwmN,EAAan+M,OAASo6L,EAAQmT,sBAAsB5hN,EAAUywG,GAAM,GAASjxG,KAAK6U,OACtF,MACJ,KAAK0rL,GAAkBkyB,YACfzyN,KAAKwG,OAASg6L,GAAauN,OAC3BxhM,EAAIymN,EAAal+M,MAAQm6L,EAAQkT,oBAAoB3hN,EAAUywG,GAAM,GAASjxG,KAAK8U,MACnFtI,EAAIwmN,EAAan+M,OAAS7U,KAAK6U,QAE1B7U,KAAKwG,OAASg6L,GAAa0N,SAChC3hM,EAAIymN,EAAal+M,MAAQm6L,EAAQkT,oBAAoB3hN,EAAUywG,GAAM,GAASjxG,KAAK8U,MACnFtI,EAAIwmN,EAAan+M,OAASo6L,EAAQmT,sBAAsB5hN,EAAUywG,GAAM,GAASjxG,KAAK6U,QAMlG,OAFA9V,EAAOwN,EAAIA,EACXxN,EAAOyN,EAAIA,EACJzN,GAMX0yN,EAAuBj2N,UAAUq3N,cAAgB,SAAU5hH,EAAMzwG,GAChDR,KAAK2yB,OAOlB,OANI3yB,KAAKwG,OAASg6L,GAAa9jD,KAClB18I,KAAKizN,oBAAoBhiH,EAAMzwG,GAG/BR,KAAKkzN,sBAAsBjiH,EAAMzwG,IAQlDixN,EAAuBj2N,UAAUy3N,oBAAsB,SAAUhiH,EAAMzwG,GACtDR,KAAK2yB,OAAlB,IAEIqgM,EADU/hH,EAAKg+F,QACQ0F,gBAAgBn0M,EAAUywG,GAAM,GACvD1kG,EAAIvM,KAAKuM,EACTC,EAAIxM,KAAKwM,EACTsI,EAAQ9U,KAAK8U,MACbD,EAAS7U,KAAK6U,OAClB,OAAQ7U,KAAK0xN,WACT,KAAKpxB,GAAa+Q,KACd9kM,EAAI,EACJC,EAAI,EACJsI,EAAQ9U,KAAK8U,MACbD,EAASm+M,EAAan+M,OACtB,MACJ,KAAKyrL,GAAahO,IACd/lL,EAAI,EACJC,EAAI,EACJsI,EAAQk+M,EAAal+M,MACrBD,EAAS7U,KAAK6U,OACd,MACJ,KAAKyrL,GAAayN,MACdxhM,EAAIymN,EAAal+M,MAAQ9U,KAAK8U,MAC9BtI,EAAI,EACJsI,EAAQ9U,KAAK8U,MACbD,EAASm+M,EAAan+M,OACtB,MACJ,KAAKyrL,GAAa4N,OACd3hM,EAAI,EACJC,EAAIwmN,EAAan+M,OAAS7U,KAAK6U,OAC/BC,EAAQk+M,EAAal+M,MACrBD,EAAS7U,KAAK6U,OACd,MACJ,KAAKyrL,GAAaoJ,KACdn9L,EAAI,EACJA,EAAI,EACJuI,EAAQk+M,EAAal+M,MACrBD,EAASm+M,EAAan+M,OAI9B,OADS,IAAI47K,GAAWlkL,EAAGC,EAAGsI,EAAOD,IAOzC48M,EAAuBj2N,UAAU03N,sBAAwB,SAAUjiH,EAAMzwG,GACxDR,KAAK2yB,OAAlB,IACIs8K,EAAUh+F,EAAKg+F,QACf+jB,EAAe/jB,EAAQ0F,gBAAgBn0M,EAAUywG,GAAM,GACvD6lF,EAAamY,EAAQ2F,aAAa5S,gBAClCz1L,EAAIvM,KAAKuM,EACTC,EAAIxM,KAAKwM,EACTsI,EAAQ9U,KAAK8U,MACbD,EAAS7U,KAAK6U,OAClB,OAAQ7U,KAAK0xN,WACT,KAAKpxB,GAAa+Q,KACd9kM,GAAKymN,EAAazmN,EAClBC,EAAI,EACJsI,EAAQ9U,KAAK8U,MACbD,EAASm+M,EAAan+M,OACtB,MACJ,KAAKyrL,GAAahO,IACd/lL,GAAKymN,EAAazmN,EAClBC,GAAKwmN,EAAaxmN,EAClBsI,EAAQgiL,EAAWhiL,MACnBD,EAAS7U,KAAK6U,OACVm+M,EAAan+M,OAAS,IACtBrI,GAAKwmN,EAAaxmN,EAAIsqL,EAAWjiL,QAErC,MACJ,KAAKyrL,GAAayN,MACdxhM,EAAIymN,EAAal+M,MAAQm6L,EAAQkT,oBAAoB3hN,EAAUywG,GAAM,GAASjxG,KAAK8U,MACnFtI,EAAI,EACJsI,EAAQ9U,KAAK8U,MACbD,EAASm+M,EAAan+M,OACtB,MACJ,KAAKyrL,GAAa4N,OACd3hM,GAAKymN,EAAazmN,EAClBC,EAAIwmN,EAAan+M,OAASo6L,EAAQmT,sBAAsB5hN,EAAUywG,GAAM,GAASjxG,KAAK6U,OACtFC,EAAQgiL,EAAWhiL,MACnBD,EAAS7U,KAAK6U,OACVm+M,EAAan+M,OAAS,IACtBrI,GAAKsqL,EAAWjiL,QAEpB,MACJ,KAAKyrL,GAAaoJ,KACdn9L,EAAI,EACJA,EAAI,EACJuI,EAAQk+M,EAAal+M,MACrBD,EAASm+M,EAAan+M,OAI9B,OADS,IAAI47K,GAAWlkL,EAAGC,EAAGsI,EAAOD,IAGlC48M,KC9mBP0B,cAMA,SAASA,IACL,IAAIC,EAAuB,IAAI1uB,GAAO,IAAIrW,GAAS,EAAG,EAAG,IACzD+kC,EAAqBC,UAAYvlC,GAAagX,MAC9C,IAAIwuB,EAAwB,IAAI5uB,GAAO,IAAIrW,GAAS,EAAG,EAAG,IAC1DilC,EAAsBD,UAAYvlC,GAAagX,MAC/C,IAAIyuB,EAAsB,IAAI7uB,GAAO,IAAIrW,GAAS,EAAG,EAAG,IACxDklC,EAAoBF,UAAYvlC,GAAagX,MAC7C,IAAI0uB,EAAyB,IAAI9uB,GAAO,IAAIrW,GAAS,EAAG,EAAG,IAC3DmlC,EAAuBH,UAAYvlC,GAAagX,MAChD9kM,KAAKyzN,QAAUL,EACfpzN,KAAK0zN,SAAWJ,EAChBtzN,KAAK2zN,OAASJ,EACdvzN,KAAK4zN,UAAYJ,EA4FrB,OA1FA/0N,OAAOkJ,eAAewrN,EAAW33N,UAAW,QAMxCgM,IAAK,WACD,OAAOxH,KAAKyzN,SAEhBtsN,IAAK,SAAUhK,GACX6C,KAAKyzN,QAAUt2N,GAEnBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewrN,EAAW33N,UAAW,SAKxCgM,IAAK,WACD,OAAOxH,KAAK0zN,UAEhBvsN,IAAK,SAAUhK,GACX6C,KAAK0zN,SAAWv2N,GAEpBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewrN,EAAW33N,UAAW,OAKxCgM,IAAK,WACD,OAAOxH,KAAK2zN,QAEhBxsN,IAAK,SAAUhK,GACX6C,KAAK2zN,OAASx2N,GAElBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewrN,EAAW33N,UAAW,UAKxCgM,IAAK,WACD,OAAOxH,KAAK4zN,WAEhBzsN,IAAK,SAAUhK,GACX6C,KAAK4zN,UAAYz2N,GAErBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewrN,EAAW33N,UAAW,OAKxC2L,IAAK,SAAUhK,GACX6C,KAAKyzN,QAAUzzN,KAAK0zN,SAAW1zN,KAAK2zN,OAAS3zN,KAAK4zN,UAAYz2N,GAElEsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewrN,EAAW33N,UAAW,SAKxCgM,IAAK,WACD,OAASxH,KAAKyzN,UAAYzzN,KAAK0zN,UAAc1zN,KAAKyzN,UAAYzzN,KAAK2zN,QAAY3zN,KAAKyzN,UAAYzzN,KAAK4zN,WAEzGnsN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewrN,EAAY,WAK9B3rN,IAAK,WACD,OAAO,IAAI2rN,GAEf1rN,YAAY,EACZC,cAAc,IAEXyrN,KAGPU,cACA,SAASA,EAAY7nN,EAAMC,EAAOC,EAAKC,QACf,IAATH,GAEPhM,KAAK8zN,QAAU9zN,KAAK+zN,SAAW,KAE/B/zN,KAAKmM,OAASnM,KAAKg0N,OAAS,KAG5Bh0N,KAAK8zN,QAAU9nN,EACfhM,KAAK+zN,SAAW9nN,EAChBjM,KAAKg0N,OAAS9nN,EACdlM,KAAKi0N,UAAY9nN,GAuEzB,OApEA1N,OAAOkJ,eAAeksN,EAAYr4N,UAAW,QAMzCgM,IAAK,WACD,OAAOxH,KAAK8zN,SAEhB3sN,IAAK,SAAUhK,GACX6C,KAAK8zN,QAAU32N,GAEnBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeksN,EAAYr4N,UAAW,SAKzCgM,IAAK,WACD,OAAOxH,KAAK+zN,UAEhB5sN,IAAK,SAAUhK,GACX6C,KAAK+zN,SAAW52N,GAEpBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeksN,EAAYr4N,UAAW,OAKzCgM,IAAK,WACD,OAAOxH,KAAKg0N,QAEhB7sN,IAAK,SAAUhK,GACX6C,KAAKg0N,OAAS72N,GAElBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeksN,EAAYr4N,UAAW,UAKzCgM,IAAK,WACD,OAAOxH,KAAKi0N,WAEhB9sN,IAAK,SAAUhK,GACX6C,KAAKi0N,UAAY92N,GAErBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeksN,EAAYr4N,UAAW,OAKzC2L,IAAK,SAAUhK,GACX6C,KAAK8zN,QAAU9zN,KAAK+zN,SAAW/zN,KAAKg0N,OAASh0N,KAAKi0N,UAAY92N,GAElEsK,YAAY,EACZC,cAAc,IAEXmsN,MFxMX,SAAW5C,GAKPA,EAAsBA,EAA+B,QAAI,GAAK,UAK9DA,EAAsBA,EAA8B,OAAI,GAAK,SAVjE,CAWGA,KAA0BA,QGhB7B,IAyXWiD,GAzXP32K,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAexCu2K,cACA,SAASA,KA2DT,OAzDA11N,OAAOkJ,eAAewsN,EAAiB34N,UAAW,mBAM9CgM,IAAK,WACD,OAAOxH,KAAKo0N,qBAEhBjtN,IAAK,SAAUhK,GACX6C,KAAKo0N,oBAAsBj3N,GAE/BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewsN,EAAiB34N,UAAW,aAK9CgM,IAAK,WACD,OAAOxH,KAAKq0N,eAEhBltN,IAAK,SAAUhK,GACX6C,KAAKq0N,cAAgBl3N,GAEzBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewsN,EAAiB34N,UAAW,WAK9CgM,IAAK,WACD,OAAOxH,KAAKs0N,aAEhBntN,IAAK,SAAUhK,GACX6C,KAAKs0N,YAAcn3N,GAEvBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewsN,EAAiB34N,UAAW,QAK9CgM,IAAK,WACD,OAAOxH,KAAKu0N,UAEhBptN,IAAK,SAAUhK,GACX6C,KAAKu0N,SAAWp3N,GAEpBsK,YAAY,EACZC,cAAc,IAEXysN,KAMPK,GAAwC,YAOxC,SAASA,IACL,IAAIz0N,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAIjC,OAHAD,EAAM00N,uBAAyBxD,GAAsByD,QACrD30N,EAAM40N,0BAA2B,EACjC50N,EAAM60N,2BAA6BV,GAA0BW,SACtD90N,EAqFX,OAhGAw9C,GAAUi3K,EAAcp2K,GAaxB3/C,OAAOkJ,eAAe6sN,EAAah5N,UAAW,eAM1CgM,IAAK,WAID,YAHoC,IAAzBxH,KAAK80N,kBACZ90N,KAAK80N,gBAAkB,GAEpB90N,KAAK80N,iBAEhB3tN,IAAK,SAAUhK,GACX6C,KAAK80N,gBAAkB33N,GAE3BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe6sN,EAAah5N,UAAW,0BAK1CgM,IAAK,WACD,OAAOxH,KAAK40N,4BAEhBztN,IAAK,SAAUhK,GACX6C,KAAK40N,2BAA6Bz3N,GAEtCsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe6sN,EAAah5N,UAAW,2BAK1CgM,IAAK,WACD,OAAOxH,KAAK20N,0BAEhBxtN,IAAK,SAAUhK,GACX6C,KAAK20N,yBAA2Bx3N,GAEpCsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe6sN,EAAah5N,UAAW,eAK1CgM,IAAK,WAID,YAHoC,IAAzBxH,KAAK+0N,kBACZ/0N,KAAK+0N,gBAAkB,IAAIlB,IAExB7zN,KAAK+0N,iBAEhB5tN,IAAK,SAAUhK,QACyB,IAAzB6C,KAAK+0N,iBACZ/0N,KAAK+0N,gBAAkB,IAAIlB,GAC3B7zN,KAAK+0N,gBAAkB53N,GAGvB6C,KAAK+0N,gBAAkB53N,GAG/BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe6sN,EAAah5N,UAAW,sBAK1CgM,IAAK,WACD,OAAOxH,KAAKy0N,wBAEhBttN,IAAK,SAAUhK,GACX6C,KAAKy0N,uBAAyBt3N,GAElCsK,YAAY,EACZC,cAAc,IAEX8sN,GACTL,IAKEa,GAA4C,YAM5C,SAASA,IACL,IAAIj1N,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAMjC,OADAD,EAAMk1N,gBAAkB9B,GAAW+B,QAC5Bn1N,EAgDX,OA5DAw9C,GAAUy3K,EAAkB52K,GAc5B3/C,OAAOkJ,eAAeqtN,EAAiBx5N,UAAW,gBAM9CgM,IAAK,WACD,OAAOxH,KAAKu4B,QAEhBpxB,IAAK,SAAUhK,GACX6C,KAAKu4B,OAASp7B,GAElBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeqtN,EAAiBx5N,UAAW,WAK9CgM,IAAK,WACD,OAAOxH,KAAKi1N,iBAEhB9tN,IAAK,SAAUhK,GACX6C,KAAKi1N,gBAAkB93N,GAE3BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeqtN,EAAiBx5N,UAAW,eAK9CgM,IAAK,WACD,OAAOxH,KAAK+0N,iBAEhB5tN,IAAK,SAAUhK,GACiB,MAAxB6C,KAAK+0N,sBAA2D,IAAzB/0N,KAAK+0N,kBAC5C/0N,KAAK+0N,gBAAkB,IAAIlB,IAE/B7zN,KAAK+0N,gBAAkB53N,GAE3BsK,YAAY,EACZC,cAAc,IAEXstN,GACTb,IAKEgB,cAMA,SAASA,KAiHT,OA9GA12N,OAAOkJ,eAAewtN,EAAgB35N,UAAW,mBAU7CgM,IAAK,WACD,OAAOxH,KAAKo1N,wBAEhB3tN,YAAY,EACZC,cAAc,IAElBytN,EAAgB35N,UAAU65N,mBAAqB,SAAUl4N,GAErD,GADA6C,KAAKo1N,uBAAyBj4N,OACH,IAAhB6C,KAAKM,OACZ,IAAK,IAAIhE,EAAI,EAAGA,EAAI0D,KAAKM,OAAO2nC,MAAMpqB,MAAOvhB,IACzC0D,KAAKM,OAAO2nC,MAAMqtL,QAAQh5N,GAAGkI,MAAM+wN,gBAAkBp4N,GAIjEsB,OAAOkJ,eAAewtN,EAAgB35N,UAAW,aAK7CgM,IAAK,WACD,OAAOxH,KAAKw1N,kBAEhB/tN,YAAY,EACZC,cAAc,IAElBytN,EAAgB35N,UAAUi6N,aAAe,SAAUt4N,GAE/C,GADA6C,KAAKw1N,iBAAmBr4N,OACG,IAAhB6C,KAAKM,OACZ,IAAK,IAAIhE,EAAI,EAAGA,EAAI0D,KAAKM,OAAO2nC,MAAMpqB,MAAOvhB,IACzC0D,KAAKM,OAAO2nC,MAAMqtL,QAAQh5N,GAAGkI,MAAMkmN,UAAYvtN,GAI3DsB,OAAOkJ,eAAewtN,EAAgB35N,UAAW,WAK7CgM,IAAK,WACD,OAAOxH,KAAK01N,gBAEhBjuN,YAAY,EACZC,cAAc,IAElBytN,EAAgB35N,UAAUm6N,WAAa,SAAUx4N,GAE7C,GADA6C,KAAK01N,eAAiBv4N,OACK,IAAhB6C,KAAKM,OACZ,IAAK,IAAIhE,EAAI,EAAGA,EAAI0D,KAAKM,OAAO2nC,MAAMpqB,MAAOvhB,IACzC0D,KAAKM,OAAO2nC,MAAMqtL,QAAQh5N,GAAGkI,MAAMoxN,QAAUz4N,GAIzDsB,OAAOkJ,eAAewtN,EAAgB35N,UAAW,QAK7CgM,IAAK,WACD,OAAOxH,KAAK61N,aAEhBpuN,YAAY,EACZC,cAAc,IAElBytN,EAAgB35N,UAAU2mL,QAAU,SAAUhlL,GAE1C,GADA6C,KAAK61N,YAAc14N,OACQ,IAAhB6C,KAAKM,OACZ,IAAK,IAAIhE,EAAI,EAAGA,EAAI0D,KAAKM,OAAO2nC,MAAMpqB,MAAOvhB,IACzC0D,KAAKM,OAAO2nC,MAAMqtL,QAAQh5N,GAAGkI,MAAMqnB,KAAO1uB,GAItDsB,OAAOkJ,eAAewtN,EAAgB35N,UAAW,UAK7CgM,IAAK,WAID,YAHkC,IAAvBxH,KAAK81N,eACZ91N,KAAK+1N,UAAU,IAAI5C,IAEhBnzN,KAAK81N,eAEhBruN,YAAY,EACZC,cAAc,IAElBytN,EAAgB35N,UAAUu6N,UAAY,SAAU54N,GAE5C,GADA6C,KAAK81N,cAAgB34N,OACM,IAAhB6C,KAAKM,OACZ,IAAK,IAAIhE,EAAI,EAAGA,EAAI0D,KAAKM,OAAO2nC,MAAMpqB,MAAOvhB,IACzC0D,KAAKM,OAAO2nC,MAAMqtL,QAAQh5N,GAAGkI,MAAMwxN,QAAU74N,GAQzDg4N,EAAgB35N,UAAUy6N,UAAY,SAAU31N,GAC5CN,KAAKM,OAASA,GAEX60N,MAQX,SAAWjB,GAKPA,EAA0BA,EAAoC,SAAI,GAAK,WAKvEA,EAA0BA,EAAoC,SAAI,GAAK,WAV3E,CAWGA,KAA8BA,QCtXjC,I1JZWgC,G0JYPC,cACA,SAASA,EAAYxvL,GAMjB3mC,KAAKo2N,UAAY,EAMjBp2N,KAAKq2N,WAAa,EAMlBr2N,KAAKs2N,OAAQ,EAMbt2N,KAAKu2N,uBAAyB,OACX,IAAR5vL,GACP3mC,KAAKw2N,YAAc,EACnBx2N,KAAKy2N,QAAU,IAGfz2N,KAAKjC,cACLiC,KAAK02N,QAAU/vL,GAyjBvB,OAtjBAloC,OAAOkJ,eAAewuN,EAAY36N,UAAW,uBAEzCgM,IAAK,WACD,OAAOxH,KAAK22N,6BAEhBxvN,IAAK,SAAUhK,GACX6C,KAAK22N,4BAA8Bx5N,GAEvCsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,sBACzCgM,IAAK,WACD,OAAOxH,KAAK42N,4BAEhBzvN,IAAK,SAAUhK,GACX6C,KAAK42N,2BAA6Bz5N,GAEtCsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,oBACzCgM,IAAK,WACD,OAAOxH,KAAK62N,0BAEhB1vN,IAAK,SAAUhK,GACX6C,KAAK62N,yBAA2B15N,GAEpCsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,mBACzCgM,IAAK,WACD,OAAOxH,KAAK82N,yBAEhB3vN,IAAK,SAAUhK,GACX6C,KAAK82N,wBAA0B35N,GAEnCsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,mBAKzCgM,IAAK,WACD,OAAOxH,KAAK+2N,WAEhB5vN,IAAK,SAAUhK,GACX6C,KAAK+2N,UAAY55N,GAErBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,gBAKzCgM,IAAK,WAID,OAHmB,MAAfxH,KAAKu4B,SACLv4B,KAAKu4B,OAAS,IAAIy5J,IAEfhyL,KAAKu4B,QAEhBpxB,IAAK,SAAUhK,GACX6C,KAAKu4B,OAASp7B,GAElBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,OAKzCgM,IAAK,WACD,OAAOxH,KAAK02N,SAEhBvvN,IAAK,SAAUhK,GACX6C,KAAK02N,QAAUv5N,GAEnBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,SAKzCgM,IAAK,WACD,OAAOxH,KAAKg3N,aAEhB7vN,IAAK,SAAUhK,GACX6C,KAAKg3N,YAAc75N,GAEvBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,WAKzCgM,IAAK,WACD,OAAOxH,KAAKw2N,aAEhBrvN,IAAK,SAAUhK,GACX,GAAIA,EAAQ,EACR,MAAM,IAAIyD,MAAM,kFAGhBZ,KAAKw2N,YAAcr5N,EACnB6C,KAAK2mC,IAAIswL,eAAgB,GAGjCxvN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,SAKzCgM,IAAK,WAID,OAHsB,MAAlBxH,KAAKk3N,YACLl3N,KAAKk3N,UAAY,IAAIlC,IAElBh1N,KAAKk3N,WAEhB/vN,IAAK,SAAUhK,GACX6C,KAAKk3N,UAAY/5N,GAErBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,UAKzCgM,IAAK,WAID,OAHwB,IAApBxH,KAAKq2N,aACLr2N,KAAKq2N,WAAar2N,KAAKm3N,iBAEpBn3N,KAAKq2N,YAEhBlvN,IAAK,SAAUhK,GACX6C,KAAKq2N,WAAal5N,GAEtBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,cAKzCgM,IAAK,WACD,OAAOxH,KAAKy2N,SAEhBtvN,IAAK,SAAUhK,GACX,GAAIA,EAAQ,EACR,MAAMyD,MAAM,8DAGZZ,KAAKy2N,QAAUt5N,EACf6C,KAAK2mC,IAAIywL,kBAAmB,GAGpC3vN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAewuN,EAAY36N,UAAW,SAKzCgM,IAAK,WAID,OAHuB,IAAnBxH,KAAKo2N,WAAmBp2N,KAAK2mC,IAAI2B,KAAK+uL,cACtCr3N,KAAKo2N,UAAYp2N,KAAKs3N,gBAEnBt3N,KAAKo2N,WAEhBjvN,IAAK,SAAUhK,GACX6C,KAAKo2N,UAAYj5N,GAErBsK,YAAY,EACZC,cAAc,IAOlByuN,EAAY36N,UAAU87N,aAAe,WAGjC,IAAIxiN,EAAQ,EACRyiN,EAAW,IAAItjC,GACnB,GAAgC,iBAArBj0L,KAAKg3N,YAA0B,CAGtCliN,GADUyiN,EAASpjC,OAAOn0L,KAAKg3N,YAAah3N,KAAKw3N,cAAex3N,KAAK8oM,aAAc,IAAItY,GAAM,EAAG,IAAI,EAAO,IAAIA,GAAM,EAAG,IAC3GsG,WAAWhiL,MACxBA,GAA4E,GAAlE9U,KAAKwE,MAAMwxN,QAAQhqN,KAAK8I,MAAQ9U,KAAKwE,MAAMwxN,QAAQ/pN,MAAM6I,YAElE,GAAI9U,KAAKg3N,uBAAuBpd,IAAY55M,KAAKg3N,uBAAuBvc,GACzE3lM,GAAS9U,KAAKg3N,YAAYliN,WAEzB,GAAI9U,KAAKg3N,uBAAuBvJ,GAAgB,CACjD,IAAIgK,EAAUz3N,KAAKg3N,YAGnBliN,GAFayiN,EAASpjC,OAAOsjC,EAAQ7rM,KAAM6rM,EAAQ5rM,KAAM4rM,EAAQ3uB,aAAc,IAAItY,GAAM,EAAG,IAAI,EAAO,IAAIA,GAAM,EAAG,IAEpGsG,WAAWhiL,MAC3BA,GAA4E,GAAlE9U,KAAKwE,MAAMwxN,QAAQhqN,KAAK8I,MAAQ9U,KAAKwE,MAAMwxN,QAAQ/pN,MAAM6I,OAIvE,OAFAA,GAAU9U,KAAK2mC,IAAI2B,KAAK9jC,MAAMkzN,YAAY1rN,KAAOhM,KAAK2mC,IAAI2B,KAAK9jC,MAAMkzN,YAAYzrN,MACjF6I,GAAS9U,KAAK2mC,IAAI2B,KAAK9jC,MAAMmzN,aAOjCxB,EAAY36N,UAAUo8N,mBAAqB,SAAU9vB,EAAUn1K,GAC3D,IAAI4iM,EAAkBv1N,KAAK63N,qBACJ,MAAnBtC,GACAztB,EAASxmJ,cAAci0K,EAAiB5iM,EAAOpmB,EAAGomB,EAAOnmB,EAAGmmB,EAAO7d,MAAO6d,EAAO9d,SAQzFshN,EAAY36N,UAAUs8N,wBAA0B,SAAUnlM,GAEtD,IAAIolM,EAAe,IAAItnC,GAAW99J,EAAOpmB,EAAGomB,EAAOnmB,EAAGmmB,EAAO7d,MAAO6d,EAAO9d,QAuB3E,YAtBsC,IAA3B7U,KAAKwE,MAAMkzN,aAAyD,MAA1B13N,KAAKwE,MAAMkzN,aAC5DK,EAAaxrN,GAAKvM,KAAK02N,QAAQpuL,KAAK9jC,MAAMkzN,YAAY1rN,KAAOhM,KAAKk3N,UAAUlB,QAAQhqN,KAAK8I,MACzFijN,EAAavrN,GAAKxM,KAAK02N,QAAQpuL,KAAK9jC,MAAMkzN,YAAYxrN,IAAMlM,KAAKk3N,UAAUlB,QAAQ9pN,IAAI4I,MACvFijN,EAAajjN,OAAU9U,KAAK02N,QAAQpuL,KAAK9jC,MAAMkzN,YAAYzrN,MAAQjM,KAAK02N,QAAQpuL,KAAK9jC,MAAMkzN,YAAY1rN,KACvG+rN,EAAajjN,OAAU9U,KAAKk3N,UAAUlB,QAAQhqN,KAAK8I,MAAQ9U,KAAKk3N,UAAUlB,QAAQ/pN,MAAM6I,MACxFijN,EAAaljN,QAAW7U,KAAK02N,QAAQpuL,KAAK9jC,MAAMkzN,YAAYvrN,OAASnM,KAAK02N,QAAQpuL,KAAK9jC,MAAMkzN,YAAYxrN,IACzG6rN,EAAaljN,QAAW7U,KAAKk3N,UAAUlB,QAAQ9pN,IAAI4I,MAAQ9U,KAAKk3N,UAAUlB,QAAQ7pN,OAAO2I,MACpE,IAAjB9U,KAAKg4N,UACLD,EAAajjN,OAAU9U,KAAKwE,MAAMwxN,QAAQhqN,KAAU,SAIxD+rN,EAAaxrN,GAAKvM,KAAKwE,MAAMkzN,YAAY1rN,KAAOhM,KAAKk3N,UAAUlB,QAAQhqN,KAAK8I,MAC5EijN,EAAavrN,GAAKxM,KAAKwE,MAAMkzN,YAAYxrN,IAAMlM,KAAKk3N,UAAUlB,QAAQ9pN,IAAI4I,MAC1EijN,EAAajjN,OAAU9U,KAAKwE,MAAMkzN,YAAYzrN,MAAQjM,KAAKwE,MAAMkzN,YAAY1rN,KAC7E+rN,EAAajjN,OAAU9U,KAAKk3N,UAAUlB,QAAQhqN,KAAK8I,MAAQ9U,KAAKk3N,UAAUlB,QAAQ/pN,MAAM6I,MACxFijN,EAAaljN,QAAW7U,KAAKwE,MAAMkzN,YAAYvrN,OAASnM,KAAKwE,MAAMkzN,YAAYxrN,IAC/E6rN,EAAaljN,QAAW7U,KAAKk3N,UAAUlB,QAAQ9pN,IAAI4I,MAAQ9U,KAAKk3N,UAAUlB,QAAQ7pN,OAAO2I,MACpE,IAAjB9U,KAAKg4N,UACLD,EAAajjN,OAAU9U,KAAKwE,MAAMwxN,QAAQhqN,KAAU,QAGrD+rN,GAMX5B,EAAY36N,UAAUutM,KAAO,SAAUjB,EAAUn1K,EAAQslM,GACrD,IACIl5N,EAAS,KACb,GAAIiB,KAAK22N,6BAA+B32N,KAAK42N,2BAA4B,CACrE,IAAI52N,KAAK22N,8BAA+B32N,KAAK2mC,IAAI2B,KAAK9jC,MAAM0zN,wBAMxD,OAAOn5N,EALP,GAAKiB,KAAK2mC,IAAIwxL,iBAAmB,GAAMn4N,KAAK2mC,IAAIsB,MAAMzlC,QAAQxC,OAASA,KAAK2mC,IAAIwxL,iBAAmB,GAAqC,GAA7Bn4N,KAAK2mC,IAAIwxL,kBAAyBn4N,KAAK22N,4BAC9I,OAAO53N,EAQnB4zB,EAAS3yB,KAAKo4N,sBAAsBzlM,EAAQm1K,GAC5C,IAAI8tB,EAAU51N,KAAKq4N,aACf3N,EAAY1qN,KAAKs4N,oBACE,IAAZ1C,QAAgD,IAAdlL,IACzCA,EAAY,IAAIz5B,GAAc,IAAI5C,GAAS,EAAG,EAAG,KAErD,IAAIxiK,EAAO7rB,KAAKw3N,cACZe,EAAYv4N,KAAKw4N,kBACjBC,EAAkBz4N,KAAK83N,wBAAwBnlM,GAEnD,GADA3yB,KAAK43N,mBAAmB9vB,EAAUn1K,GACF,iBAArB3yB,KAAKg3N,aAAsD,iBAAnBh3N,KAAK+2N,UAAwB,CAC5E,IAAI7hM,OAAO,EACXA,EAA0B,KAAnBl1B,KAAK+2N,UAAmB/2N,KAAK+2N,UAAY/2N,KAAKg3N,YACrDlvB,EAASmE,WAAW/2K,EAAMrJ,EAAM+pM,EAASlL,EAAW+N,EAAgBlsN,EAAGksN,EAAgBjsN,EAAGisN,EAAgB3jN,MAAO2jN,EAAgB5jN,OAAQ0jN,GACzIx5N,EAAS+oM,EAASmmB,wBAEjB,GAAIjuN,KAAKg3N,uBAAuBpd,IAAY55M,KAAKg3N,uBAAuBvc,GAAW,CACpF,IAAIie,OAAc,EAEdA,EADA14N,KAAKg3N,YAAYliN,OAAS2jN,EAAgB3jN,MAC5B,IAAI27K,GAAWgoC,EAAgBlsN,EAAGksN,EAAgBjsN,EAAGxM,KAAKg3N,YAAYliN,MAAO2jN,EAAgB5jN,QAG7F4jN,EAElB3wB,EAAStkJ,UAAUxjD,KAAKg3N,YAAa0B,EAAYnsN,EAAGmsN,EAAYlsN,EAAGksN,EAAY5jN,MAAO4jN,EAAY7jN,aAE7F7U,KAAKg3N,uBAAuBvJ,IACjCztN,KAAKg3N,YAAYjuB,KAAKjB,EAASuB,YAAaovB,GAKhD,OAH0B,MAAtBz4N,KAAKwE,MAAMwxN,SACXh2N,KAAK24N,gBAAgB7wB,EAAUn1K,GAE5B5zB,GAOXo3N,EAAY36N,UAAUm9N,gBAAkB,SAAU7wB,EAAUn1K,GACpD3yB,KAAK2mC,IAAI2B,KAAK9jC,MAAMo0N,qBAAuB3H,GAAsB4H,SACjElmM,EAAOpmB,GAAKvM,KAAKwE,MAAMwxN,QAAQhqN,KAAK8I,MACpC6d,EAAOnmB,GAAKxM,KAAKwE,MAAMwxN,QAAQ9pN,IAAI4I,MACnC6d,EAAO7d,OAAS9U,KAAKwE,MAAMwxN,QAAQ/pN,MAAM6I,MACzC6d,EAAO9d,QAAU7U,KAAKwE,MAAMwxN,QAAQ7pN,OAAO2I,OAE/C,IAAIgkN,EAAK,IAAIvoC,GAAO59J,EAAOpmB,EAAGomB,EAAOnmB,EAAImmB,EAAO9d,QAC5CkkN,EAAK,IAAIxoC,GAAO59J,EAAOpmB,EAAGomB,EAAOnmB,GACjCu5L,EAAM/lM,KAAKk3N,UAAUlB,QAAQhqN,KAC7BhM,KAAKk3N,UAAUlB,QAAQhqN,KAAKqnN,YAAcvlC,GAAagX,QACvDiB,EAAID,QAAUjY,GAAWmrC,QAG7BlxB,EAAShnJ,SAASilJ,EAAK+yB,EAAIC,GAC3BD,EAAK,IAAIvoC,GAAO59J,EAAOpmB,EAAIomB,EAAO7d,MAAO6d,EAAOnmB,GAChDusN,EAAK,IAAIxoC,GAAO59J,EAAOpmB,EAAIomB,EAAO7d,MAAO6d,EAAOnmB,EAAImmB,EAAO9d,QAC3DkxL,EAAM/lM,KAAKk3N,UAAUlB,QAAQ/pN,MACxB0mB,EAAOpmB,EAAIomB,EAAO7d,MAAUgzL,EAASvT,WAAWz/K,MAASixL,EAAIjxL,MAAQ,IACtEgkN,EAAK,IAAIvoC,GAAOuX,EAASvT,WAAWz/K,MAASixL,EAAIjxL,MAAQ,EAAI6d,EAAOnmB,GACpEusN,EAAK,IAAIxoC,GAAOuX,EAASvT,WAAWz/K,MAASixL,EAAIjxL,MAAQ,EAAI6d,EAAOnmB,EAAImmB,EAAO9d,SAE/E7U,KAAKk3N,UAAUlB,QAAQ/pN,MAAMonN,YAAcvlC,GAAagX,QACxDiB,EAAID,QAAUjY,GAAWmrC,QAE7BlxB,EAAShnJ,SAASilJ,EAAK+yB,EAAIC,GAC3BD,EAAK,IAAIvoC,GAAO59J,EAAOpmB,EAAGomB,EAAOnmB,GACjCusN,EAAK,IAAIxoC,GAAO59J,EAAOpmB,EAAIomB,EAAO7d,MAAO6d,EAAOnmB,GAChDu5L,EAAM/lM,KAAKk3N,UAAUlB,QAAQ9pN,IACzBlM,KAAKk3N,UAAUlB,QAAQ9pN,IAAImnN,YAAcvlC,GAAagX,QACtDiB,EAAID,QAAUjY,GAAWmrC,QAE7BlxB,EAAShnJ,SAASilJ,EAAK+yB,EAAIC,GAC3BD,EAAK,IAAIvoC,GAAO59J,EAAOpmB,EAAIomB,EAAO7d,MAAO6d,EAAOnmB,EAAImmB,EAAO9d,QAC3DkkN,EAAK,IAAIxoC,GAAO59J,EAAOpmB,EAAGomB,EAAOnmB,EAAImmB,EAAO9d,QAC5CkxL,EAAM/lM,KAAKk3N,UAAUlB,QAAQ7pN,OAKzBnM,KAAKk3N,UAAUlB,QAAQ7pN,OAAOknN,YAAcvlC,GAAagX,QACzDiB,EAAID,QAAUjY,GAAWmrC,QAE7BlxB,EAAShnJ,SAASilJ,EAAK+yB,EAAIC,IAO/B5C,EAAY36N,UAAU48N,sBAAwB,SAAUzlM,EAAQyG,GAC5D,IAAIxP,GAAW,EACX+tM,EAAc33N,KAAK2mC,IAAI2B,KAAK9jC,MAAMmzN,YAClCA,EAAc,IACdhlM,EAAS,IAAI89J,GAAW99J,EAAOpmB,EAAIorN,EAAahlM,EAAOnmB,EAAImrN,EAAahlM,EAAO7d,MAAQ6iN,EAAahlM,EAAO9d,OAAS8iN,IAExH,IAAIsB,EAAkBj5N,KAAK2mC,IAAIsB,MAAMzlC,QAAQxC,MAC7C,GAAIA,KAAKk5N,WAAa,EAAG,CAGrB,IAAK,IAFDpwL,EAAO9oC,KAAKk5N,WACZC,EAAa,EACR78N,EAAI28N,EAAiB38N,EAAI28N,EAAkBnwL,EAAMxsC,IAAK,CAC3D,GAAI0D,KAAK2mC,IAAI2B,KAAK9jC,MAAM0zN,wBAAyB,CAC7C,IACIkB,EAAYp5N,KAAK2mC,IAAI2B,KAAKrc,KAAKnX,MAAQskB,EAAEm7J,WAAWz/K,MAAQ9U,KAAK2mC,IAAI2B,KAAKrc,KAAKnX,MAAQskB,EAAEm7J,WAAWz/K,MAOxG,IANI9U,KAAK2mC,IAAI2B,KAAKrc,KAAKnX,MAAQskB,EAAEm7J,WAAWz/K,MAChC6d,EAAOpmB,EAAI4sN,EAAan5N,KAAK2mC,IAAI2B,KAAKvE,QAAQs1L,UAAU/8N,GAAGwY,MAG3DqkN,EAAan5N,KAAK2mC,IAAI2B,KAAKvE,QAAQs1L,UAAU/8N,GAAGwY,OAEhDskN,EACR,MAGRD,GAAcn5N,KAAK2mC,IAAI2B,KAAKvE,QAAQs1L,UAAU/8N,GAAGwY,MAErDqkN,GAAcn5N,KAAK2mC,IAAI2B,KAAK9jC,MAAMmzN,YAClChlM,EAAO7d,MAAQqkN,EAEnB,GAAIn5N,KAAKg4N,QAAU,GAAKh4N,KAAK2mC,IAAIswL,cAAe,CACxCnuL,EAAO9oC,KAAKg4N,QAAhB,IACIsB,EAAkBt5N,KAAK2mC,IAAI2B,KAAKixL,KAAKC,cAAch3N,QAAQxC,KAAK2mC,MAC5C,GAApB2yL,IAEwB,IADxBA,EAAkBt5N,KAAK2mC,IAAI2B,KAAKmP,QAAQj1C,QAAQxC,KAAK2mC,QAEjD/c,GAAW,GAKd,IAFD6vM,EAAc,EAClB,IACSn9N,EAAIg9N,EAAiBh9N,EAAIg9N,EAAkBxwL,EAAMxsC,IAAK,CAC3Dm9N,GAAgB7vM,EAAW5pB,KAAK2mC,IAAI2B,KAAKmP,QAAQiiL,UAAUp9N,GAAGuY,OAAS7U,KAAK2mC,IAAI2B,KAAKixL,KAAKI,OAAOr9N,GAAGuY,OACpG,IAAI8xB,EAAM3mC,KAAK2mC,IAAI2B,KAAKixL,KAAKI,OAAOr9N,GACrB0D,KAAK2mC,IAAI2B,KAAKixL,KAAKC,cAAch3N,QAAQmkC,GAE5C3mC,KAAK2mC,IAAIsB,MAAMzlC,QAAQxC,MACvCy5N,GAAez5N,KAAK2mC,IAAI2B,KAAK9jC,MAAMmzN,YAMnChlM,EAAO9d,OAAS4kN,EAEXz5N,KAAK2mC,IAAIizL,mBACVjnM,EAAO9d,OAAS4kN,GAGxB,OAAO9mM,GAOXwjM,EAAY36N,UAAUg8N,YAAc,WAChC,YAA+B,IAApBx3N,KAAKwE,MAAMqnB,MAA2C,MAAnB7rB,KAAKwE,MAAMqnB,KAC9C7rB,KAAKwE,MAAMqnB,UAEkB,IAAxB7rB,KAAK2mC,IAAIniC,MAAMqnB,MAA+C,MAAvB7rB,KAAK2mC,IAAIniC,MAAMqnB,KAC3D7rB,KAAK2mC,IAAIniC,MAAMqnB,UAEmB,IAA7B7rB,KAAK2mC,IAAI2B,KAAK9jC,MAAMqnB,MAAoD,MAA5B7rB,KAAK2mC,IAAI2B,KAAK9jC,MAAMqnB,KACrE7rB,KAAK2mC,IAAI2B,KAAK9jC,MAAMqnB,KAGpB0uK,GAAY4O,aAO3BgtB,EAAY36N,UAAU88N,aAAe,WACjC,YAAoC,IAAzBt4N,KAAKwE,MAAMkmN,WAAqD,MAAxB1qN,KAAKwE,MAAMkmN,UACnD1qN,KAAKwE,MAAMkmN,eAEuB,IAA7B1qN,KAAK2mC,IAAIniC,MAAMkmN,WAAyD,MAA5B1qN,KAAK2mC,IAAIniC,MAAMkmN,UAChE1qN,KAAK2mC,IAAIniC,MAAMkmN,UAGf1qN,KAAK2mC,IAAI2B,KAAK9jC,MAAMkmN,WAOnCyL,EAAY36N,UAAU68N,WAAa,WAC/B,YAAkC,IAAvBr4N,KAAKwE,MAAMoxN,SAAiD,MAAtB51N,KAAKwE,MAAMoxN,QACjD51N,KAAKwE,MAAMoxN,aAEqB,IAA3B51N,KAAK2mC,IAAIniC,MAAMoxN,SAAqD,MAA1B51N,KAAK2mC,IAAIniC,MAAMoxN,QAC9D51N,KAAK2mC,IAAIniC,MAAMoxN,QAGf51N,KAAK2mC,IAAI2B,KAAK9jC,MAAMoxN,SAOnCO,EAAY36N,UAAUq8N,mBAAqB,WACvC,YAA0C,IAA/B73N,KAAKwE,MAAM+wN,iBAAiE,MAA9Bv1N,KAAKwE,MAAM+wN,gBACzDv1N,KAAKwE,MAAM+wN,qBAE6B,IAAnCv1N,KAAK2mC,IAAIniC,MAAM+wN,iBAAqE,MAAlCv1N,KAAK2mC,IAAIniC,MAAM+wN,gBACtEv1N,KAAK2mC,IAAIniC,MAAM+wN,gBAGfv1N,KAAK2mC,IAAI2B,KAAK9jC,MAAM+wN,iBAOnCY,EAAY36N,UAAUg9N,gBAAkB,WACpC,YAAuC,IAA5Bx4N,KAAKwE,MAAMskM,cAA2D,MAA3B9oM,KAAKwE,MAAMskM,aACtD9oM,KAAKwE,MAAMskM,aAGX9oM,KAAK8oM,cAOpBqtB,EAAY36N,UAAU27N,cAAgB,WAGlC,IAAIriN,EAAQ9U,KAAK65N,iBAEa,MAA1B75N,KAAKwE,MAAMkzN,kBAAyD,IAA3B13N,KAAKwE,MAAMkzN,aACpD5iN,GAAU9U,KAAK02N,QAAQpuL,KAAK9jC,MAAMkzN,YAAYzrN,MAAQjM,KAAK02N,QAAQpuL,KAAK9jC,MAAMkzN,YAAY1rN,KAC1F8I,GAAU9U,KAAKwE,MAAMwxN,QAAQhqN,KAAK8I,MAAQ9U,KAAKwE,MAAMwxN,QAAQ/pN,MAAM6I,QAGnEA,GAAU9U,KAAKwE,MAAMkzN,YAAYzrN,MAAQjM,KAAKwE,MAAMkzN,YAAY1rN,KAChE8I,GAAU9U,KAAKwE,MAAMwxN,QAAQhqN,KAAK8I,MAAQ9U,KAAKwE,MAAMwxN,QAAQ/pN,MAAM6I,OAEvE,IAAID,EAAS,EACT0iN,EAAW,IAAItjC,GACnB,GAAgC,iBAArBj0L,KAAKg3N,aAA4D,iBAAzBh3N,KAAK6uM,gBAA8B,CAClF,IAAI1zG,EAAen7F,KAAKg3N,YAIxBniN,GAFU0iN,EAASpjC,OAAOh5F,EAAcn7F,KAAKw3N,cAAex3N,KAAK8oM,aAAc,IAAItY,GAAM17K,EAAO,IAAI,EAAO,IAAI07K,GAAM,EAAG,IAE1GsG,WAAWjiL,YAExB,GAAI7U,KAAKg3N,uBAAuBpd,IAAY55M,KAAKg3N,uBAAuBvc,GACzE5lM,GAAU7U,KAAKg3N,YAAYniN,YAE1B,GAAI7U,KAAKg3N,uBAAuBvJ,GAAgB,CACjD,IAAIgK,EAAUz3N,KAAKg3N,YAInBniN,GAFU0iN,EAASpjC,OAAOsjC,EAAQ7rM,KAAM6rM,EAAQ5rM,KAAM4rM,EAAQ3uB,aAAc,IAAItY,GAAM17K,EAAO,IAAI,EAAO,IAAI07K,GAAM,EAAG,IAEvGsG,WAAWjiL,OAW7B,OATAA,GAA6E,GAAlE7U,KAAKwE,MAAMwxN,QAAQ9pN,IAAI4I,MAAQ9U,KAAKwE,MAAMwxN,QAAQ7pN,OAAO2I,OAEtC,MAA1B9U,KAAKwE,MAAMkzN,kBAAyD,IAA3B13N,KAAKwE,MAAMkzN,YACpD7iN,GAAW7U,KAAK2mC,IAAI2B,KAAK9jC,MAAMkzN,YAAYxrN,IAAMlM,KAAK2mC,IAAI2B,KAAK9jC,MAAMkzN,YAAYvrN,OAGjF0I,GAAW7U,KAAKwE,MAAMkzN,YAAYxrN,IAAMlM,KAAKwE,MAAMkzN,YAAYvrN,OAEnE0I,GAAU7U,KAAK2mC,IAAI2B,KAAK9jC,MAAMmzN,aAOlCxB,EAAY36N,UAAUq+N,eAAiB,WAInC,IAAK,IAHDC,EAAY95N,KAAK2mC,IAAIsB,MAAMzlC,QAAQxC,MACnCk5N,EAAal5N,KAAKk5N,WAClBpkN,EAAQ,EACHxY,EAAI,EAAGA,EAAI48N,EAAY58N,IAC5BwY,GAAS9U,KAAK2mC,IAAI2B,KAAKvE,QAAQs1L,UAAUS,EAAYx9N,GAAGwY,MAE5D,OAAOA,GAEJqhN,KAQP4D,cAMA,SAASA,EAAsBpzL,GAK3B3mC,KAAKioC,SACLjoC,KAAK02N,QAAU/vL,EA0CnB,OAnCAozL,EAAsBv+N,UAAU85N,QAAU,SAAU/jN,GAChD,GAAIA,EAAQ,GAAKA,GAASvR,KAAK6d,MAC3B,MAAM,IAAIjd,MAAM,4BAEpB,OAAOZ,KAAKioC,MAAM12B,IAEtB9S,OAAOkJ,eAAeoyN,EAAsBv+N,UAAW,SAKnDgM,IAAK,WACD,OAAOxH,KAAKioC,MAAMrrC,QAEtB6K,YAAY,EACZC,cAAc,IAElBqyN,EAAsBv+N,UAAU0I,IAAM,SAAUklC,GAC5C,QAAoB,IAATA,EAAsB,CAC7B,IAAI4wL,EAAW,IAAI7D,GAEnB,OADAn2N,KAAKkE,IAAI81N,GACF5wL,EAGPA,EAAKzC,IAAM3mC,KAAK02N,QAChB12N,KAAKioC,MAAM3jC,KAAK8kC,IAOxB2wL,EAAsBv+N,UAAUgH,QAAU,SAAU4mC,GAChD,OAAOppC,KAAKioC,MAAMzlC,QAAQ4mC,IAEvB2wL,KCjqBPE,cAMA,SAASA,EAAc3xL,GAMnBtoC,KAAKk6N,YAAc,EACnBl6N,KAAKsoC,KAAOA,EAkChB,OAhCA7pC,OAAOkJ,eAAesyN,EAAcz+N,UAAW,SAK3CgM,IAAK,WACD,OAAOxH,KAAKk6N,aAEhB/yN,IAAK,SAAUhK,GACX6C,KAAKm6N,eAAgB,EACrBn6N,KAAKk6N,YAAc/8N,GAEvBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAesyN,EAAcz+N,UAAW,UAK3CgM,IAAK,WAID,OAHyB,MAArBxH,KAAK8oM,eACL9oM,KAAK8oM,aAAe,IAAI9W,IAErBhyL,KAAK8oM,cAEhB3hM,IAAK,SAAUhK,GACX6C,KAAK8oM,aAAe3rM,GAExBsK,YAAY,EACZC,cAAc,IAEXuyN,KAQPG,cAOA,SAASA,EAAwB9xL,GAK7BtoC,KAAKq6N,mBAKLr6N,KAAKk6N,YAAc,EACnBl6N,KAAKsoC,KAAOA,EACZtoC,KAAKq6N,mBA0HT,OAnHAD,EAAwB5+N,UAAU0I,IAAM,SAAU2Z,GAI9C,IAAK,IAAIvhB,EAAI,EAAGA,EAAIuhB,EAAOvhB,IAAK,CAC5B0D,KAAKq6N,gBAAgB/1N,KAAK,IAAI21N,GAAcj6N,KAAKsoC,OACjD,IAAK,IAAI/2B,EAAQ,EAAGA,EAAQvR,KAAKsoC,KAAKixL,KAAK17M,MAAOtM,IAAS,CACvD,IAAIo1B,EAAM3mC,KAAKsoC,KAAKixL,KAAKI,OAAOpoN,GAC5B63B,EAAO,IAAI+sL,GACf/sL,EAAKjsC,MAAQ,GACbwpC,EAAIsB,MAAM/jC,IAAIklC,MAS1B3qC,OAAOkJ,eAAeyyN,EAAwB5+N,UAAW,SAKrDgM,IAAK,WACD,OAAOxH,KAAKq6N,gBAAgBz9N,QAEhC6K,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeyyN,EAAwB5+N,UAAW,SAKrDgM,IAAK,WAQD,OAPyB,IAArBxH,KAAKk6N,cACLl6N,KAAKk6N,YAAcl6N,KAAKs6N,uBAEG,IAA3Bt6N,KAAKsoC,KAAKiyL,cAAsBv6N,KAAKk6N,cAAgBl6N,KAAKsoC,KAAKiyL,cAAiBv6N,KAAKsoC,KAAK9jC,MAAM0zN,0BAChGl4N,KAAKk6N,YAAcl6N,KAAKsoC,KAAKiyL,aAC7Bv6N,KAAKsoC,KAAKkyL,aAAc,GAErBx6N,KAAKk6N,aAEhBzyN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeyyN,EAAwB5+N,UAAW,WAKrDgM,IAAK,WACD,OAAOxH,KAAKq6N,iBAEhB5yN,YAAY,EACZC,cAAc,IAMlB0yN,EAAwB5+N,UAAU69N,UAAY,SAAU9nN,GACpD,GAAIA,GAAS,GAAKA,GAASvR,KAAK+jC,QAAQnnC,OACpC,OAAOoD,KAAK+jC,QAAQxyB,GAGpB,MAAM3Q,MAAM,0CAA4C2Q,IAQhE6oN,EAAwB5+N,UAAU8+N,oBAAsB,WAGpD,IAAK,IAFDnB,EAAa,EAER78N,EAAI,EAAGuhB,EAAQ7d,KAAKq6N,gBAAgBz9N,OAAQN,EAAIuhB,EAAOvhB,IAC5D68N,GAAcn5N,KAAKq6N,gBAAgB/9N,GAAGwY,MAE1C,OAAOqkN,GAMXiB,EAAwB5+N,UAAUi/N,iBAAmB,SAAUtB,GAI3D,IAAK,IAHDzT,KAEAgV,EAAY16N,KAAK6d,MACZvhB,EAAI,EAAGA,EAAI0D,KAAK6d,MAAOvhB,IACxB0D,KAAKsoC,KAAKkyL,aAAerB,GAAc,IAAMn5N,KAAKq6N,gBAAgB/9N,GAAG69N,cACrEn6N,KAAKq6N,gBAAgB/9N,GAAGwY,MAAQ,GAGhC4wM,EAAOppN,GAAK0D,KAAKq6N,gBAAgB/9N,GAAGwY,MAChC9U,KAAKq6N,gBAAgB/9N,GAAGwY,MAAQ,GAAK9U,KAAKq6N,gBAAgB/9N,GAAG69N,eAC7DhB,GAAcn5N,KAAKq6N,gBAAgB/9N,GAAGwY,MACtC4lN,KAGAhV,EAAOppN,GAAK,GAIxB,IAASA,EAAI,EAAGA,EAAI0D,KAAK6d,MAAOvhB,IAAK,CACjC,IAAIwY,EAAQqkN,EAAauB,EACrBhV,EAAOppN,IAAM,IACbopN,EAAOppN,GAAKwY,GAGpB,OAAO4wM,GAEJ0U,KCpMPO,cAMA,SAASA,EAAWryL,GAKhBtoC,KAAK46N,qBAAuB,EAM5B56N,KAAK66N,gBAAiB,EAMtB76N,KAAK86N,oBAAqB,EAC1B96N,KAAK+6N,QAAUzyL,EA2MnB,OAzMA7pC,OAAOkJ,eAAegzN,EAAWn/N,UAAW,iBAMxCgM,IAAK,WACD,OAAOxH,KAAKg7N,gBAEhB7zN,IAAK,SAAUhK,GACX6C,KAAKg7N,eAAiB79N,GAE1BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAegzN,EAAWn/N,UAAW,SAKxCgM,IAAK,WAID,OAHsB,MAAlBxH,KAAKi7N,YACLj7N,KAAKi7N,UAAY,IAAIlB,GAAsB/5N,OAExCA,KAAKi7N,WAEhBxzN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAegzN,EAAWn/N,UAAW,QAKxCgM,IAAK,WACD,OAAOxH,KAAK+6N,SAEhB5zN,IAAK,SAAUhK,GACX6C,KAAK+6N,QAAU59N,GAEnBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAegzN,EAAWn/N,UAAW,SAKxCgM,IAAK,WAKD,YAJ6B,IAAlBxH,KAAKk7N,WACZl7N,KAAKk7N,SAAW,IAAI/F,GACpBn1N,KAAKk7N,SAASjF,UAAUj2N,OAErBA,KAAKk7N,UAEhB/zN,IAAK,SAAUhK,GACX6C,KAAKk7N,SAAW/9N,EAChB,IAAK,IAAIb,EAAI,EAAGA,EAAI0D,KAAKioC,MAAMpqB,MAAOvhB,IAClC0D,KAAKioC,MAAMqtL,QAAQh5N,GAAGkI,MAAMwxN,QAAU74N,EAAMkgC,YAClB,IAAflgC,EAAM0uB,OACb7rB,KAAKioC,MAAMqtL,QAAQh5N,GAAGkI,MAAMqnB,KAAO1uB,EAAM0uB,WAER,IAA1B1uB,EAAMo4N,kBACbv1N,KAAKioC,MAAMqtL,QAAQh5N,GAAGkI,MAAM+wN,gBAAkBp4N,EAAMo4N,sBAEzB,IAApBp4N,EAAMutN,YACb1qN,KAAKioC,MAAMqtL,QAAQh5N,GAAGkI,MAAMkmN,UAAYvtN,EAAMutN,gBAErB,IAAlBvtN,EAAMy4N,UACb51N,KAAKioC,MAAMqtL,QAAQh5N,GAAGkI,MAAMoxN,QAAUz4N,EAAMy4N,UAIxDnuN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAegzN,EAAWn/N,UAAW,kBAKxCgM,IAAK,WAID,YAHuC,IAA5BxH,KAAKm7N,qBACZn7N,KAAKm7N,mBAAqB,GAEvBn7N,KAAKm7N,oBAEhBh0N,IAAK,SAAUhK,GACX6C,KAAKm7N,mBAAqBh+N,GAE9BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAegzN,EAAWn/N,UAAW,oBACxCgM,IAAK,WACD,OAAOxH,KAAK46N,sBAEhBzzN,IAAK,SAAUhK,GACX6C,KAAK46N,qBAAuBz9N,GAEhCsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAegzN,EAAWn/N,UAAW,UAKxCgM,IAAK,WAID,OAHKxH,KAAK66N,iBACN76N,KAAKumC,UAAYvmC,KAAKm3N,iBAEnBn3N,KAAKumC,WAEhBp/B,IAAK,SAAUhK,GACX6C,KAAKumC,UAAYppC,EACjB6C,KAAK66N,gBAAiB,GAE1BpzN,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAegzN,EAAWn/N,UAAW,oBAKxCgM,IAAK,WACD,OAAOxH,KAAKo7N,mBAEhBj0N,IAAK,SAAUhK,GACX6C,KAAKo7N,kBAAoBj+N,GAE7BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAegzN,EAAWn/N,UAAW,oBAKxCgM,IAAK,WACD,OAAOxH,KAAK86N,oBAEhB3zN,IAAK,SAAUhK,GACX6C,KAAK86N,mBAAqB39N,GAE9BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAegzN,EAAWn/N,UAAW,YAKxCgM,IAAK,WACD,OAAOxH,KAAKsoC,KAAKixL,KAAKC,cAAch3N,QAAQxC,OAEhDyH,YAAY,EACZC,cAAc,IAOlBizN,EAAWn/N,UAAU27N,cAAgB,WACjC,IACI5wL,EADAgwL,EAAyB,EAEzB74I,EAAY,EAIhBn3C,EAAYvmC,KAAKioC,MAAMqtL,QAAQ,GAAGzgN,OAElC,IAAK,IAAIvY,EAAI,EAAGA,EAAI0D,KAAKioC,MAAMpqB,MAAOvhB,IAAK,CACvC,IAAI8sC,EAAOppC,KAAKioC,MAAMqtL,QAAQh5N,GAE1B8sC,EAAKmtL,uBAAyBA,IAC9BA,EAAyBntL,EAAKmtL,wBAMlCv2N,KAAK45N,kBAAmB,EACpBxwL,EAAK4uL,QAAU,EACXt6I,EAAYt0C,EAAKv0B,SACjB6oE,EAAYt0C,EAAKv0B,QAIzB0xB,EAAY16B,KAAKC,IAAIy6B,EAAW6C,EAAKv0B,QAQzC,OANkB,IAAd0xB,EACAA,EAAYm3C,EAEP64I,EAAyB,IAC9BhwL,GAAagwL,GAEVhwL,GAEJo0L,KAOPU,cAMA,SAASA,EAAqB/yL,GAC1BtoC,KAAKu5N,QACLv5N,KAAKsoC,KAAOA,EAoDhB,OAlDA7pC,OAAOkJ,eAAe0zN,EAAqB7/N,UAAW,SAMlDgM,IAAK,WACD,OAAOxH,KAAKu5N,KAAK38N,QAErB6K,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe0zN,EAAqB7/N,UAAW,iBAMlDgM,IAAK,WACD,OAAOxH,KAAKu5N,MAEhB9xN,YAAY,EACZC,cAAc,IAElB2zN,EAAqB7/N,UAAU8/N,OAAS,SAAUx1K,GAC9C,QAAmB,IAARA,EAAqB,CAC5B,IAAIy1K,EAAU,IAAIZ,GAAW36N,KAAKsoC,MAElC,OADAtoC,KAAKs7N,OAAOC,GACLA,EAOP,GAJAz1K,EAAIthD,MAAM6wN,mBAAmBr1N,KAAKsoC,KAAK9jC,MAAM+wN,iBAC7CzvK,EAAIthD,MAAM29K,QAAQniL,KAAKsoC,KAAK9jC,MAAMqnB,MAClCi6B,EAAIthD,MAAMixN,aAAaz1N,KAAKsoC,KAAK9jC,MAAMkmN,WACvC5kK,EAAIthD,MAAMmxN,WAAW31N,KAAKsoC,KAAK9jC,MAAMoxN,SACb,IAApB9vK,EAAI7d,MAAMpqB,MACV,IAAK,IAAIvhB,EAAI,EAAGA,EAAI0D,KAAKsoC,KAAKvE,QAAQlmB,MAAOvhB,IACzCwpD,EAAI7d,MAAM/jC,IAAI,IAAIiyN,IAG1Bn2N,KAAKu5N,KAAKj1N,KAAKwhD,IAOvBu1K,EAAqB7/N,UAAUm+N,OAAS,SAAUpoN,GAC9C,OAAOvR,KAAKu5N,KAAKhoN,IAEd8pN,KAOPG,cAMA,SAASA,EAAwBlzL,GAK7BtoC,KAAKu5N,QACLv5N,KAAKsoC,KAAOA,EACZtoC,KAAKu5N,QA2CT,OApCAiC,EAAwBhgO,UAAUk+N,UAAY,SAAUnoN,GAIpD,OAAQvR,KAAKu5N,KAAKhoN,IAEtB9S,OAAOkJ,eAAe6zN,EAAwBhgO,UAAW,SAKrDgM,IAAK,WACD,OAAOxH,KAAKu5N,KAAK38N,QAErB6K,YAAY,EACZC,cAAc,IAElB8zN,EAAwBhgO,UAAU0I,IAAM,SAAU4hD,GAC9C,GAAmB,iBAARA,EAAkB,CAEzB,IAAK,IADDnf,OAAM,EACDrqC,EAAI,EAAGA,EAAIwpD,EAAKxpD,IAAK,CAC1BqqC,EAAM,IAAIg0L,GAAW36N,KAAKsoC,MAC1B,IAAK,IAAIjmB,EAAI,EAAGA,EAAIriB,KAAKsoC,KAAKvE,QAAQlmB,MAAOwE,IACzCskB,EAAIsB,MAAM/jC,IAAI,IAAIiyN,IAEtBn2N,KAAKu5N,KAAKj1N,KAAKqiC,GAEnB,OAAO3mC,KAAKu5N,KAGZv5N,KAAKu5N,KAAKj1N,KAAKwhD,IAGvB01K,EAAwBhgO,UAAUgH,QAAU,SAAUmkC,GAClD,OAAO3mC,KAAKu5N,KAAK/2N,QAAQmkC,IAEtB60L,KC1WPj+K,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GA2BxC69K,GAA+C,YAM/C,SAASA,EAAoB3P,GAQzB,YAN0B,IAAfA,EACC1tK,EAAO98C,KAAKtB,OAASA,KAGrBo+C,EAAO98C,KAAKtB,KAAM8rN,IAAe9rN,KAIjD,OAfAu9C,GAAUk+K,EAAqBr9K,GAexBq9K,GACT5P,IAEE6P,GAAmC,YAOnC,SAASA,IACL,IAAI37N,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAyCjC,OApCAD,EAAM47N,SAAW,IAAInrC,GAAM,EAAG,GAK9BzwL,EAAM67N,cAAe,EAKrB77N,EAAM87N,WAAa,IAAIprC,GAKvB1wL,EAAM+7N,uBAKN/7N,EAAMmiD,MAAO,EAKbniD,EAAMg8N,gBAKNh8N,EAAM0wC,gBAAkB,IAAI8/I,GAAO,EAAG,GAKtCxwL,EAAMi8N,UAAW,EACVj8N,EA84BX,OA97BAw9C,GAAUm+K,EAASt9K,GAkDnB3/C,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,sBAMrCgM,IAAK,WACD,YAAsC,IAAvBxH,KAAKi8N,eAA+D,cAAvBj8N,KAAKi8N,eAErEx0N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,oBAKrCgM,IAAK,WACD,YAAoC,IAArBxH,KAAKk8N,aAA2D,cAArBl8N,KAAKk8N,aAEnEz0N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,wBAKrCgM,IAAK,WACD,YAAwC,IAAzBxH,KAAKm8N,iBAExB10N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,sBAKrCgM,IAAK,WACD,YAAsC,IAAvBxH,KAAKo8N,eAExB30N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,gBAKrCgM,IAAK,WAID,OAH0B,MAAtBxH,KAAKq8N,oBAAuD,IAAvBr8N,KAAKq8N,gBAC1Cr8N,KAAKq8N,eAAgB,GAElBr8N,KAAKq8N,eAEhBl1N,IAAK,SAAUhK,GACX6C,KAAKq8N,cAAgBl/N,GAEzBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,4BAKrCgM,IAAK,WACD,OAAOxH,KAAKg8N,UAEhB70N,IAAK,SAAUhK,GACX6C,KAAKg8N,SAAW7+N,GAEpBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,WAKrCgM,IAAK,WAID,OAHwB,MAApBxH,KAAKs8N,kBAAmD,IAArBt8N,KAAKs8N,cACxCt8N,KAAKs8N,YAAc,IAAIlC,GAAwBp6N,OAE5CA,KAAKs8N,aAEhB70N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,QAKrCgM,IAAK,WAID,OAHqB,MAAjBxH,KAAKu8N,WACLv8N,KAAKu8N,SAAW,IAAIlB,GAAqBr7N,OAEtCA,KAAKu8N,UAEhB90N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,WAKrCgM,IAAK,WAID,OAHwB,MAApBxH,KAAKw8N,kBAAmD,IAArBx8N,KAAKw8N,cACxCx8N,KAAKw8N,YAAc,IAAIhB,GAAwBx7N,OAE5CA,KAAKw8N,aAEhB/0N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,gBAKrCgM,IAAK,WACD,OAAOxH,KAAKy8N,kBAEhBt1N,IAAK,SAAUhK,GACX6C,KAAKy8N,iBAAmBt/N,GAE5BsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,SAKrCgM,IAAK,WAID,OAHsB,MAAlBxH,KAAK08N,YACL18N,KAAK08N,UAAY,IAAIlI,IAElBx0N,KAAK08N,WAEhBv1N,IAAK,SAAUhK,GACW,MAAlB6C,KAAK08N,YACL18N,KAAK08N,UAAYv/N,IAGzBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,eAKrCgM,IAAK,WACD,OAAOxH,KAAK28N,WAEhBx1N,IAAK,SAAUhK,GACX6C,KAAK28N,UAAYx/N,GAErBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,eAKrCgM,IAAK,WACD,OAAOxH,KAAK48N,WAEhBz1N,IAAK,SAAUhK,GACX6C,KAAK48N,UAAYz/N,GAErBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe+zN,EAAQlgO,UAAW,QAKrCgM,IAAK,WACD,OAA4B,IAAxBxH,KAAK27N,SAAS7mN,OAAwC,IAAzB9U,KAAK27N,SAAS9mN,QAC3C7U,KAAK27N,SAAW37N,KAAK68N,UACd78N,KAAK27N,UAGL37N,KAAK27N,UAGpBx0N,IAAK,SAAUhK,GACX6C,KAAK27N,SAAWx+N,GAEpBsK,YAAY,EACZC,cAAc,IAElBg0N,EAAQlgO,UAAUutM,KAAO,SAAUrY,EAAMC,EAAMC,EAAMC,GACjD,GAAIF,aAAgBJ,SAAgC,IAAfI,EAAK77K,YAAyC,IAAT87K,EACtE,OAAO5wL,KAAK6nM,WAAWnX,EAAMC,EAAKpkL,EAAGokL,EAAKnkL,GAEzC,GAAoB,iBAATmkL,GAAqC,iBAATC,QAAqC,IAATC,EACpE,OAAO7wL,KAAK6nM,WAAWnX,EAAMC,EAAMC,EAAM,MAExC,GAAID,aAAgBF,SAAoC,IAAfE,EAAK77K,YAAyC,IAAT87K,EAC/E,OAAO5wL,KAAK6nM,WAAWnX,EAAMC,EAAM,MAElC,GAAIA,aAAgBJ,SAAgC,IAAfI,EAAK77K,OAAyB87K,aAAgBi7B,GACpF,OAAO7rN,KAAK6nM,WAAWnX,EAAMC,EAAKpkL,EAAGokL,EAAKnkL,EAAGokL,GAE5C,GAAoB,iBAATD,GAAqC,iBAATC,IAAsBC,aAAgBg7B,IAA2B,MAARh7B,GAAe,CAChH,IAAI/7K,EAAS47K,EAAKoX,SAASvT,WAAWz/K,MAAQ67K,EAC1C4c,EAAkB,IAAI9c,GAAWE,EAAMC,EAAM97K,EAAO,GACxD,OAAO9U,KAAK6nM,WAAWnX,EAAM6c,EAAiB1c,GAE7C,OAAIF,aAAgBF,SAAoC,IAAfE,EAAK77K,OAAyC,kBAAT87K,EACxE5wL,KAAK6nM,WAAWnX,EAAMC,EAAM,MAG5B3wL,KAAK6nM,WAAWnX,EAAMC,EAAMC,IAO3C8qC,EAAQlgO,UAAUqhO,QAAU,WAGxB,IAAK,IAFDhoN,EAAS,EACTC,EAAQ9U,KAAK+jC,QAAQjvB,MAChBxY,EAAI,EAAGA,EAAI0D,KAAKy3C,QAAQ55B,MAAOvhB,IAAK,CAEzCuY,GADU7U,KAAKy3C,QAAQiiL,UAAUp9N,GACnBuY,OAElB,IAASvY,EAAI,EAAGA,EAAI0D,KAAKu5N,KAAK17M,MAAOvhB,IAAK,CAEtCuY,GADU7U,KAAKu5N,KAAKI,OAAOr9N,GACbuY,OAElB,OAAO,IAAI27K,GAAM17K,EAAOD,IAE5B6mN,EAAQlgO,UAAU24L,OAAS,SAAUl7G,EAAO6jJ,GACxC,QAA8B,IAAnBA,EAAgC,CACvC98N,KAAK+8N,UACL/8N,KAAKwsN,aAAevzI,EAAM1gD,OAC1Bv4B,KAAKg9N,aAAe/jJ,EAAMtmD,OAE1B,OADa3yB,KAAKm0L,OAAOl7G,GAAO,GAIhC,OAAOj5E,KAAK4rN,eAAe3yI,IAGnCyiJ,EAAQlgO,UAAUuhO,QAAU,WAMxB,IAAK,IALDtG,EAEAwG,EADAjF,EAAU,EAEVsB,EAAkB,EAClB4D,EAAWl9N,KAAKy3C,QAAQ55B,MACnBvhB,EAAI,EAAGA,EAAI4gO,EAAU5gO,IAG1B,IAAK,IAFDqqC,EAAM3mC,KAAKy3C,QAAQiiL,UAAUp9N,GAC7B6gO,EAAWx2L,EAAIsB,MAAMpqB,MAChBwE,EAAI,EAAGA,EAAI86M,EAAU96M,IAAK,CAC/B,IAAI+mB,EAAOzC,EAAIsB,MAAMqtL,QAAQjzM,GAE7B,IAAK+mB,EAAKg0L,sBAAwBh0L,EAAKi0L,qBAAuBj0L,EAAK8vL,WAAa,GAAK9vL,EAAK4uL,QAAU,GAAI,CACpG,GAAI5uL,EAAK8vL,WAAa72M,EAAIskB,EAAIsB,MAAMpqB,MAChC,MAAM,IAAIjd,MAAM,iCAAmCyhB,EAAE3V,WAAa,WAAapQ,EAAEoQ,YAErF,GAAI08B,EAAK4uL,QAAU17N,EAAI0D,KAAKy3C,QAAQ55B,MAChC,MAAM,IAAIjd,MAAM,oCAAsCyhB,EAAE3V,WAAa,WAAapQ,EAAEoQ,YAKxF,GAAI08B,EAAK8vL,WAAa,GAAK9vL,EAAK4uL,QAAU,EAAG,CAQzC,IAPAvB,EAAUrtL,EAAK8vL,WACflB,EAAU5uL,EAAK4uL,QACfiF,EAAmB56M,EACnBi3M,EAAkBh9N,EAClB8sC,EAAKk0L,kBAAmB,EACxBl0L,EAAKm0L,iBAAkB,EAEhB9G,EAAU,GACbwG,IACAt2L,EAAIsB,MAAMqtL,QAAQ2H,GAAkBG,qBAAsB,EAC1Dz2L,EAAIsB,MAAMqtL,QAAQ2H,GAAkBI,oBAAqB,EACzD12L,EAAIsB,MAAMqtL,QAAQ2H,GAAkBjF,QAAUA,EAC9CvB,IAKJ,IAHAwG,EAAmB56M,EACnBo0M,EAAUrtL,EAAK8vL,WAERlB,EAAU,GAAG,CAKhB,IAJAsB,IACAt5N,KAAKy3C,QAAQiiL,UAAUJ,GAAiBrxL,MAAMqtL,QAAQjzM,GAAGg7M,oBAAqB,EAC9Er9N,KAAKy3C,QAAQiiL,UAAUJ,GAAiBrxL,MAAMqtL,QAAQ2H,GAAkBI,oBAAqB,EAC7FrF,IACOvB,EAAU,GACbwG,IACAj9N,KAAKy3C,QAAQiiL,UAAUJ,GAAiBrxL,MAAMqtL,QAAQ2H,GAAkBG,qBAAsB,EAC9Fp9N,KAAKy3C,QAAQiiL,UAAUJ,GAAiBrxL,MAAMqtL,QAAQ2H,GAAkBI,oBAAqB,EAC7F5G,IAEJA,EAAUrtL,EAAK8vL,WACf+D,EAAmB56M,QAGtB,GAAI+mB,EAAK8vL,WAAa,GAAsB,IAAjB9vL,EAAK4uL,QAKjC,IAJAvB,EAAUrtL,EAAK8vL,WACf+D,EAAmB56M,EACnB+mB,EAAKk0L,kBAAmB,EAEjB7G,EAAU,GACbwG,IACAt2L,EAAIsB,MAAMqtL,QAAQ2H,GAAkBG,qBAAsB,EAC1D3G,SAGH,GAAwB,IAApBrtL,EAAK8vL,YAAoB9vL,EAAK4uL,QAAU,EAI7C,IAHAA,EAAU5uL,EAAK4uL,QACfsB,EAAkBh9N,EAEX07N,EAAU,GACbsB,IACAt5N,KAAKy3C,QAAQiiL,UAAUJ,GAAiBrxL,MAAMqtL,QAAQjzM,GAAGg7M,oBAAqB,EAC9ErF,OAWxB0D,EAAQlgO,UAAUgiO,UAAY,SAAUjlM,GAEpC,OADQA,GAOZmjM,EAAQlgO,UAAUowN,eAAiB,SAAU3yI,GACzCj5E,KAAKu6N,aAAethJ,EAAMtmD,OAAO7d,MACpB9U,KAAKw9N,UAAUvkJ,EAAM1gD,QAElC,GADAv4B,KAAKqpM,YAAcpwH,EAAMg4B,KACA,OAArBjxG,KAAKqpM,YAML,MAAMzoM,MAAM,4BALKZ,KAAKqpM,YAAYwU,gBAAgBhpM,OAClC7U,KAAKqpM,YAAYwU,gBAAgB/oM,MACjD9U,KAAKy9N,kBAAoBz9N,KAAKqpM,YAAYwU,gBAK9C79M,KAAK09N,gBAAkB19N,KAAKqpM,YAAYvB,SACxC,IAAIv2L,EAAQ,EAIZ,GAHAA,EAAQvR,KAAK09N,gBAAgBzsH,KAAKg+F,QAAQzsM,QAAQxC,KAAK09N,gBAAgBzsH,MACvEjxG,KAAK87N,oBAAoBx3N,KAAKiN,GAC9BvR,KAAK6sN,cAAgB,IAAIp8B,GAAW,IAAIF,GAAOt3G,EAAMtmD,OAAOpmB,EAAG0sE,EAAMtmD,OAAOnmB,GAAIxM,KAAK09N,gBAAgBnpC,YAC7E,IAApBv0L,KAAKu5N,KAAK17M,MACV7d,KAAK6sN,cAAc/3M,MAASmkE,EAAMtmD,OAAO7d,MAAQ,EAAKmkE,EAAMtmD,OAAO7d,MAC9D9U,KAAK6sN,cAAc/3M,MAAQ9U,KAAKu5N,KAAKI,OAAO,GAAG1xL,MAAMqtL,QAAQ,GAAG9wN,MAAMwxN,QAAQhqN,KAAK8I,MAAQ,MAE/F,CAAA,GAA2B,IAAvB9U,KAAKy3C,QAAQ55B,MAIlB,MAAMjd,MAAM,sCAHZZ,KAAK6sN,cAAc/3M,MAAQmkE,EAAMtmD,OAAO7d,MAK5C9U,KAAKg2B,cAAgB,IAAIu6J,GAAOt3G,EAAMtmD,OAAOpmB,EAAG0sE,EAAMtmD,OAAOnmB,GACzDysE,EAAMtmD,OAAO9d,OAAS,IAAM7U,KAAK29N,cACjC39N,KAAK6sN,cAAch4M,OAASokE,EAAMtmD,OAAO9d,QAE7C7U,KAAK49N,MAAQ59N,KAAKwE,MAAMq5N,uBACnB79N,KAAKwE,MAAM0zN,yBAKZl4N,KAAKs6N,sBACLt6N,KAAK89N,8BALL99N,KAAKs6N,oBAAoBt6N,KAAK6sN,eAC9B7sN,KAAK+7N,aAAaz3N,MAAM,EAAGtE,KAAK+jC,QAAQlmB,MAAQ,KAOpD,OADa7d,KAAKitN,aAAah0I,IAGnCyiJ,EAAQlgO,UAAU8+N,oBAAsB,SAAU3nM,GAC9C,QAAsB,IAAXA,EAGP,IAAK,IAFD+yL,EAAS1lN,KAAK+jC,QAAQ02L,iBAAiB9nM,EAAO7d,OAEzCxY,GADO0D,KAAK+jC,QAAQs1L,UAAU,GAAGvkN,MAC7B,GAAG+I,EAAQ7d,KAAK+jC,QAAQlmB,MAAOvhB,EAAIuhB,EAAOvhB,IACnD0D,KAAK+jC,QAAQs1L,UAAU/8N,GAAGwY,MAAQ4wM,EAAOppN,OAG5C,CACGopN,KAAJ,IACI0Q,EAAY,EAChB,GACIp2N,KAAKy3C,QAAQ55B,MAAQ,EAGhB,CAAA,IAFDs/M,EAAWn9N,KAAKy3C,QAAQiiL,UAAU,GAAGzxL,MAAMpqB,MAC3Cq/M,EAAWl9N,KAAKy3C,QAAQ55B,MAC5B,IAASvhB,EAAI,EAAGA,EAAI6gO,EAAU7gO,IAAK,CAC/B85N,EAAY,EACZ,IAAK,IAAI/zM,EAAI,EAAGA,EAAI66M,EAAU76M,IAAK,CAC/B,IAAI07M,EAAWlyN,KAAKiT,IAAI9e,KAAKu6N,aAAcv6N,KAAKy3C,QAAQiiL,UAAUr3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGwY,OACtFshN,EAAYvqN,KAAKC,IAAIsqN,EAAW2H,GAEpCrY,EAAOppN,GAAK85N,QAMhB,IAFI+G,EAAWn9N,KAAKu5N,KAAKI,OAAO,GAAG1xL,MAAMpqB,MACrCq/M,EAAWl9N,KAAKu5N,KAAK17M,MAChBvhB,EAAI,EAAGA,EAAI6gO,EAAU7gO,IAAK,CAC/B85N,EAAY,EACZ,IAAS/zM,EAAI,EAAGA,EAAI66M,EAAU76M,IAAK,CAC3B07M,EAAWlyN,KAAKiT,IAAI9e,KAAKu6N,aAAcv6N,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGwY,OAChFshN,EAAYvqN,KAAKC,IAAIsqN,EAAW2H,GAEpCrY,EAAOppN,GAAK85N,EAGpBA,EAAY,EACZ,IAAS95N,EAAI,EAAG6gO,EAAWn9N,KAAK+jC,QAAQlmB,MAAOvhB,EAAI6gO,EAAU7gO,IAAK,CAC9D,IAAS+lB,EAAI,EAAG66M,EAAWl9N,KAAKu5N,KAAK17M,MAAOwE,EAAI66M,EAAU76M,IACtD,GAAuD,GAAnDriB,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAG48N,YAAkE,OAA/Cl5N,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGa,OAAkB6C,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAG07N,SAAW,EAAG,CAClK,GAAmD,OAA/Ch4N,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGa,QACpC6C,KAAKu5N,KAAKI,OAAOt3M,GAAGimB,KAAK9jC,MAAM0zN,wBAAyB,CACzD,IAAI/6N,EAAQ6C,KAAKu5N,KAAKI,OAAOt3M,GAAGimB,KAAK9jC,MAAMkzN,YAAYzrN,MACnDjM,KAAKu5N,KAAKI,OAAOt3M,GAAGimB,KAAK9jC,MAAMkzN,YAAY1rN,KACzChM,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGkI,MAAMwxN,QAAQhqN,KAAK8I,MAAQ,EAChE9U,KAAKg9N,aAAazwN,EACxBvM,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGa,MAAMo9N,aAAev6N,KAAKu6N,aAAep9N,EAE9E4gO,EAAW,EAAf,IACIC,EAAgBh+N,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGwY,MACzDkpN,GAAiBh+N,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGkI,MAAMwxN,QAAQhqN,KAAK8I,MACzEkpN,GAAiBh+N,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGkI,MAAMwxN,QAAQ/pN,MAAM6I,MAC1E,IAAImpN,EAAiBj+N,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGuY,OAC1DopN,GAAmBj+N,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGkI,MAAMwxN,QAAQ9pN,IAAS,MAC/E+xN,GAAmBj+N,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGkI,MAAMwxN,QAAQ7pN,OAAY,MAClF,IAAI+xN,EAAkBF,EAAgBh+N,KAAKg9N,aAAazwN,EAAKvM,KAAK09N,gBAAgBnpC,WAAWz/K,MACzFqpN,EAAmBF,EAAiBj+N,KAAKg9N,aAAaxwN,EAAKxM,KAAK09N,gBAAgBnpC,WAAW1/K,OAC/F,GAAIqpN,GAAkBC,EAClB,MAAMv9N,MAAM,yEAEhBm9N,EAAWlyN,KAAKiT,IAAI9e,KAAKu6N,aAAcv6N,KAAKu5N,KAAKI,OAAOt3M,GAAG4lB,MAAMqtL,QAAQh5N,GAAGwY,OAC5EshN,EAAYvqN,KAAKC,IAAI45M,EAAOppN,GAAIuP,KAAKC,IAAIsqN,EAAW2H,IACpD3H,EAAYvqN,KAAKC,IAAI9L,KAAK+jC,QAAQs1L,UAAU/8N,GAAGwY,MAAOshN,GAG9D1Q,EAAOppN,GAAK85N,EACZA,EAAY,EAEhB,IAAS95N,EAAI,EAAGuhB,EAAQ7d,KAAK+jC,QAAQlmB,MAAOvhB,EAAIuhB,EAAOvhB,IACnD0D,KAAK+jC,QAAQs1L,UAAU/8N,GAAGwY,MAAQ4wM,EAAOppN,KASrDo/N,EAAQlgO,UAAUsiO,0BAA4B,WAK1C,IAAK,IAJDM,EAAc,EACdC,EAAY,EACZC,EAAa,EACbC,EAAiBv+N,KAAK09N,gBAAgBnpC,WAAWz/K,MAAQ9U,KAAK6sN,cAActgN,EACvEjQ,EAAI,EAAGA,EAAI0D,KAAK+jC,QAAQlmB,MAAOvhB,IAEpC,IADAgiO,GAAct+N,KAAK+jC,QAAQs1L,UAAU/8N,GAAGwY,QACtBypN,EAAgB,CAE9B,IAAK,IADDC,EAAY,EACPn8M,EAAI+7M,EAAa/7M,GAAK/lB,MAC3BkiO,GAAax+N,KAAK+jC,QAAQs1L,UAAUh3M,GAAGvN,OACvBypN,GAFcl8M,IAK9Bg8M,EAAYh8M,EAEhBriB,KAAK+7N,aAAaz3N,MAAM85N,EAAaC,IAGrCC,GADAD,EADAD,EAAcC,EAAY,IAEC/hO,EAAK0D,KAAK+jC,QAAQs1L,UAAU/8N,GAAGwY,MAAQ,EAI1E9U,KAAK+7N,aAAaz3N,MAAM85N,EAAap+N,KAAK+jC,QAAQlmB,MAAQ,KAO9D69M,EAAQlgO,UAAUyxN,aAAe,SAAUh0I,GAEvCj5E,KAAK67N,WAAWtvN,EAAI0sE,EAAMtmD,OAAOpmB,EACjCvM,KAAK67N,WAAWrvN,EAAIysE,EAAMtmD,OAAOnmB,EACjCxM,KAAK67N,WAAWhnN,OAASokE,EAAMtmD,OAAO9d,OAQtC,IAAK,IAPD0jB,EAASv4B,KAAKw9N,UAAUvkJ,EAAM1gD,QAE9Bx5B,EAAS,KACT0/N,EAAgB,IAAIt3B,GACpBu3B,EAAYzlJ,EAAMg4B,KAElB0tH,KACKptN,EAAQ,EAAGA,EAAQvR,KAAK+7N,aAAan/N,OAAQ2U,IAAS,CAC3D,IAAI0c,EAAQjuB,KAAK+7N,aAAaxqN,GAC9BvR,KAAK4+N,eAAiB3wM,EAAM,GAC5BjuB,KAAK6+N,aAAe5wM,EAAM,GAC1B,IAAI6wM,EAAe9+N,KAAK++N,sBAAsB/+N,KAAKqpM,YAAarpM,KAAK6sN,cAAe7sN,KAAKs5N,iBACzFt5N,KAAK6sN,cAAgBiS,EAAajS,cAClC7sN,KAAKs5N,gBAAkBwF,EAAaxF,gBAMpC,IACK,IAAIjrH,EAAM,EAAGA,EAAMruG,KAAKy3C,QAAQ55B,MAAOwwF,IACxC,CAAA,IAAI1nE,EAAM3mC,KAAKy3C,QAAQiiL,UAAUrrH,GACdruG,KAAK6sN,cAAcrgN,EAEnBxM,KAAKg/N,QAAQr4L,GAUpC,IAAIrqC,EAAI,EAEJ2iO,GADWj/N,KAAKu5N,KAAK17M,WACT,GAChB8gN,KAKA,IAAK,IAAIt8M,EAAI,EAAGA,EAAIriB,KAAKu5N,KAAK17M,MAAOwE,IAAK,CAClCskB,EAAM3mC,KAAKu5N,KAAKI,OAAOt3M,GAC3B/lB,IACA0D,KAAKs5N,gBAAkBh9N,EAAI,EAC3B,IAAI4iO,EAAiBl/N,KAAK6sN,cAAcrgN,EACxCkyN,EAAY1+N,KAAKqpM,YACjBqyB,EAAQyD,gBAAkB,EAC1B,IAAIC,EAAYp/N,KAAKg/N,QAAQr4L,GAW7B,GAVAg4L,EAAWr6N,KAAK86N,EAAUzsM,OAAO7d,OAE7BoqN,IAAmBl/N,KAAK6sN,cAAcrgN,GACtCyyN,GAAY,EACZvD,EAAQyD,eAAiBn/N,KAAKu5N,KAAKC,cAAch3N,QAAQmkC,KAGzDs4L,GAAY,EACZvD,EAAQyD,gBAAkB,IAEzBC,EAAUC,UAA0B,OAAdX,GAAsBnmM,EAAO47J,SAAWojB,GAAc+nB,SAAWL,EAAW,CAsBnG,GApBAj/N,KAAKg2B,cAAczpB,EAAIvM,KAAK6sN,cAActgN,EAC1CvM,KACKqpM,YAAcrpM,KAAKgvM,YAAYz2K,GACd,OAAjB0gD,EAAM1gD,SAAqB0gD,EAAM1gD,OAAO2zL,mBAAsC,OAAjBjzI,EAAMtmD,QACpEsmD,EAAMtmD,OAAO9d,OAAS,IAAM7U,KAAK29N,cACjC39N,KAAK6sN,cAAch4M,OAASokE,EAAMtmD,OAAO9d,QAEvB,OAAjBokE,EAAM1gD,SAAqB0gD,EAAM1gD,OAAO2zL,mBAAsC,OAAjBjzI,EAAMtmD,QACpEsmD,EAAMtmD,OAAOnmB,EAAI,IAAMxM,KAAK29N,cAC5B39N,KAAK6sN,cAAcrgN,EAAIysE,EAAMtmD,OAAOnmB,GAExCxM,KAAKg2B,cAAcxpB,EAAIxM,KAAK6sN,cAAcrgN,EACrC+rB,EAAOyzL,eAAez/M,IAAMgsB,EAAOyzL,eAAex/M,GAClD+rB,EAAOyzL,eAAex/M,IAAM+rB,EAAOyzL,eAAen3M,QAClD0jB,EAAOyzL,eAAen3M,SAAW0jB,EAAOyzL,eAAel3M,OAA2C,IAAhCyjB,EAAOyzL,eAAel3M,QACzF9U,KAAK6sN,cAActgN,GAAKvM,KAAKg2B,cAAczpB,GAE3CvM,KAAK6sN,cAActgN,IAAM4mN,GAAW+B,QAAQlpN,KAAK8I,MAAQ,IACzD9U,KAAK6sN,cAAcrgN,GAAKxM,KAAKg2B,cAAczpB,GAE3CvM,KAAKu/N,aACL,IAAK,IAAIC,EAAM,EAAGA,EAAMx/N,KAAKy3C,QAAQ55B,MAAO2hN,IAAO,CAC/C,IAAIhoL,EAASx3C,KAAKy3C,QAAQiiL,UAAU8F,GACpCx/N,KAAKg/N,QAAQxnL,GAGrBx3C,KAAKg/N,QAAQr4L,GACY,OAArB3mC,KAAKqpM,aAAyBo1B,EAAcz/C,YAAYh/K,KAAKqpM,cAC7Do1B,EAAcv6N,IAAIlE,KAAKqpM,YAAap7K,IAIhD,IACIwxM,EAAyB,EACzBd,EAAW/hO,OAAS,IACpB6iO,EAAyBd,EAAW,IAGxC,GAAkBA,EAAW/hO,OAAS,EAAG,CACrC,IAAK,IAAIqnC,EAAI,EAAGA,EAAI3nC,EAAI,EAAG2nC,IACnBw7L,EAAyBd,EAAW16L,KACpCw7L,EAAyBd,EAAW16L,IAG5CjkC,KAAK0/N,qBAAuBD,OAG5Bz/N,KAAK0/N,qBAVoB,EAYzB1/N,KAAK+7N,aAAan/N,OAAS,IAAM2U,GAASvR,KAAK+7N,aAAan/N,OAAS,GAAK27B,EAAO47J,SAAWojB,GAAc+nB,UAC1Gt/N,KAAKqpM,YAAcrpM,KAAKgvM,YAAYz2K,GAC/BA,EAAOyzL,eAAez/M,IAAMgsB,EAAOyzL,eAAex/M,GAAO+rB,EAAOyzL,eAAex/M,IAAM+rB,EAAOyzL,eAAen3M,QACxG0jB,EAAOyzL,eAAen3M,SAAW0jB,EAAOyzL,eAAel3M,OAA2C,IAAhCyjB,EAAOyzL,eAAel3M,QAC5F9U,KAAK6sN,cAActgN,GAAKvM,KAAKg2B,cAAczpB,EAC3CvM,KAAK6sN,cAAcrgN,GAAKxM,KAAKg2B,cAAcxpB,IAUvD,OALAzN,EAASiB,KAAKktN,kBACVltN,KAAKwE,MAAM0zN,yBAA2Bl4N,KAAKwE,MAAMq5N,wBAA0B3J,GAA0ByL,UACrG3/N,KAAK4/N,eAAenB,GAExBz+N,KAAK6/N,kBAAkB9gO,GAChBA,GAMX28N,EAAQlgO,UAAUwzM,YAAc,SAAUz2K,GACtC,IAAI02K,EAAUjvM,KAAKqpM,YAAY4F,QAC3B6wB,EAAW,KACXvuN,EAAQ09L,EAAQzsM,QAAQxC,KAAKqpM,aACjCrpM,KAAKkiD,MAAO,EAER49K,EADAvuN,IAAU09L,EAAQpxL,MAAQ,EACfoxL,EAAQ/qM,MAGR+qM,EAAQC,WAAW39L,EAAQ,GAE1CvR,KAAK09N,gBAAkBoC,EAASh4B,SAChC,IAAIi4B,EAAY//N,KAAK09N,gBAAgBzsH,KAAKg+F,QAAQzsM,QAAQxC,KAAK09N,gBAAgBzsH,MAW/E,OAVuD,IAAjDjxG,KAAK87N,oBAAoBt5N,QAAQu9N,IACnC//N,KAAK87N,oBAAoBx3N,KAAKy7N,GAElC//N,KAAK6sN,cAAgB,IAAIp8B,GAAW,IAAIF,GAAO,EAAG,GAAIuvC,EAASjiB,iBAOxDiiB,GAMXpE,EAAQlgO,UAAU0xN,gBAAkB,WAChC,IAAIv6L,EAIJ,OAFAA,EAAS,IAAI89J,GAAWzwL,KAAKg2B,cAAe,IAAIw6J,GAAMxwL,KAAK6sN,cAAc/3M,MAAO9U,KAAK6sN,cAAcrgN,EAAIxM,KAAKg2B,cAAcxpB,IAEnH,IAAIwzN,GAAoBhgO,KAAKqpM,YAAa12K,IAMrD+oM,EAAQlgO,UAAUykO,kBAAoB,SAAUt5L,EAAK9xB,GAQjD,OAAOhJ,KAAKC,IAAI+I,EAPA,IAapB6mN,EAAQlgO,UAAUujO,sBAAwB,SAAU11B,EAAawjB,EAAeqT,GAC5E,IAAI3wL,GAAS,EACb,GAAIvvC,KAAKmgO,qBAAsB,CAC3B,IAAIlgO,EAAO,IAAImgO,GAAgCvT,EAAexjB,EAAa62B,GAC3ElgO,KAAKm8N,gBAAgBn8N,KAAMC,GAQ3BsvC,EAAStvC,EAAKsvC,OACds9K,EAAgB5sN,EAAK0yB,OACrButM,EAAajgO,EAAKogO,cAEtB,OAAS9uF,YAAahiG,EAAQs9K,cAAeA,EAAeyM,gBAAiB4G,IAMjFxE,EAAQlgO,UAAUqkO,kBAAoB,SAAU9gO,GAC5C,IAAIkB,EAAO,IAAIqgO,GAA8BvhO,GAI7C,OAHIiB,KAAKugO,oBACLvgO,KAAKo8N,cAAcp8N,KAAMC,GAEtBA,GAEXy7N,EAAQlgO,UAAUwjO,QAAU,SAAUr4L,EAAK5nC,EAAQ8V,GAC/C,QAAsB,IAAX9V,EAAwB,CAG/B,IAAIyhO,EAAW,IAAIC,GACfC,EAAoB,EAEpBz0M,EAAO,IAAIukK,GAAM,EAAG,GACpB5mK,GAAW,EACf,GAAI+c,EAAIswL,cAAe,CACnB,IAAI0J,EAAU,EACVC,EAAe5gO,KAAKu5N,KAAKC,cAAch3N,QAAQmkC,IAC7B,IAAlBi6L,IAEsB,KADtBA,EAAe5gO,KAAKy3C,QAAQj1C,QAAQmkC,MAEhC/c,GAAW,GAGnB,IAAK,IAAIttB,EAAI,EAAGA,EAAIqqC,EAAIsB,MAAMpqB,MAAOvhB,IAAK,CACtC,IAAI8sC,EAAOzC,EAAIsB,MAAMqtL,QAAQh5N,GAC7BqkO,EAAU90N,KAAKC,IAAI60N,EAASv3L,EAAK4uL,SAErC,IAAS17N,EAAIskO,EAActkO,EAAIskO,EAAeD,EAASrkO,IACnDokO,GAAsB92M,EAAW5pB,KAAKy3C,QAAQiiL,UAAUp9N,GAAGuY,OAAS7U,KAAKu5N,KAAKI,OAAOr9N,GAAGuY,OAGvF,IADDgsN,EAAeH,EACnB,IAASpkO,EAAI,EAAGA,EAAIqqC,EAAIsB,MAAMpqB,MAAOvhB,IACjCukO,EAAeA,EAAel6L,EAAIsB,MAAMqtL,QAAQh5N,GAAGuY,OAASgsN,EAAel6L,EAAIsB,MAAMqtL,QAAQh5N,GAAGuY,OAI/F,IAFDisN,EAAU9gO,KAAKy3C,QAAQiiL,UAAU15N,KAAKy3C,QAAQj1C,QAAQmkC,GAAO,GAC7Dub,GAAO,EACX,IAAS5lD,EAAI,EAAGA,EAAIwkO,EAAQ74L,MAAMpqB,MAAOvhB,IACrC,GAAuC,KAAnCwkO,EAAQ74L,MAAMqtL,QAAQh5N,GAAGa,YAAmD7B,IAAnCwlO,EAAQ74L,MAAMqtL,QAAQh5N,GAAGa,MAAqB,CACvF+kD,GAAO,EACP,MAGH2+K,EAAeH,GAAsBx+K,IACtCvb,EAAI9xB,QAAWgsN,EAAeH,GAGtC,IAAIK,EAAmBp6L,EAAIq6L,eAAiB,EAAMr6L,EAAIq6L,eAAiBr6L,EAAI9xB,OAqB3E,OApBI7U,KAAK6sN,cAAcrgN,EAAIu0N,EAAmB/gO,KAAKy9N,kBAAkB5oN,QACjE7U,KAAK6sN,cAAcrgN,EAAIu0N,EAAoB/gO,KAAK6sN,cAAch4M,OAAS7U,KAAKg2B,cAAcxpB,GAC1FxM,KAAK6sN,cAAcrgN,EAAIk0N,EAAoB1gO,KAAKy9N,kBAAkB5oN,OAWlE2rN,EAASnB,UAAW,GAIpBmB,EAASnB,UAAW,EACpBr/N,KAAKg/N,QAAQr4L,EAAK65L,EAAUO,IAEzBP,EAGP,IACIS,EAAa,IAAI1wC,GAAOvwL,KAAK6sN,cAActgN,EAAGvM,KAAK6sN,cAAcrgN,GACrEzN,EAAO4zB,OAAS,IAAI89J,GAAWwwC,EAAY,IAAIzwC,GAAM,EAAG,IACxD37K,EAAS7U,KAAKigO,kBAAkBt5L,EAAK9xB,GACrC,IAASvY,EAAI0D,KAAK4+N,eAAgBtiO,GAAK0D,KAAK6+N,aAAcviO,IAAK,CAC3D,IAAI4kO,EAAgB5kO,EAAI0D,KAAK6+N,aAAe,GAAOl4L,EAAIsB,MAAMqtL,QAAQh5N,GAAG48N,WAAa,EAErF,IAAKgI,EACD,IAAK,IAAI7+M,EAAI,EAAGA,EAAIskB,EAAIsB,MAAMqtL,QAAQh5N,GAAG48N,WAAY72M,IACjDskB,EAAIsB,MAAMqtL,QAAQh5N,EAAI+lB,GAAG+6M,qBAAsB,EAGnDnxM,EAAO,IAAIukK,GAAMxwL,KAAK+jC,QAAQs1L,UAAU/8N,GAAGwY,MAAOD,IAUjD7U,KAAKmhO,qBAAqBnhO,KAAK+jC,QAAQs1L,UAAU/8N,GAAGi8B,SACrDv4B,KAAKmhO,qBAAqBx6L,EAAIsB,MAAMqtL,QAAQh5N,GAAGwsM,gBAC/CniK,EAAIsB,MAAMqtL,QAAQh5N,GAAGwsM,aAAe9oM,KAAK+jC,QAAQs1L,UAAU/8N,GAAGi8B,QAElE,IAAI6oM,EAAYz6L,EAAIsB,MAAMqtL,QAAQh5N,GAAGkI,MACjCyF,EAAoD,iBAA/B08B,EAAIsB,MAAMqtL,QAAQh5N,GAAGa,OACX,OAA/BwpC,EAAIsB,MAAMqtL,QAAQh5N,GAAGa,MAAkBwpC,EAAIsB,MAAMqtL,QAAQh5N,GAAGa,MAAQ,GACxEwpC,EAAIsB,MAAMqtL,QAAQh5N,GAAGkI,MAAQxE,KAAKqhO,oBAAoBrhO,KAAK09N,gBAAiB19N,KAAKs5N,gBAAiBh9N,EAAG,IAAIm0L,GAAWwwC,EAAYh1M,GAAOhiB,EAAWm3N,GAGlJ,IAAI9T,EAAe3mL,EAAIsB,MAAMqtL,QAAQh5N,GAAGysM,KAAK/oM,KAAK09N,gBAAiB,IAAIjtC,GAAWwwC,EAAYh1M,GAAOi1M,GACjGv6L,EAAI2B,KAAK9jC,MAAM0zN,0BAA4BvxL,EAAIsB,MAAMqtL,QAAQh5N,GAAG48N,WAAal5N,KAAK6+N,cAAgBviO,EAAIqqC,EAAIsB,MAAMqtL,QAAQh5N,GAAG48N,WAAal5N,KAAK6+N,aAAe,IAAM7+N,KAAK6+N,aAAel4L,EAAIsB,MAAMpqB,MAAQ,IACxM8oB,EAAIwxL,iBAAmBn4N,KAAK6+N,cAE5Bl4L,EAAI2B,KAAK9jC,MAAM0zN,yBAA4BvxL,EAAIwxL,iBAAmB,IAAMxxL,EAAIsB,MAAMqtL,QAAQh5N,GAAG48N,WAAal5N,KAAK6+N,cAAgBviO,EAAIqqC,EAAIsB,MAAMqtL,QAAQh5N,GAAG48N,WAAal5N,KAAK6+N,aAAe,IAAOl4L,EAAIsB,MAAMqtL,QAAQh5N,GAAG48N,WAAal5N,KAAK6+N,aAAeviO,EAAI,EAAI,IAC9PqqC,EAAIsB,MAAMqtL,QAAQ3uL,EAAIwxL,iBAAmB,GAAGh7N,MAAyB,OAAjBmwN,QAAoDhyN,IAA3BgyN,EAAaN,UAA2BM,EAAaN,UAAiB,GACnJrmL,EAAIsB,MAAMqtL,QAAQ3uL,EAAIwxL,iBAAmB,GAAGrvB,aAAeniK,EAAIsB,MAAMqtL,QAAQh5N,GAAGwsM,aAChFniK,EAAIsB,MAAMqtL,QAAQ3uL,EAAIwxL,iBAAmB,GAAG3zN,MAAQmiC,EAAIsB,MAAMqtL,QAAQh5N,GAAGkI,MACzEmiC,EAAIsB,MAAMqtL,QAAQ3uL,EAAIwxL,iBAAmB,GAAGe,WAAavyL,EAAIsB,MAAMqtL,QAAQh5N,GAAG48N,WAAal5N,KAAK6+N,aAAeviO,EAAI,GAIvH2N,EAAoD,iBAA/B08B,EAAIsB,MAAMqtL,QAAQh5N,GAAGa,OACP,OAA/BwpC,EAAIsB,MAAMqtL,QAAQh5N,GAAGa,MAAkBwpC,EAAIsB,MAAMqtL,QAAQh5N,GAAGa,MAAQ,GACxE6C,KAAKshO,mBAAmBthO,KAAK09N,gBAAiB19N,KAAKs5N,gBAAiBh9N,EAAG,IAAIm0L,GAAWwwC,EAAYh1M,GAAOhiB,EAAW08B,EAAIsB,MAAMqtL,QAAQh5N,GAAGkI,OACzIy8N,EAAW10N,GAAKvM,KAAK+jC,QAAQs1L,UAAU/8N,GAAGwY,MAG9C9U,KAAK6sN,cAAcrgN,GAAKqI,EAExB9V,EAAO4zB,OAAS,IAAI89J,GAAW,IAAIF,GAAOxxL,EAAO4zB,OAAOpmB,EAAGxN,EAAO4zB,OAAOnmB,GAAI,IAAIgkL,GAAMywC,EAAW10N,EAAG00N,EAAWz0N,KAOxHkvN,EAAQlgO,UAAU2lO,qBAAuB,SAAU5oM,GAC/C,IAAIgpM,EAAgB,IAAIvvC,GACxB,OAAQz5J,EAAOsW,YAAc0yL,EAAc1yL,WAAatW,EAAOsgK,mBAAqB0oC,EAAc1oC,kBAC9FtgK,EAAOk2C,WAAa8yJ,EAAc9yJ,UAAYl2C,EAAOu6J,kBAAoByuC,EAAczuC,iBACvFv6J,EAAOg2K,0BAA4BgzB,EAAchzB,yBACjDh2K,EAAOy1K,gBAAkBuzB,EAAcvzB,eACpCz1K,EAAOw+J,YAAcwqC,EAAcxqC,WAAax+J,EAAOm9J,cAAgB6rC,EAAc7rC,aACxFn9J,EAAOipM,wBAA0BD,EAAcC,uBAAyBjpM,EAAOkpM,SAAWF,EAAcE,QACxGlpM,EAAOi9J,kBAAoB+rC,EAAc/rC,iBAAmBj9J,EAAO2mC,cAAgBqiK,EAAcriK,aACjG3mC,EAAOi2K,iBAAmB+yB,EAAc/yB,gBAAkBj2K,EAAOugK,cAAgByoC,EAAczoC,aAC/FvgK,EAAO4+J,WAAaoqC,EAAcpqC,UAM1CukC,EAAQlgO,UAAU6lO,oBAAsB,SAAUv5B,EAAU45B,EAAU5H,EAAWnnM,EAAQx1B,EAAOqH,GAC5F,IAAIvE,EAAO,KAMX,OALID,KAAK2hO,qBACL1hO,EAAO,IAAI2hO,GAA8B95B,EAAU45B,EAAU5H,EAAWnnM,EAAQx1B,EAAOqH,GACvFxE,KAAKi8N,cAAcj8N,KAAMC,GACzBuE,EAAQvE,EAAKuE,OAEVA,GAMXk3N,EAAQlgO,UAAU8lO,mBAAqB,SAAUx5B,EAAU45B,EAAU5H,EAAWnnM,EAAQx1B,EAAOikO,GAC3F,IAAInhO,EAAO,KACPD,KAAK6hO,mBACL5hO,EAAO,IAAI6hO,GAA4Bh6B,EAAU45B,EAAU5H,EAAWnnM,EAAQx1B,EAAOikO,GACrFphO,KAAKk8N,YAAYl8N,KAAMC,KAO/By7N,EAAQlgO,UAAUokO,eAAiB,SAAUnB,GAKzC,IAAK,IAJDj+N,EAAWR,KAAKqpM,YAAY7oM,SAC5BkjL,KACAjmL,EAAOghO,EAAchhO,OAEhBnB,GADImiO,EAAcxvM,SACd,GAAG3yB,EAAImB,EAAKb,OAAQN,IAAK,EAC9B20G,EAAOxzG,EAAKnB,IACX2yM,QAAU,KACfvrB,EAAMp/K,KAAK2sG,GACXzwG,EAASkjL,MAAMr/K,OAAO4sG,GAG1B,IAAS30G,EAAI,EAAGA,EAAImiO,EAAcxyM,OAAQ3vB,IACtC,IACK,IAAI+lB,EAAI/lB,EAAGg5F,EAAWmpI,EAAcxyM,OAASjsB,KAAK+7N,aAAan/N,OAASylB,EAAIo8M,EAAcxyM,OAAQ5J,GAAKizE,EAAS,CACjH,IAAI2b,EAAOyyE,EAAMrhK,IACqB,IAAlC7hB,EAASkjL,MAAMlhL,QAAQyuG,IACvBzwG,EAASkjL,MAAMx/K,IAAI+sG,KAUnCyqH,EAAQyD,gBAAkB,EACnBzD,GACThP,IAKEqV,cAMA,SAASA,EAAkBj6B,EAAU45B,EAAU5H,EAAWnnM,EAAQx1B,GAC9D6C,KAAKgiO,aAAeN,EACpB1hO,KAAKiiO,cAAgBnI,EACrB95N,KAAKm/K,cAAgBhiL,EACrB6C,KAAKkiO,WAAavvM,EAClB3yB,KAAKqzM,YAAcvL,EA0DvB,OAxDArpM,OAAOkJ,eAAeo6N,EAAkBvmO,UAAW,YAM/CgM,IAAK,WACD,OAAOxH,KAAKgiO,cAEhBv6N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeo6N,EAAkBvmO,UAAW,aAK/CgM,IAAK,WACD,OAAOxH,KAAKiiO,eAEhBx6N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeo6N,EAAkBvmO,UAAW,SAK/CgM,IAAK,WACD,OAAOxH,KAAKm/K,eAEhB13K,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeo6N,EAAkBvmO,UAAW,UAK/CgM,IAAK,WACD,OAAOxH,KAAKkiO,YAEhBz6N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAeo6N,EAAkBvmO,UAAW,YAK/CgM,IAAK,WACD,OAAOxH,KAAKqzM,aAEhB5rM,YAAY,EACZC,cAAc,IAEXq6N,KAMPH,GAAyD,YAOzD,SAASA,EAA8B95B,EAAU45B,EAAU5H,EAAWnnM,EAAQx1B,EAAOqH,GACjF,IAAIzE,EAAQq+C,EAAO98C,KAAKtB,KAAM8nM,EAAU45B,EAAU5H,EAAWnnM,EAAQx1B,IAAU6C,KAE/E,OADAD,EAAMyE,MAAQA,EACPzE,EA+BX,OAxCAw9C,GAAUqkL,EAA+BxjL,GAWzC3/C,OAAOkJ,eAAei6N,EAA8BpmO,UAAW,QAM3DgM,IAAK,WACD,OAAOxH,KAAKmiO,OAEhBh7N,IAAK,SAAUhK,GACX6C,KAAKmiO,MAAQhlO,GAEjBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAei6N,EAA8BpmO,UAAW,SAK3DgM,IAAK,WACD,OAAOxH,KAAKk3N,WAEhB/vN,IAAK,SAAUhK,GACX6C,KAAKk3N,UAAY/5N,GAErBsK,YAAY,EACZC,cAAc,IAEXk6N,GACTG,IAKED,GAAuD,YAOvD,SAASA,EAA4Bh6B,EAAU45B,EAAU5H,EAAWnnM,EAAQx1B,EAAOqH,GAC/E,IAAIzE,EAAQq+C,EAAO98C,KAAKtB,KAAM8nM,EAAU45B,EAAU5H,EAAWnnM,EAAQx1B,IAAU6C,KAE/E,OADAD,EAAMm3N,UAAY1yN,EACXzE,EAcX,OAvBAw9C,GAAUukL,EAA6B1jL,GAWvC3/C,OAAOkJ,eAAem6N,EAA4BtmO,UAAW,SAMzDgM,IAAK,WACD,OAAOxH,KAAKk3N,WAEhBzvN,YAAY,EACZC,cAAc,IAEXo6N,GACTC,IAKEK,cACA,SAASA,KAiBT,OAfA3jO,OAAOkJ,eAAey6N,EAAmB5mO,UAAW,UAMhDgM,IAAK,WACD,OAAOxH,KAAKqiO,UAEhBl7N,IAAK,SAAUhK,GACX6C,KAAKqiO,SAAWllO,GAEpBsK,YAAY,EACZC,cAAc,IAEX06N,KAMPE,GAAoD,YAOpD,SAASA,EAAyB3vM,EAAQs+E,GACtC,IAAIlxG,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAGjC,OAFAD,EAAM4yB,OAASA,EACf5yB,EAAMg0M,QAAU9iG,EACTlxG,EA4BX,OAtCAw9C,GAAU+kL,EAA0BlkL,GAYpC3/C,OAAOkJ,eAAe26N,EAAyB9mO,UAAW,UAMtDgM,IAAK,WACD,OAAOxH,KAAK2+N,YAEhBx3N,IAAK,SAAUhK,GACX6C,KAAK2+N,WAAaxhO,GAEtBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe26N,EAAyB9mO,UAAW,QAKtDgM,IAAK,WACD,OAAOxH,KAAK+zM,SAEhBtsM,YAAY,EACZC,cAAc,IAEX46N,GACTF,IAKEG,GAAkD,YAOlD,SAASA,EAAuBxjO,GAC5B,IAAIgB,EAAQq+C,EAAO98C,KAAKtB,OAASA,KAEjC,OADAD,EAAMm9M,aAAen+M,EACdgB,EA4BX,OArCAw9C,GAAUglL,EAAwBnkL,GAWlC3/C,OAAOkJ,eAAe46N,EAAuB/mO,UAAW,UAMpDgM,IAAK,WACD,OAAOxH,KAAKk9M,cAEhBz1M,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe46N,EAAuB/mO,UAAW,YAKpDgM,IAAK,WACD,OAAOxH,KAAKwiO,aAEhBr7N,IAAK,SAAUhK,GACX6C,KAAKwiO,YAAcrlO,GAEvBsK,YAAY,EACZC,cAAc,IAEX66N,GACTH,IAKEhC,GAA2D,YAO3D,SAASA,EAAgCztM,EAAQs+E,EAAMwxH,GACnD,IAAI1iO,EAAQq+C,EAAO98C,KAAKtB,KAAM2yB,EAAQs+E,IAASjxG,KAE/C,OADAD,EAAM0iO,SAAWA,EACV1iO,EAcX,OAvBAw9C,GAAU6iL,EAAiChiL,GAW3C3/C,OAAOkJ,eAAey4N,EAAgC5kO,UAAW,iBAM7DgM,IAAK,WACD,OAAOxH,KAAKyiO,UAEhBh7N,YAAY,EACZC,cAAc,IAEX04N,GACTkC,IAKEhC,GAAyD,YAOzD,SAASA,EAA8BvhO,GACnC,OAAOq/C,EAAO98C,KAAKtB,KAAMjB,IAAWiB,KAExC,OATAu9C,GAAU+iL,EAA+BliL,GASlCkiL,GACTiC,IAKE9B,cAMA,SAASA,IACLzgO,KAAK0iO,eAAiB,IAAIjyC,GAAW,EAAG,EAAG,EAAG,GA8BlD,OA5BAhyL,OAAOkJ,eAAe84N,EAAgBjlO,UAAW,YAK7CgM,IAAK,WACD,OAAOxH,KAAK2iO,aAEhBx7N,IAAK,SAAUhK,GACX6C,KAAK2iO,YAAcxlO,GAEvBsK,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAe84N,EAAgBjlO,UAAW,UAK7CgM,IAAK,WACD,OAAOxH,KAAK0iO,gBAEhBv7N,IAAK,SAAUhK,GACX6C,KAAK0iO,eAAiBvlO,GAE1BsK,YAAY,EACZC,cAAc,IAEX+4N,KAMPT,GAA+C,YAO/C,SAASA,EAAoB/uH,EAAMt+E,GAC/B,OAAOyrB,EAAO98C,KAAKtB,KAAMixG,EAAMt+E,IAAW3yB,KAE9C,OATAu9C,GAAUyiL,EAAqB5hL,GASxB4hL,GACTvT,K7J51CF,SAAWyJ,GAEPA,EAAM0M,eACF32M,KAAM,OACNC,WAAY,SACZuG,MAAO,KACPtG,UAAW,SACXC,WAAY,YAGhB8pM,EAAM2M,eACF52M,KAAM,OACNC,WAAY,SACZuG,MAAO,KACPtG,UAAW,SACXC,WAAY,YAGhB8pM,EAAM4M,gBACF72M,KAAM,OACNC,WAAY,MACZuG,MAAO,KACPtG,UAAW,SACXC,WAAY,YAGhB8pM,EAAM6M,oBACF92M,KAAM,OACNC,WAAY,SACZuG,MAAO,KACPtG,UAAW,SACXC,WAAY,YAGhB8pM,EAAM8M,kBACF/2M,KAAM,OACNC,WAAY,SACZuG,MAAO,KACPtG,UAAW,SACXC,WAAY,YAGhB8pM,EAAM+M,iBACFh3M,KAAM,OACNC,WAAY,SACZuG,MAAO,KACPtG,UAAW,SACXC,WAAY,YAGhB8pM,EAAMgN,oBACFj3M,KAAM,OACNC,WAAY,UACZuG,MAAO,UACPtG,UAAW,SACXC,WAAY,YAvDpB,CAyDG8pM,KAAUA,Q8J7Db,IAAI34K,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY92C,EAAQzJ,EAAKwgD,GAC7E,IAA2HroB,EAAvHsO,EAAIjlC,UAAUpC,OAAQu8B,EAAI8K,EAAI,EAAIh9B,EAAkB,OAAT+2C,EAAgBA,EAAOv/C,OAAOw/C,yBAAyBh3C,EAAQzJ,GAAOwgD,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBhlB,EAAI+kB,QAAQC,SAASJ,EAAY92C,EAAQzJ,EAAKwgD,QACpH,IAAK,IAAI1hD,EAAIyhD,EAAWnhD,OAAS,EAAGN,GAAK,EAAGA,KAASq5B,EAAIooB,EAAWzhD,MAAI68B,GAAK8K,EAAI,EAAItO,EAAEwD,GAAK8K,EAAI,EAAItO,EAAE1uB,EAAQzJ,EAAK27B,GAAKxD,EAAE1uB,EAAQzJ,KAAS27B,GAChJ,OAAO8K,EAAI,GAAK9K,GAAK16B,OAAOkJ,eAAeV,EAAQzJ,EAAK27B,GAAIA,GAO5DgqM,GAAqC,YAErC,SAASA,IACL,OAAkB,OAAX/kL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAiB/D,OAnBAu9C,GAAU4lL,EAAW/kL,GAIrBN,IACI92C,EAAS,SACVm8N,EAAU3nO,UAAW,YAAQ,GAChCsiD,IACI92C,EAAS,OACVm8N,EAAU3nO,UAAW,aAAS,GACjCsiD,IACI92C,EAAS,IACVm8N,EAAU3nO,UAAW,aAAS,GACjCsiD,IACI92C,EAAS,OACVm8N,EAAU3nO,UAAW,cAAU,GAClCsiD,IACI92C,EAAS,KACVm8N,EAAU3nO,UAAW,iBAAa,GAC9B2nO,GACTh+L,IAKEi+L,GAAgC,YAEhC,SAASA,IACL,OAAkB,OAAXhlL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KA0B/D,OA5BAu9C,GAAU6lL,EAAMhlL,GAIhBN,IACI92C,EAAS,SACVo8N,EAAK5nO,UAAW,YAAQ,GAC3BsiD,IACI92C,EAAS,KACVo8N,EAAK5nO,UAAW,aAAS,GAC5BsiD,IACI92C,EAAS,aACVo8N,EAAK5nO,UAAW,kBAAc,GACjCsiD,IACI92C,EAAS,WACVo8N,EAAK5nO,UAAW,kBAAc,GACjCsiD,IACI92C,EAAS,WACVo8N,EAAK5nO,UAAW,iBAAa,GAChCsiD,IACI92C,EAAS,IACVo8N,EAAK5nO,UAAW,eAAW,GAC9BsiD,IACI92C,EAAS,WACVo8N,EAAK5nO,UAAW,qBAAiB,GACpCsiD,IACI92C,EAAS,SACVo8N,EAAK5nO,UAAW,oBAAgB,GAC5B4nO,GACTj+L,IAKEk+L,GAAkC,YAElC,SAASA,IACL,OAAkB,OAAXjlL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAQ/D,OAVAu9C,GAAU8lL,EAAQjlL,GAIlBN,IACI92C,EAAS,KACVq8N,EAAO7nO,UAAW,aAAS,GAC9BsiD,IACI92C,EAAS,IACVq8N,EAAO7nO,UAAW,aAAS,GACvB6nO,GACTl+L,IAKEm+L,GAAqC,YAErC,SAASA,IACL,OAAkB,OAAXllL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAW/D,OAbAu9C,GAAU+lL,EAAWllL,GAIrBN,IACIj2C,KAAYw7N,KACbC,EAAU9nO,UAAW,cAAU,GAClCsiD,IACI92C,EAAS,gBACVs8N,EAAU9nO,UAAW,kBAAc,GACtCsiD,IACI92C,EAAS,IACVs8N,EAAU9nO,UAAW,eAAW,GAC5B8nO,GACTn+L,IAKEo+L,GAAkC,YAElC,SAASA,IACL,OAAkB,OAAXnlL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAc/D,OAhBAu9C,GAAUgmL,EAAQnlL,GAIlBN,IACI92C,EAAS,KACVu8N,EAAO/nO,UAAW,YAAQ,GAC7BsiD,IACI92C,EAAS,KACVu8N,EAAO/nO,UAAW,aAAS,GAC9BsiD,IACI92C,EAAS,KACVu8N,EAAO/nO,UAAW,WAAO,GAC5BsiD,IACI92C,EAAS,KACVu8N,EAAO/nO,UAAW,cAAU,GACxB+nO,GACTp+L,IAKE3Q,GAAqC,YAErC,SAASA,IACL,OAAkB,OAAX4pB,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAW/D,OAbAu9C,GAAU/oB,EAAW4pB,GAIrBN,IACI92C,GAAS,IACVwtB,EAAUh5B,UAAW,cAAU,GAClCsiD,IACI92C,EAAS,MACVwtB,EAAUh5B,UAAW,gBAAY,GACpCsiD,IACI92C,EAAS,IACVwtB,EAAUh5B,UAAW,aAAS,GAC1Bg5B,GACT2Q,IAGEq+L,GAAmC,YAEnC,SAASA,IACL,OAAkB,OAAXplL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAQ/D,OAVAu9C,GAAUimL,EAASplL,GAInBN,IACI92C,EAAS,IACVw8N,EAAQhoO,UAAW,cAAU,GAChCsiD,IACI92C,EAAS,IACVw8N,EAAQhoO,UAAW,aAAS,GACxBgoO,GACTr+L,IAKEs+L,GAAwC,YAExC,SAASA,IACL,OAAkB,OAAXrlL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAc/D,OAhBAu9C,GAAUkmL,EAAcrlL,GAIxBN,IACI92C,EAAS,IACVy8N,EAAajoO,UAAW,eAAW,GACtCsiD,IACI92C,EAAS,IACVy8N,EAAajoO,UAAW,gBAAY,GACvCsiD,IACI92C,EAAS,IACVy8N,EAAajoO,UAAW,kBAAc,GACzCsiD,IACI92C,EAAS,IACVy8N,EAAajoO,UAAW,mBAAe,GACnCioO,GACTt+L,IAKElU,cAKA,OAJA,SAAeyyM,EAAapvM,GACxBt0B,KAAK2d,OAAS+lN,EACd1jO,KAAKgwB,MAAQsE,MAQjBqvM,GAA8C,YAE9C,SAASA,IACL,OAAkB,OAAXvlL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAW/D,OAbAu9C,GAAUomL,EAAoBvlL,GAI9BN,IACI92C,EAAS,OACV28N,EAAmBnoO,UAAW,YAAQ,GACzCsiD,IACIj2C,GAAU4qB,MAAO,cAAe3d,MAAO,GAAKuuN,KAC7CM,EAAmBnoO,UAAW,cAAU,GAC3CsiD,IACI92C,EAAS,QACV28N,EAAmBnoO,UAAW,YAAQ,GAClCmoO,GACTx+L,IAKEy+L,GAA2C,YAE3C,SAASA,IACL,OAAkB,OAAXxlL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAgC/D,OAlCAu9C,GAAUqmL,EAAiBxlL,GAI3BN,IACI92C,GAAS,IACV48N,EAAgBpoO,UAAW,cAAU,GACxCsiD,IACI92C,GAAS,IACV48N,EAAgBpoO,UAAW,cAAU,GACxCsiD,IACI92C,EAAS,OACV48N,EAAgBpoO,UAAW,YAAQ,GACtCsiD,IACI92C,EAAS,OACV48N,EAAgBpoO,UAAW,cAAU,GACxCsiD,IACI92C,EAAS,MACV48N,EAAgBpoO,UAAW,eAAW,GACzCsiD,IACIj2C,EAAQquN,GAAM8M,iBAAkBI,KACjCQ,EAAgBpoO,UAAW,iBAAa,GAC3CsiD,IACI92C,EAAS,OACV48N,EAAgBpoO,UAAW,cAAU,GACxCsiD,IACI92C,EAAS,OACV48N,EAAgBpoO,UAAW,gBAAY,GAC1CsiD,IACI92C,GAAS,IACV48N,EAAgBpoO,UAAW,uBAAmB,GACjDsiD,IACIj2C,GAAU4qB,MAAO,UAAW3d,MAAO,IAAOuuN,KAC3CO,EAAgBpoO,UAAW,cAAU,GACjCooO,GACTz+L,I7J3QEoY,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAkSxCimL,cASA,OARA,SAAcC,EAAsBC,EAAoBC,EAAwBC,EAAsBC,EAAcC,GAChHnkO,KAAK8jO,qBAAuBA,EAC5B9jO,KAAKgkO,uBAAyBA,EAC9BhkO,KAAK+jO,mBAAqBA,EAC1B/jO,KAAKikO,qBAAuBA,EAC5BjkO,KAAKkkO,aAAeA,EACpBlkO,KAAKmkO,eAAiBA,MAM1BC,cAQA,OAPA,SAAkBxzM,EAAYmN,EAAUqB,EAAahzB,EAAQi4N,GACzDrkO,KAAK4wB,WAAaA,EAClB5wB,KAAK+9B,SAAWA,EAChB/9B,KAAKo/B,YAAcA,EACnBp/B,KAAKoM,OAASA,EACdpM,KAAKqkO,iBAAmBA,MAs3B5BC,cAIA,OAHA,SAAyBlhO,GACrBpD,KAAKoD,GAAKA,MAMdmhO,cAKA,OAJA,SAAqBz+M,EAAYsO,GAC7Bp0B,KAAKwkO,YAAc1+M,EACnB9lB,KAAKykO,UAAYrwM,MAMrB5B,GAAsC,YAEtC,SAASA,EAAWpvB,EAAImJ,EAAGC,EAAGoG,EAAQgZ,EAAM/e,EAAW6uB,QACjC,IAAd7uB,IAAwBA,EAAY,IACxC,IAAI9M,EAAQq+C,EAAO98C,KAAKtB,KAAMoD,IAAOpD,KASrC,OARAD,EAAM8M,UAAY,GAClB9M,EAAM27B,SAAW,OACjB37B,EAAMwM,EAAIA,EACVxM,EAAMyM,EAAIA,EACVzM,EAAM6S,OAASA,EACf7S,EAAM6rB,KAAOA,EACb7rB,EAAM8M,UAAYA,EAClB9M,EAAM27B,SAAWA,EACV37B,EAEX,OAdAw9C,GAAU/qB,EAAY4rB,GAcf5rB,GACT8xM,IAGEjyM,GAAsC,YAEtC,SAASA,EAAWjvB,EAAI+2B,EAAMrlB,EAAO2d,EAAOxlB,EAASyzC,EAAW/qB,GAC5D,IAAI51B,EAAQq+C,EAAO98C,KAAKtB,KAAMoD,IAAOpD,KAOrC,OANAD,EAAMkN,QAAUA,EAChBlN,EAAMo6B,KAAOA,EACbp6B,EAAMs6B,OAAS5H,EACf1yB,EAAM,gBAAkB+U,EACxB/U,EAAM,oBAAsB2gD,EAC5B3gD,EAAM41B,EAAIA,EACH51B,EAEX,OAXAw9C,GAAUlrB,EAAY+rB,GAWf/rB,GACTiyM,IAGEI,GAAsC,YAEtC,SAASA,EAAWthO,EAAI+2B,EAAMkD,EAAQpwB,EAASsiB,EAAMgG,EAAIC,EAAI3oB,EAAW6zC,GACpE,IAAI3gD,EAAQq+C,EAAO98C,KAAKtB,KAAMoD,EAAI+2B,EAAMkD,EAAOvoB,MAAOuoB,EAAO5K,MAAOxlB,EAASyzC,IAAc1gD,KAQ3F,OAPAD,EAAMyM,EAAI+iB,EAAK/iB,EACfzM,EAAMwM,EAAIgjB,EAAKhjB,EACfxM,EAAM8U,OAAS0a,EAAK1a,OACpB9U,EAAM+U,MAAQya,EAAKza,MACnB/U,EAAMw1B,GAAKA,GAAU,EACrBx1B,EAAMy1B,GAAKA,GAAU,EACrBz1B,EAAM8M,UAAYA,GAAwB,GACnC9M,EAEX,OAZAw9C,GAAUmnL,EAAYtmL,GAYfsmL,GACTryM,IAGEsyM,GAAwC,YAExC,SAASA,EAAavhO,EAAI+2B,EAAMkD,EAAQpwB,EAASwoB,EAAIC,EAAIyD,GACrD,IAAIp5B,EAAQq+C,EAAO98C,KAAKtB,KAAMoD,EAAI+2B,EAAMkD,EAAOvoB,MAAOuoB,EAAO5K,MAAOxlB,IAAYjN,KAIhF,OAHAD,EAAM21B,GAAKA,EACX31B,EAAM01B,GAAKA,EACX11B,EAAMo5B,EAAIA,EACHp5B,EAEX,OARAw9C,GAAUonL,EAAcvmL,GAQjBumL,GACTtyM,IAGEuyM,cAMA,OALA,SAAuBxhO,EAAIwwB,EAAQuG,GAC/Bn6B,KAAKoD,GAAKA,EACVpD,KAAK4zB,OAASA,EACd5zB,KAAKm6B,KAAOA,MAMhB5N,cAKA,OAJA,SAAczX,EAAOD,GACjB7U,KAAK8U,MAAQA,EACb9U,KAAK6U,OAASA,MAMlBsd,cAOA,OANA,SAAc5lB,EAAGC,EAAGsI,EAAOD,GACvB7U,KAAKuM,EAAIA,EACTvM,KAAKwM,EAAIA,EACTxM,KAAK8U,MAAQA,EACb9U,KAAK6U,OAASA,MAMlBib,cAKA,OAJA,SAAuBvjB,EAAGC,GACtBxM,KAAKuM,EAAIA,EACTvM,KAAKwM,EAAIA,MAMbq4N,cAOA,OANA,SAAmB74N,EAAMC,EAAOC,EAAKC,GACjCnM,KAAKgM,KAAOA,EACZhM,KAAKiM,MAAQA,EACbjM,KAAKkM,IAAMA,EACXlM,KAAKmM,OAASA,MAMlBstB,cAMA,OALA,SAAoBN,EAAGC,EAAGC,GACtBr5B,KAAKm5B,EAAIA,EACTn5B,KAAKo5B,EAAIA,EACTp5B,KAAKq5B,EAAIA,MAMbyrM,cAOA,OANA,SAAmB90M,EAAOrS,EAAQpM,QAChB,IAAVA,IAAoBA,EAAQ,GAChCvR,KAAKgwB,MAAQA,EACbhwB,KAAK2d,OAASA,EACd3d,KAAK+kO,UAAYxzN,MAMrByzN,cAMA,OALA,SAAsBh1M,EAAOrS,EAAQpM,QACnB,IAAVA,IAAoBA,EAAQ,GAChCvR,KAAKgwB,MAAQA,EACbhwB,KAAK2d,OAASA,MAMlBsnN,cAKA,OAJA,SAAuBC,EAAeC,GAClCnlO,KAAKklO,cAAgBA,EACrBllO,KAAKmlO,cAAgBA,M8J70CzBC,cACA,SAASA,EAAY1nO,EAAOkgB,GAOpBlgB,EAAQkgB,GACR5d,KAAKqlO,OAAS3nO,EACdsC,KAAKslO,KAAO1nN,IAGZ5d,KAAKqlO,OAASznN,EACd5d,KAAKslO,KAAO5nO,GAwCpB,OArCAe,OAAOkJ,eAAey9N,EAAY5pO,UAAW,SAGzCgM,IAAK,WACD,OAAOxH,KAAKqlO,QAEhB59N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAey9N,EAAY5pO,UAAW,OAEzCgM,IAAK,WACD,OAAOxH,KAAKslO,MAEhB79N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAey9N,EAAY5pO,UAAW,SAMzCgM,IAAK,WACD,OAAQxH,KAAKslO,KAAOtlO,KAAKqlO,QAE7B59N,YAAY,EACZC,cAAc,IAElBjJ,OAAOkJ,eAAey9N,EAAY5pO,UAAW,UAEzCgM,IAAK,WACD,OAAOxH,KAAKqlO,QAAUrlO,KAAKslO,KAAOtlO,KAAKqlO,QAAU,GAErD59N,YAAY,EACZC,cAAc,IAEX09N,KCpDPG,cAKA,SAASA,EAAO54M,GACZ3sB,KAAK2sB,MAAQA,EAmQjB,OA7PA44M,EAAO/pO,UAAUgqO,6BAA+B,SAAUvwN,EAAMmc,EAAOnF,GACnE,IAAIw5M,EAA8BxwN,EAAKywN,+BAA+Bz5M,GAClEkgB,EAAe/a,EAAQq0M,EAC3B,GAA6B,MAAzBxwN,EAAK0wN,iBACL,OAAOx5L,EAGX,IAAK,IADDy5L,EAAc/5N,KAAKiiF,IAAI,GAAIjiF,KAAKsS,MAAMsP,GAAQ0e,EAAc,MACvD5tC,EAAK,EAAGuE,EAAKmS,EAAK4wN,aAActnO,EAAKuE,EAAGlG,OAAQ2B,IAAM,CAC3D,IACIunO,EAAkBF,EADP9iO,EAAGvE,GAElB,GAAIknO,EAA+Br0M,EAAQ00M,EACvC,MAEJ35L,EAAe25L,EAEnB,OAAO35L,GAMXo5L,EAAO/pO,UAAUuqO,eAAiB,SAAU9wN,EAAMgX,GAC9CjsB,KAAKgmO,sBAAsB/wN,GAC3BA,EAAKgxN,YAAY9jO,SAAW8S,EAAK9S,UAAYnC,KAAKwlO,6BAA6BvwN,EAAMA,EAAKixN,YAAY90M,MAAOnF,GAC7GhX,EAAKgxN,YAAYnnN,IAAM7J,EAAKixN,YAAYxoO,MACxCuX,EAAKgxN,YAAYn6N,IAAMmJ,EAAKixN,YAAYtoN,KAM5C2nN,EAAO/pO,UAAUwqO,sBAAwB,SAAU/wN,GAE1B,OAAjBA,EAAKijB,QACLl4B,KAAK8e,IAAM7J,EAAKijB,QAEE,OAAbl4B,KAAK8e,KAAgB9e,KAAK8e,MAAQyU,OAAO4yM,oBAC9CnmO,KAAK8e,IAAM,GAGM,OAAjB7J,EAAKgjB,QACLj4B,KAAK8L,IAAMmJ,EAAKgjB,QAEE,OAAbj4B,KAAK8L,KAAgB9L,KAAK8L,MAAQynB,OAAO6yM,oBAC9CpmO,KAAK8L,IAAM,GAEX9L,KAAK8e,MAAQ9e,KAAK8L,MAClB9L,KAAK8L,IAAMmJ,EAAKsb,UAAU/tB,QAAQ,aAAe,EAAIxC,KAAK8L,IAAM9L,KAAK8e,IAAM,GAE/E7J,EAAKixN,YAAc,IAAId,GAAYplO,KAAK8e,IAAK9e,KAAK8L,KAClDmJ,EAAKgxN,gBAOTV,EAAO/pO,UAAU6qO,0BAA4B,SAAUp6M,EAAMhX,GACzDjV,KAAKsmO,eAAerxN,EAAMgX,GAC1BjsB,KAAK+lO,eAAe9wN,EAAMgX,GAC1BjsB,KAAKumO,kBAAkBtxN,EAAMgX,GAC7BjsB,KAAKwmO,uBAAuBvxN,EAAMjV,KAAK2sB,QAM3C44M,EAAO/pO,UAAU8qO,eAAiB,SAAUrxN,EAAMgX,GAK9C,GAHAjsB,KACK8e,IAAM,KACX9e,KAAK8L,IAAM,MACNmJ,EAAKwxN,WACN,IAAK,IAAIloO,EAAK,EAAGuE,EAAKmS,EAAK0I,OAAQpf,EAAKuE,EAAGlG,OAAQ2B,IAAM,CACrD,IAAImoO,EAAW5jO,EAAGvE,GACbmoO,EAASjzM,UAGdzzB,KAAK2mO,gBAAkB,GAClBD,EAASlgO,KAAKhE,QAAQ,WAAa,GAA0B,eAArByS,EAAKs3B,aAC1Cm6L,EAASlgO,KAAKhE,QAAQ,QAAU,GAA0B,aAArByS,EAAKs3B,eACZ,WAA7Bm6L,EAAS9vN,MAAM2Z,WAAuD,aAA7Bm2M,EAAS9vN,MAAM2Z,WACtB,SAAhCm2M,EAAS9vN,MAAMgwN,eAClB5mO,KAAK2mO,gBAAkBzzM,GAAkBwzM,EAAS9vN,MAAO3B,EAAK0I,QAAU,IAIvD,eAArB1I,EAAKs3B,cACDvsC,KAAK2sB,MAAMoG,oBACX/yB,KAAK6mO,WAAWH,EAASI,KAAMJ,EAASK,MAGxC/mO,KAAK6mO,WAAWH,EAAS3yM,KAAO/zB,KAAK2mO,gBAAiBD,EAASM,KAAOhnO,KAAK2mO,kBAI1D,aAArB1xN,EAAKs3B,cACDvsC,KAAK2sB,MAAMoG,oBACX/yB,KAAK6mO,WAAWH,EAAS3yM,KAAO/zB,KAAK2mO,gBAAiBD,EAASM,KAAOhnO,KAAK2mO,iBAG3E3mO,KAAK6mO,WAAWH,EAASI,KAAMJ,EAASK,UAM5DxB,EAAO/pO,UAAUqrO,WAAa,SAAU/nN,EAAKhT,IACxB,OAAb9L,KAAK8e,KAAgB9e,KAAK8e,IAAMA,KAChC9e,KAAK8e,IAAMA,IAEE,OAAb9e,KAAK8L,KAAgB9L,KAAK8L,IAAMA,KAChC9L,KAAK8L,IAAMA,IAOnBy5N,EAAO/pO,UAAU+qO,kBAAoB,SAAUtxN,EAAMgX,GACjD,IACIvuB,EAAQuX,EAAKgxN,YAAYnnN,IACzBlB,EAAM3I,EAAKgxN,YAAYn6N,IAC3B,IAAKmJ,EAAKwxN,WAAY,CAClB,IAAItkO,EAAW8S,EAAKgxN,YAAY9jO,SAC5B0gE,EAAU5tD,EAAKgyN,gBAAgBjnO,KAAK2sB,OACxB,eAAZk2C,GAAwC,UAAZA,EAC5B7iE,KAAKknO,eAAejyN,EAAMvX,EAAOkgB,EAAKzb,GAErB,WAAZ0gE,EACL7iE,KAAKmnO,WAAWlyN,EAAMvX,EAAOkgB,EAAKzb,EAAU8pB,GAG5CjsB,KAAKonO,kBAAkBnyN,EAAMvX,EAAOkgB,EAAKzb,GAGjD8S,EAAKgxN,YAAY70M,MAAQnc,EAAKgxN,YAAYn6N,IAAMmJ,EAAKgxN,YAAYnnN,IACjE9e,KAAKqnO,sBAAsBp7M,EAAMhX,IAErCswN,EAAO/pO,UAAU4rO,kBAAoB,SAAUnyN,EAAMijB,EAASD,EAAS91B,GACnE8S,EAAKgxN,YAAYnnN,IAAsB,MAAhB7J,EAAKijB,QAAkBjjB,EAAKijB,QAAUA,EAC7DjjB,EAAKgxN,YAAYn6N,IAAsB,MAAhBmJ,EAAKgjB,QAAkBhjB,EAAKgjB,QAAUA,EAC7DhjB,EAAKgxN,YAAY9jO,SAA4B,MAAjB8S,EAAK9S,SAAmB8S,EAAK9S,SAAWA,GAExEojO,EAAO/pO,UAAU0rO,eAAiB,SAAUjyN,EAAMvX,EAAOkgB,EAAKzb,GAC1D,IAAI+1B,EACAD,EACJC,EAAUrsB,KAAKsS,MAAMzgB,EAAQyE,GAAYA,EACzC81B,EAAUpsB,KAAKkjB,KAAKnR,EAAMzb,GAAYA,EACZ,eAAtB8S,EAAK2xN,eACL1uM,GAAW/1B,EACX81B,GAAW91B,GAEfnC,KAAKonO,kBAAkBnyN,EAAMijB,EAASD,EAAS91B,IAEnDojO,EAAO/pO,UAAU2rO,WAAa,SAAUlyN,EAAMvX,EAAOkgB,EAAKzb,EAAU8pB,GAChE,IACIiM,EACAD,EACAnS,EAAapoB,EACbA,EAAQ,GACRooB,EAAa,EAGR,KAAQ3jB,GADDA,GADZ+1B,EAAUx6B,EAASA,EAAQ,IACOyE,IAE9B+1B,GAAW/1B,GAEX+1B,EAAU/1B,EAAW,IACrB+1B,EAAWA,EAAU/1B,EAAa+1B,EAAU/1B,KAIhD+1B,EAAUx6B,EAAU,EAAM,EAAOkgB,EAAO,EAAKlgB,GAASkgB,EAAMlgB,GAAS,GACvDyE,EAAW,IACrB+1B,GAAYA,EAAU/1B,GAKzB,KAAQA,GADDA,GADZ81B,EAAWra,EAAM,EAAMA,GAAOA,EAAMkI,GAAc,GAAOlI,GAAOA,EAAMkI,GAAc,IAClD3jB,IAE9B81B,GAAW91B,GAEX81B,EAAU91B,EAAW,IACrB81B,EAAWA,EAAU91B,EAAa81B,EAAU91B,GAEhD8S,EAAKixN,YAAc,IAAId,GAAYltM,EAASD,GAC5B,IAAZC,IACA/1B,EAAWnC,KAAKwlO,6BAA6BvwN,EAAMA,EAAKixN,YAAY90M,MAAOnF,GAC3EgM,EAAUpsB,KAAKkjB,KAAKkJ,EAAU91B,GAAYA,GAE9CnC,KAAKonO,kBAAkBnyN,EAAMijB,EAASD,EAAS91B,IAMnDojO,EAAO/pO,UAAU6rO,sBAAwB,SAAUp7M,EAAMhX,GACrDA,EAAK4Z,cACD/iB,IAAKmJ,EAAKgxN,YAAYn6N,IAAKgT,IAAK7J,EAAKgxN,YAAYnnN,IACjDsS,MAAOnc,EAAKgxN,YAAY70M,MAAOjvB,SAAU8S,EAAKgxN,YAAY9jO,WAE1D8S,EAAK85B,WAAa,GAAK95B,EAAKqyN,aAAe,KAC3CryN,EAAKoyN,sBAAsBp7M,GAC3BhX,EAAK4Z,aAAa1sB,SAAY8S,EAAKsyN,6BAAkD,aAAnBtyN,EAAKsb,UACnEvwB,KAAKwlO,6BAA6BvwN,EAAMA,EAAKixN,YAAY90M,MAAOnF,GAC9DhX,EAAK4Z,aAAa1sB,UAE5B8S,EAAKuyN,mBAAmBxnO,KAAK2sB,MAAO1X,EAAK4Z,aAAa/P,IAAK7J,EAAK4Z,aAAa/iB,IAAKmJ,EAAK4Z,aAAa1sB,WAMxGojO,EAAO/pO,UAAUgrO,uBAAyB,SAAUvxN,EAAM0X,GAEtD1X,EAAKqc,iBACL,IAAIm2M,EAAexyN,EAAK4Z,aAAa/P,KACjC7J,EAAK85B,WAAa,GAAK95B,EAAKqyN,aAAe,GAAKtnO,KAAK2mO,mBACrDc,EAAexyN,EAAK4Z,aAAa/P,IAAO7J,EAAK4Z,aAAa/P,IAAM7J,EAAK4Z,aAAa1sB,UAEtF,IAAIo2B,EAASv4B,KAAKw9N,UAAUvoN,GACxByyN,EAAuC,OAA5BnvM,EAAOrpB,MAAM,WAO5B,IANA+F,EAAKsjB,OAAS5L,EAAMg7M,KAAKroK,iBACrB/mC,OAAQmvM,EAAW,GAAKnvM,EACxBuzB,YAAan/B,EAAMi7M,uBAEvB3yN,EAAK+c,WAAa/c,EAAKsjB,OAAOtjB,EAAK4Z,aAAa/P,KAChD7J,EAAK8c,SAAW9c,EAAKsjB,OAAOtjB,EAAK4Z,aAAa/iB,KACvC27N,GAAgBxyN,EAAK4Z,aAAa/iB,IAAK27N,GAAgBxyN,EAAK4Z,aAAa1sB,SACxE+rB,GAAOu5M,EAAcxyN,EAAK4Z,eAC1B5Z,EAAK4yN,mBAAmBl7M,EAAO86M,EAAcznO,KAAKivF,YAAYh6E,EAAMyyN,EAAUnvM,EAAQkvM,GAAexyN,EAAKgd,YAGlHhd,EAAK6yN,iBAAiBn7M,IAM1B44M,EAAO/pO,UAAUgiO,UAAY,SAAUvoN,GACnC,OAAIA,EAAK0iB,YACE1iB,EAAK0iB,YAET1iB,EAAK8yN,WAAa,WAAa,IAM1CxC,EAAO/pO,UAAUyzF,YAAc,SAAUh6E,EAAMyyN,EAAUnvM,EAAQkvM,GAC7D,OAAOC,EAAWnvM,EAAOzpB,QAAQ,UAAWmG,EAAKsjB,OAAOkvM,IAClDxyN,EAAKsjB,OAAOkvM,IAEflC,KCrQAyC,GAAe,eAEfC,GAAa,aAEbC,GAAc,cAEdC,GAAe,eAEfC,GAAkB,kBAElBC,GAAsB,sBAEtBC,GAAuB,uBAEvBC,GAAgB,gBAEhBC,GAAiB,iBAEjBC,GAAkB,kBAMlBC,GAAkB,kBAElBC,GAAiB,iBAEjBC,GAAe,eAEfC,GAAe,eAEfC,GAAe,eAMfC,GAAmB,mBChD1BxrL,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY92C,EAAQzJ,EAAKwgD,GAC7E,IAA2HroB,EAAvHsO,EAAIjlC,UAAUpC,OAAQu8B,EAAI8K,EAAI,EAAIh9B,EAAkB,OAAT+2C,EAAgBA,EAAOv/C,OAAOw/C,yBAAyBh3C,EAAQzJ,GAAOwgD,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBhlB,EAAI+kB,QAAQC,SAASJ,EAAY92C,EAAQzJ,EAAKwgD,QACpH,IAAK,IAAI1hD,EAAIyhD,EAAWnhD,OAAS,EAAGN,GAAK,EAAGA,KAASq5B,EAAIooB,EAAWzhD,MAAI68B,GAAK8K,EAAI,EAAItO,EAAEwD,GAAK8K,EAAI,EAAItO,EAAE1uB,EAAQzJ,EAAK27B,GAAKxD,EAAE1uB,EAAQzJ,KAAS27B,GAChJ,OAAO8K,EAAI,GAAK9K,GAAK16B,OAAOkJ,eAAeV,EAAQzJ,EAAK27B,GAAIA,GAQ5D6vM,GAAmD,YAEnD,SAASA,IACL,OAAkB,OAAX5qL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAgC/D,OAlCAu9C,GAAUyrL,EAAyB5qL,GAInCN,IACI92C,EAAS,MACVgiO,EAAwBxtO,UAAW,SAAK,GAC3CsiD,IACI92C,EAAS,MACVgiO,EAAwBxtO,UAAW,SAAK,GAC3CsiD,IACI92C,EAAS,OACVgiO,EAAwBxtO,UAAW,eAAW,GACjDsiD,IACI92C,EAAS,WACVgiO,EAAwBxtO,UAAW,2BAAuB,GAC7DsiD,IACI92C,EAAS,UACVgiO,EAAwBxtO,UAAW,uBAAmB,GACzDsiD,IACI92C,EAAS,UACVgiO,EAAwBxtO,UAAW,cAAU,GAChDsiD,IACI92C,EAAS,WACVgiO,EAAwBxtO,UAAW,yBAAqB,GAC3DsiD,IACI92C,EAAS,OACVgiO,EAAwBxtO,UAAW,iBAAa,GACnDsiD,IACI92C,EAAS,OACVgiO,EAAwBxtO,UAAW,iBAAa,GACnDsiD,IACI92C,EAAS,OACVgiO,EAAwBxtO,UAAW,mBAAe,GAC9CwtO,GACT7jM,IAKE8jM,GAAuC,YAEvC,SAASA,IACL,OAAkB,OAAX7qL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAW/D,OAbAu9C,GAAU0rL,EAAa7qL,GAIvBN,IACI92C,EAAS,KACViiO,EAAYztO,UAAW,aAAS,GACnCsiD,IACI92C,EAAS,IACViiO,EAAYztO,UAAW,aAAS,GACnCsiD,IACI92C,EAAS,cACViiO,EAAYztO,UAAW,YAAQ,GAC3BytO,GACT9jM,IAKE+jM,GAAgD,YAEhD,SAASA,IACL,OAAkB,OAAX9qL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAc/D,OAhBAu9C,GAAU2rL,EAAsB9qL,GAIhCN,IACI92C,EAAS,OACVkiO,EAAqB1tO,UAAW,aAAS,GAC5CsiD,IACI92C,EAAS,OACVkiO,EAAqB1tO,UAAW,WAAO,GAC1CsiD,IACI92C,EAAS,KACVkiO,EAAqB1tO,UAAW,YAAQ,GAC3CsiD,IACI92C,EAAS,OACVkiO,EAAqB1tO,UAAW,wBAAoB,GAChD0tO,GACT/jM,IAKEgkM,GAA6C,YAE7C,SAASA,IACL,OAAkB,OAAX/qL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KA4C/D,OA9CAu9C,GAAU4rL,EAAmB/qL,GAI7BN,IACI92C,GAAS,IACVmiO,EAAkB3tO,UAAW,eAAW,GAC3CsiD,IACI92C,GAAS,IACVmiO,EAAkB3tO,UAAW,qBAAiB,GACjDsiD,IACI92C,EAAS,OACVmiO,EAAkB3tO,UAAW,aAAS,GACzCsiD,IACI92C,EAAS,OACVmiO,EAAkB3tO,UAAW,WAAO,GACvCsiD,IACI92C,EAAS,OACVmiO,EAAkB3tO,UAAW,YAAQ,GACxCsiD,IACI92C,EAAS,YACVmiO,EAAkB3tO,UAAW,aAAS,GACzCsiD,IACIj2C,GAAU4qB,MAAO,cAAe3d,MAAO,GAAKuuN,KAC7C8F,EAAkB3tO,UAAW,cAAU,GAC1CsiD,IACI92C,EAAS,KACVmiO,EAAkB3tO,UAAW,YAAQ,GACxCsiD,IACI92C,EAAS,OACVmiO,EAAkB3tO,UAAW,gBAAY,GAC5CsiD,IACI92C,EAAS,WACVmiO,EAAkB3tO,UAAW,2BAAuB,GACvDsiD,IACI92C,EAAS,WACVmiO,EAAkB3tO,UAAW,yBAAqB,GACrDsiD,IACIj2C,EAAQquN,GAAMgN,mBAAoBE,KACnC+F,EAAkB3tO,UAAW,iBAAa,GAC7CsiD,IACI92C,EAAS,WACVmiO,EAAkB3tO,UAAW,cAAU,GAC1CsiD,IACI92C,EAAS,IACVmiO,EAAkB3tO,UAAW,eAAW,GACpC2tO,GACThkM,IAKEikM,GAA4C,YAE5C,SAASA,IACL,OAAkB,OAAXhrL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAiB/D,OAnBAu9C,GAAU6rL,EAAkBhrL,GAI5BN,IACI92C,EAAS,WACVoiO,EAAiB5tO,UAAW,iBAAa,GAC5CsiD,IACI92C,EAAS,SACVoiO,EAAiB5tO,UAAW,gBAAY,GAC3CsiD,IACIj2C,EAAQquN,GAAM0M,cAAeQ,KAC9BgG,EAAiB5tO,UAAW,iBAAa,GAC5CsiD,IACIj2C,GAAU4qB,MAAO,KAAM3d,MAAO,EAAGtO,KAAM,aAAeyiO,KACvDG,EAAiB5tO,UAAW,cAAU,GACzCsiD,IACI91C,KAAekhO,KAChBE,EAAiB5tO,UAAW,kBAAc,GACtC4tO,GACTjkM,ICpLEoY,GAAwC,WACxC,IAAIC,EAAgB/+C,OAAOg/C,iBACpBC,wBAA2BrW,OAAS,SAAU1R,EAAG0D,GAAK1D,EAAE+nB,UAAYrkB,IACvE,SAAU1D,EAAG0D,GAAK,IAAK,IAAIskB,KAAKtkB,EAAOA,EAAE5yB,eAAek3C,KAAIhoB,EAAEgoB,GAAKtkB,EAAEskB,KACzE,OAAO,SAAUhoB,EAAG0D,GAEhB,SAASukB,IAAO59C,KAAKjC,YAAc43B,EADnC6nB,EAAc7nB,EAAG0D,GAEjB1D,EAAEn6B,UAAkB,OAAN69B,EAAa56B,OAAOo/C,OAAOxkB,IAAMukB,EAAGpiD,UAAY69B,EAAE79B,UAAW,IAAIoiD,IAP3C,GAUxCE,GAA0C,SAAUC,EAAY92C,EAAQzJ,EAAKwgD,GAC7E,IAA2HroB,EAAvHsO,EAAIjlC,UAAUpC,OAAQu8B,EAAI8K,EAAI,EAAIh9B,EAAkB,OAAT+2C,EAAgBA,EAAOv/C,OAAOw/C,yBAAyBh3C,EAAQzJ,GAAOwgD,EACrH,GAAuB,iBAAZE,SAAoD,mBAArBA,QAAQC,SAAyBhlB,EAAI+kB,QAAQC,SAASJ,EAAY92C,EAAQzJ,EAAKwgD,QACpH,IAAK,IAAI1hD,EAAIyhD,EAAWnhD,OAAS,EAAGN,GAAK,EAAGA,KAASq5B,EAAIooB,EAAWzhD,MAAI68B,GAAK8K,EAAI,EAAItO,EAAEwD,GAAK8K,EAAI,EAAItO,EAAE1uB,EAAQzJ,EAAK27B,GAAKxD,EAAE1uB,EAAQzJ,KAAS27B,GAChJ,OAAO8K,EAAI,GAAK9K,GAAK16B,OAAOkJ,eAAeV,EAAQzJ,EAAK27B,GAAIA,GAe5DkwM,GAA+B,YAE/B,SAASA,IAML,IAAItpO,EAAmB,OAAXq+C,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAOhE,OALAD,EAAMupO,QAENvpO,EAAMwpO,aAENxpO,EAAMypO,YACCzpO,EA2BX,OAzCAw9C,GAAU8rL,EAAKjrL,GAqBfirL,EAAI7tO,UAAUiuO,YAAc,SAAUx0N,EAAM4b,GACxC,IAAI/b,EAAQ,EAERG,EAAKwe,UACL3e,GAAUG,EAAKy0N,aAAaz0N,EAAK00N,aAC7B10N,EAAK20N,cAAc30N,EAAK00N,YAHb,GAG0C10N,EAAK40N,UAAU/0N,MAAQ,GAEhFG,EAAK2c,gBACL5xB,KAAKwpO,SAASllO,KAAKwQ,GAGnB9U,KAAKupO,UAAUjlO,KAAKwQ,IAG5BgpC,IACI92C,EAAS,SACVqiO,EAAI7tO,UAAW,cAAU,GAC5BsiD,IACIj2C,KAAYw7N,KACbgG,EAAI7tO,UAAW,cAAU,GACrB6tO,GACTlkM,IAKEjB,GAAkC,YAElC,SAASA,IAML,IAAInkC,EAAmB,OAAXq+C,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAShE,OAPAD,EAAMupO,QAENvpO,EAAMwpO,aAENxpO,EAAMypO,YAENzpO,EAAM8iE,QAAU,EACT9iE,EA2BX,OA3CAw9C,GAAUrZ,EAAQka,GAuBlBla,EAAO1oC,UAAUiuO,YAAc,SAAUx0N,EAAM4b,GAC3C,IAAIhc,EAAS,EAETI,EAAKwe,UACL5e,GAAWI,EAAKy0N,aAAaz0N,EAAK00N,aAC9B10N,EAAK20N,cAAc30N,EAAK00N,YAHb,GAG0C10N,EAAK40N,UAAU/0N,MAAQ,GAEhFG,EAAK2c,gBACL5xB,KAAKwpO,SAASllO,KAAKuQ,GAGnB7U,KAAKupO,UAAUjlO,KAAKuQ,IAG5BipC,IACI92C,EAAS,SACVk9B,EAAO1oC,UAAW,aAAS,GAC9BsiD,IACIj2C,KAAYw7N,KACbn/L,EAAO1oC,UAAW,cAAU,GACxB0oC,GACTiB,IAKE2kM,GAA0C,YAE1C,SAASA,IACL,OAAkB,OAAX1rL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAW/D,OAbAu9C,GAAUusL,EAAgB1rL,GAI1BN,IACI92C,EAAS,IACV8iO,EAAetuO,UAAW,aAAS,GACtCsiD,IACI92C,EAAS,KACV8iO,EAAetuO,UAAW,iBAAa,GAC1CsiD,IACI92C,EAAS,OACV8iO,EAAetuO,UAAW,aAAS,GAC/BsuO,GACT3kM,IAKE4kM,GAA0C,YAE1C,SAASA,IACL,OAAkB,OAAX3rL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAW/D,OAbAu9C,GAAUwsL,EAAgB3rL,GAI1BN,IACI92C,EAAS,KACV+iO,EAAevuO,UAAW,aAAS,GACtCsiD,IACI92C,EAAS,KACV+iO,EAAevuO,UAAW,iBAAa,GAC1CsiD,IACI92C,EAAS,OACV+iO,EAAevuO,UAAW,aAAS,GAC/BuuO,GACT5kM,IAKE6kM,GAAoC,YAEpC,SAASA,IACL,OAAkB,OAAX5rL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAW/D,OAbAu9C,GAAUysL,EAAU5rL,GAIpBN,IACI92C,EAAS,IACVgjO,EAASxuO,UAAW,aAAS,GAChCsiD,IACI92C,EAAS,KACVgjO,EAASxuO,UAAW,iBAAa,GACpCsiD,IACI92C,EAAS,OACVgjO,EAASxuO,UAAW,aAAS,GACzBwuO,GACT7kM,IAKE8kM,GAA0C,YAE1C,SAASA,IACL,OAAkB,OAAX7rL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAW/D,OAbAu9C,GAAU0sL,EAAgB7rL,GAI1BN,IACI92C,EAAS,IACVijO,EAAezuO,UAAW,aAAS,GACtCsiD,IACI92C,EAAS,IACVijO,EAAezuO,UAAW,cAAU,GACvCsiD,IACI92C,EAAS,OACVijO,EAAezuO,UAAW,aAAS,GAC/ByuO,GACT9kM,IAKE+kM,GAA0C,YAE1C,SAASA,IACL,OAAkB,OAAX9rL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAW/D,OAbAu9C,GAAU2sL,EAAgB9rL,GAI1BN,IACI92C,EAAS,KACVkjO,EAAe1uO,UAAW,aAAS,GACtCsiD,IACI92C,EAAS,IACVkjO,EAAe1uO,UAAW,cAAU,GACvCsiD,IACI92C,EAAS,OACVkjO,EAAe1uO,UAAW,aAAS,GAC/B0uO,GACT/kM,IAKEglM,GAA4C,YAE5C,SAASA,IACL,OAAkB,OAAX/rL,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAW/D,OAbAu9C,GAAU4sL,EAAkB/rL,GAI5BN,IACI92C,GAAS,IACVmjO,EAAiB3uO,UAAW,cAAU,GACzCsiD,IACI92C,EAAS,OACVmjO,EAAiB3uO,UAAW,YAAQ,GACvCsiD,IACIj2C,EAAQquN,GAAM6M,mBAAoBK,KACnC+G,EAAiB3uO,UAAW,iBAAa,GACrC2uO,GACThlM,IAKEilM,GAAgC,YAEhC,SAASA,IAIL,IAAIrqO,EAAmB,OAAXq+C,GAAmBA,EAAO1iD,MAAMsE,KAAMhB,YAAcgB,KAqBhE,OAnBAD,EAAMuxB,iBAENvxB,EAAM4d,UAEN5d,EAAMwvB,KAAO,IAAI4C,QAAK72B,OAAWA,EAAW,EAAG,GAE/CyE,EAAMsqO,eAAiB,KAEvBtqO,EAAM8lO,cAAgB,GAAI,EAAG,EAAG,GAEhC9lO,EAAMugB,MAAQvgB,EAAMijD,cAEpBjjD,EAAMgoO,YAAa,EAEnBhoO,EAAMuqO,QAAU,KAEhBvqO,EAAMwqO,YAAc,KAEpBxqO,EAAMyqO,sBAAwB,EACvBzqO,EAoeX,OA9fAw9C,GAAU6sL,EAAMhsL,GAiChBgsL,EAAK5uO,UAAUkuO,aAAe,SAAUe,GACpC,MAA0B,WAAtBzqO,KAAK0qO,aACE,GAEPD,GAAeA,EAAU57M,eAAgB7uB,KAAK2qO,SAASF,EAAU57M,cAG9D7uB,KAAK4qO,eAAe/1N,OAFhB,GASfu1N,EAAK5uO,UAAUmvO,SAAW,SAAU18M,GAChC,OAAQD,GAAOhuB,KAAKsqO,QAASr8M,KACvBjuB,KAAK4xB,iBAAmB5xB,KAAKsqO,SAAWr8M,EAAMniB,KAAS9L,KAAK4xB,iBAAmB5xB,KAAKsqO,SAAWr8M,EAAMnP,KAO/GsrN,EAAK5uO,UAAUouO,cAAgB,SAAUa,EAAWI,GAChD,IAAIC,EAAY,EAIhB,GAHI9qO,KAAK+7B,QACL+uM,EAAYn/M,GAAY3rB,KAAK+7B,MAAO/7B,KAAKu8B,YAAY1nB,OAASg2N,GAEvC,WAAvB7qO,KAAK21E,cACL,OAAOm1J,EAAYD,EAEvB,IAAI/1L,EACA33C,EACA4tO,EAAYD,EAAYD,EAjSlB,IAkSiB,aAArB7qO,KAAKusC,YAA8BvsC,KAAKgrO,aAAal2N,MAAQ9U,KAAKgrO,aAAan2N,QAAU7U,KAAKwqO,sBACpG,GAAIC,GAAazqO,KAAKirO,oBAAqB,CACvC,IAAIh9M,EAAQw8M,EAAU57M,aAClB5C,EAAkC,eAA1Bw+M,EAAUl+L,YAAgCk+L,EAAUl7M,KAAKza,MAAQ21N,EAAUl7M,KAAK1a,OAC5F,IAAKoZ,IAAUhC,EACX,OAAO,EAEFjsB,KAAK2qO,SAAS18M,KAInB88M,GADAj2L,GAFA33C,EAAQ6C,KAAKkrO,eAAeT,MAETx+M,IADnB6oB,EAAO,GAAW7oB,EAAOgC,EAAMmD,QACG25M,EAAaA,EAAYj2L,EAAQ,IAAM7mB,EAAMmD,QAC3D25M,EAAcA,EAAYj2L,EAAQ,GAG9D,OAAOi2L,GAOXX,EAAK5uO,UAAU2vO,iBAAmB,SAAUx+M,GACxC,IAAIxvB,EAAQ6C,KAAKsqO,QACjB,GAAc,OAAVntO,IAAmB6C,KAAK2qO,SAAS3qO,KAAK2pO,YAAY96M,cAElD,OADA7uB,KAAKuqO,YAAcvqO,KAAKuvB,KACjB,KAEX,IAAItB,EAAQjuB,KAAK2pO,YAAY96M,aACxB7uB,KAAK4xB,gBAMF5xB,KAAKsqO,QAAUr8M,EAAMnP,MACrB3hB,EAAQ8wB,EAAMnP,KANd9e,KAAKsqO,QAAUr8M,EAAMniB,MACrB3O,EAAQ8wB,EAAMniB,KAQtB9L,KAAKuqO,YAAc7rO,KAAWsB,KAAKuvB,KAAM,MAAM,GACtB,eAArBvvB,KAAKusC,aACLpvC,EAAQ6C,KAAK2pO,YAAYp6M,KAAK1a,OAAUsb,GAAmBhzB,EAAO6C,KAAK2pO,aAAe3pO,KAAK2pO,YAAYp6M,KAAK1a,OAC5G7U,KAAKuqO,YAAY/9N,EAAIxM,KAAK2pO,YAAYp6M,KAAK/iB,EAAIrP,IAG/CA,EAAQgzB,GAAmBhzB,EAAO6C,KAAK2pO,aAAe3pO,KAAK2pO,YAAYp6M,KAAKza,MAC5E9U,KAAKuqO,YAAYh+N,EAAIvM,KAAK2pO,YAAYp6M,KAAKhjB,EAAIpP,IAGvDitO,EAAK5uO,UAAU0vO,eAAiB,SAAUT,GACtC,IAAIttO,EAAQ,EAOZ,OALIA,EADA6C,KAAK4xB,gBACG64M,EAAUr6M,WAAaq6M,EAAU57M,aAAa/P,IAAM2rN,EAAU57M,aAAa/iB,IAG3E2+N,EAAUr6M,WAAaq6M,EAAU57M,aAAa/iB,IAAM2+N,EAAU57M,aAAa/P,IAEhFjT,KAAKE,IAAI/L,KAAKsqO,QAAUntO,IAOnCitO,EAAK5uO,UAAUirO,SAAW,WACtB,OAAoB,MAAhBzmO,KAAKk4B,SAAmC,MAAhBl4B,KAAKi4B,SAUrCmyM,EAAK5uO,UAAU6rO,sBAAwB,SAAUp7M,GAC7C,GAAIjsB,KAAK+uC,WAAa,GAAK/uC,KAAKsnO,aAAe,EAAG,CAC9C,IAAI8D,EAAYprO,KAAKimO,YACjBvoO,OAAQ,EACRkgB,OAAM,EAONA,EANC5d,KAAKowB,YAKN1yB,EAAQsC,KAAKimO,YAAYn6N,IAAO9L,KAAKsnO,aAAetnO,KAAKimO,YAAY70M,OACtDpxB,KAAK+uC,WAAa/uC,KAAKimO,YAAY70M,OALlD1zB,EAAQsC,KAAKimO,YAAYnnN,IAAM9e,KAAKsnO,aAAetnO,KAAKimO,YAAY70M,OACtDpxB,KAAK+uC,WAAa/uC,KAAKimO,YAAY70M,MAMjD1zB,EAAQ0tO,EAAUtsN,MAClBlB,GAAawtN,EAAUtsN,IAAMphB,EAC7BA,EAAQ0tO,EAAUtsN,KAElBlB,EAAMwtN,EAAUt/N,MAChBpO,GAAiBkgB,EAAMwtN,EAAUt/N,IACjC8R,EAAMwtN,EAAUt/N,KAEpB9L,KAAKkmO,YAAc,IAAId,GAAY1nO,EAAOkgB,GAC1C5d,KAAK6uB,aAAa/P,IAAM9e,KAAKkmO,YAAYxoO,MACzCsC,KAAK6uB,aAAa/iB,IAAM9L,KAAKkmO,YAAYtoN,IACzC5d,KAAK6uB,aAAauC,MAAQpxB,KAAKkmO,YAAY90M,QAQnDg5M,EAAK5uO,UAAUkqO,+BAAiC,SAAU5zM,GACtD,IAAI7F,EAA4B,eAArBjsB,KAAKusC,YAA+Bza,EAAchd,MAAQgd,EAAcjd,OACnF,GAA8B,OAA1B7U,KAAK2lO,iBAA2B,CAChC,IAAIz5L,GAA8C,eAArBlsC,KAAKusC,YAA+B,KAAQ,GAAKvsC,KAAKqrO,cAEnF,OADAn/L,EAAwBrgC,KAAKC,IAAKmgB,GAAQigB,EAAwB,KAAO,GAIzE,OAAOlsC,KAAK2lO,kBAQpByE,EAAK5uO,UAAUqsO,mBAAqB,SAAUl7M,EAAO86M,EAAc77M,EAAMqG,GACrE,IAAIq5M,EACJA,GACI/7L,QAAQ,EAAO7b,KAAM00M,GAAiBnzN,KAAMjV,KAC5C4rB,KAAMA,EAAMzuB,MAAOsqO,EAAcx1M,WAAYA,GAEjDtF,EAAMpI,QAAQ6jN,GAAiBkD,GAC1BA,EAAS/7L,QACVvvC,KAAKsxB,cAAchtB,KAAK,IAAIinO,GAAcD,EAAS1/M,KAAM0/M,EAASnuO,MAAOmuO,EAASr5M,cAQ1Fm4M,EAAK5uO,UAAUgsO,mBAAqB,SAAU76M,EAAOuL,EAASD,EAAS91B,GACnE,IAAImpO,EACJA,GACI/7L,QAAQ,EAAO7b,KAAM20M,GAAqBpzN,KAAMjV,KAChDk4B,QAASA,EAASD,QAASA,EAAS91B,SAAUA,GAElDwqB,EAAMpI,QAAQ8jN,GAAqBiD,GAC9BA,EAAS/7L,SACVvvC,KAAK6uB,aAAa/P,IAAMwsN,EAASpzM,QACjCl4B,KAAK6uB,aAAa/iB,IAAMw/N,EAASrzM,QACjCj4B,KAAK6uB,aAAa1sB,SAAWmpO,EAASnpO,SACtCnC,KAAK6uB,aAAauC,MAAQk6M,EAASrzM,QAAUqzM,EAASpzM,UAQ9DkyM,EAAK5uO,UAAUyrO,gBAAkB,SAAUt6M,GACvC,IAAIk2C,EAAU7iE,KAAK4mO,aACnB,GAAgB,SAAZ/jK,EACA,OAAOA,EAEX,OAAQ7iE,KAAKusC,aACT,IAAK,aAEGs2B,EADAl2C,EAAMoG,oBACK/yB,KAAK+nO,WAAa,QAAU,SAG7B,OAEd,MACJ,IAAK,WAKGllK,EAJCl2C,EAAMoG,oBAIG,OAHC/yB,KAAK+nO,WAAa,QAAU,SAOnD,OAAOllK,GAOXunK,EAAK5uO,UAAUssO,iBAAmB,SAAUn7M,GACxC,IAEI6+M,EACAC,EAAc,EACdC,GAAc,EAClB1rO,KAAKsgB,MAAQtgB,KAAKgjD,cAClBhjD,KAAKgrO,aAAe,IAAIz+M,GAAK,EAAG,GAGhC,IAAK,IADDna,EADAg1B,EAASpnC,KAAK2rO,qBAETrvO,EAAI,EAAGA,EAAI0D,KAAKsxB,cAAc10B,OAAQN,IAU3C,GATA8V,EAAQpS,KAAKsxB,cAAch1B,GAC3B8V,EAAM6Z,KAAON,GAAYvZ,EAAMwZ,KAAM5rB,KAAKiyB,YACtC7f,EAAM6Z,KAAKnX,MAAQ9U,KAAKgrO,aAAal2N,QACrC9U,KAAKgrO,aAAal2N,MAAQ1C,EAAM6Z,KAAKnX,MACrC9U,KAAK4rO,aAAex5N,EAAMwZ,MAE1BxZ,EAAM6Z,KAAKpX,OAAS7U,KAAKgrO,aAAan2N,SACtC7U,KAAKgrO,aAAan2N,OAASzC,EAAM6Z,KAAKpX,QAE3B,SAAXuyB,GAAgC,SAAXA,GAAgC,SAAXA,IAG9B,SAAXA,GAAqBpnC,KAAKsgB,MAAQ,KAAQ,IAA2B,eAArBtgB,KAAKusC,aACtDvsC,KAAKuvB,KAAKza,MAAQ,IAAM42N,EAAa,CAWrC,OAVAF,EAAUr7M,GAAmB/d,EAAMjV,MAAO6C,MAAQA,KAAKuvB,KAAKza,MAAS9U,KAAKuvB,KAAKhjB,EAC/Ei/N,GAAUp5N,EAAM6Z,KAAKnX,MAAQ,EACG,UAA5B9U,KAAK6rO,qBACK,IAANvvO,GAAWkvO,EAASxrO,KAAKuvB,KAAKhjB,IAC9Bi/N,EAASxrO,KAAKuvB,KAAKhjB,GAEnBjQ,IAAM0D,KAAKsxB,cAAc10B,OAAS,GAAO4uO,EAASp5N,EAAM6Z,KAAKnX,MAAU9U,KAAKuvB,KAAKhjB,EAAIvM,KAAKuvB,KAAKza,QAC/F02N,EAASxrO,KAAKuvB,KAAKhjB,EAAIvM,KAAKuvB,KAAKza,MAAQ1C,EAAM6Z,KAAKnX,QAGpDsyB,GACJ,IAAK,eACG9qC,EAAI,GACJ0D,KAAK8rO,cAAcxvO,EAAGkvO,EAAQp5N,GAElC,MACJ,IAAK,WACL,IAAK,WACG9V,EAAI,IAAO0D,KAAKowB,WAAqCo7M,EAASp5N,EAAM6Z,KAAKnX,OAAS22N,EAArDD,GAAUC,KACvCzrO,KAAKsgB,MAAoB,aAAX8mB,EAAyB,GAAK,GAC5CskM,GAAc,GAElB,MACJ,QACIt5N,EAAMwZ,KAAOsQ,GAAS9pB,EAAMwZ,KAAM5rB,KAAKuvB,KAAKza,MAAQ9U,KAAKsxB,cAAc10B,OAAQoD,KAAKiyB,YACpF,IAAIpd,EAAUzC,EAAM6Z,KAAKpX,OAASzC,EAAMwZ,KAAKhvB,OACzCiY,EAAS7U,KAAKgrO,aAAan2N,SAC3B7U,KAAKgrO,aAAan2N,OAASA,GAIvC42N,EAAczrO,KAAKowB,WAAao7M,EAASA,EAASp5N,EAAM6Z,KAAKnX,MAGlD,IAAf9U,KAAKsgB,OAAoC,eAArBtgB,KAAKusC,cACzBvsC,KAAKgrO,aAAet+M,GAAe1sB,KAAKiyB,WAAYjyB,KAAK4rO,aAAc5rO,KAAKsgB,MAAOqM,IAEnFA,EAAMo/M,uBAAyB/rO,KAAKgsO,iBAAiBpvO,OAAS,GAC9D+vB,EAAMo/M,sBAAsBE,0BAA0BjsO,OAO9DoqO,EAAK5uO,UAAUswO,cAAgB,SAAUlvO,EAAQsvO,EAAUzvM,GAKvD,IAAK,IAJDrqB,EACAo5N,EACAW,KAEK7vO,EAAIM,EAAS,EAAGN,GAAK,EAAGA,IAE7BkvO,EAAUr7M,IADV/d,EAAQpS,KAAKsxB,cAAch1B,IACQa,MAAO6C,MAAQA,KAAKuvB,KAAKza,MAAS9U,KAAKuvB,KAAKhjB,GAChEvM,KAAKowB,WAChB87M,EAAWzvM,EAAaxQ,KAAKnX,MAAS02N,EAASp5N,EAAM6Z,KAAKnX,MAAQ,EADrCo3N,EAAYV,EAASp5N,EAAM6Z,KAAKnX,MAAQ,IAGrEq3N,EAAM7nO,KAAK8N,EAAMb,OACjBkrB,EAAalrB,MAASkrB,EAAalrB,MAAQa,EAAMb,MAASkrB,EAAalrB,MAAQa,EAAMb,MAAQ,GAG7FkrB,EAAalrB,MAAQ46N,EAAM3pO,QAAQ4P,EAAMb,QAAU,EAAIkrB,EAAalrB,MAAQa,EAAMb,MAG1F,IAAIsD,EAAU4nB,EAAaxQ,KAAKpX,OAAS4nB,EAAalrB,MAAU,GAAKkrB,EAAalrB,MAAQ,GACtFsD,EAAS7U,KAAKgrO,aAAan2N,SAC3B7U,KAAKgrO,aAAan2N,OAASA,IAQnCu1N,EAAK5uO,UAAU4wO,UAAY,SAAUz/M,GACV,WAAnB3sB,KAAKuwB,UACLvwB,KAAKqsO,WAAa,IAAI9G,GAAO54M,GAG7B3sB,KAAKqsO,WAAa1/M,EAAMqG,GAAiBhzB,KAAKuwB,WAAa,WAGnEutB,IACIj2C,EAAQquN,GAAM0M,cAAeQ,KAC9BgH,EAAK5uO,UAAW,kBAAc,GACjCsiD,IACIj2C,KAAYsiO,KACbC,EAAK5uO,UAAW,wBAAoB,GACvCsiD,IACI92C,EAAS,KACVojO,EAAK5uO,UAAW,aAAS,GAC5BsiD,IACIj2C,EAAQquN,GAAM2M,cAAeO,KAC9BgH,EAAK5uO,UAAW,kBAAc,GACjCsiD,IACI92C,EAAS,KACVojO,EAAK5uO,UAAW,mBAAe,GAClCsiD,IACI92C,EAAS,KACVojO,EAAK5uO,UAAW,gBAAY,GAC/BsiD,IACI92C,EAAS,aACVojO,EAAK5uO,UAAW,oBAAgB,GACnCsiD,IACI92C,EAAS,IACVojO,EAAK5uO,UAAW,kBAAc,GACjCsiD,IACI92C,GAAS,IACVojO,EAAK5uO,UAAW,iBAAa,GAChCsiD,IACI92C,EAAS,KACVojO,EAAK5uO,UAAW,eAAW,GAC9BsiD,IACI92C,EAAS,IACVojO,EAAK5uO,UAAW,mBAAe,GAClCsiD,IACI92C,EAAS,IACVojO,EAAK5uO,UAAW,gBAAY,GAC/BsiD,IACI92C,EAAS,IACVojO,EAAK5uO,UAAW,YAAQ,GAC3BsiD,IACI92C,EAAS,OACVojO,EAAK5uO,UAAW,wBAAoB,GACvCsiD,IACI92C,EAAS,IACVojO,EAAK5uO,UAAW,qBAAiB,GACpCsiD,IACI92C,EAAS,IACVojO,EAAK5uO,UAAW,kBAAc,GACjCsiD,IACI92C,EAAS,IACVojO,EAAK5uO,UAAW,oBAAgB,GACnCsiD,IACI92C,GAAS,IACVojO,EAAK5uO,UAAW,uBAAmB,GACtCsiD,IACI92C,GAAS,IACVojO,EAAK5uO,UAAW,mCAA+B,GAClDsiD,IACI92C,EAAS,SACVojO,EAAK5uO,UAAW,oBAAgB,GACnCsiD,IACI92C,EAAS,WACVojO,EAAK5uO,UAAW,iBAAa,GAChCsiD,IACI92C,EAAS,SACVojO,EAAK5uO,UAAW,0BAAsB,GACzCsiD,IACI92C,EAAS,SACVojO,EAAK5uO,UAAW,oBAAgB,GACnCsiD,IACI92C,EAAS,iBACVojO,EAAK5uO,UAAW,sBAAkB,GACrCsiD,IACI92C,EAAS,YACVojO,EAAK5uO,UAAW,oBAAgB,GACnCsiD,IACI92C,EAAS,YACVojO,EAAK5uO,UAAW,qBAAiB,GACpCsiD,IACI92C,EAAS,KACVojO,EAAK5uO,UAAW,YAAQ,GAC3BsiD,IACI92C,GAAS,IACVojO,EAAK5uO,UAAW,eAAW,GAC9BsiD,IACI92C,EAAS,IACVojO,EAAK5uO,UAAW,6BAAyB,GAC5CsiD,IACI92C,EAAS,IACVojO,EAAK5uO,UAAW,qBAAiB,GACpCsiD,IACI92C,EAAS,OACVojO,EAAK5uO,UAAW,iBAAa,GAChCsiD,IACI92C,GAAS,IACVojO,EAAK5uO,UAAW,2BAAuB,GAC1CsiD,IACI92C,EAAS,OACVojO,EAAK5uO,UAAW,qBAAiB,GACpCsiD,IACI92C,EAAS,OACVojO,EAAK5uO,UAAW,eAAW,GAC9BsiD,IACI92C,EAAS,OACVojO,EAAK5uO,UAAW,eAA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AS,IACV0kU,EAASlwU,UAAW,iBAAa,GACpCsiD,IACI92C,EAAS,SACV0kU,EAASlwU,UAAW,gBAAY,GACnCsiD,IACIj2C,KAAY0jU,KACbG,EAASlwU,UAAW,cAAU,GACjCsiD,IACI92C,GAAS,IACV0kU,EAASlwU,UAAW,qBAAiB,GACxCsiD,IACI92C,KACD0kU,EAASlwU,UAAW,oBAAgB,GACvCsiD,IACI92C,KACD0kU,EAASlwU,UAAW,qBAAiB,GACxCsiD,IACI92C,EAAS,SACV0kU,EAASlwU,UAAW,iBAAa,GACpCsiD,IACI92C,GAAS,IACV0kU,EAASlwU,UAAW,oBAAgB,GACvCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,eAAW,GAClCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,iBAAa,GACpCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,gBAAY,GACnCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,iBAAa,GACpCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,gBAAY,GACnCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,mBAAe,GACtCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,oBAAgB,GACvCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,mBAAe,GACtCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,qBAAiB,GACxCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,sBAAkB,GACzCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,oBAAgB,GACvCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,qBAAiB,GACxCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,oBAAgB,GACvCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,mBAAe,GACtCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,kBAAc,GACrCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,mBAAe,GACtCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,oBAAgB,GACvCsiD,IACIx1C,KACDojU,EAASlwU,UAAW,qBAAiB,GACxCsiD,IACIx1C,KACDojU,EAASlwU,U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"}